Skip to content

Commit 37158f9

Browse files
committed
Add V2 ChannelPhase variants
1 parent b0368df commit 37158f9

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
@@ -905,6 +905,10 @@ impl_writeable_tlv_based!(PendingChannelMonitorUpdate, {
905905
pub(super) enum ChannelPhase<SP: Deref> where SP::Target: SignerProvider {
906906
UnfundedOutboundV1(OutboundV1Channel<SP>),
907907
UnfundedInboundV1(InboundV1Channel<SP>),
908+
#[cfg(dual_funding)]
909+
UnfundedOutboundV2(OutboundV2Channel<SP>),
910+
#[cfg(dual_funding)]
911+
UnfundedInboundV2(InboundV2Channel<SP>),
908912
Funded(Channel<SP>),
909913
}
910914

@@ -917,6 +921,10 @@ impl<'a, SP: Deref> ChannelPhase<SP> where
917921
ChannelPhase::Funded(chan) => &chan.context,
918922
ChannelPhase::UnfundedOutboundV1(chan) => &chan.context,
919923
ChannelPhase::UnfundedInboundV1(chan) => &chan.context,
924+
#[cfg(dual_funding)]
925+
ChannelPhase::UnfundedOutboundV2(chan) => &chan.context,
926+
#[cfg(dual_funding)]
927+
ChannelPhase::UnfundedInboundV2(chan) => &chan.context,
920928
}
921929
}
922930

@@ -925,6 +933,10 @@ impl<'a, SP: Deref> ChannelPhase<SP> where
925933
ChannelPhase::Funded(ref mut chan) => &mut chan.context,
926934
ChannelPhase::UnfundedOutboundV1(ref mut chan) => &mut chan.context,
927935
ChannelPhase::UnfundedInboundV1(ref mut chan) => &mut chan.context,
936+
#[cfg(dual_funding)]
937+
ChannelPhase::UnfundedOutboundV2(ref mut chan) => &mut chan.context,
938+
#[cfg(dual_funding)]
939+
ChannelPhase::UnfundedInboundV2(ref mut chan) => &mut chan.context,
928940
}
929941
}
930942
}

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);
@@ -5023,6 +5038,16 @@ where
50235038
process_unfunded_channel_tick(chan_id, &mut chan.context, &mut chan.unfunded_context,
50245039
pending_msg_events, counterparty_node_id)
50255040
},
5041+
#[cfg(dual_funding)]
5042+
ChannelPhase::UnfundedInboundV2(chan) => {
5043+
process_unfunded_channel_tick(chan_id, &mut chan.context, &mut chan.unfunded_context,
5044+
pending_msg_events, counterparty_node_id)
5045+
},
5046+
#[cfg(dual_funding)]
5047+
ChannelPhase::UnfundedOutboundV2(chan) => {
5048+
process_unfunded_channel_tick(chan_id, &mut chan.context, &mut chan.unfunded_context,
5049+
pending_msg_events, counterparty_node_id)
5050+
},
50265051
}
50275052
});
50285053

@@ -6164,14 +6189,27 @@ where
61646189
num_unfunded_channels += 1;
61656190
}
61666191
},
6167-
ChannelPhase::UnfundedInboundV1(chan) => {
6168-
if chan.context.minimum_depth().unwrap_or(1) != 0 {
6192+
ChannelPhase::UnfundedInboundV1(_) => {
6193+
if phase.context().minimum_depth().unwrap_or(1) != 0 {
6194+
num_unfunded_channels += 1;
6195+
}
6196+
},
6197+
// TODO(dual_funding): Combine this match arm with above.
6198+
#[cfg(dual_funding)]
6199+
ChannelPhase::UnfundedInboundV2(_) => {
6200+
if phase.context().minimum_depth().unwrap_or(1) != 0 {
61696201
num_unfunded_channels += 1;
61706202
}
61716203
},
61726204
ChannelPhase::UnfundedOutboundV1(_) => {
61736205
// Outbound channels don't contribute to the unfunded count in the DoS context.
61746206
continue;
6207+
},
6208+
// TODO(dual_funding): Combine this match arm with above.
6209+
#[cfg(dual_funding)]
6210+
ChannelPhase::UnfundedOutboundV2(_) => {
6211+
// Outbound channels don't contribute to the unfunded count in the DoS context.
6212+
continue;
61756213
}
61766214
}
61776215
}
@@ -6584,6 +6622,14 @@ where
65846622
let mut chan = remove_channel_phase!(self, chan_phase_entry);
65856623
finish_shutdown = Some(chan.context_mut().force_shutdown(false, ClosureReason::CounterpartyCoopClosedUnfundedChannel));
65866624
},
6625+
// TODO(dual_funding): Combine this match arm with above.
6626+
#[cfg(dual_funding)]
6627+
ChannelPhase::UnfundedInboundV2(_) | ChannelPhase::UnfundedOutboundV2(_) => {
6628+
let context = phase.context_mut();
6629+
log_error!(self.logger, "Immediately closing unfunded channel {} as peer asked to cooperatively shut it down (which is unnecessary)", &msg.channel_id);
6630+
let mut chan = remove_channel_phase!(self, chan_phase_entry);
6631+
finish_shutdown = Some(chan.context_mut().force_shutdown(false, ClosureReason::CounterpartyCoopClosedUnfundedChannel));
6632+
},
65876633
}
65886634
} else {
65896635
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))
@@ -8448,6 +8494,9 @@ where
84488494
match phase {
84498495
// Retain unfunded channels.
84508496
ChannelPhase::UnfundedOutboundV1(_) | ChannelPhase::UnfundedInboundV1(_) => true,
8497+
// TODO(dual_funding): Combine this match arm with above.
8498+
#[cfg(dual_funding)]
8499+
ChannelPhase::UnfundedOutboundV2(_) | ChannelPhase::UnfundedInboundV2(_) => true,
84518500
ChannelPhase::Funded(channel) => {
84528501
let res = f(channel);
84538502
if let Ok((channel_ready_opt, mut timed_out_pending_htlcs, announcement_sigs)) = res {
@@ -8915,6 +8964,14 @@ where
89158964
ChannelPhase::UnfundedInboundV1(chan) => {
89168965
&mut chan.context
89178966
},
8967+
#[cfg(dual_funding)]
8968+
ChannelPhase::UnfundedOutboundV2(chan) => {
8969+
&mut chan.context
8970+
},
8971+
#[cfg(dual_funding)]
8972+
ChannelPhase::UnfundedInboundV2(chan) => {
8973+
&mut chan.context
8974+
},
89188975
};
89198976
// Clean up for removal.
89208977
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)