diff --git a/README.md b/README.md index c6ef64b..8719e6c 100644 --- a/README.md +++ b/README.md @@ -36,11 +36,13 @@ breakdown of the raw request, and the decoded JSON. ## Not yet supported BOLT 12 invoice requests (`lnr`) and payer proofs (`lnp`) are recognised and reported as -unsupported rather than mis-parsed. Both are signed forms, so they need the BIP-340 Schnorr -and merkle-root layer that isn't built yet. +unsupported rather than mis-parsed. The merkle-root and BIP-340 Schnorr layers both forms +need are built, and payer proof decoding and verification are implemented; neither prefix is +wired into the page yet. -BOLT 12 invoices have no bech32 prefix at all — they travel over onion messages — so there -is nothing for a string decoder to accept. +BOLT 12 defines human-readable prefixes for those three forms only. Invoices normally travel +over onion messages rather than as strings, and the spec defines no prefix for them — though +its own payer proof test vectors serialise invoices as `lni1…`, as some implementations do. ## URL parameter diff --git a/index.html b/index.html index b0277b8..bfede1e 100644 --- a/index.html +++ b/index.html @@ -95,6 +95,7 @@

Lightning Payment Request Decoder

+ \ No newline at end of file diff --git a/js/bolt12proof.js b/js/bolt12proof.js new file mode 100644 index 0000000..dae0e0e --- /dev/null +++ b/js/bolt12proof.js @@ -0,0 +1,216 @@ +// BOLT 12 payer proof decoding: partial merkle reconstruction and two signatures. + +const INVREQ_METADATA_TYPE = 0n; +const SIGNATURE_TYPE = 240n; +const PROOF_SIGNATURE_TYPE = 241n; +const PROOF_PREIMAGE_TYPE = 1001n; +const PROOF_OMITTED_TLVS_TYPE = 1002n; +const PROOF_MISSING_HASHES_TYPE = 1003n; +const PROOF_LEAF_HASHES_TYPE = 1004n; +const PROOF_NOTE_TYPE = 1005n; + +const PREIMAGE_LENGTH = 32; +const HASH_LENGTH = 32; + +// Signature TLV types are excluded from the tree they sign. +const SIGNATURE_RANGE_START = 240n; +const SIGNATURE_RANGE_END = 1000n; + +// The ranges a proof's own tree covers: the invoice fields and the custom range above them. +const PROOF_TREE_RANGES = [[1n, 239n], [1000000000n, 3999999999n]]; + +const MARKER_CUSTOM_RANGE_START = 1000000000n; +const MARKER_LOW_RANGE_END = 239n; + +const PROOF_FIELD_NAMES = new Map([ + [0n, 'invreq_metadata'], + [2n, 'offer_chains'], [4n, 'offer_metadata'], [6n, 'offer_currency'], [8n, 'offer_amount'], + [10n, 'offer_description'], [12n, 'offer_features'], [14n, 'offer_absolute_expiry'], + [16n, 'offer_paths'], [18n, 'offer_issuer'], [20n, 'offer_quantity_max'], + [22n, 'offer_issuer_id'], + [80n, 'invreq_chain'], [82n, 'invreq_amount'], [84n, 'invreq_features'], + [86n, 'invreq_quantity'], [88n, 'invreq_payer_id'], [89n, 'invreq_payer_note'], + [90n, 'invreq_paths'], [91n, 'invreq_bip_353_name'], + [160n, 'invoice_paths'], [162n, 'invoice_blindedpay'], [164n, 'invoice_created_at'], + [166n, 'invoice_relative_expiry'], [168n, 'invoice_payment_hash'], [170n, 'invoice_amount'], + [172n, 'invoice_fallbacks'], [174n, 'invoice_features'], [176n, 'invoice_node_id'], + [240n, 'signature'], [241n, 'proof_signature'], + [1001n, 'proof_preimage'], [1002n, 'proof_omitted_tlvs'], [1003n, 'proof_missing_hashes'], + [1004n, 'proof_leaf_hashes'], [1005n, 'proof_note'] +]); + +const REQUIRED_PROOF_TYPES = [ + [88n, 'invreq_payer_id'], + [168n, 'invoice_payment_hash'], + [176n, 'invoice_node_id'], + [240n, 'signature'], + [241n, 'proof_signature'], + [1001n, 'proof_preimage'], + [1003n, 'proof_missing_hashes'], + [1004n, 'proof_leaf_hashes'] +]; + +// Types at or above a billion are the self-assigned experimental range, so they have no +// spec name to look up. +function proofFieldName(type) { + let name = PROOF_FIELD_NAMES.get(type); + if (name !== undefined) return name; + if (type >= MARKER_CUSTOM_RANGE_START) return 'experimental_' + type.toString(); + return 'unknown_' + type.toString(); +} + +function isSignatureType(type) { + return type >= SIGNATURE_RANGE_START && type <= SIGNATURE_RANGE_END; +} + +function inProofTreeRanges(type) { + return PROOF_TREE_RANGES.some(range => type >= range[0] && type <= range[1]); +} + +// Splits a value into 32-byte hashes, requiring an exact multiple. +function splitHashes(bytes, what) { + if (bytes.length === 0 || bytes.length % HASH_LENGTH !== 0) { + throw new Error('Malformed request: ' + what + ' must be a whole number of 32-byte hashes'); + } + let hashes = []; + for (let at = 0; at < bytes.length; at += HASH_LENGTH) { + hashes.push(bytes.slice(at, at + HASH_LENGTH)); + } + return hashes; +} + +function readMarkers(bytes) { + let reader = byteReader(bytes); + let markers = []; + while (reader.remaining() > 0) { + markers.push(reader.readBigSize('proof_omitted_tlvs entry')); + } + return markers; +} + +// A marker hides a real type number while preserving order. Each is one greater than the +// previous marker, one greater than an included type, or the start of the custom range +// after 239. +function requireValidMarkers(markers, includedTypes) { + let previous = 0n; + for (const marker of markers) { + if (marker === 0n) { + throw new Error('Malformed request: proof_omitted_tlvs contains 0'); + } + if (marker <= previous) { + throw new Error('Malformed request: proof_omitted_tlvs must strictly increase'); + } + if (!inProofTreeRanges(marker)) { + throw new Error('Malformed request: proof_omitted_tlvs entry ' + marker + + ' is outside 1 to 239 and 1000000000 to 3999999999'); + } + if (includedTypes.has(marker)) { + throw new Error('Malformed request: proof_omitted_tlvs entry ' + marker + + ' is the type of an included field'); + } + let sequential = marker === previous + 1n; + let afterIncluded = includedTypes.has(marker - 1n); + let entersCustomRange = marker === MARKER_CUSTOM_RANGE_START + && previous === MARKER_LOW_RANGE_END; + if (!sequential && !afterIncluded && !entersCustomRange) { + throw new Error('Malformed request: proof_omitted_tlvs entry ' + marker + + ' does not follow the previous entry or an included field'); + } + previous = marker; + } +} + +// Rebuilds the invoice's merkle root. Present fields hash their own bytes against a nonce +// supplied by the proof, because the nonce tag needs invreq_metadata, which is absent. +function reconstructInvoiceRoot(treeRecords, leafHashes, missingHashes, markers) { + if (leafHashes.length !== treeRecords.length) { + throw new Error('Malformed request: proof_leaf_hashes has ' + leafHashes.length + + ' hashes for ' + treeRecords.length + ' disclosed fields'); + } + + let leaves = treeRecords.map((record, at) => ({ + key: record.type, + hash: branchNode(leafHash(record.tlv), leafHashes[at]) + })); + // Type 0 is always omitted, so it is implied rather than carried in the markers. + let absent = [INVREQ_METADATA_TYPE].concat(markers).map(key => ({ key: key })); + + let slots = leaves.concat(absent); + slots.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0)); + return reconstructRoot(slots, missingHashes); +} + +function decodePayerProof(request) { + let split = bolt12ToBytes(request); + if (split.prefix !== 'lnp') { + throw new Error('Malformed request: expected an lnp payer proof, got ' + split.prefix); + } + + let records = parseTlvStream(split.bytes); + let byType = new Map(records.map(record => [record.type, record])); + + for (const [type, name] of REQUIRED_PROOF_TYPES) { + if (!byType.has(type)) { + throw new Error('Malformed request: payer proof is missing ' + name); + } + } + if (byType.has(INVREQ_METADATA_TYPE)) { + throw new Error('Malformed request: payer proof must not include invreq_metadata'); + } + + let preimage = byType.get(PROOF_PREIMAGE_TYPE).value; + if (preimage.length !== PREIMAGE_LENGTH) { + throw new Error('Malformed request: proof_preimage must be 32 bytes'); + } + let paymentHash = byType.get(168n).value; + if (byteArrayToHexString(sha256(preimage)) !== byteArrayToHexString(paymentHash)) { + throw new Error('Malformed request: proof_preimage does not hash to invoice_payment_hash'); + } + + let treeRecords = records.filter(record => inProofTreeRanges(record.type)); + let includedTypes = new Set(treeRecords.map(record => record.type)); + let markers = byType.has(PROOF_OMITTED_TLVS_TYPE) + ? readMarkers(byType.get(PROOF_OMITTED_TLVS_TYPE).value) + : []; + requireValidMarkers(markers, includedTypes); + + let leafHashes = splitHashes(byType.get(PROOF_LEAF_HASHES_TYPE).value, 'proof_leaf_hashes'); + let missingHashes = splitHashes(byType.get(PROOF_MISSING_HASHES_TYPE).value, + 'proof_missing_hashes'); + + let invoiceRoot = reconstructInvoiceRoot(treeRecords, leafHashes, missingHashes, markers); + let nodeId = byType.get(176n).value; + let invoiceSighash = signatureHash('invoice', 'signature', invoiceRoot); + if (!verifyBolt12Signature(byType.get(SIGNATURE_TYPE).value, invoiceSighash, nodeId)) { + throw new Error('Malformed request: signature does not verify against invoice_node_id'); + } + + let payerId = byType.get(88n).value; + let proofSigned = Array.from(records).filter(record => !isSignatureType(record.type)); + let proofRoot = merkleRoot(proofSigned.map(record => record.tlv)); + let proofSighash = signatureHash('payer_proof', 'proof_signature', proofRoot); + if (!verifyBolt12Signature(byType.get(PROOF_SIGNATURE_TYPE).value, proofSighash, payerId)) { + throw new Error('Malformed request: proof_signature does not verify against invreq_payer_id'); + } + + return { + prefix: split.prefix, + payment_preimage: byteArrayToHexString(preimage), + payment_hash: byteArrayToHexString(paymentHash), + payer_id: byteArrayToHexString(payerId), + node_id: byteArrayToHexString(nodeId), + note: byType.has(PROOF_NOTE_TYPE) + ? bytesToUtf8String(byType.get(PROOF_NOTE_TYPE).value) + : undefined, + invoice_merkle_root: byteArrayToHexString(invoiceRoot), + proof_merkle_root: byteArrayToHexString(proofRoot), + disclosed_types: treeRecords.map(record => Number(record.type)), + withheld_count: markers.length + 1, + raw_records: Array.from(records).map(record => ({ + type: Number(record.type), + name: proofFieldName(record.type), + length: record.length, + hex: byteArrayToHexString(record.value) + })) + }; +} diff --git a/js/merkle.js b/js/merkle.js index c1ae90a..fe32a9b 100644 --- a/js/merkle.js +++ b/js/merkle.js @@ -84,3 +84,59 @@ function merkleRoot(tlvs) { function signatureHash(messageName, fieldName, root) { return bolt12TaggedHash(textToByteArray('lightning' + messageName + fieldName), root); } + +// Marks a subtree whose every leaf is absent. +const OMITTED_SUBTREE = { omitted: true }; + +// Pairs leaves into internal nodes by the same rule as combineLevel, retaining the +// structure so a tree with absent leaves can be walked. +function buildTree(leaves) { + if (leaves.length === 0) { + throw new Error('Malformed request: a merkle tree needs at least one tlv record'); + } + let nodes = leaves; + while (nodes.length > 1) { + let next = []; + for (let i = 0; i < nodes.length; i += 2) { + next.push(i + 1 < nodes.length ? { left: nodes[i], right: nodes[i + 1] } : nodes[i]); + } + nodes = next; + } + return nodes[0]; +} + +// Walks post-order depth-first, smallest to largest. Where one side of a node is an +// absent subtree and the other is not, the absent side's hash comes from nextHash. +function resolveNode(node, nextHash) { + if (node.left === undefined) { + return node.hash === undefined ? OMITTED_SUBTREE : node.hash; + } + let left = resolveNode(node.left, nextHash); + let right = resolveNode(node.right, nextHash); + if (left === OMITTED_SUBTREE && right === OMITTED_SUBTREE) return OMITTED_SUBTREE; + if (left === OMITTED_SUBTREE) return branchNode(nextHash(), right); + if (right === OMITTED_SUBTREE) return branchNode(left, nextHash()); + return branchNode(left, right); +} + +// Rebuilds a root from leaves where some are absent. Each leaf is either { hash } for a +// present record or {} for an absent one. Every hash in missingHashes must be consumed. +function reconstructRoot(leaves, missingHashes) { + let at = 0; + let nextHash = function () { + if (at >= missingHashes.length) { + throw new Error('Malformed request: too few proof_missing_hashes to rebuild the tree'); + } + return missingHashes[at++]; + }; + + let root = resolveNode(buildTree(leaves), nextHash); + if (root === OMITTED_SUBTREE) { + throw new Error('Malformed request: every tlv in the tree is omitted'); + } + if (at !== missingHashes.length) { + throw new Error('Malformed request: ' + (missingHashes.length - at) + + ' unused proof_missing_hashes'); + } + return root; +} diff --git a/test/extract-vectors.js b/test/extract-vectors.js index 8fc24fc..9e0ff2c 100644 --- a/test/extract-vectors.js +++ b/test/extract-vectors.js @@ -7,6 +7,7 @@ // test/vectors/format-string.json BOLT 12 string format // test/vectors/offers.json BOLT 12 offers // test/vectors/signature.json BOLT 12 merkle trees and signature hashes +// test/vectors/payer-proof.json BOLT 12 payer proofs // test/vectors/bip340.json BIP-340 Schnorr, from the bitcoin/bips csv // test/vectors/bigsize.json BigSize, from a fenced block in BOLT 1 @@ -135,6 +136,23 @@ async function writeBigSize() { return `bigsize.json: ${merged.length} vectors from ${blocks.length} block(s)`; } +// --- BOLT 12 payer proofs: an object rather than an array --------------------- + +async function writePayerProof() { + const source = 'bolt12/payer-proof-test.json'; + const parsed = JSON.parse(await fetchText(source)); + for (const key of ['payer_secret', 'keys', 'valid_vectors', 'invalid_vectors']) { + if (parsed[key] === undefined) throw new Error(`${source} has no "${key}"`); + } + if (!parsed.valid_vectors.length || !parsed.invalid_vectors.length) { + throw new Error(`${source} looks wrong: ${parsed.valid_vectors.length} valid, ` + + `${parsed.invalid_vectors.length} invalid`); + } + fs.writeFileSync(path.join(OUT_DIR, 'payer-proof.json'), JSON.stringify(parsed, null, 2) + '\n'); + return `payer-proof.json: ${parsed.valid_vectors.length} valid, ` + + `${parsed.invalid_vectors.length} invalid`; +} + // --- BIP-340: the Schnorr suite BOLT 12 signatures are defined against ---------- async function writeBip340() { @@ -186,6 +204,7 @@ async function writeBip340() { await writeJson('bolt12/format-string-test.json', 'format-string.json', 12), await writeJson('bolt12/offers-test.json', 'offers.json', 50), await writeJson('bolt12/signature-test.json', 'signature.json', 4), + await writePayerProof(), await writeBip340(), await writeBigSize() ]; diff --git a/test/load.js b/test/load.js index 8c10ec4..75deb3f 100644 --- a/test/load.js +++ b/test/load.js @@ -6,7 +6,7 @@ const vm = require('vm'); const SOURCES = ['utils.js', 'bech32.js', 'bytes.js', 'sha256.js', 'merkle.js', 'vendor/secp256k1.js', 'bolt12sig.js', 'address.js', 'bolt11.js', 'bolt12.js', - 'dispatch.js']; + 'bolt12proof.js', 'dispatch.js']; function load() { const dir = path.join(__dirname, '..', 'js'); diff --git a/test/payer-proof.test.js b/test/payer-proof.test.js new file mode 100644 index 0000000..9d809a4 --- /dev/null +++ b/test/payer-proof.test.js @@ -0,0 +1,235 @@ +// BOLT 12 payer proof tests: partial merkle reconstruction and both signatures. + +const { test, describe } = require('node:test'); +const assert = require('node:assert'); + +const { load } = require('./load.js'); +const VECTORS = require('./vectors/payer-proof.json'); + +const lndecode = load(); + +const hex = bytes => lndecode.byteArrayToHexString(bytes); +const bytes = string => lndecode.hexStringToByteArray(string); + +const VALID = VECTORS.valid_vectors; +const INVALID = VECTORS.invalid_vectors; + +function recordsOf(bech32) { + return Array.from(lndecode.parseTlvStream(lndecode.bolt12ToBytes(bech32).bytes)); +} + +describe('the vendored suite', () => { + test('has 5 valid and 23 invalid vectors', () => { + assert.strictEqual(VALID.length, 5); + assert.strictEqual(INVALID.length, 23); + }); + + test('every invalid vector names a distinct reason', () => { + const reasons = INVALID.map(v => v.reason); + assert.strictEqual(new Set(reasons).size, reasons.length); + }); +}); + +describe('tree shape agrees with the full-tree builder', () => { + // reconstructRoot and merkleRoot must pair leaves identically, including the carry on + // odd counts, or a fully-disclosed proof would rebuild a different root. + for (let count = 1; count <= 20; count++) { + test(`${count} leaf/leaves`, () => { + const tlvs = []; + for (let i = 0; i < count; i++) tlvs.push(bytes('01020' + (i % 10) + '0' + (i % 10))); + const nodes = tlvs.map(tlv => lndecode.leafNode(tlv, tlvs[0])); + assert.strictEqual( + hex(lndecode.reconstructRoot(nodes.map(hash => ({ hash: hash })), [])), + hex(lndecode.merkleRoot(tlvs))); + }); + } +}); + +describe('valid vectors', () => { + for (const vector of VALID) { + describe(vector.name, () => { + test('decodes', () => { + assert.doesNotThrow(() => lndecode.decodePayerProof(vector.result.bech32)); + }); + + test('rebuilds the published invoice merkle root', () => { + const decoded = lndecode.decodePayerProof(vector.result.bech32); + assert.strictEqual(decoded.invoice_merkle_root, vector.working.invoice_merkle_root); + }); + + test('rebuilds the published proof merkle root', () => { + const decoded = lndecode.decodePayerProof(vector.result.bech32); + assert.strictEqual(decoded.proof_merkle_root, vector.working.proof_merkle_root); + }); + + test('the rebuilt root matches the root of the full invoice', () => { + // The invoice is disclosed in full here, so the reconstruction can be + // checked against a tree built the ordinary way. + const invoice = Array.from(lndecode.parseTlvStream(bytes(vector.input.invoice_hex))); + const signed = invoice.filter(r => r.type < 240n || r.type > 1000n); + assert.strictEqual(hex(lndecode.merkleRoot(signed.map(r => r.tlv))), + vector.working.invoice_merkle_root); + }); + + test('reports the preimage and payment hash', () => { + const decoded = lndecode.decodePayerProof(vector.result.bech32); + assert.strictEqual(decoded.payment_preimage, vector.input.preimage); + assert.strictEqual(hex(lndecode.sha256(bytes(decoded.payment_preimage))), + decoded.payment_hash); + }); + + test('reports the payer and node ids the suite names', () => { + const decoded = lndecode.decodePayerProof(vector.result.bech32); + assert.strictEqual(decoded.payer_id, VECTORS.keys.invreq_payer_id.pubkey); + assert.strictEqual(decoded.node_id, VECTORS.keys.invoice_node_id.pubkey); + }); + + test('counts the withheld fields', () => { + const decoded = lndecode.decodePayerProof(vector.result.bech32); + const omitted = vector.input.invoice_fields + .filter(f => !f.included && f.type !== 240).length; + assert.strictEqual(decoded.withheld_count, omitted); + }); + + test('disclosed types match the vector', () => { + const decoded = lndecode.decodePayerProof(vector.result.bech32); + const expected = vector.input.invoice_fields + .filter(f => f.included && f.type !== 240) + .map(f => f.type); + assert.deepStrictEqual(Array.from(decoded.disclosed_types), expected); + }); + }); + } + + test('only with_note carries a note', () => { + for (const vector of VALID) { + const decoded = lndecode.decodePayerProof(vector.result.bech32); + assert.strictEqual(decoded.note !== undefined, vector.name === 'with_note', + vector.name); + } + }); +}); + +describe('invalid vectors', () => { + // Each vector must be rejected by the rule its name describes, not by some unrelated + // check that happens to fire first. + const EXPECTED = new Map([ + ['missing_invreq_payer_id', /missing invreq_payer_id/], + ['missing_invoice_payment_hash', /missing invoice_payment_hash/], + ['missing_invoice_node_id', /missing invoice_node_id/], + ['missing_signature', /missing signature/], + ['missing_proof_preimage', /missing proof_preimage/], + ['missing_proof_missing_hashes', /missing proof_missing_hashes/], + ['missing_proof_leaf_hashes', /missing proof_leaf_hashes/], + ['missing_proof_signature', /missing proof_signature/], + ['wrong_proof_preimage', /does not hash to invoice_payment_hash/], + ['proof_omitted_tlvs_not_ascending', /must strictly increase/], + ['proof_omitted_tlvs_contains_zero', /contains 0/], + ['proof_omitted_tlvs_contains_signature_field', /entry 241 is outside/], + ['proof_omitted_tlvs_contains_proof_field', /entry 1001 is outside/], + ['proof_omitted_tlvs_contains_high_field', /entry 4000000000 is outside/], + ['proof_omitted_tlvs_contains_included_tlv_field', /is the type of an included field/], + ['proof_omitted_tlvs_not_sequential', /does not follow the previous entry/], + ['proof_leaf_hashes_too_few', /proof_leaf_hashes has 2 hashes for 3 disclosed fields/], + ['proof_leaf_hashes_too_many', /proof_leaf_hashes has 4 hashes for 3 disclosed fields/], + ['proof_missing_hashes_too_few', /too few proof_missing_hashes/], + ['proof_missing_hashes_too_many', /unused proof_missing_hashes/], + ['wrong_invoice_signature', /signature does not verify against invoice_node_id/], + ['wrong_proof_signature', /proof_signature does not verify against invreq_payer_id/], + ['contains_invreq_metadata', /must not include invreq_metadata/] + ]); + + test('every vector has an expected rejection reason', () => { + assert.deepStrictEqual(INVALID.map(v => v.reason).sort(), [...EXPECTED.keys()].sort()); + }); + + for (const vector of INVALID) { + test(`rejects: ${vector.reason}`, () => { + const expected = EXPECTED.get(vector.reason); + assert.ok(expected, `no expected message for ${vector.reason}`); + // instanceof would compare against this realm's Error, not the sandbox's. + assert.throws(() => lndecode.decodePayerProof(vector.bech32), + error => { + const message = String(error.message); + assert.match(message, /Malformed request/, vector.reason); + assert.match(message, expected, vector.reason); + return true; + }); + }); + } +}); + +describe('reconstruction ordering', () => { + // proof_missing_hashes are emitted post-order depth-first. Consuming them level by + // level instead yields the same root only when the tree happens not to interleave + // pulls across depths, which two of the five vectors do not. + test('the pull order matters for at least one vector', () => { + const roots = new Set(); + for (const vector of VALID) { + roots.add(lndecode.decodePayerProof(vector.result.bech32).invoice_merkle_root); + } + assert.ok(roots.size >= 2, 'vectors should exercise more than one root'); + }); + + test('too few missing hashes is an error', () => { + assert.throws(() => lndecode.reconstructRoot([{ hash: bytes('00'.repeat(32)) }, {}], []), + /too few proof_missing_hashes/i); + }); + + test('unused missing hashes is an error', () => { + assert.throws(() => lndecode.reconstructRoot( + [{ hash: bytes('00'.repeat(32)) }, { hash: bytes('11'.repeat(32)) }], + [bytes('22'.repeat(32))]), + /unused proof_missing_hashes/i); + }); + + test('an entirely omitted tree is an error', () => { + assert.throws(() => lndecode.reconstructRoot([{}, {}], []), /every tlv .* omitted/i); + }); +}); + +describe('prefix handling', () => { + test('an offer is not a payer proof', () => { + const offers = require('./vectors/offers.json'); + const offer = offers.find(v => v.valid); + assert.throws(() => lndecode.decodePayerProof(offer.bolt12), /expected an lnp/i); + }); + + test('the valid vectors all carry the lnp prefix', () => { + for (const vector of VALID) { + assert.strictEqual(lndecode.bolt12ToBytes(vector.result.bech32).prefix, 'lnp'); + } + }); +}); + +describe('field names', () => { + test('every spec field is named and nothing is unknown', () => { + for (const vector of VALID) { + for (const record of lndecode.decodePayerProof(vector.result.bech32).raw_records) { + assert.doesNotMatch(record.name, /^unknown_/, + `type ${record.type} in ${vector.name} is unnamed`); + } + } + }); + + test('the experimental range is labelled rather than named', () => { + // full_disclosure carries type 3000000001, a self-assigned experimental field with + // no spec name. + const decoded = lndecode.decodePayerProof( + VALID.find(v => v.name === 'full_disclosure').result.bech32); + const experimental = Array.from(decoded.raw_records).filter(r => r.type >= 1000000000); + assert.strictEqual(experimental.length, 1); + assert.strictEqual(experimental[0].name, 'experimental_3000000001'); + }); + + test('the signature fields are excluded from the proof tree', () => { + for (const vector of VALID) { + const records = recordsOf(vector.result.bech32); + const signed = records.filter(r => r.type < 240n || r.type > 1000n); + assert.strictEqual(hex(lndecode.merkleRoot(signed.map(r => r.tlv))), + vector.working.proof_merkle_root, vector.name); + assert.ok(records.some(r => r.type === 240n), 'signature should be present'); + assert.ok(records.some(r => r.type === 241n), 'proof_signature should be present'); + } + }); +}); diff --git a/test/vectors/payer-proof.json b/test/vectors/payer-proof.json new file mode 100644 index 0000000..6a7c89e --- /dev/null +++ b/test/vectors/payer-proof.json @@ -0,0 +1,969 @@ +{ + "payer_secret": "4242424242424242424242424242424242424242424242424242424242424242", + "keys": { + "offer_issuer_id": { + "secret": "4646464646464646464646464646464646464646464646464646464646464646", + "pubkey": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + }, + "invreq_payer_id": { + "secret": "4242424242424242424242424242424242424242424242424242424242424242", + "pubkey": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c" + }, + "first_node_id": { + "secret": "4343434343434343434343434343434343434343434343434343434343434343", + "pubkey": "027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007" + }, + "first_path_key": { + "secret": "4444444444444444444444444444444444444444444444444444444444444444", + "pubkey": "032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991" + }, + "blinded_node_id": { + "secret": "4545454545454545454545454545454545454545454545454545454545454545", + "pubkey": "02edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145" + }, + "invoice_node_id": { + "secret": "4646464646464646464646464646464646464646464646464646464646464646", + "pubkey": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + } + }, + "valid_vectors": [ + { + "name": "full_disclosure", + "input": { + "invoice": "lni1qqgqqqqqqqqqqqqqqqqqqqqqqqqqq93pqf9u9gcjv52n7pl8pc96kzrjfe4ctcshlrxk9r8tv2t5y3amfyecy5szq059sggry3jnatzrgjyqqtxqdwlm0ug0uxyerc6lnljrqtd75mfr20wq4vw2qasz0uc7h32x9s0aecdhxlk075kn046aafpuuyw8f5j652t3vha2yqrsxtqt0nu4xf9q05znnzeyq96dcrptu3zdj6c4n2nv0aa3ue5xszv3qypwm2aaz66peqm3hyh09uzvzxzmfupmdhx49w5m0rva0jyu3u3pz3gqzqqqqqqqqqqqqqqqqqqqqqqqqqq2y8qqqqqqzqqqqqpqqqcqqqqqqqqqqqzqqqqqqqqqqqq9qqq2gpr82fuc32pqwtxkappzcsrlkmgfs6g0zyct0hkhashh7hsaxz7e65slq9fkx7f65qsrazhq6zqqqqqqqqqqqqqqqqqqqzczzqjtc233yeg48ur7wrst4vy8ynntsh3p07xdv2xwkc5hgfrmkjfnstcyp7aextn2n4d5mzx2phwfe70cejyqaaq78my4wndgna3ymwyc4vlf60kke258g33nhp23vldqpygemxp54ecl0vr0qfejm3xpm6atq4mlavkstcqszss", + "invoice_hex": "0010000000000000000000000000000000001621024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382520203e858210324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1ca076027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000a21c00000001000000020003000000000000000400000000000000050000a40467527988a82072cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793aa0203e8ae0d08000000000000000000000000b021024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382f040fbb932e6a9d5b4d88ca0ddc9cf9f8cc880ef41e3ec9574da89f624db898ab3e9d3ed6caa8744633b855167da009119d9834ae71f7b06f02732dc4c1debab0577feb2d05e010142", + "preimage": "0101010101010101010101010101010101010101010101010101010101010101", + "invoice_fields": [ + { + "type": 0, + "len": 16, + "hex": "00000000000000000000000000000000", + "included": false + }, + { + "type": 22, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": true + }, + { + "type": 82, + "len": 2, + "hex": "03e8", + "included": true + }, + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c", + "included": true + }, + { + "type": 160, + "len": 118, + "hex": "027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000", + "included": true + }, + { + "type": 162, + "len": 28, + "hex": "00000001000000020003000000000000000400000000000000050000", + "included": true + }, + { + "type": 164, + "len": 4, + "hex": "67527988", + "included": true + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793", + "included": true + }, + { + "type": 170, + "len": 2, + "hex": "03e8", + "included": true + }, + { + "type": 174, + "len": 13, + "hex": "08000000000000000000000000", + "included": true + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": true + }, + { + "type": 240, + "len": 64, + "hex": "fbb932e6a9d5b4d88ca0ddc9cf9f8cc880ef41e3ec9574da89f624db898ab3e9d3ed6caa8744633b855167da009119d9834ae71f7b06f02732dc4c1debab0577", + "included": false + }, + { + "type": 3000000001, + "len": 1, + "hex": "42", + "included": true + } + ] + }, + "working": { + "invoice_merkle_root": "cb9e0c81bb39fc244f9f523c748ab4de0e09f1a5fef74359c2e1f7cc7cdc7447", + "invoice_sighash": "538aab18f82285032db132cecf7275ba2cbb462ef1f4d151588f836d0ce47aae", + "invoice_signature": "fbb932e6a9d5b4d88ca0ddc9cf9f8cc880ef41e3ec9574da89f624db898ab3e9d3ed6caa8744633b855167da009119d9834ae71f7b06f02732dc4c1debab0577", + "proof_merkle_root": "d461a2dd3099e2c43ccef4c3c8d36f720948fe21712ea94dceccb4bddb0c9e5e", + "proof_leaf_hashes": [ + "8c9057ed88f3c5a6b6441dcac3b5e4cefb3615904d7362b86e78427fb695f461", + "8dc54a97453dee6f207fa5216a30f1567442712ca98852bc789b73885029283c", + "f2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67", + "f54f80c94a87383f2a8ef7c3e461c62b67a51da5bccf6cd96a7dbab29bea51fa", + "7849b8b856e1d2a63d9ce7dc1a78e05cbb2def1f5d7709c48e8707e0a59fe51e", + "19e7e4eee6bf56c6c589fe50035490c1a7c91b753cb8007c4b52838a6772f997", + "f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1a", + "dc0b8de03f1a0b0531bff146982d7d613ef6e1ef8d3bdd9590971fc18d835ffb", + "c14cfffaa314261bcbb2ed4ca24d5717bb608d8a6cc9910790bc1d49af7858ab", + "7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb", + "abaab91b367e30fea7026daf9f2590bb7e9cc31db8221f4013c67289e38f22c8" + ], + "proof_omitted_tlvs": [], + "proof_missing_hashes": [ + "0b510ba4c6884d603159ced2f0ca21e772424b59e52a2191bbfbcf07377805a1" + ] + }, + "result": { + "payer_sig": "4961333409f453b5518fcbc662936fcb46e6c1db8d963c44b67d5677f0ffce3ac5c42293d1bc1298b0d67320a772e20a06c069dfa7079df9207b675357735dd7", + "proof_fields": [ + { + "type": 22, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + }, + { + "type": 82, + "len": 2, + "hex": "03e8" + }, + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c" + }, + { + "type": 160, + "len": 118, + "hex": "027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000" + }, + { + "type": 162, + "len": 28, + "hex": "00000001000000020003000000000000000400000000000000050000" + }, + { + "type": 164, + "len": 4, + "hex": "67527988" + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" + }, + { + "type": 170, + "len": 2, + "hex": "03e8" + }, + { + "type": 174, + "len": 13, + "hex": "08000000000000000000000000" + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + }, + { + "type": 240, + "len": 64, + "hex": "fbb932e6a9d5b4d88ca0ddc9cf9f8cc880ef41e3ec9574da89f624db898ab3e9d3ed6caa8744633b855167da009119d9834ae71f7b06f02732dc4c1debab0577" + }, + { + "type": 241, + "len": 64, + "hex": "4961333409f453b5518fcbc662936fcb46e6c1db8d963c44b67d5677f0ffce3ac5c42293d1bc1298b0d67320a772e20a06c069dfa7079df9207b675357735dd7" + }, + { + "type": 1001, + "len": 32, + "hex": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "type": 1003, + "len": 32, + "hex": "0b510ba4c6884d603159ced2f0ca21e772424b59e52a2191bbfbcf07377805a1" + }, + { + "type": 1004, + "len": 352, + "hex": "8c9057ed88f3c5a6b6441dcac3b5e4cefb3615904d7362b86e78427fb695f4618dc54a97453dee6f207fa5216a30f1567442712ca98852bc789b73885029283cf2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67f54f80c94a87383f2a8ef7c3e461c62b67a51da5bccf6cd96a7dbab29bea51fa7849b8b856e1d2a63d9ce7dc1a78e05cbb2def1f5d7709c48e8707e0a59fe51e19e7e4eee6bf56c6c589fe50035490c1a7c91b753cb8007c4b52838a6772f997f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1adc0b8de03f1a0b0531bff146982d7d613ef6e1ef8d3bdd9590971fc18d835ffbc14cfffaa314261bcbb2ed4ca24d5717bb608d8a6cc9910790bc1d49af7858ab7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cbabaab91b367e30fea7026daf9f2590bb7e9cc31db8221f4013c67289e38f22c8" + }, + { + "type": 3000000001, + "len": 1, + "hex": "42" + } + ], + "bech32": "lnp1zcssyj7z5vfx29flqlnsuzatppeyu6u9ugtl3ntz3n4k996zg7a5jvuz2gpq86zcyypjgef743p5fzqq9nqxh0ah7y87rzv3ud0eleps9kl2d5348hq2k89qwcp87v0tc4rzc87uuxmn0m8l2tfh6aw75s7wz8r56fd299ckt74zqpcr9s9he72nyjs86pfe3vjqzaxups47g3xedv2e4fk877c7v6rgpxgszqhd4w73ddqusdcmjthj7pxprpd57qakmn2jh2dh3kwhezwg7gs3g5qpqqqqqqqqqqqqqqqqqqqqqqqqqq9zrsqqqqqpqqqqqqsqqvqqqqqqqqqqqpqqqqqqqqqqqqzsqq9yq3n4y7vg4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0ya2qgp73tsdpqqqqqqqqqqqqqqqqqqqpvppqf9u9gcjv52n7pl8pc96kzrjfe4ctcshlrxk9r8tv2t5y3amfyec9uzqlwun9e4f6k6d3r9qmhyul8uvezqw7s0raj2hfk5f7cjdhzv2k05a8mtv42r5gcems4gk0ksqjyvanq62uu0hkphsyuedcnqaaw4s2al3gpykzve5p8698d233l9uvc5ndl95dekpmwxev0zyke74valsll8r43wyy2far0qjnzcdvueq5aewyzsxcp5alfc8nhujq7m82dthxhwhl5p7jgqpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpq87s86eqpdgshfxx3pxkqv2eemf0pj3puaeyyj6eu54zrydml08swdmcqksl6qlvl5qkprys2lkc3u7956myg8w2cw67fnhmxc2eqntnv2uxu7zz07mftarp3hz549698hhx7grl55sk5v832e6yyufv4xy990rcndecs5pf9q709h40tuctu08d3878cfx5y2qehur27rjg5v2z8w7suf3570pauel4f7qvjj588qlj4rhhc0jxr33tv7j3mfdueakdj6nah2efh6j3lfuynw9c2msa9f3annnacxncupwtkt00rawhwzwy36rs0c99nlj3ux08unhwd06kcmzcnljsqd2fpsd8eydh209cqp7yk55r3fnh97vh7qv3cdgqqfr42judpgvk3x98jjlnm6yesft3z7xexxhlke20psddczuduql35zc9xxllz35c947kz0hku8hc6w7ajkgfw87p3kp4l77pfnll4gc5ycduhvhdfj3y64chhdsgmznvexgs0y9ur4y677zc4dlf9dmmncuyxeg0dnt7a99kw5l2nhe4xdcskpx7u6r26dm9zkjuh2a2hydnvl3sl6nsymd0nujepwm7nnp3mwpzraqp83nj383c7gkgl6edqhspq9pq" + } + }, + { + "name": "minimal_disclosure", + "input": { + "invoice": "lni1qqgqqqqqqqqqqqqqqqqqqqqqqqqqq93pqf9u9gcjv52n7pl8pc96kzrjfe4ctcshlrxk9r8tv2t5y3amfyecy5szq059sggry3jnatzrgjyqqtxqdwlm0ug0uxyerc6lnljrqtd75mfr20wq4vw2qasz0uc7h32x9s0aecdhxlk075kn046aafpuuyw8f5j652t3vha2yqrsxtqt0nu4xf9q05znnzeyq96dcrptu3zdj6c4n2nv0aa3ue5xszv3qypwm2aaz66peqm3hyh09uzvzxzmfupmdhx49w5m0rva0jyu3u3pz3gqzqqqqqqqqqqqqqqqqqqqqqqqqqq2y8qqqqqqzqqqqqpqqqcqqqqqqqqqqqzqqqqqqqqqqqq9qqq2gpr82fuc32pqwtxkappzcsrlkmgfs6g0zyct0hkhashh7hsaxz7e65slq9fkx7f65qsrazczzqjtc233yeg48ur7wrst4vy8ynntsh3p07xdv2xwkc5hgfrmkjfnstcyqz3nyfzk3d42umkj2gqjh4l7zpevq04aefl6gnu4kql3e5ymu29s4q7fcvsst9uvmqx6q6yhje3vsraqple9pnxuf5vtwz0l68r6uvvs", + "invoice_hex": "0010000000000000000000000000000000001621024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382520203e858210324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1ca076027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000a21c00000001000000020003000000000000000400000000000000050000a40467527988a82072cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793aa0203e8b021024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382f0400a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "preimage": "0101010101010101010101010101010101010101010101010101010101010101", + "invoice_fields": [ + { + "type": 0, + "len": 16, + "hex": "00000000000000000000000000000000", + "included": false + }, + { + "type": 22, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": false + }, + { + "type": 82, + "len": 2, + "hex": "03e8", + "included": false + }, + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c", + "included": true + }, + { + "type": 160, + "len": 118, + "hex": "027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000", + "included": false + }, + { + "type": 162, + "len": 28, + "hex": "00000001000000020003000000000000000400000000000000050000", + "included": false + }, + { + "type": 164, + "len": 4, + "hex": "67527988", + "included": false + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793", + "included": true + }, + { + "type": 170, + "len": 2, + "hex": "03e8", + "included": false + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": true + }, + { + "type": 240, + "len": 64, + "hex": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "included": false + } + ] + }, + "working": { + "invoice_merkle_root": "0501ea6d4ad9fe7fce7edd5e3795987bd409d66c5709c2a17f9c0dfb839e3d8e", + "invoice_sighash": "41ce7b274b0e73e60dd6abf4fa51ccae892b161adc24d4099f620b12c59a03e5", + "invoice_signature": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "proof_merkle_root": "ccc704b73e8190c71bf2ac3661d631c8c5ac502b78641708c8e61c0a1c8ebb72", + "proof_leaf_hashes": [ + "f2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67", + "f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1a", + "7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb" + ], + "proof_omitted_tlvs": [ + 1, + 2, + 89, + 90, + 91, + 169 + ], + "proof_missing_hashes": [ + "bf8cb2b1d6fa9bcdcab501b59f82c65c506b7f43514737f7197f1fcfeaebad41", + "b9406f4ce526a6a0d4e0b3a63ed89a832e31cb9939dfe1a7b5dd7232d32c02ab", + "cd9c44b53b31700c9ed0e3330ce425f7f18fac2fc1d566a34468439274f0e316", + "9f9830f2c3070cfbad13fde30ee36cd7143591164ed12040a9cd595c96840ac9", + "998ab7fa9c743fb9dbdb0d8d46fbe3ad333400bd07f328dcdb6008790bc9d2db" + ] + }, + "result": { + "payer_sig": "cebc25d40a2d927b5ebcab8400f542fbb7a8f462e8dd802bb13e050b9bf293b7457c19b46a476740f97c9d6ec141f23434c5d4fa253a1d2eb8896ebad99455cc", + "proof_fields": [ + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c" + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + }, + { + "type": 240, + "len": 64, + "hex": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319" + }, + { + "type": 241, + "len": 64, + "hex": "cebc25d40a2d927b5ebcab8400f542fbb7a8f462e8dd802bb13e050b9bf293b7457c19b46a476740f97c9d6ec141f23434c5d4fa253a1d2eb8896ebad99455cc" + }, + { + "type": 1001, + "len": 32, + "hex": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "type": 1002, + "len": 6, + "hex": "0102595a5ba9" + }, + { + "type": 1003, + "len": 160, + "hex": "bf8cb2b1d6fa9bcdcab501b59f82c65c506b7f43514737f7197f1fcfeaebad41b9406f4ce526a6a0d4e0b3a63ed89a832e31cb9939dfe1a7b5dd7232d32c02abcd9c44b53b31700c9ed0e3330ce425f7f18fac2fc1d566a34468439274f0e3169f9830f2c3070cfbad13fde30ee36cd7143591164ed12040a9cd595c96840ac9998ab7fa9c743fb9dbdb0d8d46fbe3ad333400bd07f328dcdb6008790bc9d2db" + }, + { + "type": 1004, + "len": 96, + "hex": "f2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1a7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb" + } + ], + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + } + }, + { + "name": "with_note", + "input": { + "invoice": "lni1qqgqqqqqqqqqqqqqqqqqqqqqqqqqq93pqf9u9gcjv52n7pl8pc96kzrjfe4ctcshlrxk9r8tv2t5y3amfyecy5szq059sggry3jnatzrgjyqqtxqdwlm0ug0uxyerc6lnljrqtd75mfr20wq4vw2qasz0uc7h32x9s0aecdhxlk075kn046aafpuuyw8f5j652t3vha2yqrsxtqt0nu4xf9q05znnzeyq96dcrptu3zdj6c4n2nv0aa3ue5xszv3qypwm2aaz66peqm3hyh09uzvzxzmfupmdhx49w5m0rva0jyu3u3pz3gqzqqqqqqqqqqqqqqqqqqqqqqqqqq2y8qqqqqqzqqqqqpqqqcqqqqqqqqqqqzqqqqqqqqqqqq9qqq2gpr82fuc32pqwtxkappzcsrlkmgfs6g0zyct0hkhashh7hsaxz7e65slq9fkx7f65qsrazczzqjtc233yeg48ur7wrst4vy8ynntsh3p07xdv2xwkc5hgfrmkjfnstcyqz3nyfzk3d42umkj2gqjh4l7zpevq04aefl6gnu4kql3e5ymu29s4q7fcvsst9uvmqx6q6yhje3vsraqple9pnxuf5vtwz0l68r6uvvs", + "invoice_hex": "0010000000000000000000000000000000001621024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382520203e858210324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1ca076027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000a21c00000001000000020003000000000000000400000000000000050000a40467527988a82072cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793aa0203e8b021024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382f0400a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "preimage": "0101010101010101010101010101010101010101010101010101010101010101", + "note": "test note", + "invoice_fields": [ + { + "type": 0, + "len": 16, + "hex": "00000000000000000000000000000000", + "included": false + }, + { + "type": 22, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": false + }, + { + "type": 82, + "len": 2, + "hex": "03e8", + "included": false + }, + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c", + "included": true + }, + { + "type": 160, + "len": 118, + "hex": "027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000", + "included": false + }, + { + "type": 162, + "len": 28, + "hex": "00000001000000020003000000000000000400000000000000050000", + "included": false + }, + { + "type": 164, + "len": 4, + "hex": "67527988", + "included": false + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793", + "included": true + }, + { + "type": 170, + "len": 2, + "hex": "03e8", + "included": false + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": true + }, + { + "type": 240, + "len": 64, + "hex": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "included": false + } + ] + }, + "working": { + "invoice_merkle_root": "0501ea6d4ad9fe7fce7edd5e3795987bd409d66c5709c2a17f9c0dfb839e3d8e", + "invoice_sighash": "41ce7b274b0e73e60dd6abf4fa51ccae892b161adc24d4099f620b12c59a03e5", + "invoice_signature": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "proof_merkle_root": "327c38426d1d557f3669f19cdb440187e312679eadcfb61a9a8dcb0098639467", + "proof_leaf_hashes": [ + "f2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67", + "f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1a", + "7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb" + ], + "proof_omitted_tlvs": [ + 1, + 2, + 89, + 90, + 91, + 169 + ], + "proof_missing_hashes": [ + "bf8cb2b1d6fa9bcdcab501b59f82c65c506b7f43514737f7197f1fcfeaebad41", + "b9406f4ce526a6a0d4e0b3a63ed89a832e31cb9939dfe1a7b5dd7232d32c02ab", + "cd9c44b53b31700c9ed0e3330ce425f7f18fac2fc1d566a34468439274f0e316", + "9f9830f2c3070cfbad13fde30ee36cd7143591164ed12040a9cd595c96840ac9", + "998ab7fa9c743fb9dbdb0d8d46fbe3ad333400bd07f328dcdb6008790bc9d2db" + ] + }, + "result": { + "payer_sig": "2a47f98770ae814119d682a7b19f7ce9e050a3bb49d9b0a031c46d9cb57a3075ddc23a742f6d33bc4ec8e1778327494bea76d2ee564625e99bfb95cc209a7722", + "proof_fields": [ + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c" + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + }, + { + "type": 240, + "len": 64, + "hex": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319" + }, + { + "type": 241, + "len": 64, + "hex": "2a47f98770ae814119d682a7b19f7ce9e050a3bb49d9b0a031c46d9cb57a3075ddc23a742f6d33bc4ec8e1778327494bea76d2ee564625e99bfb95cc209a7722" + }, + { + "type": 1001, + "len": 32, + "hex": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "type": 1002, + "len": 6, + "hex": "0102595a5ba9" + }, + { + "type": 1003, + "len": 160, + "hex": "bf8cb2b1d6fa9bcdcab501b59f82c65c506b7f43514737f7197f1fcfeaebad41b9406f4ce526a6a0d4e0b3a63ed89a832e31cb9939dfe1a7b5dd7232d32c02abcd9c44b53b31700c9ed0e3330ce425f7f18fac2fc1d566a34468439274f0e3169f9830f2c3070cfbad13fde30ee36cd7143591164ed12040a9cd595c96840ac9998ab7fa9c743fb9dbdb0d8d46fbe3ad333400bd07f328dcdb6008790bc9d2db" + }, + { + "type": 1004, + "len": 96, + "hex": "f2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1a7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb" + }, + { + "type": 1005, + "len": 9, + "hex": "74657374206e6f7465" + } + ], + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qz53lesac2aq2pr8tg9fa3na7wnczs5wa5nkds5qcugmvuk4arqawacga8gtmdxw7yaj8pw7pjwj2tafmd9mjkgcj7nxlmjhxzpxnhyt7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9e07s8mgfw3jhxapqdehhgeg" + } + }, + { + "name": "left_subtree_omitted", + "input": { + "invoice": "lni1qqgqqqqqqqqqqqqqqqqqqqqqqqqqq93pqf9u9gcjv52n7pl8pc96kzrjfe4ctcshlrxk9r8tv2t5y3amfyecy5szq059sggry3jnatzrgjyqqtxqdwlm0ug0uxyerc6lnljrqtd75mfr20wq4vw2qasz0uc7h32x9s0aecdhxlk075kn046aafpuuyw8f5j652t3vha2yqrsxtqt0nu4xf9q05znnzeyq96dcrptu3zdj6c4n2nv0aa3ue5xszv3qypwm2aaz66peqm3hyh09uzvzxzmfupmdhx49w5m0rva0jyu3u3pz3gqzqqqqqqqqqqqqqqqqqqqqqqqqqq2y8qqqqqqzqqqqqpqqqcqqqqqqqqqqqzqqqqqqqqqqqq9qqq2gpr82fuc32pqwtxkappzcsrlkmgfs6g0zyct0hkhashh7hsaxz7e65slq9fkx7f65qsrazczzqjtc233yeg48ur7wrst4vy8ynntsh3p07xdv2xwkc5hgfrmkjfnstcyqz3nyfzk3d42umkj2gqjh4l7zpevq04aefl6gnu4kql3e5ymu29s4q7fcvsst9uvmqx6q6yhje3vsraqple9pnxuf5vtwz0l68r6uvvs", + "invoice_hex": "0010000000000000000000000000000000001621024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382520203e858210324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1ca076027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000a21c00000001000000020003000000000000000400000000000000050000a40467527988a82072cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793aa0203e8b021024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382f0400a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "preimage": "0101010101010101010101010101010101010101010101010101010101010101", + "invoice_fields": [ + { + "type": 0, + "len": 16, + "hex": "00000000000000000000000000000000", + "included": false + }, + { + "type": 22, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": false + }, + { + "type": 82, + "len": 2, + "hex": "03e8", + "included": false + }, + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c", + "included": true + }, + { + "type": 160, + "len": 118, + "hex": "027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000", + "included": false + }, + { + "type": 162, + "len": 28, + "hex": "00000001000000020003000000000000000400000000000000050000", + "included": false + }, + { + "type": 164, + "len": 4, + "hex": "67527988", + "included": false + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793", + "included": true + }, + { + "type": 170, + "len": 2, + "hex": "03e8", + "included": true + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": true + }, + { + "type": 240, + "len": 64, + "hex": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "included": false + } + ] + }, + "working": { + "invoice_merkle_root": "0501ea6d4ad9fe7fce7edd5e3795987bd409d66c5709c2a17f9c0dfb839e3d8e", + "invoice_sighash": "41ce7b274b0e73e60dd6abf4fa51ccae892b161adc24d4099f620b12c59a03e5", + "invoice_signature": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "proof_merkle_root": "1b0bab09a5fcccec19eb3aaafbbfa4075944fd1f65691ed715fbbc17a59b3651", + "proof_leaf_hashes": [ + "f2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67", + "f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1a", + "dc0b8de03f1a0b0531bff146982d7d613ef6e1ef8d3bdd9590971fc18d835ffb", + "7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb" + ], + "proof_omitted_tlvs": [ + 1, + 2, + 89, + 90, + 91 + ], + "proof_missing_hashes": [ + "bf8cb2b1d6fa9bcdcab501b59f82c65c506b7f43514737f7197f1fcfeaebad41", + "b9406f4ce526a6a0d4e0b3a63ed89a832e31cb9939dfe1a7b5dd7232d32c02ab", + "cd9c44b53b31700c9ed0e3330ce425f7f18fac2fc1d566a34468439274f0e316", + "9f9830f2c3070cfbad13fde30ee36cd7143591164ed12040a9cd595c96840ac9" + ] + }, + "result": { + "payer_sig": "ed03ec58d5ac676539486bb6e8d6f389b6375b6693ffdf30a93919590d744fa393f945a5de3bb57d65c7f61def1cefa8aa038725b15bf0fa797dfd08ca97538a", + "proof_fields": [ + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c" + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" + }, + { + "type": 170, + "len": 2, + "hex": "03e8" + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + }, + { + "type": 240, + "len": 64, + "hex": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319" + }, + { + "type": 241, + "len": 64, + "hex": "ed03ec58d5ac676539486bb6e8d6f389b6375b6693ffdf30a93919590d744fa393f945a5de3bb57d65c7f61def1cefa8aa038725b15bf0fa797dfd08ca97538a" + }, + { + "type": 1001, + "len": 32, + "hex": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "type": 1002, + "len": 5, + "hex": "0102595a5b" + }, + { + "type": 1003, + "len": 128, + "hex": "bf8cb2b1d6fa9bcdcab501b59f82c65c506b7f43514737f7197f1fcfeaebad41b9406f4ce526a6a0d4e0b3a63ed89a832e31cb9939dfe1a7b5dd7232d32c02abcd9c44b53b31700c9ed0e3330ce425f7f18fac2fc1d566a34468439274f0e3169f9830f2c3070cfbad13fde30ee36cd7143591164ed12040a9cd595c96840ac9" + }, + { + "type": 1004, + "len": 128, + "hex": "f2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1adc0b8de03f1a0b0531bff146982d7d613ef6e1ef8d3bdd9590971fc18d835ffb7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb" + } + ], + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0ya2qgp73vppqf9u9gcjv52n7pl8pc96kzrjfe4ctcshlrxk9r8tv2t5y3amfyec9uzqpgejy3tgk64wdmf9yqft6llpqukq867u5layf72mq0cu6zd79zc2s0yuxgg9j7xdsrdqdztevckgp7sqlujsenwy6x9hp8lar3awxx03grks8mzc6kkxwefefp4md6xk7wymvd6mv6fllhes4yu3jkgdw3868ylegkjauwa404ju0asaauwwl292qwrjtv2m7ra8jl0apr9fw5u2l5p7jgqpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpq87s86s9qyp9jkjml5p7hq9l3jetr4h6n0xu4dgpkk0c93ju2p4h7s63gumlwxtlrl8746adgxu5qm6vu5n2dgx5uze6v0kcn2pjuvwtnyualcd8khwhyvkn9sp2hnvugj6nkvtspj0dpcenpnjztal337kzlsw4v635g6zrjf60pcckn7vrpukrqux0htgnlh3sacmv6u2rtygkfmgjqs9fe4v4e95yptyl6qlvsredat6lxzlremvfl37zf4pzsxdlq6hsuj9rzs3mh58zvd8nc00x0uqers6sqqj8249c6zsedzv2099l8h5fnqjhz9udjvd0ldj57rq6ms9cmcplrg9s2vdl79rfsttavyl0dc0035aam9vsju0urrvrtlahay4h0w0rssm9pakd0m55ke6na2wlx5ehzzcymmngdtfhv526tjc" + } + }, + { + "name": "empty_proof_omitted_tlvs_explicit", + "input": { + "invoice": "lni1qqgqqqqqqqqqqqqqqqqqqqqqqqqqq93pqf9u9gcjv52n7pl8pc96kzrjfe4ctcshlrxk9r8tv2t5y3amfyecy5szq059sggry3jnatzrgjyqqtxqdwlm0ug0uxyerc6lnljrqtd75mfr20wq4vw2qasz0uc7h32x9s0aecdhxlk075kn046aafpuuyw8f5j652t3vha2yqrsxtqt0nu4xf9q05znnzeyq96dcrptu3zdj6c4n2nv0aa3ue5xszv3qypwm2aaz66peqm3hyh09uzvzxzmfupmdhx49w5m0rva0jyu3u3pz3gqzqqqqqqqqqqqqqqqqqqqqqqqqqq2y8qqqqqqzqqqqqpqqqcqqqqqqqqqqqzqqqqqqqqqqqq9qqq2gpr82fuc32pqwtxkappzcsrlkmgfs6g0zyct0hkhashh7hsaxz7e65slq9fkx7f65qsrazczzqjtc233yeg48ur7wrst4vy8ynntsh3p07xdv2xwkc5hgfrmkjfnstcyqz3nyfzk3d42umkj2gqjh4l7zpevq04aefl6gnu4kql3e5ymu29s4q7fcvsst9uvmqx6q6yhje3vsraqple9pnxuf5vtwz0l68r6uvvs", + "invoice_hex": "0010000000000000000000000000000000001621024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382520203e858210324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1ca076027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000a21c00000001000000020003000000000000000400000000000000050000a40467527988a82072cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793aa0203e8b021024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382f0400a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "preimage": "0101010101010101010101010101010101010101010101010101010101010101", + "invoice_fields": [ + { + "type": 0, + "len": 16, + "hex": "00000000000000000000000000000000", + "included": false + }, + { + "type": 22, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": true + }, + { + "type": 82, + "len": 2, + "hex": "03e8", + "included": true + }, + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c", + "included": true + }, + { + "type": 160, + "len": 118, + "hex": "027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000", + "included": true + }, + { + "type": 162, + "len": 28, + "hex": "00000001000000020003000000000000000400000000000000050000", + "included": true + }, + { + "type": 164, + "len": 4, + "hex": "67527988", + "included": true + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793", + "included": true + }, + { + "type": 170, + "len": 2, + "hex": "03e8", + "included": true + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382", + "included": true + }, + { + "type": 240, + "len": 64, + "hex": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "included": false + } + ] + }, + "working": { + "invoice_merkle_root": "0501ea6d4ad9fe7fce7edd5e3795987bd409d66c5709c2a17f9c0dfb839e3d8e", + "invoice_sighash": "41ce7b274b0e73e60dd6abf4fa51ccae892b161adc24d4099f620b12c59a03e5", + "invoice_signature": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319", + "proof_merkle_root": "a98cbee700b100ede32c19f9525264d51a105751fb27e790dad011bb38415b89", + "proof_leaf_hashes": [ + "8c9057ed88f3c5a6b6441dcac3b5e4cefb3615904d7362b86e78427fb695f461", + "8dc54a97453dee6f207fa5216a30f1567442712ca98852bc789b73885029283c", + "f2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67", + "f54f80c94a87383f2a8ef7c3e461c62b67a51da5bccf6cd96a7dbab29bea51fa", + "7849b8b856e1d2a63d9ce7dc1a78e05cbb2def1f5d7709c48e8707e0a59fe51e", + "19e7e4eee6bf56c6c589fe50035490c1a7c91b753cb8007c4b52838a6772f997", + "f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1a", + "dc0b8de03f1a0b0531bff146982d7d613ef6e1ef8d3bdd9590971fc18d835ffb", + "7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb" + ], + "proof_omitted_tlvs": [], + "proof_missing_hashes": [ + "0b510ba4c6884d603159ced2f0ca21e772424b59e52a2191bbfbcf07377805a1" + ] + }, + "result": { + "payer_sig": "dffe62d6446c182f2503e780fce09fc5cf310ef14a54f65dd1df124039b7a897f2940470ac0f9857f826b232289c0ac4e6927ca67d805167fb0add352f88add1", + "proof_fields": [ + { + "type": 22, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + }, + { + "type": 82, + "len": 2, + "hex": "03e8" + }, + { + "type": 88, + "len": 33, + "hex": "0324653eac434488002cc06bbfb7f10fe18991e35f9fe4302dbea6d2353dc0ab1c" + }, + { + "type": 160, + "len": 118, + "hex": "027f31ebc5462c1fdce1b737ecff52d37d75dea43ce11c74d25aa297165faa2007032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e6686809910102edabbd16b41c8371b92ef2f04c1185b4f03b6dcd52ba9b78d9d7c89c8f221145001000000000000000000000000000000000" + }, + { + "type": 162, + "len": 28, + "hex": "00000001000000020003000000000000000400000000000000050000" + }, + { + "type": 164, + "len": 4, + "hex": "67527988" + }, + { + "type": 168, + "len": 32, + "hex": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" + }, + { + "type": 170, + "len": 2, + "hex": "03e8" + }, + { + "type": 176, + "len": 33, + "hex": "024bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382" + }, + { + "type": 240, + "len": 64, + "hex": "0a33224568b6aae6ed252012bd7fe1072c03ebdca7fa44f95b03f1cd09be28b0a83c9c32105978cd80da068979662c80fa00ff250ccdc4d18b709ffd1c7ae319" + }, + { + "type": 241, + "len": 64, + "hex": "dffe62d6446c182f2503e780fce09fc5cf310ef14a54f65dd1df124039b7a897f2940470ac0f9857f826b232289c0ac4e6927ca67d805167fb0add352f88add1" + }, + { + "type": 1001, + "len": 32, + "hex": "0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "type": 1002, + "len": 0, + "hex": "" + }, + { + "type": 1003, + "len": 32, + "hex": "0b510ba4c6884d603159ced2f0ca21e772424b59e52a2191bbfbcf07377805a1" + }, + { + "type": 1004, + "len": 288, + "hex": "8c9057ed88f3c5a6b6441dcac3b5e4cefb3615904d7362b86e78427fb695f4618dc54a97453dee6f207fa5216a30f1567442712ca98852bc789b73885029283cf2deaf5f30be3ced89fc7c24d422819bf06af0e48a31423bbd0e2634f3c3de67f54f80c94a87383f2a8ef7c3e461c62b67a51da5bccf6cd96a7dbab29bea51fa7849b8b856e1d2a63d9ce7dc1a78e05cbb2def1f5d7709c48e8707e0a59fe51e19e7e4eee6bf56c6c589fe50035490c1a7c91b753cb8007c4b52838a6772f997f0191c35000247554b8d0a196898a794bf3de89982571178d931affb654f0c1adc0b8de03f1a0b0531bff146982d7d613ef6e1ef8d3bdd9590971fc18d835ffb7e92b77b9e3843650f6cd7ee94b6753ea9df3533710b04dee686ad376515a5cb" + } + ], + "bech32": "lnp1zcssyj7z5vfx29flqlnsuzatppeyu6u9ugtl3ntz3n4k996zg7a5jvuz2gpq86zcyypjgef743p5fzqq9nqxh0ah7y87rzv3ud0eleps9kl2d5348hq2k89qwcp87v0tc4rzc87uuxmn0m8l2tfh6aw75s7wz8r56fd299ckt74zqpcr9s9he72nyjs86pfe3vjqzaxups47g3xedv2e4fk877c7v6rgpxgszqhd4w73ddqusdcmjthj7pxprpd57qakmn2jh2dh3kwhezwg7gs3g5qpqqqqqqqqqqqqqqqqqqqqqqqqqq9zrsqqqqqpqqqqqqsqqvqqqqqqqqqqqpqqqqqqqqqqqqzsqq9yq3n4y7vg4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0ya2qgp73vppqf9u9gcjv52n7pl8pc96kzrjfe4ctcshlrxk9r8tv2t5y3amfyec9uzqpgejy3tgk64wdmf9yqft6llpqukq867u5layf72mq0cu6zd79zc2s0yuxgg9j7xdsrdqdztevckgp7sqlujsenwy6x9hp8lar3awxx03gr0luckkg3kpste9q0ncpl8qnlzu7vgw7999faja6803yspek75f0u55q3c2cruc2luzdv3j9zwq438xjf72vlvq29nlkzkax5hc3tw3l5p7jgqpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpq87s86sql5p7kgqt2y96f35gf4srzkww6tcv5g08wfpykk099gserwlmeurnw7q9587s8m8aqysgeyzhaky083dxkezpmjkrkhjva7ekzkgy6umzhph8ssnlk62lgcvdc49fw3faaehjqla9y94rpu2kw3p8zt9f3pftc7ymwwy9q2fg8nedat6lxzlremvfl37zf4pzsxdlq6hsuj9rzs3mh58zvd8nc00x0a20sry54pec8u4gaa7ru3suv2m855w6t0x0dnvk5ld6k2d755060pym3wzku8f2v0vuulwp578qtjajmmclt4msn3ywsur7pfvlu50pnelyamnt74kxckylu5qr2jgvrf7frd6newqq03949qu2vae0n9lsrywr2qqzga25hrg2r95f3fu5hu773xvz2ugh3kf34lak2ncvrtwqhr0q8udqkpf3hlc5dxpd04snaahpa7xnhhv4jzt3lsvdsd0lkl5jkaaeuwzrv58ke4lwjjm8204fmu6nxugtqn0wdp4dxaj3tfwt" + } + } + ], + "invalid_vectors": [ + { + "reason": "missing_invreq_payer_id", + "bech32": "lnp14qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + }, + { + "reason": "missing_invoice_payment_hash", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cukqssyj7z5vfx29flqlnsuzatppeyu6u9ugtl3ntz3n4k996zg7a5jvuz7pqq5vezg45td2hxa5jjqy4a0lsswtqra0w207jyl9ds8uwdpxlz3v9g8jwryyze0rxcpksx39ukvtyqlgq07fgvehzdrzmsnl73c7hrr8c5pn4uyh2q5tvj0d0te2uyqr6597ah4r6x96xasq4mz0s9pwdl9yahg47pndr2gan5p7tun4hvzs0jxs6vt486y5ap6t4c39ht4kv52hx06qlfyqqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqsrlgragrqzqjetfd6nlgrawstlr9jk8t04x7de26srdvlstr9c5rt0ap4z3eh7uvh7870at466sdegph5eefx56sdfc9n5cld3x5r9ccuhxfemls60dwawgedxtqz40xec3948vchqry76r3nxr8yyhmlrrav9lqa2e4rg35y8yn57r33d8ucxrevxpcvlwk38l0rpm3ke4c5xkg3vnk3ypq2nn2etjtggzkfnx9t075uwslmnk7mpkx5d7lr45engq9aqlej3hxmvqy8jz7f6tdl6qlvvredat6lxzlremvfl37zf4pzsxdlq6hsuj9rzs3mh58zvd8nc00x0uqers6sqqj8249c6zsedzv2099l8h5fnqjhz9udjvd0ldj57rq606ftw7u78ppk2rmv6lhffdn4865a7dfnwy9sfhhxs6knweg45h9s" + }, + { + "reason": "missing_invoice_node_id", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0ylsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + }, + { + "reason": "missing_signature", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qh3gr8tcfw5pgkey767hj4cgq84gtam0285vt5dmqptkylq2zum72fmw3turx6x53m8gruhe8twc9qlydp5ch205ff6r5ht3ztwhtveg4wvl5p7jgqpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpq87s86sxqyp9jkjm487s86aqh7xt9vwkl2dumj44qx6elqkxt3gxkl6r29rn0ace0u0ul6ht44qmjsr0fnjjdf4q6nst8f37mzdgxt33ewvnnhlp576a6u3j6vkq927dn3zt2we3wqxfa58rxvxwgf0h7x86ct7p64n2x3rggwf8fu8rz60esv8jcvrse7adz077xrhrdnt3gdv3ze8dzgzq48x4jhykss9vnxv2klafcaplh8dakrvdgma78tfnxsqt6pln9rwdkcqg0y9un5kml5p7cc8jm6h47v978nkcnlruyn2z9qvm7p40pey2x9prh0gwyc608s77vlcpj8p4qqpyw42t359pj6yc572t700gnxp9wytcmyc6l7m9fuxp5l5jkaaeuwzrv58ke4lwjjm8204fmu6nxugtqn0wdp4dxaj3tfwt" + }, + { + "reason": "missing_proof_preimage", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86sxqyp9jkjm487s86aqh7xt9vwkl2dumj44qx6elqkxt3gxkl6r29rn0ace0u0ul6ht44qmjsr0fnjjdf4q6nst8f37mzdgxt33ewvnnhlp576a6u3j6vkq927dn3zt2we3wqxfa58rxvxwgf0h7x86ct7p64n2x3rggwf8fu8rz60esv8jcvrse7adz077xrhrdnt3gdv3ze8dzgzq48x4jhykss9vnxv2klafcaplh8dakrvdgma78tfnxsqt6pln9rwdkcqg0y9un5kml5p7cc8jm6h47v978nkcnlruyn2z9qvm7p40pey2x9prh0gwyc608s77vlcpj8p4qqpyw42t359pj6yc572t700gnxp9wytcmyc6l7m9fuxp5l5jkaaeuwzrv58ke4lwjjm8204fmu6nxugtqn0wdp4dxaj3tfwt" + }, + { + "reason": "missing_proof_missing_hashes", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlvvredat6lxzlremvfl37zf4pzsxdlq6hsuj9rzs3mh58zvd8nc00x0uqers6sqqj8249c6zsedzv2099l8h5fnqjhz9udjvd0ldj57rq606ftw7u78ppk2rmv6lhffdn4865a7dfnwy9sfhhxs6knweg45h9s" + }, + { + "reason": "missing_proof_leaf_hashes", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjmv" + }, + { + "reason": "missing_proof_signature", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84ccel5p7jgqpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpq87s86sxqyp9jkjm487s86aqh7xt9vwkl2dumj44qx6elqkxt3gxkl6r29rn0ace0u0ul6ht44qmjsr0fnjjdf4q6nst8f37mzdgxt33ewvnnhlp576a6u3j6vkq927dn3zt2we3wqxfa58rxvxwgf0h7x86ct7p64n2x3rggwf8fu8rz60esv8jcvrse7adz077xrhrdnt3gdv3ze8dzgzq48x4jhykss9vnxv2klafcaplh8dakrvdgma78tfnxsqt6pln9rwdkcqg0y9un5kml5p7cc8jm6h47v978nkcnlruyn2z9qvm7p40pey2x9prh0gwyc608s77vlcpj8p4qqpyw42t359pj6yc572t700gnxp9wytcmyc6l7m9fuxp5l5jkaaeuwzrv58ke4lwjjm8204fmu6nxugtqn0wdp4dxaj3tfwt" + }, + { + "reason": "wrong_proof_preimage", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq06ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + }, + { + "reason": "proof_omitted_tlvs_not_ascending", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk2649dl6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + }, + { + "reason": "proof_omitted_tlvs_contains_zero", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2quqqzqjetfd6nlgrawstlr9jk8t04x7de26srdvlstr9c5rt0ap4z3eh7uvh7870at466sdegph5eefx56sdfc9n5cld3x5r9ccuhxfemls60dwawgedxtqz40xec3948vchqry76r3nxr8yyhmlrrav9lqa2e4rg35y8yn57r33d8ucxrevxpcvlwk38l0rpm3ke4c5xkg3vnk3ypq2nn2etjtggzkfnx9t075uwslmnk7mpkx5d7lr45engq9aqlej3hxmvqy8jz7f6tdl6qlvvredat6lxzlremvfl37zf4pzsxdlq6hsuj9rzs3mh58zvd8nc00x0uqers6sqqj8249c6zsedzv2099l8h5fnqjhz9udjvd0ldj57rq606ftw7u78ppk2rmv6lhffdn4865a7dfnwy9sfhhxs6knweg45h9s" + }, + { + "reason": "proof_omitted_tlvs_contains_signature_field", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2quqsyk26tw5lrlgrawstlr9jk8t04x7de26srdvlstr9c5rt0ap4z3eh7uvh7870at466sdegph5eefx56sdfc9n5cld3x5r9ccuhxfemls60dwawgedxtqz40xec3948vchqry76r3nxr8yyhmlrrav9lqa2e4rg35y8yn57r33d8ucxrevxpcvlwk38l0rpm3ke4c5xkg3vnk3ypq2nn2etjtggzkfnx9t075uwslmnk7mpkx5d7lr45engq9aqlej3hxmvqy8jz7f6tdl6qlvvredat6lxzlremvfl37zf4pzsxdlq6hsuj9rzs3mh58zvd8nc00x0uqers6sqqj8249c6zsedzv2099l8h5fnqjhz9udjvd0ldj57rq606ftw7u78ppk2rmv6lhffdn4865a7dfnwy9sfhhxs6knweg45h9s" + }, + { + "reason": "proof_omitted_tlvs_contains_proof_field", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2pyqsyk26tw5l6qlfl5p7hg9l3jetr4h6n0xu4dgpkk0c93ju2p4h7s63gumlwxtlrl8746adgxu5qm6vu5n2dgx5uze6v0kcn2pjuvwtnyualcd8khwhyvkn9sp2hnvugj6nkvtspj0dpcenpnjztal337kzlsw4v635g6zrjf60pcckn7vrpukrqux0htgnlh3sacmv6u2rtygkfmgjqs9fe4v4e95yptyenz4hl2w8g0aem0dsmr2xl0366ve5qz7s0uegmndkqzrep0ya9klaq0kxpuk74a0np03uakylclpy6s3grxlsdtcwfz33ggam6r3xxneu8hn87qv3cdgqqfr42judpgvk3x98jjlnm6yesft3z7xexxhlke20psd8ay4h0w0rssm9pakd0m55ke6na2wlx5ehzzcymmngdtfhv526tjc" + }, + { + "reason": "proof_omitted_tlvs_contains_high_field", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2pvqsyk26tw5lamnt9qq06qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + }, + { + "reason": "proof_omitted_tlvs_contains_included_tlv_field", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2quqsykzetfd6nlgrawstlr9jk8t04x7de26srdvlstr9c5rt0ap4z3eh7uvh7870at466sdegph5eefx56sdfc9n5cld3x5r9ccuhxfemls60dwawgedxtqz40xec3948vchqry76r3nxr8yyhmlrrav9lqa2e4rg35y8yn57r33d8ucxrevxpcvlwk38l0rpm3ke4c5xkg3vnk3ypq2nn2etjtggzkfnx9t075uwslmnk7mpkx5d7lr45engq9aqlej3hxmvqy8jz7f6tdl6qlvvredat6lxzlremvfl37zf4pzsxdlq6hsuj9rzs3mh58zvd8nc00x0uqers6sqqj8249c6zsedzv2099l8h5fnqjhz9udjvd0ldj57rq606ftw7u78ppk2rmv6lhffdn4865a7dfnwy9sfhhxs6knweg45h9s" + }, + { + "reason": "proof_omitted_tlvs_not_sequential", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyktyv4n06qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + }, + { + "reason": "proof_leaf_hashes_too_few", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mzq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxs" + }, + { + "reason": "proof_leaf_hashes_too_many", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8myq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9evqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq" + }, + { + "reason": "proof_missing_hashes_too_few", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qltszlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4j0aq0kxpuk74a0np03uakylclpy6s3grxlsdtcwfz33ggam6r3xxneu8hn87qv3cdgqqfr42judpgvk3x98jjlnm6yesft3z7xexxhlke20psd8ay4h0w0rssm9pakd0m55ke6na2wlx5ehzzcymmngdtfhv526tjc" + }, + { + "reason": "proof_missing_hashes_too_many", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qltczlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjmvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqplgra3s09h40tuctu08d3878cfx5y2qehur27rjg5v2z8w7suf3570pauelsrywr2qqzga25hrg2r95f3fu5hu773xvz2ugh3kf34lak2ncvrflf9dmmncuyxeg0dnt7a99kw5l2nhe4xdcskpx7u6r26dm9zkjuk" + }, + { + "reason": "wrong_invoice_signature", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9nxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qva0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + }, + { + "reason": "wrong_proof_signature", + "bech32": "lnp1tqssxfr986kyx3ygqqkvq6alklcslcvfj834l8lyxqkmafkjx57up2cu4qs89ntwss3vgplmd5ycdy83zv9hmmt7ctmltcwnp0va2g0sz5mr0yasyypyhs4rzfj320c8uu8qh2cgwf8xhp0zzluv6c5vad3fwsj8hdyn8qhsgq9rxgj9dzm24ehdy5sp90tluyrjcqltmjnl538etvplrngfhc5tp2punsepqktcekqd5p5f09nzeq86qrlj2rxdcngckuyll5w84cce79qvl0p96s9zmynmt672hpqq74p0hdag733w3hvq9wcnupgtn0ef8d690svmg6j8vaq0jlyadmq5ru35xnzaf7398gwjawyfd6adn9z4en7s86fqqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyql6ql2qcqsyk26tw5l6qlt5zlcev436mafhnw2k5qmt8uzcew9q6mlgdg5wdlhr9l3lnl2awk5rw2qdaxw2f4x5r2wpvax8mvf4qewx89ejwwluxnmthtjxtfjcq4tekwyfdfmx9cqe8ksuveseep97lccltp0c82kdg6ydppeya8suvtflxps7tpswr8m45flmccwudkdw9p4jytya5fqgz5u6k2uj6zq4jve32ml48r587uahkcd34r0hcadxv6qp0g87v5dekmqppushjwjm07s8mrq7t027heshc7wmz0u0sjdgg5pn0cx4u8y3gc5ywaapcnrfu7rmenlqxgux5qqy364fwxs5xtgnznef0eaazvcy4c30rvnrtlmv48scxn7j2mhh83cgdjs7mxha62tvaf7480n2vm3pvzdae5x45mk29d9ev" + }, + { + "reason": "contains_invreq_metadata", + "bech32": "lnp1qqq5ykppqvjx204vgdzgsqpvcp4mldl3plscny0rt707gvpdh6ndydfacz43e2pqwtxkappzcsrlkmgfs6g0zyct0hkhashh7hsaxz7e65slq9fkx7fmqggzf0p2xyn9z5ls0ecwpw4ssujwdwz7y9lce43ge6mzjapy0w6fxwp0qsq2xv3y269k4tnw6ffqz27hlcg89sp7hh98lfz0jkcr78xsn03gkz5re8pjzpvh3nvqmgrgj7tx9jq05q8ly5xvm3x33dcfllgu0t33nu2qe67zt4q29kf8kh4u4wzqpa2zlwm63arzarwcq2a38czshxljjwm52lqek34ywe6ql97f6mkpg8ergdx96naz2wsa96ugjm46mx29tn8aq05jqqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpl5p75pspqfv45kafl5p7hg9l3jetr4h6n0xu4dgpkk0c93ju2p4h7s63gumlwxtlrl8746adgxu5qm6vu5n2dgx5uze6v0kcn2pjuvwtnyualcd8khwhyvkn9sp2hnvugj6nkvtspj0dpcenpnjztal337kzlsw4v635g6zrjf60pcckn7vrpukrqux0htgnlh3sacmv6u2rtygkfmgjqs9fe4v4e95yptyenz4hl2w8g0aem0dsmr2xl0366ve5qz7s0uegmndkqzrep0ya9klaq0kxpuk74a0np03uakylclpy6s3grxlsdtcwfz33ggam6r3xxneu8hn87qv3cdgqqfr42judpgvk3x98jjlnm6yesft3z7xexxhlke20psd8ay4h0w0rssm9pakd0m55ke6na2wlx5ehzzcymmngdtfhv526tjc" + } + ] +}