@@ -42,6 +42,10 @@ pub trait ExternalLightningNode {
4242 fn check_receive_payment ( & mut self , invoice : Bolt11Invoice ) ;
4343
4444 fn close_channel ( & mut self , channel_id : OutPoint , node_id : PublicKey , force : bool ) ;
45+
46+ fn create_new_address ( & mut self ) -> String ;
47+
48+ fn open_channel ( & mut self , node_id : PublicKey , funding_amount_sat : u64 ) ;
4549}
4650
4751static BITCOIND_CLIENT : OnceLock < BitcoindClient > = OnceLock :: new ( ) ;
@@ -249,3 +253,59 @@ pub(crate) fn do_ldk_opens_channel_full_cycle_with_external_node<E: ExternalLigh
249253
250254 node. stop ( ) . unwrap ( ) ;
251255}
256+
257+ pub ( crate ) fn do_external_node_opens_channel_simple_transactions_with_ldk <
258+ E : ExternalLightningNode ,
259+ > (
260+ external_node : & mut E ,
261+ ) {
262+ // Initialize LDK node and clients
263+ let ( node, bitcoind_client, electrs_client) = setup_test_node ( false ) ;
264+
265+ // setup external node info
266+ let ( external_node_id, external_node_address) = external_node. get_node_info ( ) ;
267+
268+ let addr_string = external_node. create_new_address ( ) ;
269+ let addr = bitcoin:: Address :: from_str ( & addr_string)
270+ . unwrap ( )
271+ . require_network ( bitcoin:: Network :: Regtest )
272+ . unwrap ( ) ;
273+ let amount = Amount :: from_sat ( 5_000_000 ) ;
274+ distribute_funds_unconfirmed ( bitcoind_client, & electrs_client, vec ! [ addr] , amount) ;
275+ generate_blocks_and_wait ( bitcoind_client, & electrs_client, 6 ) ;
276+
277+ node. connect ( external_node_id, external_node_address. clone ( ) , true ) . unwrap ( ) ;
278+
279+ // Open the channel
280+ external_node. open_channel ( node. node_id ( ) , 2_000_000 ) ;
281+ let funding_txo = expect_channel_pending_event ! ( node, external_node_id) ;
282+ wait_for_tx ( & electrs_client, funding_txo. txid ) ;
283+ generate_blocks_and_wait ( bitcoind_client, & electrs_client, 6 ) ;
284+ node. sync_wallets ( ) . unwrap ( ) ;
285+ let user_channel_id = expect_channel_ready_event ! ( node, external_node_id) ;
286+
287+ // Send a payment to LDK
288+ let amount_msat = 100_000_000 ;
289+ receive_payment_from_external_node ( & node, external_node, amount_msat) ;
290+ node. sync_wallets ( ) . unwrap ( ) ;
291+
292+ // Send a payment to the external node
293+ let invoice_amount_sat = node. list_channels ( ) . first ( ) . unwrap ( ) . next_outbound_htlc_limit_msat ;
294+ let invoice: Bolt11Invoice =
295+ send_payment_to_external_node ( & node, external_node, invoice_amount_sat) ;
296+ check_send_payment_succeeds ( & node, external_node, invoice) ;
297+
298+ // Close the channel
299+ close_channel (
300+ & bitcoind_client,
301+ & electrs_client,
302+ external_node,
303+ & node,
304+ funding_txo,
305+ external_node_id,
306+ & user_channel_id,
307+ None ,
308+ ) ;
309+
310+ node. stop ( ) . unwrap ( ) ;
311+ }
0 commit comments