@@ -1134,46 +1134,98 @@ fn simple_bolt12_send_receive() {
11341134fn static_invoice_server ( ) {
11351135 let ( bitcoind, electrsd) = setup_bitcoind_and_electrsd ( ) ;
11361136 let chain_source = TestChainSource :: Esplora ( & electrsd) ;
1137- let ( node_a, node_b) = setup_two_nodes ( & chain_source, false , true , false ) ;
11381137
1139- let address_a = node_a. onchain_payment ( ) . new_address ( ) . unwrap ( ) ;
1140- let premine_amount_sat = 5_000_000 ;
1138+ let mut config_sender = random_config ( true ) ;
1139+ config_sender. node_config . storage_dir_path = "/tmp/node_sender" . into ( ) ;
1140+ let node_sender = setup_node ( & chain_source, config_sender, None ) ;
1141+
1142+ let mut config_sender_lsp = random_config ( true ) ;
1143+ config_sender_lsp. node_config . storage_dir_path = "/tmp/node_sender_lsp" . into ( ) ;
1144+ let node_sender_lsp = setup_node ( & chain_source, config_sender_lsp, None ) ;
1145+
1146+ let mut config_receiver_lsp = random_config ( true ) ;
1147+ config_receiver_lsp. node_config . storage_dir_path = "/tmp/node_receiver_lsp" . into ( ) ;
1148+ let node_receiver_lsp = setup_node ( & chain_source, config_receiver_lsp, None ) ;
1149+
1150+ let mut config_receiver = random_config ( true ) ;
1151+ config_receiver. node_config . storage_dir_path = "/tmp/node_receiver" . into ( ) ;
1152+ let node_receiver = setup_node ( & chain_source, config_receiver, None ) ;
1153+
1154+ let address_sender = node_sender. onchain_payment ( ) . new_address ( ) . unwrap ( ) ;
1155+ let address_sender_lsp = node_sender_lsp. onchain_payment ( ) . new_address ( ) . unwrap ( ) ;
1156+ let address_receiver_lsp = node_receiver_lsp. onchain_payment ( ) . new_address ( ) . unwrap ( ) ;
1157+ let address_receiver = node_receiver. onchain_payment ( ) . new_address ( ) . unwrap ( ) ;
1158+ let premine_amount_sat = 4_000_000 ;
11411159 premine_and_distribute_funds (
11421160 & bitcoind. client ,
11431161 & electrsd. client ,
1144- vec ! [ address_a ] ,
1162+ vec ! [ address_sender , address_sender_lsp , address_receiver_lsp , address_receiver ] ,
11451163 Amount :: from_sat ( premine_amount_sat) ,
11461164 ) ;
11471165
1148- node_a. sync_wallets ( ) . unwrap ( ) ;
1149- open_channel ( & node_a, & node_b, 4_000_000 , true , & electrsd) ;
1166+ node_sender. sync_wallets ( ) . unwrap ( ) ;
1167+ node_sender_lsp. sync_wallets ( ) . unwrap ( ) ;
1168+ node_receiver_lsp. sync_wallets ( ) . unwrap ( ) ;
1169+ node_receiver. sync_wallets ( ) . unwrap ( ) ;
11501170
1151- generate_blocks_and_wait ( & bitcoind. client , & electrsd. client , 6 ) ;
1171+ open_channel ( & node_sender, & node_sender_lsp, 400_000 , true , & electrsd) ;
1172+ open_channel ( & node_sender_lsp, & node_receiver_lsp, 400_000 , true , & electrsd) ;
1173+ open_channel ( & node_receiver_lsp, & node_receiver, 400_000 , true , & electrsd) ;
11521174
1153- node_a. sync_wallets ( ) . unwrap ( ) ;
1154- node_b. sync_wallets ( ) . unwrap ( ) ;
1175+ generate_blocks_and_wait ( & bitcoind. client , & electrsd. client , 6 ) ;
11551176
1156- expect_channel_ready_event ! ( node_a, node_b. node_id( ) ) ;
1157- expect_channel_ready_event ! ( node_b, node_a. node_id( ) ) ;
1177+ node_sender. sync_wallets ( ) . unwrap ( ) ;
1178+ node_sender_lsp. sync_wallets ( ) . unwrap ( ) ;
1179+ node_receiver_lsp. sync_wallets ( ) . unwrap ( ) ;
1180+ node_receiver. sync_wallets ( ) . unwrap ( ) ;
1181+
1182+ expect_channel_ready_event ! ( node_sender, node_sender_lsp. node_id( ) ) ;
1183+ expect_channel_ready_event ! ( node_sender_lsp, node_sender. node_id( ) ) ;
1184+ expect_channel_ready_event ! ( node_sender_lsp, node_receiver_lsp. node_id( ) ) ;
1185+ expect_channel_ready_event ! ( node_receiver_lsp, node_sender_lsp. node_id( ) ) ;
1186+ expect_channel_ready_event ! ( node_receiver_lsp, node_receiver. node_id( ) ) ;
1187+ expect_channel_ready_event ! ( node_receiver, node_receiver_lsp. node_id( ) ) ;
1188+
1189+ let has_node_announcements = |node : & ldk_node:: Node | {
1190+ node. network_graph ( )
1191+ . list_nodes ( )
1192+ . iter ( )
1193+ . filter ( |n| {
1194+ node. network_graph ( ) . node ( n) . map_or ( false , |info| info. announcement_info . is_some ( ) )
1195+ } )
1196+ . count ( ) >= 4
1197+ } ;
11581198
1159- // Sleep until we broadcasted a node announcement.
1160- while node_b. status ( ) . latest_node_announcement_broadcast_timestamp . is_none ( ) {
1161- std:: thread:: sleep ( std:: time:: Duration :: from_millis ( 10 ) ) ;
1199+ // Wait for everyone to see all channels and node announcements.
1200+ while node_sender. network_graph ( ) . list_channels ( ) . len ( ) < 3
1201+ || node_sender_lsp. network_graph ( ) . list_channels ( ) . len ( ) < 3
1202+ || node_receiver_lsp. network_graph ( ) . list_channels ( ) . len ( ) < 3
1203+ || node_receiver. network_graph ( ) . list_channels ( ) . len ( ) < 3
1204+ || !has_node_announcements ( & node_sender)
1205+ || !has_node_announcements ( & node_sender_lsp)
1206+ || !has_node_announcements ( & node_receiver_lsp)
1207+ || !has_node_announcements ( & node_receiver)
1208+ {
1209+ std:: thread:: sleep ( std:: time:: Duration :: from_millis ( 100 ) ) ;
11621210 }
11631211
1164- // Sleep one more sec to make sure the node announcement propagates.
1165- std:: thread:: sleep ( std:: time:: Duration :: from_secs ( 1 ) ) ;
1166-
11671212 let recipient_id = vec ! [ 1 , 2 , 3 ] ;
1168- let blinded_paths = node_a. blinded_paths_for_async_recipient ( recipient_id, None ) . unwrap ( ) ;
1169- node_b. set_paths_to_static_invoice_server ( blinded_paths) . unwrap ( ) ;
1213+ let blinded_paths =
1214+ node_receiver_lsp. blinded_paths_for_async_recipient ( recipient_id, None ) . unwrap ( ) ;
1215+ node_receiver. set_paths_to_static_invoice_server ( blinded_paths) . unwrap ( ) ;
11701216
1171- // Sleep to get the cache filled.
1172- std:: thread:: sleep ( std:: time:: Duration :: from_secs ( 1 ) ) ;
1217+ let offer = loop {
1218+ if let Ok ( offer) = node_receiver. bolt12_payment ( ) . get_async_receive_offer ( ) {
1219+ break offer;
1220+ }
1221+
1222+ std:: thread:: sleep ( std:: time:: Duration :: from_millis ( 100 ) ) ;
1223+ } ;
11731224
1174- let offer = node_b. bolt12_payment ( ) . get_async_receive_offer ( ) . unwrap ( ) ;
1225+ let payment_id =
1226+ node_sender. bolt12_payment ( ) . send_using_amount ( & offer, 5_000 , None , None ) . unwrap ( ) ;
11751227
1176- println ! ( "Offer: {}" , offer ) ;
1228+ expect_payment_successful_event ! ( node_sender , Some ( payment_id ) , None ) ;
11771229}
11781230
11791231#[ test]
0 commit comments