MCPcopy Create free account
hub / github.com/ElementsProject/lightning / json_add_fallbacks

Function json_add_fallbacks

plugins/offers.c:1183–1233  ·  view source on GitHub ↗

Returns true if valid */

Source from the content-addressed store, hash-verified

1181
1182/* Returns true if valid */
1183static bool json_add_fallbacks(struct json_stream *js,
1184 const struct bitcoin_blkid *chains,
1185 struct fallback_address **fallbacks)
1186{
1187 const struct chainparams *chain;
1188 bool valid = true;
1189
1190 /* Present address as first chain mentioned. */
1191 if (tal_count(chains) != 0)
1192 chain = chainparams_by_chainhash(&chains[0]);
1193 else
1194 chain = chainparams_for_network("bitcoin");
1195
1196 json_array_start(js, "invoice_fallbacks");
1197 for (size_t i = 0; i < tal_count(fallbacks); i++) {
1198 size_t addrlen = tal_bytelen(fallbacks[i]->address);
1199
1200 json_object_start(js, NULL);
1201 json_add_u32(js, "version", fallbacks[i]->version);
1202 json_add_hex_talarr(js, "hex", fallbacks[i]->address);
1203
1204 /* BOLT #12:
1205 * - for the bitcoin chain, if the invoice specifies `invoice_fallbacks`:
1206 * - MUST ignore any `fallback_address` for which `version` is
1207 * greater than 16.
1208 * - MUST ignore any `fallback_address` for which `address` is
1209 * less than 2 or greater than 40 bytes.
1210 * - MUST ignore any `fallback_address` for which `address` does
1211 * not meet known requirements for the given `version`
1212 */
1213 if (fallbacks[i]->version > 16) {
1214 json_add_string(js,
1215 "warning_invalid_invoice_fallbacks_version",
1216 "invoice fallback version > 16");
1217 valid = false;
1218 } else if (addrlen < 2 || addrlen > 40) {
1219 json_add_string(js,
1220 "warning_invalid_invoice_fallbacks_address",
1221 "invoice fallback address bad length");
1222 valid = false;
1223 } else if (chain) {
1224 valid &= json_add_fallback_address(js, chain,
1225 fallbacks[i]->version,
1226 fallbacks[i]->address);
1227 }
1228 json_object_end(js);
1229 }
1230 json_array_end(js);
1231
1232 return valid;
1233}
1234
1235static void json_add_invoice_request(struct command *cmd,
1236 struct json_stream *js,

Callers 1

json_add_invoice_fieldsFunction · 0.85

Calls 11

chainparams_for_networkFunction · 0.85
json_array_startFunction · 0.85
tal_bytelenFunction · 0.85
json_object_startFunction · 0.85
json_add_u32Function · 0.85
json_add_hex_talarrFunction · 0.85
json_object_endFunction · 0.85
json_array_endFunction · 0.85
chainparams_by_chainhashFunction · 0.50
json_add_stringFunction · 0.50

Tested by

no test coverage detected