@@ -5327,24 +5327,37 @@ def test_pay_manual_exclude(node_factory, bitcoind):
53275327
53285328
53295329@unittest .skipIf (TEST_NETWORK != 'regtest' , "Invoice is network specific" )
5330- def test_pay_bolt11_metadata (node_factory , bitcoind ):
5331- l1 , l2 = node_factory .line_graph (2 , opts = {'old_hsmsecret' : True })
5332-
5333- # BOLT #11:
5334- # > ### Please send 0.01 BTC with payment metadata 0x01fafaf0
5335- # > lnbc10m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdp9wpshjmt9de6zqmt9w3skgct5vysxjmnnd9jx2mq8q8a04uqsp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zygs9q2gqqqqqqsgq7hf8he7ecf7n4ffphs6awl9t6676rrclv9ckg3d3ncn7fct63p6s365duk5wrk202cfy3aj5xnnp5gs3vrdvruverwwq7yzhkf5a3xqpd05wjc
5336-
5337- b11 = l1 .rpc .decode ('lnbc10m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdp9wpshjmt9de6zqmt9w3skgct5vysxjmnnd9jx2mq8q8a04uqsp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zygs9q2gqqqqqqsgq7hf8he7ecf7n4ffphs6awl9t6676rrclv9ckg3d3ncn7fct63p6s365duk5wrk202cfy3aj5xnnp5gs3vrdvruverwwq7yzhkf5a3xqpd05wjc' )
5338- assert b11 ['payment_metadata' ] == '01fafaf0'
5330+ def test_pay_bolt11_metadata (node_factory , chainparams ):
5331+ l1 , l2 = node_factory .line_graph (2 )
53395332
5340- # I previously hacked lightningd to add "this is metadata" to metadata.
5341- # After CI started failing, I *also* hacked it to set expiry to BIGNUM.
5342- inv = "lnbcrt1230n1p3yzgcxsp5q8g040f9rl9mu2unkjuj0vn262s6nyrhz5hythk3ueu2lfzahmzspp5ve584t0cv27hwmy0cx9ca8uwyqyfw9y9dm3r8vus9fv36r2l9yjsdq8v3jhxccmq6w35xjueqd9ejqmt9w3skgct5vyxqxra2q2qcqp99q2sqqqqqysgqfw6efxpzk5x5vfj8se46yg667x5cvhyttnmuqyk0q7rmhx3gs249qhtdggnek8c5adm2pztkjddlwyn2art2zg9xap2ckczzl3fzz4qqsej6mf"
5343- # Make l2 "know" about this invoice.
5344- l2 .rpc .invoice (amount_msat = 123000 , label = 'label1' , description = 'desc' , preimage = '00' * 32 )
5333+ # Generate a normal invoice on l2, then use bolt11-cli to re-encode it with
5334+ # payment metadata added. old_hsmsecret gives l2 a known private key.
5335+ inv = l2 .rpc .invoice (amount_msat = 123000 , label = 'label1' , description = 'desc' , preimage = '00' * 32 )
5336+ inv_decoded = l1 .rpc .decode (inv ['bolt11' ])
5337+ inv_with_metadata = subprocess .check_output (['devtools/bolt11-cli' , 'encode' ,
5338+ # l2's private key (old_hsmsecret, WIF byte stripped)
5339+ '0c633a7c17c701a0980158f5483035e01fa8bd091b47fadf2e86e589a9f93fca' ,
5340+ f"currency={ chainparams ['bip173_prefix' ]} " ,
5341+ f"p={ inv ['payment_hash' ]} " ,
5342+ f"s={ inv ['payment_secret' ]} " ,
5343+ "d=desc" ,
5344+ "amount=123000msat" ,
5345+ f"x={ inv_decoded ['expiry' ]} " ,
5346+ f"c={ inv_decoded ['min_final_cltv_expiry' ]} " ,
5347+ f"9={ inv_decoded ['features' ]} " ,
5348+ "m=" + b'this is metadata' .hex ()]).decode ('utf-8' ).strip ()
5349+
5350+ # They should be basically identical
5351+ post_decoded = l1 .rpc .decode (inv_with_metadata )
5352+ del inv_decoded ['signature' ]
5353+ del post_decoded ['signature' ]
5354+ del post_decoded ['payment_metadata' ]
5355+ del inv_decoded ['created_at' ]
5356+ del post_decoded ['created_at' ]
5357+ assert inv_decoded == post_decoded
53455358
53465359 with pytest .raises (RpcError , match = r'Unexpected error \(invalid_onion_payload\) from final node' ):
5347- l1 .rpc .xpay (inv )
5360+ l1 .rpc .xpay (inv_with_metadata )
53485361
53495362 l2 .daemon .wait_for_log ("Unexpected payment_metadata {}" .format (b'this is metadata' .hex ()))
53505363
0 commit comments