@@ -46,7 +46,7 @@ use alloc::rc::Rc;
4646use crate :: sync:: { Arc , Mutex , LockTestExt , RwLock } ;
4747use core:: mem;
4848use core:: iter:: repeat;
49- use bitcoin:: { PackedLockTime , TxMerkleNode } ;
49+ use bitcoin:: { PackedLockTime , TxIn , TxMerkleNode } ;
5050
5151pub const CHAN_CONFIRM_DEPTH : u32 = 10 ;
5252
@@ -1005,7 +1005,23 @@ macro_rules! reload_node {
10051005 } ;
10061006}
10071007
1008- pub fn create_funding_transaction < ' a , ' b , ' c > ( node : & Node < ' a , ' b , ' c > , expected_counterparty_node_id : & PublicKey , expected_chan_value : u64 , expected_user_chan_id : u128 ) -> ( ChannelId , Transaction , OutPoint ) {
1008+ pub fn create_funding_transaction < ' a , ' b , ' c > ( node : & Node < ' a , ' b , ' c > ,
1009+ expected_counterparty_node_id : & PublicKey , expected_chan_value : u64 , expected_user_chan_id : u128 )
1010+ -> ( ChannelId , Transaction , OutPoint )
1011+ {
1012+ internal_create_funding_transaction ( node, expected_counterparty_node_id, expected_chan_value, expected_user_chan_id, false )
1013+ }
1014+
1015+ pub fn create_coinbase_funding_transaction < ' a , ' b , ' c > ( node : & Node < ' a , ' b , ' c > ,
1016+ expected_counterparty_node_id : & PublicKey , expected_chan_value : u64 , expected_user_chan_id : u128 )
1017+ -> ( ChannelId , Transaction , OutPoint )
1018+ {
1019+ internal_create_funding_transaction ( node, expected_counterparty_node_id, expected_chan_value, expected_user_chan_id, true )
1020+ }
1021+
1022+ fn internal_create_funding_transaction < ' a , ' b , ' c > ( node : & Node < ' a , ' b , ' c > ,
1023+ expected_counterparty_node_id : & PublicKey , expected_chan_value : u64 , expected_user_chan_id : u128 ,
1024+ coinbase : bool ) -> ( ChannelId , Transaction , OutPoint ) {
10091025 let chan_id = * node. network_chan_count . borrow ( ) ;
10101026
10111027 let events = node. node . get_and_clear_pending_events ( ) ;
@@ -1016,7 +1032,16 @@ pub fn create_funding_transaction<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, expected_
10161032 assert_eq ! ( * channel_value_satoshis, expected_chan_value) ;
10171033 assert_eq ! ( user_channel_id, expected_user_chan_id) ;
10181034
1019- let tx = Transaction { version : chan_id as i32 , lock_time : PackedLockTime :: ZERO , input : Vec :: new ( ) , output : vec ! [ TxOut {
1035+ let input = if coinbase {
1036+ vec ! [ TxIn {
1037+ previous_output: bitcoin:: OutPoint :: null( ) ,
1038+ ..Default :: default ( )
1039+ } ]
1040+ } else {
1041+ Vec :: new ( )
1042+ } ;
1043+
1044+ let tx = Transaction { version : chan_id as i32 , lock_time : PackedLockTime :: ZERO , input, output : vec ! [ TxOut {
10201045 value: * channel_value_satoshis, script_pubkey: output_script. clone( ) ,
10211046 } ] } ;
10221047 let funding_outpoint = OutPoint { txid : tx. txid ( ) , index : 0 } ;
@@ -1025,6 +1050,7 @@ pub fn create_funding_transaction<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, expected_
10251050 _ => panic ! ( "Unexpected event" ) ,
10261051 }
10271052}
1053+
10281054pub fn sign_funding_transaction < ' a , ' b , ' c > ( node_a : & Node < ' a , ' b , ' c > , node_b : & Node < ' a , ' b , ' c > , channel_value : u64 , expected_temporary_channel_id : ChannelId ) -> Transaction {
10291055 let ( temporary_channel_id, tx, funding_output) = create_funding_transaction ( node_a, & node_b. node . get_our_node_id ( ) , channel_value, 42 ) ;
10301056 assert_eq ! ( temporary_channel_id, expected_temporary_channel_id) ;
0 commit comments