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

Function json_add_fallbacks

plugins/offers.c:424–474  ·  view source on GitHub ↗

Returns true if valid */

Source from the content-addressed store, hash-verified

422
423/* Returns true if valid */
424static bool json_add_fallbacks(struct json_stream *js,
425 const struct bitcoin_blkid *chains,
426 struct fallback_address **fallbacks)
427{
428 const struct chainparams *chain;
429 bool valid = true;
430
431 /* Present address as first chain mentioned. */
432 if (tal_count(chains) != 0)
433 chain = chainparams_by_chainhash(&chains[0]);
434 else
435 chain = chainparams_for_network("bitcoin");
436
437 json_array_start(js, "fallbacks");
438 for (size_t i = 0; i < tal_count(fallbacks); i++) {
439 size_t addrlen = tal_bytelen(fallbacks[i]->address);
440
441 json_object_start(js, NULL);
442 json_add_u32(js, "version", fallbacks[i]->version);
443 json_add_hex_talarr(js, "hex", fallbacks[i]->address);
444
445 /* BOLT-offers #12:
446 * - for the bitcoin chain, if the invoice specifies `fallbacks`:
447 * - MUST ignore any `fallback_address` for which `version` is
448 * greater than 16.
449 * - MUST ignore any `fallback_address` for which `address` is
450 * less than 2 or greater than 40 bytes.
451 * - MUST ignore any `fallback_address` for which `address` does
452 * not meet known requirements for the given `version`
453 */
454 if (fallbacks[i]->version > 16) {
455 json_add_string(js,
456 "warning_invoice_fallbacks_version_invalid",
457 "invoice fallback version > 16");
458 valid = false;
459 } else if (addrlen < 2 || addrlen > 40) {
460 json_add_string(js,
461 "warning_invoice_fallbacks_address_invalid",
462 "invoice fallback address bad length");
463 valid = false;
464 } else if (chain) {
465 valid &= json_add_fallback_address(js, chain,
466 fallbacks[i]->version,
467 fallbacks[i]->address);
468 }
469 json_object_end(js);
470 }
471 json_array_end(js);
472
473 return valid;
474}
475
476static void json_add_b12_invoice(struct json_stream *js,
477 const struct tlv_invoice *invoice)

Callers 1

json_add_b12_invoiceFunction · 0.85

Calls 11

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

Tested by

no test coverage detected