Skip to content

Commit 85f3155

Browse files
committed
Add V2 ChannelPhase variants
1 parent 4557c20 commit 85f3155

File tree

3 files changed

+72
-3
lines changed

3 files changed

+72
-3
lines changed

lightning/src/ln/channel.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,10 @@ impl_writeable_tlv_based!(PendingChannelMonitorUpdate, {
930930
pub(super) enum ChannelPhase<SP: Deref> where SP::Target: SignerProvider {
931931
UnfundedOutboundV1(OutboundV1Channel<SP>),
932932
UnfundedInboundV1(InboundV1Channel<SP>),
933+
#[cfg(dual_funding)]
934+
UnfundedOutboundV2(OutboundV2Channel<SP>),
935+
#[cfg(dual_funding)]
936+
UnfundedInboundV2(InboundV2Channel<SP>),
933937
Funded(Channel<SP>),
934938
}
935939

@@ -942,6 +946,10 @@ impl<'a, SP: Deref> ChannelPhase<SP> where
942946
ChannelPhase::Funded(chan) => &chan.context,
943947
ChannelPhase::UnfundedOutboundV1(chan) => &chan.context,
944948
ChannelPhase::UnfundedInboundV1(chan) => &chan.context,
949+
#[cfg(dual_funding)]
950+
ChannelPhase::UnfundedOutboundV2(chan) => &chan.context,
951+
#[cfg(dual_funding)]
952+
ChannelPhase::UnfundedInboundV2(chan) => &chan.context,
945953
}
946954
}
947955

@@ -950,6 +958,10 @@ impl<'a, SP: Deref> ChannelPhase<SP> where
950958
ChannelPhase::Funded(ref mut chan) => &mut chan.context,
951959
ChannelPhase::UnfundedOutboundV1(ref mut chan) => &mut chan.context,
952960
ChannelPhase::UnfundedInboundV1(ref mut chan) => &mut chan.context,
961+
#[cfg(dual_funding)]
962+
ChannelPhase::UnfundedOutboundV2(ref mut chan) => &mut chan.context,
963+
#[cfg(dual_funding)]
964+
ChannelPhase::UnfundedInboundV2(ref mut chan) => &mut chan.context,
953965
}
954966
}
955967
}

lightning/src/ln/channelmanager.rs

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2080,6 +2080,14 @@ macro_rules! convert_chan_phase_err {
20802080
ChannelPhase::UnfundedInboundV1(channel) => {
20812081
convert_chan_phase_err!($self, $err, channel, $channel_id, UNFUNDED_CHANNEL)
20822082
},
2083+
#[cfg(dual_funding)]
2084+
ChannelPhase::UnfundedOutboundV2(channel) => {
2085+
convert_chan_phase_err!($self, $err, channel, $channel_id, UNFUNDED_CHANNEL)
2086+
},
2087+
#[cfg(dual_funding)]
2088+
ChannelPhase::UnfundedInboundV2(channel) => {
2089+
convert_chan_phase_err!($self, $err, channel, $channel_id, UNFUNDED_CHANNEL)
2090+
},
20832091
}
20842092
};
20852093
}
@@ -2945,6 +2953,13 @@ where
29452953
// Unfunded channel has no update
29462954
(None, chan_phase.context().get_counterparty_node_id())
29472955
},
2956+
// TODO(dual_funding): Combine this match arm with above.
2957+
#[cfg(dual_funding)]
2958+
ChannelPhase::UnfundedOutboundV2(_) | ChannelPhase::UnfundedInboundV2(_) => {
2959+
self.finish_close_channel(chan_phase.context_mut().force_shutdown(false, ClosureReason::HolderForceClosed));
2960+
// Unfunded channel has no update
2961+
(None, chan_phase.context().get_counterparty_node_id())
2962+
},
29482963
}
29492964
} else if peer_state.inbound_channel_request_by_id.remove(channel_id).is_some() {
29502965
log_error!(logger, "Force-closing channel {}", &channel_id);
@@ -5022,6 +5037,16 @@ where
50225037
process_unfunded_channel_tick(chan_id, &mut chan.context, &mut chan.unfunded_context,
50235038
pending_msg_events, counterparty_node_id)
50245039
},
5040+
#[cfg(dual_funding)]
5041+
ChannelPhase::UnfundedInboundV2(chan) => {
5042+
process_unfunded_channel_tick(chan_id, &mut chan.context, &mut chan.unfunded_context,
5043+
pending_msg_events, counterparty_node_id)
5044+
},
5045+
#[cfg(dual_funding)]
5046+
ChannelPhase::UnfundedOutboundV2(chan) => {
5047+
process_unfunded_channel_tick(chan_id, &mut chan.context, &mut chan.unfunded_context,
5048+
pending_msg_events, counterparty_node_id)
5049+
},
50255050
}
50265051
});
50275052

@@ -6161,14 +6186,27 @@ where
61616186
num_unfunded_channels += 1;
61626187
}
61636188
},
6164-
ChannelPhase::UnfundedInboundV1(chan) => {
6165-
if chan.context.minimum_depth().unwrap_or(1) != 0 {
6189+
ChannelPhase::UnfundedInboundV1(_) => {
6190+
if phase.context().minimum_depth().unwrap_or(1) != 0 {
6191+
num_unfunded_channels += 1;
6192+
}
6193+
},
6194+
// TODO(dual_funding): Combine this match arm with above.
6195+
#[cfg(dual_funding)]
6196+
ChannelPhase::UnfundedInboundV2(_) => {
6197+
if phase.context().minimum_depth().unwrap_or(1) != 0 {
61666198
num_unfunded_channels += 1;
61676199
}
61686200
},
61696201
ChannelPhase::UnfundedOutboundV1(_) => {
61706202
// Outbound channels don't contribute to the unfunded count in the DoS context.
61716203
continue;
6204+
},
6205+
// TODO(dual_funding): Combine this match arm with above.
6206+
#[cfg(dual_funding)]
6207+
ChannelPhase::UnfundedOutboundV2(_) => {
6208+
// Outbound channels don't contribute to the unfunded count in the DoS context.
6209+
continue;
61726210
}
61736211
}
61746212
}
@@ -6581,6 +6619,14 @@ where
65816619
let mut chan = remove_channel_phase!(self, chan_phase_entry);
65826620
finish_shutdown = Some(chan.context_mut().force_shutdown(false, ClosureReason::CounterpartyCoopClosedUnfundedChannel));
65836621
},
6622+
// TODO(dual_funding): Combine this match arm with above.
6623+
#[cfg(dual_funding)]
6624+
ChannelPhase::UnfundedInboundV2(_) | ChannelPhase::UnfundedOutboundV2(_) => {
6625+
let context = phase.context_mut();
6626+
log_error!(self.logger, "Immediately closing unfunded channel {} as peer asked to cooperatively shut it down (which is unnecessary)", &msg.channel_id);
6627+
let mut chan = remove_channel_phase!(self, chan_phase_entry);
6628+
finish_shutdown = Some(chan.context_mut().force_shutdown(false, ClosureReason::CounterpartyCoopClosedUnfundedChannel));
6629+
},
65846630
}
65856631
} else {
65866632
return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
@@ -8445,6 +8491,9 @@ where
84458491
match phase {
84468492
// Retain unfunded channels.
84478493
ChannelPhase::UnfundedOutboundV1(_) | ChannelPhase::UnfundedInboundV1(_) => true,
8494+
// TODO(dual_funding): Combine this match arm with above.
8495+
#[cfg(dual_funding)]
8496+
ChannelPhase::UnfundedOutboundV2(_) | ChannelPhase::UnfundedInboundV2(_) => true,
84488497
ChannelPhase::Funded(channel) => {
84498498
let res = f(channel);
84508499
if let Ok((channel_ready_opt, mut timed_out_pending_htlcs, announcement_sigs)) = res {
@@ -8912,6 +8961,14 @@ where
89128961
ChannelPhase::UnfundedInboundV1(chan) => {
89138962
&mut chan.context
89148963
},
8964+
#[cfg(dual_funding)]
8965+
ChannelPhase::UnfundedOutboundV2(chan) => {
8966+
&mut chan.context
8967+
},
8968+
#[cfg(dual_funding)]
8969+
ChannelPhase::UnfundedInboundV2(chan) => {
8970+
&mut chan.context
8971+
},
89158972
};
89168973
// Clean up for removal.
89178974
update_maps_on_chan_removal!(self, &context);

lightning/src/ln/functional_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ fn do_test_counterparty_no_reserve(send_from_initiator: bool) {
190190
chan_context.holder_selected_channel_reserve_satoshis = 0;
191191
chan_context.holder_max_htlc_value_in_flight_msat = 100_000_000;
192192
},
193-
ChannelPhase::Funded(_) => assert!(false),
193+
_ => assert!(false),
194194
}
195195
}
196196

0 commit comments

Comments
 (0)