@@ -233,7 +233,14 @@ impl ChannelManager {
233
233
Ok ( res)
234
234
}
235
235
236
- pub fn create_channel ( & self , their_network_key : PublicKey , channel_value_satoshis : u64 , user_id : u64 ) -> Result < msgs:: OpenChannel , HandleError > {
236
+ /// Creates a new outbound channel to the given remote node and with the given value.
237
+ /// user_id will be provided back as user_channel_id in FundingGenerationReady and
238
+ /// FundingBroadcastSafe events to allow tracking of which events correspond with which
239
+ /// create_channel call. Note that user_channel_id defaults to 0 for inbound channels, so you
240
+ /// may wish to avoid using 0 for user_id here.
241
+ /// If successful, will generate a SendOpenChannel event, so you should probably poll
242
+ /// PeerManager::process_events afterwards.
243
+ pub fn create_channel ( & self , their_network_key : PublicKey , channel_value_satoshis : u64 , user_id : u64 ) -> Result < ( ) , HandleError > {
237
244
let chan_keys = if cfg ! ( feature = "fuzztarget" ) {
238
245
ChannelKeys {
239
246
funding_key : SecretKey :: from_slice ( & self . secp_ctx , & [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) . unwrap ( ) ,
@@ -259,8 +266,15 @@ impl ChannelManager {
259
266
let mut channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
260
267
match channel_state. by_id . insert ( channel. channel_id ( ) , channel) {
261
268
Some ( _) => panic ! ( "RNG is bad???" ) ,
262
- None => Ok ( res )
269
+ None => { }
263
270
}
271
+
272
+ let mut events = self . pending_events . lock ( ) . unwrap ( ) ;
273
+ events. push ( events:: Event :: SendOpenChannel {
274
+ node_id : their_network_key,
275
+ msg : res,
276
+ } ) ;
277
+ Ok ( ( ) )
264
278
}
265
279
266
280
/// Gets the list of open channels, in random order. See ChannelDetail field documentation for
@@ -2004,17 +2018,27 @@ mod tests {
2004
2018
2005
2019
static mut CHAN_COUNT : u32 = 0 ;
2006
2020
fn create_chan_between_nodes ( node_a : & Node , node_b : & Node ) -> ( msgs:: ChannelAnnouncement , msgs:: ChannelUpdate , msgs:: ChannelUpdate , Uint256 , Transaction ) {
2007
- let open_chan = node_a. node . create_channel ( node_b. node . get_our_node_id ( ) , 100000 , 42 ) . unwrap ( ) ;
2008
- let accept_chan = node_b. node . handle_open_channel ( & node_a. node . get_our_node_id ( ) , & open_chan) . unwrap ( ) ;
2021
+ node_a. node . create_channel ( node_b. node . get_our_node_id ( ) , 100000 , 42 ) . unwrap ( ) ;
2022
+
2023
+ let events_1 = node_a. node . get_and_clear_pending_events ( ) ;
2024
+ assert_eq ! ( events_1. len( ) , 1 ) ;
2025
+ let accept_chan = match events_1[ 0 ] {
2026
+ Event :: SendOpenChannel { ref node_id, ref msg } => {
2027
+ assert_eq ! ( * node_id, node_b. node. get_our_node_id( ) ) ;
2028
+ node_b. node . handle_open_channel ( & node_a. node . get_our_node_id ( ) , msg) . unwrap ( )
2029
+ } ,
2030
+ _ => panic ! ( "Unexpected event" ) ,
2031
+ } ;
2032
+
2009
2033
node_a. node . handle_accept_channel ( & node_b. node . get_our_node_id ( ) , & accept_chan) . unwrap ( ) ;
2010
2034
2011
2035
let chan_id = unsafe { CHAN_COUNT } ;
2012
2036
let tx;
2013
2037
let funding_output;
2014
2038
2015
- let events_1 = node_a. node . get_and_clear_pending_events ( ) ;
2016
- assert_eq ! ( events_1 . len( ) , 1 ) ;
2017
- match events_1 [ 0 ] {
2039
+ let events_2 = node_a. node . get_and_clear_pending_events ( ) ;
2040
+ assert_eq ! ( events_2 . len( ) , 1 ) ;
2041
+ match events_2 [ 0 ] {
2018
2042
Event :: FundingGenerationReady { ref temporary_channel_id, ref channel_value_satoshis, ref output_script, user_channel_id } => {
2019
2043
assert_eq ! ( * channel_value_satoshis, 100000 ) ;
2020
2044
assert_eq ! ( user_channel_id, 42 ) ;
@@ -2033,9 +2057,9 @@ mod tests {
2033
2057
_ => panic ! ( "Unexpected event" ) ,
2034
2058
}
2035
2059
2036
- let events_2 = node_a. node . get_and_clear_pending_events ( ) ;
2037
- assert_eq ! ( events_2 . len( ) , 1 ) ;
2038
- let funding_signed = match events_2 [ 0 ] {
2060
+ let events_3 = node_a. node . get_and_clear_pending_events ( ) ;
2061
+ assert_eq ! ( events_3 . len( ) , 1 ) ;
2062
+ let funding_signed = match events_3 [ 0 ] {
2039
2063
Event :: SendFundingCreated { ref node_id, ref msg } => {
2040
2064
assert_eq ! ( * node_id, node_b. node. get_our_node_id( ) ) ;
2041
2065
let res = node_b. node . handle_funding_created ( & node_a. node . get_our_node_id ( ) , msg) . unwrap ( ) ;
@@ -2056,9 +2080,9 @@ mod tests {
2056
2080
added_monitors. clear ( ) ;
2057
2081
}
2058
2082
2059
- let events_3 = node_a. node . get_and_clear_pending_events ( ) ;
2060
- assert_eq ! ( events_3 . len( ) , 1 ) ;
2061
- match events_3 [ 0 ] {
2083
+ let events_4 = node_a. node . get_and_clear_pending_events ( ) ;
2084
+ assert_eq ! ( events_4 . len( ) , 1 ) ;
2085
+ match events_4 [ 0 ] {
2062
2086
Event :: FundingBroadcastSafe { ref funding_txo, user_channel_id } => {
2063
2087
assert_eq ! ( user_channel_id, 42 ) ;
2064
2088
assert_eq ! ( * funding_txo, funding_output) ;
@@ -2067,9 +2091,9 @@ mod tests {
2067
2091
} ;
2068
2092
2069
2093
confirm_transaction ( & node_a. chain_monitor , & tx, chan_id) ;
2070
- let events_4 = node_a. node . get_and_clear_pending_events ( ) ;
2071
- assert_eq ! ( events_4 . len( ) , 1 ) ;
2072
- match events_4 [ 0 ] {
2094
+ let events_5 = node_a. node . get_and_clear_pending_events ( ) ;
2095
+ assert_eq ! ( events_5 . len( ) , 1 ) ;
2096
+ match events_5 [ 0 ] {
2073
2097
Event :: SendFundingLocked { ref node_id, ref msg, ref announcement_sigs } => {
2074
2098
assert_eq ! ( * node_id, node_b. node. get_our_node_id( ) ) ;
2075
2099
assert ! ( announcement_sigs. is_none( ) ) ;
@@ -2081,9 +2105,9 @@ mod tests {
2081
2105
let channel_id;
2082
2106
2083
2107
confirm_transaction ( & node_b. chain_monitor , & tx, chan_id) ;
2084
- let events_5 = node_b. node . get_and_clear_pending_events ( ) ;
2085
- assert_eq ! ( events_5 . len( ) , 1 ) ;
2086
- let as_announcement_sigs = match events_5 [ 0 ] {
2108
+ let events_6 = node_b. node . get_and_clear_pending_events ( ) ;
2109
+ assert_eq ! ( events_6 . len( ) , 1 ) ;
2110
+ let as_announcement_sigs = match events_6 [ 0 ] {
2087
2111
Event :: SendFundingLocked { ref node_id, ref msg, ref announcement_sigs } => {
2088
2112
assert_eq ! ( * node_id, node_a. node. get_our_node_id( ) ) ;
2089
2113
channel_id = msg. channel_id . clone ( ) ;
@@ -2094,19 +2118,19 @@ mod tests {
2094
2118
_ => panic ! ( "Unexpected event" ) ,
2095
2119
} ;
2096
2120
2097
- let events_6 = node_a. node . get_and_clear_pending_events ( ) ;
2098
- assert_eq ! ( events_6 . len( ) , 1 ) ;
2099
- let ( announcement, as_update) = match events_6 [ 0 ] {
2121
+ let events_7 = node_a. node . get_and_clear_pending_events ( ) ;
2122
+ assert_eq ! ( events_7 . len( ) , 1 ) ;
2123
+ let ( announcement, as_update) = match events_7 [ 0 ] {
2100
2124
Event :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
2101
2125
( msg, update_msg)
2102
2126
} ,
2103
2127
_ => panic ! ( "Unexpected event" ) ,
2104
2128
} ;
2105
2129
2106
2130
node_b. node . handle_announcement_signatures ( & node_a. node . get_our_node_id ( ) , & as_announcement_sigs) . unwrap ( ) ;
2107
- let events_7 = node_b. node . get_and_clear_pending_events ( ) ;
2108
- assert_eq ! ( events_7 . len( ) , 1 ) ;
2109
- let bs_update = match events_7 [ 0 ] {
2131
+ let events_8 = node_b. node . get_and_clear_pending_events ( ) ;
2132
+ assert_eq ! ( events_8 . len( ) , 1 ) ;
2133
+ let bs_update = match events_8 [ 0 ] {
2110
2134
Event :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
2111
2135
assert ! ( * announcement == * msg) ;
2112
2136
update_msg
0 commit comments