Skip to content

Commit 3d6091a

Browse files
committed
Reintroduce cfg(dual_funding) for handling of open_channel2 messages
1 parent 6e85a0d commit 3d6091a

File tree

5 files changed

+53
-26
lines changed

5 files changed

+53
-26
lines changed

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,5 @@ check-cfg = [
6565
"cfg(require_route_graph_test)",
6666
"cfg(splicing)",
6767
"cfg(async_payments)",
68+
"cfg(dual_funding)",
6869
]

lightning/src/ln/channel.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -1131,6 +1131,7 @@ pub(super) enum ChannelPhase<SP: Deref> where SP::Target: SignerProvider {
11311131
UnfundedInboundV1(InboundV1Channel<SP>),
11321132
#[allow(dead_code)] // TODO(dual_funding): Remove once creating V2 channels is enabled.
11331133
UnfundedOutboundV2(OutboundV2Channel<SP>),
1134+
#[allow(dead_code)] // TODO(dual_funding): Remove once accepting V2 channels is enabled.
11341135
UnfundedInboundV2(InboundV2Channel<SP>),
11351136
Funded(Channel<SP>),
11361137
}
@@ -4080,7 +4081,7 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
40804081
})
40814082
}
40824083

4083-
#[cfg(test)]
4084+
#[cfg(all(test, dual_funding))]
40844085
pub fn get_initial_counterparty_commitment_signature_for_test<L: Deref>(
40854086
&mut self, logger: &L, channel_transaction_parameters: ChannelTransactionParameters,
40864087
counterparty_cur_commitment_point_override: PublicKey,
@@ -4150,6 +4151,7 @@ fn get_v2_channel_reserve_satoshis(channel_value_satoshis: u64, dust_limit_satos
41504151
cmp::min(channel_value_satoshis, cmp::max(q, dust_limit_satoshis))
41514152
}
41524153

4154+
#[allow(dead_code)] // TODO(dual_funding): Remove once V2 channels is enabled.
41534155
pub(super) fn calculate_our_funding_satoshis(
41544156
is_initiator: bool, funding_inputs: &[(TxIn, TransactionU16LenLimited)],
41554157
total_witness_weight: Weight, funding_feerate_sat_per_1000_weight: u32,
@@ -4199,6 +4201,7 @@ pub(super) struct DualFundingChannelContext {
41994201
/// to the current block height to align incentives against fee-sniping.
42004202
pub funding_tx_locktime: LockTime,
42014203
/// The feerate set by the initiator to be used for the funding transaction.
4204+
#[allow(dead_code)] // TODO(dual_funding): Remove once V2 channels is enabled.
42024205
pub funding_feerate_sat_per_1000_weight: u32,
42034206
/// The funding inputs we will be contributing to the channel.
42044207
///
@@ -8276,6 +8279,7 @@ pub(super) struct OutboundV1Channel<SP: Deref> where SP::Target: SignerProvider
82768279
}
82778280

82788281
impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
8282+
#[allow(dead_code)] // TODO(dual_funding): Remove once opending V2 channels is enabled.
82798283
pub fn new<ES: Deref, F: Deref, L: Deref>(
82808284
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP, counterparty_node_id: PublicKey, their_features: &InitFeatures,
82818285
channel_value_satoshis: u64, push_msat: u64, user_id: u128, config: &UserConfig, current_chain_height: u32,
@@ -8901,6 +8905,7 @@ pub(super) struct InboundV2Channel<SP: Deref> where SP::Target: SignerProvider {
89018905
impl<SP: Deref> InboundV2Channel<SP> where SP::Target: SignerProvider {
89028906
/// Creates a new dual-funded channel from a remote side's request for one.
89038907
/// Assumes chain_hash has already been checked and corresponds with what we expect!
8908+
#[allow(dead_code)] // TODO(dual_funding): Remove once V2 channels is enabled.
89048909
pub fn new<ES: Deref, F: Deref, L: Deref>(
89058910
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP,
89068911
holder_node_id: PublicKey, counterparty_node_id: PublicKey, our_supported_features: &ChannelTypeFeatures,
@@ -9005,6 +9010,7 @@ impl<SP: Deref> InboundV2Channel<SP> where SP::Target: SignerProvider {
90059010
/// should be sent back to the counterparty node.
90069011
///
90079012
/// [`msgs::AcceptChannelV2`]: crate::ln::msgs::AcceptChannelV2
9013+
#[allow(dead_code)] // TODO(dual_funding): Remove once V2 channels is enabled.
90089014
pub fn accept_inbound_dual_funded_channel(&self) -> msgs::AcceptChannelV2 {
90099015
if self.context.is_outbound() {
90109016
debug_assert!(false, "Tried to send accept_channel for an outbound channel?");
@@ -9027,6 +9033,7 @@ impl<SP: Deref> InboundV2Channel<SP> where SP::Target: SignerProvider {
90279033
/// use [`InboundV1Channel::accept_inbound_channel`] instead.
90289034
///
90299035
/// [`msgs::AcceptChannelV2`]: crate::ln::msgs::AcceptChannelV2
9036+
#[allow(dead_code)] // TODO(dual_funding): Remove once V2 channels is enabled.
90309037
fn generate_accept_channel_v2_message(&self) -> msgs::AcceptChannelV2 {
90319038
let first_per_commitment_point = self.context.holder_signer.as_ref().get_per_commitment_point(
90329039
self.context.holder_commitment_point.transaction_number(), &self.context.secp_ctx)

lightning/src/ln/channelmanager.rs

+18-4
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ use crate::events::{self, Event, EventHandler, EventsProvider, InboundChannelFun
4848
use crate::ln::inbound_payment;
4949
use crate::ln::types::ChannelId;
5050
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
51-
use crate::ln::channel::{self, Channel, ChannelPhase, ChannelError, ChannelUpdateStatus, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, InboundV1Channel, WithChannelContext, InboundV2Channel, InteractivelyFunded as _};
51+
use crate::ln::channel::{self, Channel, ChannelPhase, ChannelError, ChannelUpdateStatus, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, InboundV1Channel, WithChannelContext, InteractivelyFunded as _};
52+
#[cfg(dual_funding)]
53+
use crate::ln::channel::InboundV2Channel;
5254
use crate::ln::channel_state::ChannelDetails;
5355
use crate::types::features::{Bolt12InvoiceFeatures, ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
5456
#[cfg(any(feature = "_test_utils", test))]
@@ -1376,11 +1378,13 @@ impl <SP: Deref> PeerState<SP> where SP::Target: SignerProvider {
13761378
#[derive(Clone)]
13771379
pub(super) enum OpenChannelMessage {
13781380
V1(msgs::OpenChannel),
1381+
#[cfg(dual_funding)]
13791382
V2(msgs::OpenChannelV2),
13801383
}
13811384

13821385
pub(super) enum OpenChannelMessageRef<'a> {
13831386
V1(&'a msgs::OpenChannel),
1387+
#[cfg(dual_funding)]
13841388
V2(&'a msgs::OpenChannelV2),
13851389
}
13861390

@@ -7686,8 +7690,8 @@ where
76867690

76877691
fn do_accept_inbound_channel(
76887692
&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, accept_0conf: bool,
7689-
user_channel_id: u128, funding_inputs: Vec<(TxIn, TransactionU16LenLimited)>,
7690-
total_witness_weight: Weight,
7693+
user_channel_id: u128, _funding_inputs: Vec<(TxIn, TransactionU16LenLimited)>,
7694+
_total_witness_weight: Weight,
76917695
) -> Result<(), APIError> {
76927696
let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(*temporary_channel_id), None);
76937697
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
@@ -7728,10 +7732,11 @@ where
77287732
(*temporary_channel_id, ChannelPhase::UnfundedInboundV1(channel), message_send_event)
77297733
})
77307734
},
7735+
#[cfg(dual_funding)]
77317736
OpenChannelMessage::V2(open_channel_msg) => {
77327737
InboundV2Channel::new(&self.fee_estimator, &self.entropy_source, &self.signer_provider,
77337738
self.get_our_node_id(), *counterparty_node_id, &self.channel_type_features(), &peer_state.latest_features,
7734-
&open_channel_msg, funding_inputs, total_witness_weight, user_channel_id,
7739+
&open_channel_msg, _funding_inputs, _total_witness_weight, user_channel_id,
77357740
&self.default_configuration, best_block_height, &self.logger
77367741
).map_err(|_| MsgHandleErrInternal::from_chan_no_close(
77377742
ChannelError::Close(
@@ -7882,6 +7887,7 @@ where
78827887
fn internal_open_channel(&self, counterparty_node_id: &PublicKey, msg: OpenChannelMessageRef<'_>) -> Result<(), MsgHandleErrInternal> {
78837888
let common_fields = match msg {
78847889
OpenChannelMessageRef::V1(msg) => &msg.common_fields,
7890+
#[cfg(dual_funding)]
78857891
OpenChannelMessageRef::V2(msg) => &msg.common_fields,
78867892
};
78877893

@@ -7959,6 +7965,7 @@ where
79597965
funding_satoshis: common_fields.funding_satoshis,
79607966
channel_negotiation_type: match msg {
79617967
OpenChannelMessageRef::V1(msg) => InboundChannelFunds::PushMsat(msg.push_msat),
7968+
#[cfg(dual_funding)]
79627969
OpenChannelMessageRef::V2(_) => InboundChannelFunds::DualFunded,
79637970
},
79647971
channel_type,
@@ -7968,6 +7975,7 @@ where
79687975
peer_state.inbound_channel_request_by_id.insert(channel_id, InboundChannelRequest {
79697976
open_channel_msg: match msg {
79707977
OpenChannelMessageRef::V1(msg) => OpenChannelMessage::V1(msg.clone()),
7978+
#[cfg(dual_funding)]
79717979
OpenChannelMessageRef::V2(msg) => OpenChannelMessage::V2(msg.clone()),
79727980
},
79737981
ticks_remaining: UNACCEPTED_INBOUND_CHANNEL_AGE_LIMIT_TICKS,
@@ -8000,6 +8008,7 @@ where
80008008
};
80018009
(ChannelPhase::UnfundedInboundV1(channel), message_send_event)
80028010
},
8011+
#[cfg(dual_funding)]
80038012
OpenChannelMessageRef::V2(msg) => {
80048013
let channel = InboundV2Channel::new(&self.fee_estimator, &self.entropy_source,
80058014
&self.signer_provider, self.get_our_node_id(), *counterparty_node_id,
@@ -11273,6 +11282,7 @@ where
1127311282
// Note that we never need to persist the updated ChannelManager for an inbound
1127411283
// open_channel message - pre-funded channels are never written so there should be no
1127511284
// change to the contents.
11285+
#[cfg(dual_funding)]
1127611286
let _persistence_guard = PersistenceNotifierGuard::optionally_notify(self, || {
1127711287
let res = self.internal_open_channel(&counterparty_node_id, OpenChannelMessageRef::V2(msg));
1127811288
let persist = match &res {
@@ -11285,6 +11295,10 @@ where
1128511295
let _ = handle_error!(self, res, counterparty_node_id);
1128611296
persist
1128711297
});
11298+
#[cfg(not(dual_funding))]
11299+
let _: Result<(), _> = handle_error!(self, Err(MsgHandleErrInternal::send_err_msg_no_close(
11300+
"Dual-funded channels not supported".to_owned(),
11301+
msg.common_fields.temporary_channel_id.clone())), counterparty_node_id);
1128811302
}
1128911303

1129011304
fn handle_accept_channel(&self, counterparty_node_id: PublicKey, msg: &msgs::AcceptChannel) {

lightning/src/ln/dual_funding_tests.rs

+24-19
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,36 @@
99

1010
//! Tests that test the creation of dual-funded channels in ChannelManager.
1111
12-
use bitcoin::Weight;
13-
14-
use crate::chain::chaininterface::{ConfirmationTarget, FeeEstimator, LowerBoundedFeeEstimator};
15-
use crate::events::{Event, MessageSendEvent, MessageSendEventsProvider};
16-
use crate::ln::chan_utils::{
17-
make_funding_redeemscript, ChannelPublicKeys, ChannelTransactionParameters,
18-
CounterpartyChannelTransactionParameters,
19-
};
20-
use crate::ln::channel::{
21-
calculate_our_funding_satoshis, OutboundV2Channel, MIN_CHAN_DUST_LIMIT_SATOSHIS,
12+
#[cfg(dual_funding)]
13+
use {
14+
crate::chain::chaininterface::{ConfirmationTarget, FeeEstimator, LowerBoundedFeeEstimator},
15+
crate::events::{Event, MessageSendEvent, MessageSendEventsProvider},
16+
crate::ln::chan_utils::{
17+
make_funding_redeemscript, ChannelPublicKeys, ChannelTransactionParameters,
18+
CounterpartyChannelTransactionParameters,
19+
},
20+
crate::ln::channel::{
21+
calculate_our_funding_satoshis, OutboundV2Channel, MIN_CHAN_DUST_LIMIT_SATOSHIS,
22+
},
23+
crate::ln::channel_keys::{DelayedPaymentBasepoint, HtlcBasepoint, RevocationBasepoint},
24+
crate::ln::functional_test_utils::*,
25+
crate::ln::msgs::ChannelMessageHandler,
26+
crate::ln::msgs::{CommitmentSigned, TxAddInput, TxAddOutput, TxComplete},
27+
crate::ln::types::ChannelId,
28+
crate::prelude::*,
29+
crate::sign::{ChannelSigner as _, P2WPKH_WITNESS_WEIGHT},
30+
crate::util::ser::TransactionU16LenLimited,
31+
crate::util::test_utils,
32+
bitcoin::Weight,
2233
};
23-
use crate::ln::channel_keys::{DelayedPaymentBasepoint, HtlcBasepoint, RevocationBasepoint};
24-
use crate::ln::functional_test_utils::*;
25-
use crate::ln::msgs::ChannelMessageHandler;
26-
use crate::ln::msgs::{CommitmentSigned, TxAddInput, TxAddOutput, TxComplete};
27-
use crate::ln::types::ChannelId;
28-
use crate::prelude::*;
29-
use crate::sign::{ChannelSigner as _, P2WPKH_WITNESS_WEIGHT};
30-
use crate::util::ser::TransactionU16LenLimited;
31-
use crate::util::test_utils;
3234

35+
#[cfg(dual_funding)]
3336
// Dual-funding: V2 Channel Establishment Tests
3437
struct V2ChannelEstablishmentTestSession {
3538
initiator_input_value_satoshis: u64,
3639
}
3740

41+
#[cfg(dual_funding)]
3842
// TODO(dual_funding): Use real node and API for creating V2 channels as initiator when available,
3943
// instead of manually constructing messages.
4044
fn do_test_v2_channel_establishment(
@@ -252,6 +256,7 @@ fn do_test_v2_channel_establishment(
252256
}
253257

254258
#[test]
259+
#[cfg(dual_funding)]
255260
fn test_v2_channel_establishment() {
256261
// Only initiator contributes, no persist pending
257262
do_test_v2_channel_establishment(

lightning/src/ln/peer_handler.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1820,8 +1820,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
18201820
wire::Message::OpenChannel(msg) => {
18211821
self.message_handler.chan_handler.handle_open_channel(their_node_id, &msg);
18221822
},
1823-
wire::Message::OpenChannelV2(msg) => {
1824-
self.message_handler.chan_handler.handle_open_channel_v2(their_node_id, &msg);
1823+
wire::Message::OpenChannelV2(_msg) => {
1824+
self.message_handler.chan_handler.handle_open_channel_v2(their_node_id, &_msg);
18251825
},
18261826
wire::Message::AcceptChannel(msg) => {
18271827
self.message_handler.chan_handler.handle_accept_channel(their_node_id, &msg);

0 commit comments

Comments
 (0)