@@ -1904,6 +1904,102 @@ async fn do_lsps2_client_service_integration(client_trusts_lsp: bool) {
19041904 assert_eq ! ( client_node. payment( & payment_id) . unwrap( ) . status, PaymentStatus :: Failed ) ;
19051905}
19061906
1907+ #[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
1908+ async fn lsps2_bolt12_payment_succeeds_after_lsp_restart ( ) {
1909+ let ( bitcoind, electrsd) = setup_bitcoind_and_electrsd ( ) ;
1910+
1911+ let esplora_url = format ! ( "http://{}" , electrsd. esplora_url. as_ref( ) . unwrap( ) ) ;
1912+
1913+ let mut sync_config = EsploraSyncConfig :: default ( ) ;
1914+ sync_config. background_sync_config = None ;
1915+
1916+ let lsps2_service_config = LSPS2ServiceConfig {
1917+ require_token : None ,
1918+ advertise_service : false ,
1919+ channel_opening_fee_ppm : 10_000 ,
1920+ channel_over_provisioning_ppm : 100_000 ,
1921+ max_payment_size_msat : 1_000_000_000 ,
1922+ min_payment_size_msat : 0 ,
1923+ min_channel_lifetime : 100 ,
1924+ min_channel_opening_fee_msat : 0 ,
1925+ max_client_to_self_delay : 1024 ,
1926+ client_trusts_lsp : true ,
1927+ } ;
1928+
1929+ let service_config = random_config ( true ) ;
1930+ setup_builder ! ( service_builder, service_config. node_config) ;
1931+ service_builder. set_chain_source_esplora ( esplora_url. clone ( ) , Some ( sync_config) ) ;
1932+ service_builder. set_liquidity_provider_lsps2 ( lsps2_service_config) ;
1933+ let service_node = service_builder. build ( service_config. node_entropy . into ( ) ) . unwrap ( ) ;
1934+ service_node. start ( ) . unwrap ( ) ;
1935+ let service_node_id = service_node. node_id ( ) ;
1936+ let service_addr = service_node. listening_addresses ( ) . unwrap ( ) . first ( ) . unwrap ( ) . clone ( ) ;
1937+
1938+ let client_config = random_config ( true ) ;
1939+ setup_builder ! ( client_builder, client_config. node_config) ;
1940+ client_builder. set_chain_source_esplora ( esplora_url. clone ( ) , Some ( sync_config) ) ;
1941+ client_builder. set_liquidity_source_lsps2 ( service_node_id, service_addr. clone ( ) , None ) ;
1942+ let client_node = client_builder. build ( client_config. node_entropy . into ( ) ) . unwrap ( ) ;
1943+ client_node. start ( ) . unwrap ( ) ;
1944+
1945+ let payer_config = random_config ( true ) ;
1946+ setup_builder ! ( payer_builder, payer_config. node_config) ;
1947+ payer_builder. set_chain_source_esplora ( esplora_url, Some ( sync_config) ) ;
1948+ let payer_node = payer_builder. build ( payer_config. node_entropy . into ( ) ) . unwrap ( ) ;
1949+ payer_node. start ( ) . unwrap ( ) ;
1950+
1951+ let service_onchain_addr = service_node. onchain_payment ( ) . new_address ( ) . unwrap ( ) ;
1952+ let client_onchain_addr = client_node. onchain_payment ( ) . new_address ( ) . unwrap ( ) ;
1953+ let payer_onchain_addr = payer_node. onchain_payment ( ) . new_address ( ) . unwrap ( ) ;
1954+
1955+ premine_and_distribute_funds (
1956+ & bitcoind. client ,
1957+ & electrsd. client ,
1958+ vec ! [ service_onchain_addr, client_onchain_addr, payer_onchain_addr] ,
1959+ Amount :: from_sat ( 10_000_000 ) ,
1960+ )
1961+ . await ;
1962+ service_node. sync_wallets ( ) . unwrap ( ) ;
1963+ client_node. sync_wallets ( ) . unwrap ( ) ;
1964+ payer_node. sync_wallets ( ) . unwrap ( ) ;
1965+
1966+ open_channel ( & payer_node, & service_node, 5_000_000 , false , & electrsd) . await ;
1967+ generate_blocks_and_wait ( & bitcoind. client , & electrsd. client , 6 ) . await ;
1968+ service_node. sync_wallets ( ) . unwrap ( ) ;
1969+ payer_node. sync_wallets ( ) . unwrap ( ) ;
1970+ expect_channel_ready_event ! ( payer_node, service_node. node_id( ) ) ;
1971+ expect_channel_ready_event ! ( service_node, payer_node. node_id( ) ) ;
1972+
1973+ let jit_amount_msat = 100_000_000 ;
1974+ let offer = client_node
1975+ . bolt12_payment ( )
1976+ . receive_via_jit_channel ( jit_amount_msat, "lsps2-bolt12-after-restart" , None , Some ( 1 ) , None )
1977+ . unwrap ( ) ;
1978+
1979+ service_node. stop ( ) . unwrap ( ) ;
1980+ service_node. start ( ) . unwrap ( ) ;
1981+
1982+ // Ensure peers are connected after the restart before paying the offer.
1983+ let _ = payer_node. connect ( service_node_id, service_addr. clone ( ) , false ) ;
1984+ let _ = client_node. connect ( service_node_id, service_addr, false ) ;
1985+
1986+ let payment_id = payer_node
1987+ . bolt12_payment ( )
1988+ . send ( & offer, Some ( 1 ) , Some ( "restart" . to_string ( ) ) , None )
1989+ . unwrap ( ) ;
1990+
1991+ expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
1992+ expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1993+ expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
1994+ expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
1995+
1996+ let service_fee_msat = ( jit_amount_msat * 10_000 ) / 1_000_000 ;
1997+ let expected_received_amount_msat = jit_amount_msat - service_fee_msat;
1998+
1999+ expect_payment_successful_event ! ( payer_node, Some ( payment_id) , None ) ;
2000+ expect_payment_received_event ! ( client_node, expected_received_amount_msat) ;
2001+ }
2002+
19072003#[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
19082004async fn facade_logging ( ) {
19092005 let ( bitcoind, electrsd) = setup_bitcoind_and_electrsd ( ) ;
0 commit comments