88mod common;
99
1010use common:: {
11- do_channel_full_cycle, expect_channel_pending_event, expect_channel_ready_event, expect_event,
12- expect_payment_received_event, expect_payment_successful_event, generate_blocks_and_wait,
13- logging:: { init_log_logger, validate_log_entry, TestLogWriter } ,
14- open_channel, premine_and_distribute_funds, random_config, random_listening_addresses,
15- setup_bitcoind_and_electrsd, setup_builder, setup_node, setup_two_nodes, wait_for_tx,
16- TestChainSource , TestSyncStore ,
11+ bump_fee_and_broadcast, distribute_funds_unconfirmed, do_channel_full_cycle,
12+ expect_channel_pending_event, expect_channel_ready_event, expect_event,
13+ expect_payment_claimable_event, expect_payment_received_event, expect_payment_successful_event,
14+ expect_splice_pending_event, generate_blocks_and_wait,
15+ logging:: { init_log_logger, validate_log_entry, MultiNodeLogger , TestLogWriter } ,
16+ open_channel, open_channel_push_amt, premine_and_distribute_funds, premine_blocks, prepare_rbf,
17+ random_config, random_listening_addresses, setup_bitcoind_and_electrsd, setup_builder,
18+ setup_node, setup_node_for_async_payments, setup_two_nodes, wait_for_tx, TestChainSource ,
19+ TestSyncStore ,
1720} ;
1821
19- use ldk_node:: config:: EsploraSyncConfig ;
22+ use ldk_node:: config:: { AsyncPaymentsRole , EsploraSyncConfig } ;
2023use ldk_node:: liquidity:: { LSPS2ServiceConfig , LSPS4ServiceConfig } ;
2124use ldk_node:: payment:: {
22- ConfirmationStatus , PaymentDirection , PaymentKind , PaymentStatus , QrPaymentResult ,
23- SendingParameters ,
25+ ConfirmationStatus , PaymentDetails , PaymentDirection , PaymentKind , PaymentStatus ,
26+ QrPaymentResult ,
2427} ;
25- use ldk_node:: { Builder , Event , NodeError } ;
28+ use ldk_node:: { Builder , DynStore , Event , NodeError } ;
2629
2730use lightning:: ln:: channelmanager:: PaymentId ;
2831use lightning:: routing:: gossip:: { NodeAlias , NodeId } ;
29- use lightning:: util :: persist :: KVStore ;
32+ use lightning:: routing :: router :: RouteParametersConfig ;
3033
3134use lightning_invoice:: { Bolt11InvoiceDescription , Description } ;
35+ use lightning_types:: payment:: { PaymentHash , PaymentPreimage } ;
3236
3337use bitcoin:: address:: NetworkUnchecked ;
38+ use bitcoin:: hashes:: sha256:: Hash as Sha256Hash ;
3439use bitcoin:: hashes:: Hash ;
35- use bitcoin:: Address ;
36- use bitcoin :: Amount ;
40+ use bitcoin:: { Address , Amount , ScriptBuf } ;
41+
3742use log:: LevelFilter ;
3843
44+ use std:: collections:: HashSet ;
3945use std:: str:: FromStr ;
4046use std:: sync:: Arc ;
4147
42- use bitcoin:: address:: NetworkUnchecked ;
43- use bitcoin:: hashes:: sha256:: Hash as Sha256Hash ;
44- use bitcoin:: hashes:: Hash ;
45- use bitcoin:: { Address , Amount , ScriptBuf } ;
46- use common:: logging:: { init_log_logger, validate_log_entry, MultiNodeLogger , TestLogWriter } ;
47- use common:: {
48- bump_fee_and_broadcast, distribute_funds_unconfirmed, do_channel_full_cycle,
49- expect_channel_pending_event, expect_channel_ready_event, expect_event,
50- expect_payment_claimable_event, expect_payment_received_event, expect_payment_successful_event,
51- expect_splice_pending_event, generate_blocks_and_wait, open_channel, open_channel_push_amt,
52- premine_and_distribute_funds, premine_blocks, prepare_rbf, random_config,
53- random_listening_addresses, setup_bitcoind_and_electrsd, setup_builder, setup_node,
54- setup_node_for_async_payments, setup_two_nodes, wait_for_tx, TestChainSource , TestSyncStore ,
55- } ;
56- use ldk_node:: config:: { AsyncPaymentsRole , EsploraSyncConfig } ;
57- use ldk_node:: liquidity:: LSPS2ServiceConfig ;
58- use ldk_node:: payment:: {
59- ConfirmationStatus , PaymentDetails , PaymentDirection , PaymentKind , PaymentStatus ,
60- QrPaymentResult ,
61- } ;
62- use ldk_node:: { Builder , DynStore , Event , NodeError } ;
63- use lightning:: ln:: channelmanager:: PaymentId ;
64- use lightning:: routing:: gossip:: { NodeAlias , NodeId } ;
65- use lightning:: routing:: router:: RouteParametersConfig ;
66- use lightning_invoice:: { Bolt11InvoiceDescription , Description } ;
67- use lightning_types:: payment:: { PaymentHash , PaymentPreimage } ;
68- use log:: LevelFilter ;
69-
7048#[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
7149async fn channel_full_cycle ( ) {
7250 let ( bitcoind, electrsd) = setup_bitcoind_and_electrsd ( ) ;
@@ -1934,8 +1912,8 @@ async fn do_lsps2_client_service_integration(client_trusts_lsp: bool) {
19341912 assert_eq ! ( client_node. payment( & payment_id) . unwrap( ) . status, PaymentStatus :: Failed ) ;
19351913}
19361914
1937- #[ test]
1938- fn lsps4_client_service_integration ( ) {
1915+ #[ tokio :: test( flavor = "multi_thread" , worker_threads = 1 ) ]
1916+ async fn lsps4_client_service_integration ( ) {
19391917 let ( bitcoind, electrsd) = setup_bitcoind_and_electrsd ( ) ;
19401918
19411919 let esplora_url = format ! ( "http://{}" , electrsd. esplora_url. as_ref( ) . unwrap( ) ) ;
@@ -1987,15 +1965,16 @@ fn lsps4_client_service_integration() {
19871965 & electrsd. client ,
19881966 vec ! [ service_onchain_addr, client_onchain_addr, payer_onchain_addr] ,
19891967 Amount :: from_sat ( premine_amount_sat) ,
1990- ) ;
1968+ )
1969+ . await ;
19911970 service_node. sync_wallets ( ) . unwrap ( ) ;
19921971 client_node. sync_wallets ( ) . unwrap ( ) ;
19931972 payer_node. sync_wallets ( ) . unwrap ( ) ;
19941973
19951974 // Open a channel payer -> service so the payer can reach the client through the LSP.
1996- open_channel ( & payer_node, & service_node, 5_000_000 , false , & electrsd) ;
1975+ open_channel ( & payer_node, & service_node, 5_000_000 , false , & electrsd) . await ;
19971976
1998- generate_blocks_and_wait ( & bitcoind. client , & electrsd. client , 6 ) ;
1977+ generate_blocks_and_wait ( & bitcoind. client , & electrsd. client , 6 ) . await ;
19991978 service_node. sync_wallets ( ) . unwrap ( ) ;
20001979 payer_node. sync_wallets ( ) . unwrap ( ) ;
20011980 expect_channel_ready_event ! ( payer_node, service_node. node_id( ) ) ;
@@ -2088,8 +2067,8 @@ fn lsps4_client_service_integration() {
20882067 assert_eq ! ( client_channels[ 0 ] . channel_value_sats, expected_channel_size_sat) ;
20892068}
20902069
2091- #[ test]
2092- fn lsps4_channel_size_tiers_are_applied ( ) {
2070+ #[ tokio :: test( flavor = "multi_thread" , worker_threads = 1 ) ]
2071+ async fn lsps4_channel_size_tiers_are_applied ( ) {
20932072 let ( bitcoind, electrsd) = setup_bitcoind_and_electrsd ( ) ;
20942073 let esplora_url = format ! ( "http://{}" , electrsd. esplora_url. as_ref( ) . unwrap( ) ) ;
20952074 let sync_config = EsploraSyncConfig { background_sync_config : None } ;
@@ -2135,13 +2114,14 @@ fn lsps4_channel_size_tiers_are_applied() {
21352114 & electrsd. client ,
21362115 vec ! [ service_onchain_addr, client_onchain_addr, payer_onchain_addr] ,
21372116 Amount :: from_sat ( premine_amount_sat) ,
2138- ) ;
2117+ )
2118+ . await ;
21392119 service_node. sync_wallets ( ) . unwrap ( ) ;
21402120 client_node. sync_wallets ( ) . unwrap ( ) ;
21412121 payer_node. sync_wallets ( ) . unwrap ( ) ;
21422122
2143- open_channel ( & payer_node, & service_node, 5_000_000 , false , & electrsd) ;
2144- generate_blocks_and_wait ( & bitcoind. client , & electrsd. client , 6 ) ;
2123+ open_channel ( & payer_node, & service_node, 5_000_000 , false , & electrsd) . await ;
2124+ generate_blocks_and_wait ( & bitcoind. client , & electrsd. client , 6 ) . await ;
21452125 service_node. sync_wallets ( ) . unwrap ( ) ;
21462126 payer_node. sync_wallets ( ) . unwrap ( ) ;
21472127 expect_channel_ready_event ! ( payer_node, service_node. node_id( ) ) ;
@@ -2165,59 +2145,64 @@ fn lsps4_channel_size_tiers_are_applied() {
21652145 } ;
21662146
21672147 let mut expected_channel_values = Vec :: new ( ) ;
2168- let mut pay_lsps4_invoice = |amount_sat : u64 , expected_new_channel_value_sat : Option < u64 > | {
2169- let amount_msat = amount_sat * 1000 ;
2170- let invoice_description = Bolt11InvoiceDescription :: Direct (
2171- Description :: new ( format ! ( "lsps4 tier test {}" , amount_sat) ) . unwrap ( ) ,
2172- ) ;
2173- let invoice = client_node
2174- . bolt11_payment ( )
2175- . receive_via_lsps4_jit_channel ( Some ( amount_msat) , & invoice_description, 1024 )
2176- . unwrap ( ) ;
2177- let payment_id = payer_node. bolt11_payment ( ) . send ( & invoice, None ) . unwrap ( ) ;
2178-
2179- if expected_new_channel_value_sat. is_some ( ) {
2180- expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
2181- expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
2182- expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
2183- expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
2184- }
21852148
2186- expect_service_forward ( amount_msat) ;
2187- expect_payment_successful_event ! ( payer_node, Some ( payment_id) , None ) ;
2188- let client_payment_id = expect_payment_received_event ! ( client_node, amount_msat) . unwrap ( ) ;
2189- let payment = client_node. payment ( & client_payment_id) . unwrap ( ) ;
2190- assert ! ( matches!( payment. kind, PaymentKind :: Bolt11Jit { .. } ) ) ;
2191- assert_eq ! ( payment. amount_msat, Some ( amount_msat) ) ;
2192- assert_eq ! ( payment. status, PaymentStatus :: Succeeded ) ;
2149+ macro_rules! pay_lsps4_invoice {
2150+ ( $amount_sat: expr, $expected_new_channel_value_sat: expr) => { {
2151+ let amount_sat = $amount_sat;
2152+ let expected_new_channel_value_sat = $expected_new_channel_value_sat;
2153+ let amount_msat = amount_sat * 1000 ;
2154+ let invoice_description = Bolt11InvoiceDescription :: Direct (
2155+ Description :: new( format!( "lsps4 tier test {}" , amount_sat) ) . unwrap( ) ,
2156+ ) ;
2157+ let invoice = client_node
2158+ . bolt11_payment( )
2159+ . receive_via_lsps4_jit_channel( Some ( amount_msat) , & invoice_description, 1024 )
2160+ . unwrap( ) ;
2161+ let payment_id = payer_node. bolt11_payment( ) . send( & invoice, None ) . unwrap( ) ;
2162+
2163+ if expected_new_channel_value_sat. is_some( ) {
2164+ expect_channel_pending_event!( service_node, client_node. node_id( ) ) ;
2165+ expect_channel_ready_event!( service_node, client_node. node_id( ) ) ;
2166+ expect_channel_pending_event!( client_node, service_node. node_id( ) ) ;
2167+ expect_channel_ready_event!( client_node, service_node. node_id( ) ) ;
2168+ }
2169+
2170+ expect_service_forward( amount_msat) ;
2171+ expect_payment_successful_event!( payer_node, Some ( payment_id) , None ) ;
2172+ let client_payment_id = expect_payment_received_event!( client_node, amount_msat) . unwrap( ) ;
2173+ let payment = client_node. payment( & client_payment_id) . unwrap( ) ;
2174+ assert!( matches!( payment. kind, PaymentKind :: Bolt11Jit { .. } ) ) ;
2175+ assert_eq!( payment. amount_msat, Some ( amount_msat) ) ;
2176+ assert_eq!( payment. status, PaymentStatus :: Succeeded ) ;
21932177
2194- if let Some ( channel_value_sat) = expected_new_channel_value_sat {
2195- expected_channel_values. push ( channel_value_sat) ;
2196- }
2178+ if let Some ( channel_value_sat) = expected_new_channel_value_sat {
2179+ expected_channel_values. push( channel_value_sat) ;
2180+ }
21972181
2198- let mut actual_channel_values: Vec < u64 > = client_node
2199- . list_channels ( )
2200- . into_iter ( )
2201- . filter ( |chan| chan. counterparty_node_id == service_node. node_id ( ) )
2202- . map ( |chan| chan. channel_value_sats )
2203- . collect ( ) ;
2204- actual_channel_values. sort_unstable ( ) ;
2205- let mut expected_sorted = expected_channel_values. clone ( ) ;
2206- expected_sorted. sort_unstable ( ) ;
2207- assert_eq ! ( actual_channel_values, expected_sorted) ;
2208- } ;
2182+ let mut actual_channel_values: Vec <u64 > = client_node
2183+ . list_channels( )
2184+ . into_iter( )
2185+ . filter( |chan| chan. counterparty_node_id == service_node. node_id( ) )
2186+ . map( |chan| chan. channel_value_sats)
2187+ . collect( ) ;
2188+ actual_channel_values. sort_unstable( ) ;
2189+ let mut expected_sorted = expected_channel_values. clone( ) ;
2190+ expected_sorted. sort_unstable( ) ;
2191+ assert_eq!( actual_channel_values, expected_sorted) ;
2192+ } } ;
2193+ }
22092194
2210- pay_lsps4_invoice ( 50_000 , Some ( 100_000 ) ) ;
2211- pay_lsps4_invoice ( 100_000 , Some ( 500_000 ) ) ;
2195+ pay_lsps4_invoice ! ( 50_000 , Some ( 100_000 ) ) ;
2196+ pay_lsps4_invoice ! ( 100_000 , Some ( 500_000 ) ) ;
22122197
22132198 for _ in 0 ..5 {
2214- pay_lsps4_invoice ( 20_000 , None ) ;
2199+ pay_lsps4_invoice ! ( 20_000 , None ) ;
22152200 }
22162201
2217- pay_lsps4_invoice ( 400_000 , Some ( 1_000_000 ) ) ;
2218- pay_lsps4_invoice ( 100_000 , None ) ;
2219- pay_lsps4_invoice ( 700_000 , Some ( 1_000_000 ) ) ;
2220- pay_lsps4_invoice ( 900_000 , Some ( 1_000_000 ) ) ;
2202+ pay_lsps4_invoice ! ( 400_000 , Some ( 1_000_000 ) ) ;
2203+ pay_lsps4_invoice ! ( 100_000 , None ) ;
2204+ pay_lsps4_invoice ! ( 700_000 , Some ( 1_000_000 ) ) ;
2205+ pay_lsps4_invoice ! ( 900_000 , Some ( 1_000_000 ) ) ;
22212206
22222207 assert_eq ! ( expected_channel_values, vec![ 100_000 , 500_000 , 1_000_000 , 1_000_000 , 1_000_000 ] ) ;
22232208}
0 commit comments