Skip to content

Commit 22f1c1d

Browse files
committed
Refactor ChannelManager with ChannelPhase
1 parent 2ad87b6 commit 22f1c1d

8 files changed

+1027
-753
lines changed

lightning/src/ln/chanmon_update_fail_tests.rs

+15-12
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use crate::chain::transaction::OutPoint;
2020
use crate::chain::{ChannelMonitorUpdateStatus, Listen, Watch};
2121
use crate::events::{Event, MessageSendEvent, MessageSendEventsProvider, PaymentPurpose, ClosureReason, HTLCDestination};
2222
use crate::ln::channelmanager::{ChannelManager, RAACommitmentOrder, PaymentSendFailure, PaymentId, RecipientOnionFields};
23-
use crate::ln::channel::AnnouncementSigsState;
23+
use crate::ln::channel::{AnnouncementSigsState, ChannelPhase};
2424
use crate::ln::msgs;
2525
use crate::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler};
2626
use crate::util::enforcing_trait_impls::EnforcingSigner;
@@ -136,15 +136,18 @@ fn test_monitor_and_persister_update_fail() {
136136
{
137137
let mut node_0_per_peer_lock;
138138
let mut node_0_peer_state_lock;
139-
let mut channel = get_channel_ref!(nodes[0], nodes[1], node_0_per_peer_lock, node_0_peer_state_lock, chan.2);
140-
if let Ok(Some(update)) = channel.commitment_signed(&updates.commitment_signed, &node_cfgs[0].logger) {
141-
// Check that even though the persister is returning a InProgress,
142-
// because the update is bogus, ultimately the error that's returned
143-
// should be a PermanentFailure.
144-
if let ChannelMonitorUpdateStatus::PermanentFailure = chain_mon.chain_monitor.update_channel(outpoint, &update) {} else { panic!("Expected monitor error to be permanent"); }
145-
logger.assert_log_regex("lightning::chain::chainmonitor", regex::Regex::new("Persistence of ChannelMonitorUpdate for channel [0-9a-f]* in progress").unwrap(), 1);
146-
assert_eq!(nodes[0].chain_monitor.update_channel(outpoint, &update), ChannelMonitorUpdateStatus::Completed);
147-
} else { assert!(false); }
139+
if let ChannelPhase::Funded(ref mut channel) = get_channel_ref!(nodes[0], nodes[1], node_0_per_peer_lock, node_0_peer_state_lock, chan.2) {
140+
if let Ok(Some(update)) = channel.commitment_signed(&updates.commitment_signed, &node_cfgs[0].logger) {
141+
// Check that even though the persister is returning a InProgress,
142+
// because the update is bogus, ultimately the error that's returned
143+
// should be a PermanentFailure.
144+
if let ChannelMonitorUpdateStatus::PermanentFailure = chain_mon.chain_monitor.update_channel(outpoint, &update) {} else { panic!("Expected monitor error to be permanent"); }
145+
logger.assert_log_regex("lightning::chain::chainmonitor", regex::Regex::new("Persistence of ChannelMonitorUpdate for channel [0-9a-f]* in progress").unwrap(), 1);
146+
assert_eq!(nodes[0].chain_monitor.update_channel(outpoint, &update), ChannelMonitorUpdateStatus::Completed);
147+
} else { assert!(false); }
148+
} else {
149+
assert!(false);
150+
}
148151
}
149152

150153
check_added_monitors!(nodes[0], 1);
@@ -1459,12 +1462,12 @@ fn monitor_failed_no_reestablish_response() {
14591462
{
14601463
let mut node_0_per_peer_lock;
14611464
let mut node_0_peer_state_lock;
1462-
get_channel_ref!(nodes[0], nodes[1], node_0_per_peer_lock, node_0_peer_state_lock, channel_id).context.announcement_sigs_state = AnnouncementSigsState::PeerReceived;
1465+
get_channel_ref!(nodes[0], nodes[1], node_0_per_peer_lock, node_0_peer_state_lock, channel_id).chan_context_mut().announcement_sigs_state = AnnouncementSigsState::PeerReceived;
14631466
}
14641467
{
14651468
let mut node_1_per_peer_lock;
14661469
let mut node_1_peer_state_lock;
1467-
get_channel_ref!(nodes[1], nodes[0], node_1_per_peer_lock, node_1_peer_state_lock, channel_id).context.announcement_sigs_state = AnnouncementSigsState::PeerReceived;
1470+
get_channel_ref!(nodes[1], nodes[0], node_1_per_peer_lock, node_1_peer_state_lock, channel_id).chan_context_mut().announcement_sigs_state = AnnouncementSigsState::PeerReceived;
14681471
}
14691472

14701473
// Route the payment and deliver the initial commitment_signed (with a monitor update failure

lightning/src/ln/channel.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -612,15 +612,15 @@ pub(super) enum ChannelPhase<Signer: ChannelSigner> {
612612
}
613613

614614
impl<'a, Signer: ChannelSigner> ChannelPhase<Signer> {
615-
pub fn context(&'a self) -> &'a ChannelContext<Signer> {
615+
pub fn chan_context(&'a self) -> &'a ChannelContext<Signer> {
616616
match self {
617617
ChannelPhase::Funded(chan) => &chan.context,
618618
ChannelPhase::UnfundedOutboundV1(chan) => &chan.context,
619619
ChannelPhase::UnfundedInboundV1(chan) => &chan.context,
620620
}
621621
}
622622

623-
pub fn context_mut(&'a mut self) -> &'a mut ChannelContext<Signer> {
623+
pub fn chan_context_mut(&'a mut self) -> &'a mut ChannelContext<Signer> {
624624
match self {
625625
ChannelPhase::Funded(ref mut chan) => &mut chan.context,
626626
ChannelPhase::UnfundedOutboundV1(ref mut chan) => &mut chan.context,

lightning/src/ln/channelmanager.rs

+941-692
Large diffs are not rendered by default.

lightning/src/ln/functional_test_utils.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -830,8 +830,8 @@ macro_rules! get_feerate {
830830
{
831831
let mut per_peer_state_lock;
832832
let mut peer_state_lock;
833-
let chan = get_channel_ref!($node, $counterparty_node, per_peer_state_lock, peer_state_lock, $channel_id);
834-
chan.context.get_feerate_sat_per_1000_weight()
833+
let phase = get_channel_ref!($node, $counterparty_node, per_peer_state_lock, peer_state_lock, $channel_id);
834+
phase.chan_context().get_feerate_sat_per_1000_weight()
835835
}
836836
}
837837
}
@@ -843,7 +843,7 @@ macro_rules! get_channel_type_features {
843843
let mut per_peer_state_lock;
844844
let mut peer_state_lock;
845845
let chan = get_channel_ref!($node, $counterparty_node, per_peer_state_lock, peer_state_lock, $channel_id);
846-
chan.context.get_channel_type().clone()
846+
chan.chan_context().get_channel_type().clone()
847847
}
848848
}
849849
}
@@ -2326,10 +2326,10 @@ pub fn pass_claimed_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, '
23262326
let peer_state = per_peer_state.get(&$prev_node.node.get_our_node_id())
23272327
.unwrap().lock().unwrap();
23282328
let channel = peer_state.channel_by_id.get(&next_msgs.as_ref().unwrap().0.channel_id).unwrap();
2329-
if let Some(prev_config) = channel.context.prev_config() {
2329+
if let Some(prev_config) = channel.chan_context().prev_config() {
23302330
prev_config.forwarding_fee_base_msat
23312331
} else {
2332-
channel.context.config().forwarding_fee_base_msat
2332+
channel.chan_context().config().forwarding_fee_base_msat
23332333
}
23342334
};
23352335
if $idx == 1 { fee += expected_extra_fees[i]; }
@@ -2848,7 +2848,9 @@ macro_rules! get_channel_value_stat {
28482848
($node: expr, $counterparty_node: expr, $channel_id: expr) => {{
28492849
let peer_state_lock = $node.node.per_peer_state.read().unwrap();
28502850
let chan_lock = peer_state_lock.get(&$counterparty_node.node.get_our_node_id()).unwrap().lock().unwrap();
2851-
let chan = chan_lock.channel_by_id.get(&$channel_id).unwrap();
2851+
let chan = chan_lock.channel_by_id.get(&$channel_id).map(
2852+
|phase| if let ChannelPhase::Funded(chan) = phase { Some(chan) } else { None }
2853+
).flatten().unwrap();
28522854
chan.get_value_stat()
28532855
}}
28542856
}

0 commit comments

Comments
 (0)