@@ -740,19 +740,6 @@ pub(super) struct ChannelContext<Signer: ChannelSigner> {
740
740
#[cfg(not(test))]
741
741
closing_fee_limits: Option<(u64, u64)>,
742
742
743
- /// Flag that ensures that `accept_inbound_channel` must be called before `funding_created`
744
- /// is executed successfully. The reason for this flag is that when the
745
- /// `UserConfig::manually_accept_inbound_channels` config flag is set to true, inbound channels
746
- /// are required to be manually accepted by the node operator before the `msgs::AcceptChannel`
747
- /// message is created and sent out. During the manual accept process, `accept_inbound_channel`
748
- /// is called by `ChannelManager::accept_inbound_channel`.
749
- ///
750
- /// The flag counteracts that a counterparty node could theoretically send a
751
- /// `msgs::FundingCreated` message before the node operator has manually accepted an inbound
752
- /// channel request made by the counterparty node. That would execute `funding_created` before
753
- /// `accept_inbound_channel`, and `funding_created` should therefore not execute successfully.
754
- inbound_awaiting_accept: bool,
755
-
756
743
/// The hash of the block in which the funding transaction was included.
757
744
funding_tx_confirmed_in: Option<BlockHash>,
758
745
funding_tx_confirmation_height: u32,
@@ -5650,8 +5637,6 @@ impl<Signer: WriteableEcdsaChannelSigner> OutboundV1Channel<Signer> {
5650
5637
closing_fee_limits: None,
5651
5638
target_closing_feerate_sats_per_kw: None,
5652
5639
5653
- inbound_awaiting_accept: false,
5654
-
5655
5640
funding_tx_confirmed_in: None,
5656
5641
funding_tx_confirmation_height: 0,
5657
5642
short_channel_id: None,
@@ -6032,7 +6017,7 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6032
6017
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP,
6033
6018
counterparty_node_id: PublicKey, our_supported_features: &ChannelTypeFeatures,
6034
6019
their_features: &InitFeatures, msg: &msgs::OpenChannel, user_id: u128, config: &UserConfig,
6035
- current_chain_height: u32, logger: &L, outbound_scid_alias: u64
6020
+ current_chain_height: u32, logger: &L, outbound_scid_alias: u64, is_0conf: bool,
6036
6021
) -> Result<InboundV1Channel<Signer>, ChannelError>
6037
6022
where ES::Target: EntropySource,
6038
6023
SP::Target: SignerProvider<Signer = Signer>,
@@ -6222,6 +6207,12 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6222
6207
let mut secp_ctx = Secp256k1::new();
6223
6208
secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
6224
6209
6210
+ let minimum_depth = if is_0conf {
6211
+ Some(0)
6212
+ } else {
6213
+ Some(cmp::max(config.channel_handshake_config.minimum_depth, 1))
6214
+ };
6215
+
6225
6216
let chan = Self {
6226
6217
context: ChannelContext {
6227
6218
user_id,
@@ -6280,8 +6271,6 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6280
6271
closing_fee_limits: None,
6281
6272
target_closing_feerate_sats_per_kw: None,
6282
6273
6283
- inbound_awaiting_accept: true,
6284
-
6285
6274
funding_tx_confirmed_in: None,
6286
6275
funding_tx_confirmation_height: 0,
6287
6276
short_channel_id: None,
@@ -6299,7 +6288,7 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6299
6288
holder_htlc_minimum_msat: if config.channel_handshake_config.our_htlc_minimum_msat == 0 { 1 } else { config.channel_handshake_config.our_htlc_minimum_msat },
6300
6289
counterparty_max_accepted_htlcs: msg.max_accepted_htlcs,
6301
6290
holder_max_accepted_htlcs: cmp::min(config.channel_handshake_config.our_max_accepted_htlcs, MAX_HTLCS),
6302
- minimum_depth: Some(cmp::max(config.channel_handshake_config.minimum_depth, 1)) ,
6291
+ minimum_depth,
6303
6292
6304
6293
counterparty_forwarding_info: None,
6305
6294
@@ -6357,16 +6346,6 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6357
6346
Ok(chan)
6358
6347
}
6359
6348
6360
- pub fn is_awaiting_accept(&self) -> bool {
6361
- self.context.inbound_awaiting_accept
6362
- }
6363
-
6364
- /// Sets this channel to accepting 0conf, must be done before `get_accept_channel`
6365
- pub fn set_0conf(&mut self) {
6366
- assert!(self.context.inbound_awaiting_accept);
6367
- self.context.minimum_depth = Some(0);
6368
- }
6369
-
6370
6349
/// Marks an inbound channel as accepted and generates a [`msgs::AcceptChannel`] message which
6371
6350
/// should be sent back to the counterparty node.
6372
6351
///
@@ -6381,13 +6360,8 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6381
6360
if self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
6382
6361
panic!("Tried to send an accept_channel for a channel that has already advanced");
6383
6362
}
6384
- if !self.context.inbound_awaiting_accept {
6385
- panic!("The inbound channel has already been accepted");
6386
- }
6387
6363
6388
6364
self.context.user_id = user_id;
6389
- self.context.inbound_awaiting_accept = false;
6390
-
6391
6365
self.generate_accept_channel_message()
6392
6366
}
6393
6367
@@ -6482,9 +6456,6 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6482
6456
// channel.
6483
6457
return Err((self, ChannelError::Close("Received funding_created after we got the channel!".to_owned())));
6484
6458
}
6485
- if self.context.inbound_awaiting_accept {
6486
- return Err((self, ChannelError::Close("FundingCreated message received before the channel was accepted".to_owned())));
6487
- }
6488
6459
if self.context.commitment_secrets.get_min_seen_secret() != (1 << 48) ||
6489
6460
self.context.cur_counterparty_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER ||
6490
6461
self.context.cur_holder_commitment_transaction_number != INITIAL_COMMITMENT_NUMBER {
@@ -7384,8 +7355,6 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
7384
7355
closing_fee_limits: None,
7385
7356
target_closing_feerate_sats_per_kw,
7386
7357
7387
- inbound_awaiting_accept: false,
7388
-
7389
7358
funding_tx_confirmed_in,
7390
7359
funding_tx_confirmation_height,
7391
7360
short_channel_id,
@@ -7625,7 +7594,7 @@ mod tests {
7625
7594
// Make sure A's dust limit is as we expect.
7626
7595
let open_channel_msg = node_a_chan.get_open_channel(genesis_block(network).header.block_hash());
7627
7596
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
7628
- let mut node_b_chan = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
7597
+ let mut node_b_chan = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, 42, /*is_0conf=*/false ).unwrap();
7629
7598
7630
7599
// Node B --> Node A: accept channel, explicitly setting B's dust limit.
7631
7600
let mut accept_channel_msg = node_b_chan.accept_inbound_channel(0);
@@ -7754,7 +7723,7 @@ mod tests {
7754
7723
// Create Node B's channel by receiving Node A's open_channel message
7755
7724
let open_channel_msg = node_a_chan.get_open_channel(chain_hash);
7756
7725
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
7757
- let mut node_b_chan = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
7726
+ let mut node_b_chan = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, 42, /*is_0conf=*/false ).unwrap();
7758
7727
7759
7728
// Node B --> Node A: accept channel
7760
7729
let accept_channel_msg = node_b_chan.accept_inbound_channel(0);
@@ -7826,12 +7795,12 @@ mod tests {
7826
7795
// Test that `InboundV1Channel::new` creates a channel with the correct value for
7827
7796
// `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
7828
7797
// which is set to the lower bound - 1 (2%) of the `channel_value`.
7829
- let chan_3 = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_2_percent), &channelmanager::provided_init_features(&config_2_percent), &chan_1_open_channel_msg, 7, &config_2_percent, 0, &&logger, 42).unwrap();
7798
+ let chan_3 = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_2_percent), &channelmanager::provided_init_features(&config_2_percent), &chan_1_open_channel_msg, 7, &config_2_percent, 0, &&logger, 42, /*is_0conf=*/false ).unwrap();
7830
7799
let chan_3_value_msat = chan_3.context.channel_value_satoshis * 1000;
7831
7800
assert_eq!(chan_3.context.holder_max_htlc_value_in_flight_msat, (chan_3_value_msat as f64 * 0.02) as u64);
7832
7801
7833
7802
// Test with the upper bound - 1 of valid values (99%).
7834
- let chan_4 = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_99_percent), &channelmanager::provided_init_features(&config_99_percent), &chan_1_open_channel_msg, 7, &config_99_percent, 0, &&logger, 42).unwrap();
7803
+ let chan_4 = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_99_percent), &channelmanager::provided_init_features(&config_99_percent), &chan_1_open_channel_msg, 7, &config_99_percent, 0, &&logger, 42, /*is_0conf=*/false ).unwrap();
7835
7804
let chan_4_value_msat = chan_4.context.channel_value_satoshis * 1000;
7836
7805
assert_eq!(chan_4.context.holder_max_htlc_value_in_flight_msat, (chan_4_value_msat as f64 * 0.99) as u64);
7837
7806
@@ -7850,14 +7819,14 @@ mod tests {
7850
7819
7851
7820
// Test that `InboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
7852
7821
// if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
7853
- let chan_7 = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_0_percent), &channelmanager::provided_init_features(&config_0_percent), &chan_1_open_channel_msg, 7, &config_0_percent, 0, &&logger, 42).unwrap();
7822
+ let chan_7 = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_0_percent), &channelmanager::provided_init_features(&config_0_percent), &chan_1_open_channel_msg, 7, &config_0_percent, 0, &&logger, 42, /*is_0conf=*/false ).unwrap();
7854
7823
let chan_7_value_msat = chan_7.context.channel_value_satoshis * 1000;
7855
7824
assert_eq!(chan_7.context.holder_max_htlc_value_in_flight_msat, (chan_7_value_msat as f64 * 0.01) as u64);
7856
7825
7857
7826
// Test that `InboundV1Channel::new` uses the upper bound of the configurable percentage values
7858
7827
// (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
7859
7828
// than 100.
7860
- let chan_8 = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_101_percent), &channelmanager::provided_init_features(&config_101_percent), &chan_1_open_channel_msg, 7, &config_101_percent, 0, &&logger, 42).unwrap();
7829
+ let chan_8 = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&config_101_percent), &channelmanager::provided_init_features(&config_101_percent), &chan_1_open_channel_msg, 7, &config_101_percent, 0, &&logger, 42, /*is_0conf=*/false ).unwrap();
7861
7830
let chan_8_value_msat = chan_8.context.channel_value_satoshis * 1000;
7862
7831
assert_eq!(chan_8.context.holder_max_htlc_value_in_flight_msat, chan_8_value_msat);
7863
7832
}
@@ -7907,15 +7876,15 @@ mod tests {
7907
7876
inbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (inbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
7908
7877
7909
7878
if outbound_selected_channel_reserve_perc + inbound_selected_channel_reserve_perc < 1.0 {
7910
- let chan_inbound_node = InboundV1Channel::<EnforcingSigner>::new(&&fee_est, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&inbound_node_config), &channelmanager::provided_init_features(&outbound_node_config), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, 42).unwrap();
7879
+ let chan_inbound_node = InboundV1Channel::<EnforcingSigner>::new(&&fee_est, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&inbound_node_config), &channelmanager::provided_init_features(&outbound_node_config), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, 42, /*is_0conf=*/false ).unwrap();
7911
7880
7912
7881
let expected_inbound_selected_chan_reserve = cmp::max(MIN_THEIR_CHAN_RESERVE_SATOSHIS, (chan.context.channel_value_satoshis as f64 * inbound_selected_channel_reserve_perc) as u64);
7913
7882
7914
7883
assert_eq!(chan_inbound_node.context.holder_selected_channel_reserve_satoshis, expected_inbound_selected_chan_reserve);
7915
7884
assert_eq!(chan_inbound_node.context.counterparty_selected_channel_reserve_satoshis.unwrap(), expected_outbound_selected_chan_reserve);
7916
7885
} else {
7917
7886
// Channel Negotiations failed
7918
- let result = InboundV1Channel::<EnforcingSigner>::new(&&fee_est, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&inbound_node_config), &channelmanager::provided_init_features(&outbound_node_config), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, 42);
7887
+ let result = InboundV1Channel::<EnforcingSigner>::new(&&fee_est, &&keys_provider, &&keys_provider, inbound_node_id, &channelmanager::provided_channel_type_features(&inbound_node_config), &channelmanager::provided_init_features(&outbound_node_config), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, 42, /*is_0conf=*/false );
7919
7888
assert!(result.is_err());
7920
7889
}
7921
7890
}
@@ -7940,7 +7909,7 @@ mod tests {
7940
7909
// Make sure A's dust limit is as we expect.
7941
7910
let open_channel_msg = node_a_chan.get_open_channel(genesis_block(network).header.block_hash());
7942
7911
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
7943
- let mut node_b_chan = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
7912
+ let mut node_b_chan = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, 42, /*is_0conf=*/false ).unwrap();
7944
7913
7945
7914
// Node B --> Node A: accept channel, explicitly setting B's dust limit.
7946
7915
let mut accept_channel_msg = node_b_chan.accept_inbound_channel(0);
@@ -8778,7 +8747,7 @@ mod tests {
8778
8747
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
8779
8748
let res = InboundV1Channel::<EnforcingSigner>::new(&feeest, &&keys_provider, &&keys_provider,
8780
8749
node_b_node_id, &channelmanager::provided_channel_type_features(&config),
8781
- &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, 42);
8750
+ &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, 42, /*is_0conf=*/false );
8782
8751
assert!(res.is_ok());
8783
8752
}
8784
8753
@@ -8820,7 +8789,7 @@ mod tests {
8820
8789
let channel_b = InboundV1Channel::<EnforcingSigner>::new(
8821
8790
&fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
8822
8791
&channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
8823
- &open_channel_msg, 7, &config, 0, &&logger, 42
8792
+ &open_channel_msg, 7, &config, 0, &&logger, 42, /*is_0conf=*/false
8824
8793
).unwrap();
8825
8794
8826
8795
assert_eq!(channel_a.context.channel_type, expected_channel_type);
@@ -8862,7 +8831,7 @@ mod tests {
8862
8831
let channel_b = InboundV1Channel::<EnforcingSigner>::new(
8863
8832
&fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
8864
8833
&channelmanager::provided_channel_type_features(&config), &init_features_with_simple_anchors,
8865
- &open_channel_msg, 7, &config, 0, &&logger, 42
8834
+ &open_channel_msg, 7, &config, 0, &&logger, 42, /*is_0conf=*/false
8866
8835
);
8867
8836
assert!(channel_b.is_err());
8868
8837
}
@@ -8905,7 +8874,7 @@ mod tests {
8905
8874
let res = InboundV1Channel::<EnforcingSigner>::new(
8906
8875
&fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
8907
8876
&channelmanager::provided_channel_type_features(&config), &simple_anchors_init,
8908
- &open_channel_msg, 7, &config, 0, &&logger, 42
8877
+ &open_channel_msg, 7, &config, 0, &&logger, 42, /*is_0conf=*/false
8909
8878
);
8910
8879
assert!(res.is_err());
8911
8880
@@ -8923,7 +8892,7 @@ mod tests {
8923
8892
let channel_b = InboundV1Channel::<EnforcingSigner>::new(
8924
8893
&fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
8925
8894
&channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
8926
- &open_channel_msg, 7, &config, 0, &&logger, 42
8895
+ &open_channel_msg, 7, &config, 0, &&logger, 42, /*is_0conf=*/false
8927
8896
).unwrap();
8928
8897
8929
8898
let mut accept_channel_msg = channel_b.get_accept_channel_message();
0 commit comments