| 1172 | } |
| 1173 | |
| 1174 | static void encode_f(u5 **data, const u8 *fallback) |
| 1175 | { |
| 1176 | struct bitcoin_address pkh; |
| 1177 | struct ripemd160 sh; |
| 1178 | struct sha256 wsh; |
| 1179 | const size_t fallback_len = tal_bytelen(fallback); |
| 1180 | |
| 1181 | /* BOLT #11: |
| 1182 | * |
| 1183 | * for Bitcoin payments... MUST set an `f` field to a valid |
| 1184 | * witness version and program, OR to `17` followed by a |
| 1185 | * public key hash, OR to `18` followed by a script hash. |
| 1186 | */ |
| 1187 | if (is_p2pkh(fallback, fallback_len, &pkh)) { |
| 1188 | push_fallback_addr(data, 17, &pkh, sizeof(pkh)); |
| 1189 | } else if (is_p2sh(fallback, fallback_len, &sh)) { |
| 1190 | push_fallback_addr(data, 18, &sh, sizeof(sh)); |
| 1191 | } else if (is_p2wpkh(fallback, fallback_len, &pkh)) { |
| 1192 | push_fallback_addr(data, 0, &pkh, sizeof(pkh)); |
| 1193 | } else if (is_p2wsh(fallback, fallback_len, &wsh)) { |
| 1194 | push_fallback_addr(data, 0, &wsh, sizeof(wsh)); |
| 1195 | } else if (fallback_len > 1 |
| 1196 | && fallback[0] >= 0x50 |
| 1197 | && fallback[0] < (0x50+16)) { |
| 1198 | /* Other (future) witness versions: turn OP_N into N */ |
| 1199 | push_fallback_addr(data, fallback[0] - 0x50, fallback + 2, |
| 1200 | tal_count(fallback) - 2); |
| 1201 | } else { |
| 1202 | /* Copy raw. */ |
| 1203 | push_field(data, 'f', |
| 1204 | fallback, fallback_len * CHAR_BIT); |
| 1205 | } |
| 1206 | } |
| 1207 | |
| 1208 | static void encode_r(u5 **data, const struct route_info *r) |
| 1209 | { |
no test coverage detected