Skip to content

Commit 5c88c17

Browse files
use ChannelReadyStatus enum instead of tuple
1 parent 7fcbd34 commit 5c88c17

File tree

2 files changed

+59
-35
lines changed

2 files changed

+59
-35
lines changed

lightning/src/ln/channel.rs

Lines changed: 55 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,28 @@ use core::ops::Deref;
5252
use crate::sync::Mutex;
5353
use bitcoin::hashes::hex::ToHex;
5454

55+
pub(crate) enum ChannelReadyStatus {
56+
ReadyToSend(msgs::ChannelReady),
57+
PendingChannelReady,
58+
NotReady
59+
}
60+
61+
impl ChannelReadyStatus {
62+
pub fn is_ready(&self) -> bool {
63+
match self {
64+
ChannelReadyStatus::ReadyToSend(_) => true,
65+
_ => false,
66+
}
67+
}
68+
69+
pub fn is_pending_channel_ready(&self) -> bool {
70+
match self {
71+
ChannelReadyStatus::PendingChannelReady => true,
72+
_ => false,
73+
}
74+
}
75+
}
76+
5577
#[cfg(test)]
5678
pub struct ChannelValueStat {
5779
pub value_to_self_msat: u64,
@@ -2379,7 +2401,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
23792401

23802402
log_info!(logger, "Generated funding_signed for peer for channel {}", log_bytes!(self.channel_id()));
23812403

2382-
let need_channel_ready = self.check_get_channel_ready(0).0.is_some();
2404+
let need_channel_ready = self.check_get_channel_ready(0).is_ready();
23832405
self.monitor_updating_paused(false, false, need_channel_ready, Vec::new(), Vec::new(), Vec::new());
23842406

23852407
Ok((msgs::FundingSigned {
@@ -2467,7 +2489,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
24672489

24682490
log_info!(logger, "Received funding_signed from peer for channel {}", log_bytes!(self.channel_id()));
24692491

2470-
let need_channel_ready = self.check_get_channel_ready(0).0.is_some();
2492+
let need_channel_ready = self.check_get_channel_ready(0).is_ready();
24712493
self.monitor_updating_paused(false, false, need_channel_ready, Vec::new(), Vec::new(), Vec::new());
24722494
Ok(channel_monitor)
24732495
}
@@ -5014,12 +5036,12 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
50145036
self.channel_update_status = status;
50155037
}
50165038

5017-
pub fn check_get_channel_ready(&mut self, height: u32) -> (Option<msgs::ChannelReady>, bool) {
5039+
pub fn check_get_channel_ready(&mut self, height: u32) -> ChannelReadyStatus {
50185040
// Called:
50195041
// * always when a new block/transactions are confirmed with the new height
50205042
// * when funding is signed with a height of 0
50215043
if self.funding_tx_confirmation_height == 0 && self.minimum_depth != Some(0) {
5022-
return (None, false);
5044+
return ChannelReadyStatus::NotReady;
50235045
}
50245046

50255047
let funding_tx_confirmations = height as i64 - self.funding_tx_confirmation_height as i64 + 1;
@@ -5028,11 +5050,11 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
50285050
}
50295051

50305052
if funding_tx_confirmations < self.minimum_depth.unwrap_or(0) as i64 {
5031-
return (None, false);
5053+
return ChannelReadyStatus::NotReady;
50325054
}
50335055

50345056
if self.should_emit_pending_channel_ready_event() {
5035-
return (None, true);
5057+
return ChannelReadyStatus::PendingChannelReady;
50365058
}
50375059

50385060
let non_shutdown_state = self.channel_state & (!MULTI_STATE_FLAGS);
@@ -5066,17 +5088,17 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
50665088
if self.channel_state & (ChannelState::PeerDisconnected as u32) == 0 {
50675089
let next_per_commitment_point =
50685090
self.holder_signer.get_per_commitment_point(INITIAL_COMMITMENT_NUMBER - 1, &self.secp_ctx);
5069-
return (Some(msgs::ChannelReady {
5091+
return ChannelReadyStatus::ReadyToSend(msgs::ChannelReady {
50705092
channel_id: self.channel_id,
50715093
next_per_commitment_point,
50725094
short_channel_id_alias: Some(self.outbound_scid_alias),
5073-
}), false);
5095+
});
50745096
}
50755097
} else {
50765098
self.monitor_pending_channel_ready = true;
50775099
}
50785100
}
5079-
(None, false)
5101+
ChannelReadyStatus::NotReady
50805102
}
50815103

50825104
/// When a transaction is confirmed, we check whether it is or spends the funding transaction
@@ -5133,24 +5155,26 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
51335155
// If we allow 1-conf funding, we may need to check for channel_ready here and
51345156
// send it immediately instead of waiting for a best_block_updated call (which
51355157
// may have already happened for this block).
5136-
let (channel_ready_opt, generate_pending_channel_ready) = self.check_get_channel_ready(height);
5137-
5138-
if let Some(channel_ready) = channel_ready_opt {
5139-
log_info!(logger, "Sending a channel_ready to our peer for channel {}", log_bytes!(self.channel_id));
5140-
let announcement_sigs = self.get_announcement_sigs(node_signer, genesis_block_hash, user_config, height, logger);
5141-
return Ok(ChainActionUpdates {
5142-
channel_ready_msg: Some(channel_ready),
5143-
announcement_sigs,
5144-
timed_out_htlcs: vec![],
5145-
pending_channel_ready: false
5146-
});
5147-
} else if generate_pending_channel_ready {
5148-
return Ok(ChainActionUpdates {
5149-
channel_ready_msg: None,
5150-
announcement_sigs: None,
5151-
timed_out_htlcs: vec![],
5152-
pending_channel_ready: true
5153-
});
5158+
match self.check_get_channel_ready(height) {
5159+
ChannelReadyStatus::ReadyToSend(channel_ready) => {
5160+
log_info!(logger, "Sending a channel_ready to our peer for channel {}", log_bytes!(self.channel_id));
5161+
let announcement_sigs = self.get_announcement_sigs(node_signer, genesis_block_hash, user_config, height, logger);
5162+
return Ok(ChainActionUpdates {
5163+
channel_ready_msg: Some(channel_ready),
5164+
announcement_sigs,
5165+
timed_out_htlcs: vec![],
5166+
pending_channel_ready: false
5167+
});
5168+
},
5169+
ChannelReadyStatus::PendingChannelReady => {
5170+
return Ok(ChainActionUpdates {
5171+
channel_ready_msg: None,
5172+
announcement_sigs: None,
5173+
timed_out_htlcs: vec![],
5174+
pending_channel_ready: true
5175+
});
5176+
},
5177+
ChannelReadyStatus::NotReady => {}
51545178
}
51555179
}
51565180
for inp in tx.input.iter() {
@@ -5213,8 +5237,9 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
52135237

52145238
self.update_time_counter = cmp::max(self.update_time_counter, highest_header_time);
52155239

5216-
let (channel_ready_opt, generate_pending_channel_ready) = self.check_get_channel_ready(height);
5217-
if let Some(channel_ready) = channel_ready_opt {
5240+
let channel_ready_status = self.check_get_channel_ready(height);
5241+
5242+
if let ChannelReadyStatus::ReadyToSend(channel_ready) = channel_ready_status {
52185243
let announcement_sigs = if let Some((genesis_block_hash, node_signer, user_config)) = genesis_node_signer {
52195244
self.get_announcement_sigs(node_signer, genesis_block_hash, user_config, height, logger)
52205245
} else { None };
@@ -5268,7 +5293,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
52685293
channel_ready_msg: None,
52695294
timed_out_htlcs,
52705295
announcement_sigs,
5271-
pending_channel_ready: generate_pending_channel_ready
5296+
pending_channel_ready: channel_ready_status.is_pending_channel_ready()
52725297
})
52735298
}
52745299

lightning/src/ln/channelmanager.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use crate::events::{Event, EventHandler, EventsProvider, MessageSendEvent, Messa
4040
// Since this struct is returned in `list_channels` methods, expose it here in case users want to
4141
// construct one themselves.
4242
use crate::ln::{inbound_payment, PaymentHash, PaymentPreimage, PaymentSecret};
43-
use crate::ln::channel::{Channel, ChannelError, ChannelUpdateStatus, UpdateFulfillCommitFetch, ChainActionUpdates};
43+
use crate::ln::channel::{Channel, ChannelError, ChannelUpdateStatus, UpdateFulfillCommitFetch, ChainActionUpdates, ChannelReadyStatus};
4444
use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
4545
#[cfg(any(feature = "_test_utils", test))]
4646
use crate::ln::features::InvoiceFeatures;
@@ -4425,13 +4425,12 @@ where
44254425
hash_map::Entry::Occupied(mut channel) => {
44264426
let best_block_height = self.best_block.read().unwrap().height();
44274427
let channel = channel.get_mut();
4428-
let (channel_ready_opt, _) = channel.check_get_channel_ready(best_block_height);
4429-
match channel_ready_opt {
4430-
Some(channel_ready) => {
4428+
match channel.check_get_channel_ready(best_block_height) {
4429+
ChannelReadyStatus::ReadyToSend(channel_ready) => {
44314430
channel.unset_requires_manual_readiness_signal();
44324431
send_channel_ready!(self, pending_msg_events, channel, channel_ready);
44334432
}
4434-
None => return Err(APIError::APIMisuseError { err: "The channel isn't currently in a state where we can signal readiness.".to_owned() })
4433+
_ => return Err(APIError::APIMisuseError { err: "The channel isn't currently in a state where we can signal readiness.".to_owned() })
44354434
}
44364435
}
44374436
hash_map::Entry::Vacant(_) => {

0 commit comments

Comments
 (0)