Skip to content

Commit 48b0d99

Browse files
authored
Merge pull request #41 from TheBlueMatt/master
Move open_channel message handling into an event
2 parents f718af1 + c47525c commit 48b0d99

File tree

3 files changed

+63
-25
lines changed

3 files changed

+63
-25
lines changed

src/ln/channelmanager.rs

Lines changed: 49 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,14 @@ impl ChannelManager {
233233
Ok(res)
234234
}
235235

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> {
237244
let chan_keys = if cfg!(feature = "fuzztarget") {
238245
ChannelKeys {
239246
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 {
259266
let mut channel_state = self.channel_state.lock().unwrap();
260267
match channel_state.by_id.insert(channel.channel_id(), channel) {
261268
Some(_) => panic!("RNG is bad???"),
262-
None => Ok(res)
269+
None => {}
263270
}
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(())
264278
}
265279

266280
/// Gets the list of open channels, in random order. See ChannelDetail field documentation for
@@ -2004,17 +2018,27 @@ mod tests {
20042018

20052019
static mut CHAN_COUNT: u32 = 0;
20062020
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+
20092033
node_a.node.handle_accept_channel(&node_b.node.get_our_node_id(), &accept_chan).unwrap();
20102034

20112035
let chan_id = unsafe { CHAN_COUNT };
20122036
let tx;
20132037
let funding_output;
20142038

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] {
20182042
Event::FundingGenerationReady { ref temporary_channel_id, ref channel_value_satoshis, ref output_script, user_channel_id } => {
20192043
assert_eq!(*channel_value_satoshis, 100000);
20202044
assert_eq!(user_channel_id, 42);
@@ -2033,9 +2057,9 @@ mod tests {
20332057
_ => panic!("Unexpected event"),
20342058
}
20352059

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] {
20392063
Event::SendFundingCreated { ref node_id, ref msg } => {
20402064
assert_eq!(*node_id, node_b.node.get_our_node_id());
20412065
let res = node_b.node.handle_funding_created(&node_a.node.get_our_node_id(), msg).unwrap();
@@ -2056,9 +2080,9 @@ mod tests {
20562080
added_monitors.clear();
20572081
}
20582082

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] {
20622086
Event::FundingBroadcastSafe { ref funding_txo, user_channel_id } => {
20632087
assert_eq!(user_channel_id, 42);
20642088
assert_eq!(*funding_txo, funding_output);
@@ -2067,9 +2091,9 @@ mod tests {
20672091
};
20682092

20692093
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] {
20732097
Event::SendFundingLocked { ref node_id, ref msg, ref announcement_sigs } => {
20742098
assert_eq!(*node_id, node_b.node.get_our_node_id());
20752099
assert!(announcement_sigs.is_none());
@@ -2081,9 +2105,9 @@ mod tests {
20812105
let channel_id;
20822106

20832107
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] {
20872111
Event::SendFundingLocked { ref node_id, ref msg, ref announcement_sigs } => {
20882112
assert_eq!(*node_id, node_a.node.get_our_node_id());
20892113
channel_id = msg.channel_id.clone();
@@ -2094,19 +2118,19 @@ mod tests {
20942118
_ => panic!("Unexpected event"),
20952119
};
20962120

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] {
21002124
Event::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
21012125
(msg, update_msg)
21022126
},
21032127
_ => panic!("Unexpected event"),
21042128
};
21052129

21062130
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] {
21102134
Event::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
21112135
assert!(*announcement == *msg);
21122136
update_msg

src/ln/peer_handler.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,14 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
614614
//TODO: Handle upstream in some confused form so that upstream just knows
615615
//to call us somehow?
616616
},
617+
Event::SendOpenChannel { ref node_id, ref msg } => {
618+
let (mut descriptor, peer) = get_peer_for_forwarding!(node_id, {
619+
//TODO: Drop the pending channel? (or just let it timeout, but that sucks)
620+
});
621+
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 32)));
622+
Self::do_attempt_write_data(&mut descriptor, peer);
623+
continue;
624+
},
617625
Event::SendFundingCreated { ref node_id, ref msg } => {
618626
let (mut descriptor, peer) = get_peer_for_forwarding!(node_id, {
619627
//TODO: generate a DiscardFunding event indicating to the wallet that

src/util/events.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ pub enum Event {
5454
PendingHTLCsForwardable {
5555
time_forwardable: Instant,
5656
},
57+
/// Used to indicate that we've initialted a channel open and should send the open_channel
58+
/// message provided to the given peer
59+
SendOpenChannel {
60+
node_id: PublicKey,
61+
msg: msgs::OpenChannel,
62+
},
5763
/// Used to indicate that a funding_created message should be sent to the peer with the given node_id.
5864
SendFundingCreated {
5965
node_id: PublicKey,

0 commit comments

Comments
 (0)