Skip to content

Commit eb50201

Browse files
Merge pull request #1381 from shamardy/2022-03-set-inbound-user-chan-id
Add `user_channel_id` to `accept_inbound_channel` method
2 parents 216225c + edd4bab commit eb50201

File tree

4 files changed

+38
-15
lines changed

4 files changed

+38
-15
lines changed

lightning/src/ln/channel.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4745,7 +4745,7 @@ impl<Signer: Sign> Channel<Signer> {
47454745
/// should be sent back to the counterparty node.
47464746
///
47474747
/// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
4748-
pub fn accept_inbound_channel(&mut self) -> msgs::AcceptChannel {
4748+
pub fn accept_inbound_channel(&mut self, user_id: u64) -> msgs::AcceptChannel {
47494749
if self.is_outbound() {
47504750
panic!("Tried to send accept_channel for an outbound channel?");
47514751
}
@@ -4759,6 +4759,7 @@ impl<Signer: Sign> Channel<Signer> {
47594759
panic!("The inbound channel has already been accepted");
47604760
}
47614761

4762+
self.user_id = user_id;
47624763
self.inbound_awaiting_accept = false;
47634764

47644765
self.generate_accept_channel_message()
@@ -6420,7 +6421,7 @@ mod tests {
64206421
let mut node_b_chan = Channel::<EnforcingSigner>::new_from_req(&&feeest, &&keys_provider, node_b_node_id, &InitFeatures::known(), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
64216422

64226423
// Node B --> Node A: accept channel, explicitly setting B's dust limit.
6423-
let mut accept_channel_msg = node_b_chan.accept_inbound_channel();
6424+
let mut accept_channel_msg = node_b_chan.accept_inbound_channel(0);
64246425
accept_channel_msg.dust_limit_satoshis = 546;
64256426
node_a_chan.accept_channel(&accept_channel_msg, &config.peer_channel_config_limits, &InitFeatures::known()).unwrap();
64266427
node_a_chan.holder_dust_limit_satoshis = 1560;
@@ -6538,7 +6539,7 @@ mod tests {
65386539
let mut node_b_chan = Channel::<EnforcingSigner>::new_from_req(&&feeest, &&keys_provider, node_b_node_id, &InitFeatures::known(), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
65396540

65406541
// Node B --> Node A: accept channel
6541-
let accept_channel_msg = node_b_chan.accept_inbound_channel();
6542+
let accept_channel_msg = node_b_chan.accept_inbound_channel(0);
65426543
node_a_chan.accept_channel(&accept_channel_msg, &config.peer_channel_config_limits, &InitFeatures::known()).unwrap();
65436544

65446545
// Node A --> Node B: funding created

lightning/src/ln/channelmanager.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4287,8 +4287,13 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
42874287
///
42884288
/// The `temporary_channel_id` parameter indicates which inbound channel should be accepted.
42894289
///
4290-
/// [`Event::OpenChannelRequest`]: crate::util::events::Event::OpenChannelRequest
4291-
pub fn accept_inbound_channel(&self, temporary_channel_id: &[u8; 32]) -> Result<(), APIError> {
4290+
/// For inbound channels, the `user_channel_id` parameter will be provided back in
4291+
/// [`Event::ChannelClosed::user_channel_id`] to allow tracking of which events correspond
4292+
/// with which `accept_inbound_channel` call.
4293+
///
4294+
/// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
4295+
/// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
4296+
pub fn accept_inbound_channel(&self, temporary_channel_id: &[u8; 32], user_channel_id: u64) -> Result<(), APIError> {
42924297
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
42934298

42944299
let mut channel_state_lock = self.channel_state.lock().unwrap();
@@ -4300,7 +4305,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
43004305
}
43014306
channel_state.pending_msg_events.push(events::MessageSendEvent::SendAcceptChannel {
43024307
node_id: channel.get().get_counterparty_node_id(),
4303-
msg: channel.get_mut().accept_inbound_channel(),
4308+
msg: channel.get_mut().accept_inbound_channel(user_channel_id),
43044309
});
43054310
}
43064311
hash_map::Entry::Vacant(_) => {
@@ -4341,7 +4346,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
43414346
if !self.default_configuration.manually_accept_inbound_channels {
43424347
channel_state.pending_msg_events.push(events::MessageSendEvent::SendAcceptChannel {
43434348
node_id: counterparty_node_id.clone(),
4344-
msg: channel.accept_inbound_channel(),
4349+
msg: channel.accept_inbound_channel(0),
43454350
});
43464351
} else {
43474352
let mut pending_events = self.pending_events.lock().unwrap();

lightning/src/ln/functional_tests.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8110,7 +8110,7 @@ fn test_manually_accept_inbound_channel_request() {
81108110
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, Some(manually_accept_conf.clone())]);
81118111
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
81128112

8113-
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, Some(manually_accept_conf)).unwrap();
8113+
let temp_channel_id = nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, Some(manually_accept_conf)).unwrap();
81148114
let res = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
81158115

81168116
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &res);
@@ -8122,7 +8122,7 @@ fn test_manually_accept_inbound_channel_request() {
81228122
let events = nodes[1].node.get_and_clear_pending_events();
81238123
match events[0] {
81248124
Event::OpenChannelRequest { temporary_channel_id, .. } => {
8125-
nodes[1].node.accept_inbound_channel(&temporary_channel_id).unwrap();
8125+
nodes[1].node.accept_inbound_channel(&temporary_channel_id, 23).unwrap();
81268126
}
81278127
_ => panic!("Unexpected event"),
81288128
}
@@ -8136,6 +8136,19 @@ fn test_manually_accept_inbound_channel_request() {
81368136
}
81378137
_ => panic!("Unexpected event"),
81388138
}
8139+
8140+
nodes[1].node.force_close_channel(&temp_channel_id).unwrap();
8141+
8142+
let close_msg_ev = nodes[1].node.get_and_clear_pending_msg_events();
8143+
assert_eq!(close_msg_ev.len(), 1);
8144+
8145+
let events = nodes[1].node.get_and_clear_pending_events();
8146+
match events[0] {
8147+
Event::ChannelClosed { user_channel_id, .. } => {
8148+
assert_eq!(user_channel_id, 23);
8149+
}
8150+
_ => panic!("Unexpected event"),
8151+
}
81398152
}
81408153

81418154
#[test]
@@ -8259,8 +8272,8 @@ fn test_can_not_accept_inbound_channel_twice() {
82598272
let events = nodes[1].node.get_and_clear_pending_events();
82608273
match events[0] {
82618274
Event::OpenChannelRequest { temporary_channel_id, .. } => {
8262-
nodes[1].node.accept_inbound_channel(&temporary_channel_id).unwrap();
8263-
let api_res = nodes[1].node.accept_inbound_channel(&temporary_channel_id);
8275+
nodes[1].node.accept_inbound_channel(&temporary_channel_id, 0).unwrap();
8276+
let api_res = nodes[1].node.accept_inbound_channel(&temporary_channel_id, 0);
82648277
match api_res {
82658278
Err(APIError::APIMisuseError { err }) => {
82668279
assert_eq!(err, "The channel isn't currently awaiting to be accepted.");
@@ -8292,7 +8305,7 @@ fn test_can_not_accept_unknown_inbound_channel() {
82928305
let node = create_network(1, &node_cfg, &node_chanmgr)[0].node;
82938306

82948307
let unknown_channel_id = [0; 32];
8295-
let api_res = node.accept_inbound_channel(&unknown_channel_id);
8308+
let api_res = node.accept_inbound_channel(&unknown_channel_id, 0);
82968309
match api_res {
82978310
Err(APIError::ChannelUnavailable { err }) => {
82988311
assert_eq!(err, "Can't accept a channel that doesn't exist");

lightning/src/util/events.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -365,11 +365,15 @@ pub enum Event {
365365
/// The channel_id of the channel which has been closed. Note that on-chain transactions
366366
/// resolving the channel are likely still awaiting confirmation.
367367
channel_id: [u8; 32],
368-
/// The `user_channel_id` value passed in to [`ChannelManager::create_channel`], or 0 for
369-
/// an inbound channel. This will always be zero for objects serialized with LDK versions
370-
/// prior to 0.0.102.
368+
/// The `user_channel_id` value passed in to [`ChannelManager::create_channel`] for outbound
369+
/// channels, or to [`ChannelManager::accept_inbound_channel`] for inbound channels if
370+
/// [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
371+
/// `user_channel_id` will be 0 for an inbound channel.
372+
/// This will always be zero for objects serialized with LDK versions prior to 0.0.102.
371373
///
372374
/// [`ChannelManager::create_channel`]: crate::ln::channelmanager::ChannelManager::create_channel
375+
/// [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
376+
/// [`UserConfig::manually_accept_inbound_channels`]: crate::util::config::UserConfig::manually_accept_inbound_channels
373377
user_channel_id: u64,
374378
/// The reason the channel was closed.
375379
reason: ClosureReason

0 commit comments

Comments
 (0)