Skip to content

Commit 32b5d84

Browse files
committed
Stop relying on *Features::known in channel{,manager}.rs
As we move towards specify supported/required feature bits in the module(s) where they are supported, the global `known` feature set constructors no longer make sense. Here we stop relying on the `known` method in the channel modules.
1 parent c1d8cb9 commit 32b5d84

File tree

2 files changed

+50
-52
lines changed

2 files changed

+50
-52
lines changed

lightning/src/ln/channel.rs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6645,10 +6645,10 @@ mod tests {
66456645
use bitcoin::network::constants::Network;
66466646
use hex;
66476647
use ln::PaymentHash;
6648-
use ln::channelmanager::{HTLCSource, PaymentId};
6648+
use ln::channelmanager::{self, HTLCSource, PaymentId};
66496649
use ln::channel::{Channel, InboundHTLCOutput, OutboundHTLCOutput, InboundHTLCState, OutboundHTLCState, HTLCCandidate, HTLCInitiator};
66506650
use ln::channel::{MAX_FUNDING_SATOSHIS_NO_WUMBO, TOTAL_BITCOIN_SUPPLY_SATOSHIS, MIN_THEIR_CHAN_RESERVE_SATOSHIS};
6651-
use ln::features::{InitFeatures, ChannelTypeFeatures};
6651+
use ln::features::ChannelTypeFeatures;
66526652
use ln::msgs::{ChannelUpdate, DataLossProtect, DecodeError, OptionalField, UnsignedChannelUpdate, MAX_VALUE_MSAT};
66536653
use ln::script::ShutdownScript;
66546654
use ln::chan_utils;
@@ -6737,7 +6737,7 @@ mod tests {
67376737

67386738
#[test]
67396739
fn upfront_shutdown_script_incompatibility() {
6740-
let features = InitFeatures::known().clear_shutdown_anysegwit();
6740+
let features = channelmanager::provided_init_features().clear_shutdown_anysegwit();
67416741
let non_v0_segwit_shutdown_script =
67426742
ShutdownScript::new_witness_program(WitnessVersion::V16, &[0, 40]).unwrap();
67436743

@@ -6774,7 +6774,7 @@ mod tests {
67746774

67756775
let node_a_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
67766776
let config = UserConfig::default();
6777-
let node_a_chan = Channel::<EnforcingSigner>::new_outbound(&bounded_fee_estimator, &&keys_provider, node_a_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config, 0, 42).unwrap();
6777+
let node_a_chan = Channel::<EnforcingSigner>::new_outbound(&bounded_fee_estimator, &&keys_provider, node_a_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config, 0, 42).unwrap();
67786778

67796779
// Now change the fee so we can check that the fee in the open_channel message is the
67806780
// same as the old fee.
@@ -6800,18 +6800,18 @@ mod tests {
68006800
// Create Node A's channel pointing to Node B's pubkey
68016801
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
68026802
let config = UserConfig::default();
6803-
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, node_b_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config, 0, 42).unwrap();
6803+
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config, 0, 42).unwrap();
68046804

68056805
// Create Node B's channel by receiving Node A's open_channel message
68066806
// Make sure A's dust limit is as we expect.
68076807
let open_channel_msg = node_a_chan.get_open_channel(genesis_block(network).header.block_hash());
68086808
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
6809-
let mut node_b_chan = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, node_b_node_id, &InitFeatures::known(), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
6809+
let mut node_b_chan = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
68106810

68116811
// Node B --> Node A: accept channel, explicitly setting B's dust limit.
68126812
let mut accept_channel_msg = node_b_chan.accept_inbound_channel(0);
68136813
accept_channel_msg.dust_limit_satoshis = 546;
6814-
node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &InitFeatures::known()).unwrap();
6814+
node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features()).unwrap();
68156815
node_a_chan.holder_dust_limit_satoshis = 1560;
68166816

68176817
// Put some inbound and outbound HTLCs in A's channel.
@@ -6870,7 +6870,7 @@ mod tests {
68706870

68716871
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
68726872
let config = UserConfig::default();
6873-
let mut chan = Channel::<EnforcingSigner>::new_outbound(&fee_est, &&keys_provider, node_id, &InitFeatures::known(), 10000000, 100000, 42, &config, 0, 42).unwrap();
6873+
let mut chan = Channel::<EnforcingSigner>::new_outbound(&fee_est, &&keys_provider, node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config, 0, 42).unwrap();
68746874

68756875
let commitment_tx_fee_0_htlcs = Channel::<EnforcingSigner>::commit_tx_fee_msat(chan.feerate_per_kw, 0, chan.opt_anchors());
68766876
let commitment_tx_fee_1_htlc = Channel::<EnforcingSigner>::commit_tx_fee_msat(chan.feerate_per_kw, 1, chan.opt_anchors());
@@ -6919,16 +6919,16 @@ mod tests {
69196919
// Create Node A's channel pointing to Node B's pubkey
69206920
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
69216921
let config = UserConfig::default();
6922-
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, node_b_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config, 0, 42).unwrap();
6922+
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config, 0, 42).unwrap();
69236923

69246924
// Create Node B's channel by receiving Node A's open_channel message
69256925
let open_channel_msg = node_a_chan.get_open_channel(chain_hash);
69266926
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
6927-
let mut node_b_chan = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, node_b_node_id, &InitFeatures::known(), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
6927+
let mut node_b_chan = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(), &open_channel_msg, 7, &config, 0, &&logger, 42).unwrap();
69286928

69296929
// Node B --> Node A: accept channel
69306930
let accept_channel_msg = node_b_chan.accept_inbound_channel(0);
6931-
node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &InitFeatures::known()).unwrap();
6931+
node_a_chan.accept_channel(&accept_channel_msg, &config.channel_handshake_limits, &channelmanager::provided_init_features()).unwrap();
69326932

69336933
// Node A --> Node B: funding created
69346934
let output_script = node_a_chan.get_funding_redeemscript();
@@ -6992,12 +6992,12 @@ mod tests {
69926992
// Test that `new_outbound` creates a channel with the correct value for
69936993
// `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
69946994
// which is set to the lower bound + 1 (2%) of the `channel_value`.
6995-
let chan_1 = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, outbound_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config_2_percent, 0, 42).unwrap();
6995+
let chan_1 = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config_2_percent, 0, 42).unwrap();
69966996
let chan_1_value_msat = chan_1.channel_value_satoshis * 1000;
69976997
assert_eq!(chan_1.holder_max_htlc_value_in_flight_msat, (chan_1_value_msat as f64 * 0.02) as u64);
69986998

69996999
// Test with the upper bound - 1 of valid values (99%).
7000-
let chan_2 = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, outbound_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config_99_percent, 0, 42).unwrap();
7000+
let chan_2 = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config_99_percent, 0, 42).unwrap();
70017001
let chan_2_value_msat = chan_2.channel_value_satoshis * 1000;
70027002
assert_eq!(chan_2.holder_max_htlc_value_in_flight_msat, (chan_2_value_msat as f64 * 0.99) as u64);
70037003

@@ -7006,38 +7006,38 @@ mod tests {
70067006
// Test that `new_from_req` creates a channel with the correct value for
70077007
// `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
70087008
// which is set to the lower bound - 1 (2%) of the `channel_value`.
7009-
let chan_3 = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, inbound_node_id, &InitFeatures::known(), &chan_1_open_channel_msg, 7, &config_2_percent, 0, &&logger, 42).unwrap();
7009+
let chan_3 = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, inbound_node_id, &channelmanager::provided_init_features(), &chan_1_open_channel_msg, 7, &config_2_percent, 0, &&logger, 42).unwrap();
70107010
let chan_3_value_msat = chan_3.channel_value_satoshis * 1000;
70117011
assert_eq!(chan_3.holder_max_htlc_value_in_flight_msat, (chan_3_value_msat as f64 * 0.02) as u64);
70127012

70137013
// Test with the upper bound - 1 of valid values (99%).
7014-
let chan_4 = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, inbound_node_id, &InitFeatures::known(), &chan_1_open_channel_msg, 7, &config_99_percent, 0, &&logger, 42).unwrap();
7014+
let chan_4 = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, inbound_node_id, &channelmanager::provided_init_features(), &chan_1_open_channel_msg, 7, &config_99_percent, 0, &&logger, 42).unwrap();
70157015
let chan_4_value_msat = chan_4.channel_value_satoshis * 1000;
70167016
assert_eq!(chan_4.holder_max_htlc_value_in_flight_msat, (chan_4_value_msat as f64 * 0.99) as u64);
70177017

70187018
// Test that `new_outbound` uses the lower bound of the configurable percentage values (1%)
70197019
// if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
7020-
let chan_5 = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, outbound_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config_0_percent, 0, 42).unwrap();
7020+
let chan_5 = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config_0_percent, 0, 42).unwrap();
70217021
let chan_5_value_msat = chan_5.channel_value_satoshis * 1000;
70227022
assert_eq!(chan_5.holder_max_htlc_value_in_flight_msat, (chan_5_value_msat as f64 * 0.01) as u64);
70237023

70247024
// Test that `new_outbound` uses the upper bound of the configurable percentage values
70257025
// (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
70267026
// than 100.
7027-
let chan_6 = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, outbound_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config_101_percent, 0, 42).unwrap();
7027+
let chan_6 = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config_101_percent, 0, 42).unwrap();
70287028
let chan_6_value_msat = chan_6.channel_value_satoshis * 1000;
70297029
assert_eq!(chan_6.holder_max_htlc_value_in_flight_msat, chan_6_value_msat);
70307030

70317031
// Test that `new_from_req` uses the lower bound of the configurable percentage values (1%)
70327032
// if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
7033-
let chan_7 = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, inbound_node_id, &InitFeatures::known(), &chan_1_open_channel_msg, 7, &config_0_percent, 0, &&logger, 42).unwrap();
7033+
let chan_7 = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, inbound_node_id, &channelmanager::provided_init_features(), &chan_1_open_channel_msg, 7, &config_0_percent, 0, &&logger, 42).unwrap();
70347034
let chan_7_value_msat = chan_7.channel_value_satoshis * 1000;
70357035
assert_eq!(chan_7.holder_max_htlc_value_in_flight_msat, (chan_7_value_msat as f64 * 0.01) as u64);
70367036

70377037
// Test that `new_from_req` uses the upper bound of the configurable percentage values
70387038
// (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
70397039
// than 100.
7040-
let chan_8 = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, inbound_node_id, &InitFeatures::known(), &chan_1_open_channel_msg, 7, &config_101_percent, 0, &&logger, 42).unwrap();
7040+
let chan_8 = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider, inbound_node_id, &channelmanager::provided_init_features(), &chan_1_open_channel_msg, 7, &config_101_percent, 0, &&logger, 42).unwrap();
70417041
let chan_8_value_msat = chan_8.channel_value_satoshis * 1000;
70427042
assert_eq!(chan_8.holder_max_htlc_value_in_flight_msat, chan_8_value_msat);
70437043
}
@@ -7077,7 +7077,7 @@ mod tests {
70777077

70787078
let mut outbound_node_config = UserConfig::default();
70797079
outbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (outbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
7080-
let chan = Channel::<EnforcingSigner>::new_outbound(&&fee_est, &&keys_provider, outbound_node_id, &InitFeatures::known(), channel_value_satoshis, 100_000, 42, &outbound_node_config, 0, 42).unwrap();
7080+
let chan = Channel::<EnforcingSigner>::new_outbound(&&fee_est, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(), channel_value_satoshis, 100_000, 42, &outbound_node_config, 0, 42).unwrap();
70817081

70827082
let expected_outbound_selected_chan_reserve = cmp::max(MIN_THEIR_CHAN_RESERVE_SATOSHIS, (chan.channel_value_satoshis as f64 * outbound_selected_channel_reserve_perc) as u64);
70837083
assert_eq!(chan.holder_selected_channel_reserve_satoshis, expected_outbound_selected_chan_reserve);
@@ -7087,15 +7087,15 @@ mod tests {
70877087
inbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (inbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
70887088

70897089
if outbound_selected_channel_reserve_perc + inbound_selected_channel_reserve_perc < 1.0 {
7090-
let chan_inbound_node = Channel::<EnforcingSigner>::new_from_req(&&fee_est, &&keys_provider, inbound_node_id, &InitFeatures::known(), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, 42).unwrap();
7090+
let chan_inbound_node = Channel::<EnforcingSigner>::new_from_req(&&fee_est, &&keys_provider, inbound_node_id, &channelmanager::provided_init_features(), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, 42).unwrap();
70917091

70927092
let expected_inbound_selected_chan_reserve = cmp::max(MIN_THEIR_CHAN_RESERVE_SATOSHIS, (chan.channel_value_satoshis as f64 * inbound_selected_channel_reserve_perc) as u64);
70937093

70947094
assert_eq!(chan_inbound_node.holder_selected_channel_reserve_satoshis, expected_inbound_selected_chan_reserve);
70957095
assert_eq!(chan_inbound_node.counterparty_selected_channel_reserve_satoshis.unwrap(), expected_outbound_selected_chan_reserve);
70967096
} else {
70977097
// Channel Negotiations failed
7098-
let result = Channel::<EnforcingSigner>::new_from_req(&&fee_est, &&keys_provider, inbound_node_id, &InitFeatures::known(), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, 42);
7098+
let result = Channel::<EnforcingSigner>::new_from_req(&&fee_est, &&keys_provider, inbound_node_id, &channelmanager::provided_init_features(), &chan_open_channel_msg, 7, &inbound_node_config, 0, &&logger, 42);
70997099
assert!(result.is_err());
71007100
}
71017101
}
@@ -7112,7 +7112,7 @@ mod tests {
71127112
// Create a channel.
71137113
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
71147114
let config = UserConfig::default();
7115-
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, node_b_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config, 0, 42).unwrap();
7115+
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config, 0, 42).unwrap();
71167116
assert!(node_a_chan.counterparty_forwarding_info.is_none());
71177117
assert_eq!(node_a_chan.holder_htlc_minimum_msat, 1); // the default
71187118
assert!(node_a_chan.counterparty_forwarding_info().is_none());
@@ -7191,7 +7191,7 @@ mod tests {
71917191
let counterparty_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
71927192
let mut config = UserConfig::default();
71937193
config.channel_handshake_config.announced_channel = false;
7194-
let mut chan = Channel::<InMemorySigner>::new_outbound(&LowerBoundedFeeEstimator::new(&feeest), &&keys_provider, counterparty_node_id, &InitFeatures::known(), 10_000_000, 100000, 42, &config, 0, 42).unwrap(); // Nothing uses their network key in this test
7194+
let mut chan = Channel::<InMemorySigner>::new_outbound(&LowerBoundedFeeEstimator::new(&feeest), &&keys_provider, counterparty_node_id, &channelmanager::provided_init_features(), 10_000_000, 100000, 42, &config, 0, 42).unwrap(); // Nothing uses their network key in this test
71957195
chan.holder_dust_limit_satoshis = 546;
71967196
chan.counterparty_selected_channel_reserve_satoshis = Some(0); // Filled in in accept_channel
71977197

@@ -7906,7 +7906,7 @@ mod tests {
79067906
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
79077907
let config = UserConfig::default();
79087908
let node_a_chan = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider,
7909-
node_b_node_id, &InitFeatures::known(), 10000000, 100000, 42, &config, 0, 42).unwrap();
7909+
node_b_node_id, &channelmanager::provided_init_features(), 10000000, 100000, 42, &config, 0, 42).unwrap();
79107910

79117911
let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
79127912
channel_type_features.set_zero_conf_required();
@@ -7915,7 +7915,7 @@ mod tests {
79157915
open_channel_msg.channel_type = Some(channel_type_features);
79167916
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
79177917
let res = Channel::<EnforcingSigner>::new_from_req(&feeest, &&keys_provider,
7918-
node_b_node_id, &InitFeatures::known(), &open_channel_msg, 7, &config, 0, &&logger, 42);
7918+
node_b_node_id, &channelmanager::provided_init_features(), &open_channel_msg, 7, &config, 0, &&logger, 42);
79197919
assert!(res.is_ok());
79207920
}
79217921
}

0 commit comments

Comments
 (0)