@@ -1018,3 +1018,37 @@ def test_xpay_bip353(node_factory):
10181018
10191019 node_factory .join_nodes ([l2 , l1 ])
10201020 l2 .rpc .xpay ('fake@fake.com' , 100 )
1021+
1022+
1023+ def test_blockheight_mismatch (node_factory , bitcoind ):
1024+ """Test that we can send a payment even if not caught up with the chain.
1025+
1026+ Since CLTV computations are based on headers and not our own sync height, the
1027+ recipient should still be happy with the parameters we chose.
1028+
1029+ Stolen from pay
1030+ """
1031+
1032+ send , direct , recv = node_factory .line_graph (3 , wait_for_announce = True )
1033+ sync_blockheight (bitcoind , [send , recv ])
1034+
1035+ # Pin `send` at the current height. by not returning the next
1036+ # block. This error is special-cased not to count as the
1037+ # backend failing since it is used to poll for the next block.
1038+ def mock_getblock (req ):
1039+ return {
1040+ "id" : req ["id" ],
1041+ "error" : {"code" : - 8 , "message" : "Block height out of range" },
1042+ }
1043+
1044+ send .daemon .rpcproxy .mock_rpc ("getblock" , mock_getblock )
1045+ bitcoind .generate_block (100 )
1046+
1047+ sync_blockheight (bitcoind , [recv ])
1048+
1049+ inv = recv .rpc .invoice (42 , "lbl" , "desc" )["bolt11" ]
1050+ send .rpc .xpay (inv )
1051+
1052+ # Test a direct payment as well.
1053+ inv = direct .rpc .invoice (13 , "lbl" , "desc" )["bolt11" ]
1054+ send .rpc .xpay (inv )
0 commit comments