@@ -1882,7 +1882,7 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
1882
1882
Ok(channel_context)
1883
1883
}
1884
1884
1885
- fn new_for_outbound_channel<'a, ES: Deref, F: Deref>(
1885
+ fn new_for_outbound_channel<'a, ES: Deref, F: Deref, L: Deref >(
1886
1886
fee_estimator: &'a LowerBoundedFeeEstimator<F>,
1887
1887
entropy_source: &'a ES,
1888
1888
signer_provider: &'a SP,
@@ -1899,11 +1899,13 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
1899
1899
channel_keys_id: [u8; 32],
1900
1900
holder_signer: <SP::Target as SignerProvider>::EcdsaSigner,
1901
1901
pubkeys: ChannelPublicKeys,
1902
+ logger: &L,
1902
1903
) -> Result<ChannelContext<SP>, APIError>
1903
1904
where
1904
1905
ES::Target: EntropySource,
1905
1906
F::Target: FeeEstimator,
1906
1907
SP::Target: SignerProvider,
1908
+ L::Target: Logger,
1907
1909
{
1908
1910
// This will be updated with the counterparty contribution if this is a dual-funded channel
1909
1911
let channel_value_satoshis = funding_satoshis;
@@ -7372,13 +7374,14 @@ pub(super) struct OutboundV1Channel<SP: Deref> where SP::Target: SignerProvider
7372
7374
}
7373
7375
7374
7376
impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
7375
- pub fn new<ES: Deref, F: Deref>(
7377
+ pub fn new<ES: Deref, F: Deref, L: Deref >(
7376
7378
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP, counterparty_node_id: PublicKey, their_features: &InitFeatures,
7377
7379
channel_value_satoshis: u64, push_msat: u64, user_id: u128, config: &UserConfig, current_chain_height: u32,
7378
- outbound_scid_alias: u64, temporary_channel_id: Option<ChannelId>
7380
+ outbound_scid_alias: u64, temporary_channel_id: Option<ChannelId>, logger: &L
7379
7381
) -> Result<OutboundV1Channel<SP>, APIError>
7380
7382
where ES::Target: EntropySource,
7381
- F::Target: FeeEstimator
7383
+ F::Target: FeeEstimator,
7384
+ L::Target: Logger,
7382
7385
{
7383
7386
let holder_selected_channel_reserve_satoshis = get_holder_selected_channel_reserve_satoshis(channel_value_satoshis, config);
7384
7387
if holder_selected_channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
@@ -7410,6 +7413,7 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
7410
7413
channel_keys_id,
7411
7414
holder_signer,
7412
7415
pubkeys,
7416
+ logger,
7413
7417
)?,
7414
7418
unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 }
7415
7419
};
@@ -8105,14 +8109,15 @@ pub(super) struct OutboundV2Channel<SP: Deref> where SP::Target: SignerProvider
8105
8109
8106
8110
#[cfg(any(dual_funding, splicing))]
8107
8111
impl<SP: Deref> OutboundV2Channel<SP> where SP::Target: SignerProvider {
8108
- pub fn new<ES: Deref, F: Deref>(
8112
+ pub fn new<ES: Deref, F: Deref, L: Deref >(
8109
8113
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP,
8110
8114
counterparty_node_id: PublicKey, their_features: &InitFeatures, funding_satoshis: u64,
8111
8115
user_id: u128, config: &UserConfig, current_chain_height: u32, outbound_scid_alias: u64,
8112
- funding_confirmation_target: ConfirmationTarget,
8116
+ funding_confirmation_target: ConfirmationTarget, logger: &L,
8113
8117
) -> Result<OutboundV2Channel<SP>, APIError>
8114
8118
where ES::Target: EntropySource,
8115
8119
F::Target: FeeEstimator,
8120
+ L::Target: Logger,
8116
8121
{
8117
8122
let channel_keys_id = signer_provider.generate_channel_keys_id(false, funding_satoshis, user_id);
8118
8123
let holder_signer = signer_provider.derive_channel_signer(funding_satoshis, channel_keys_id);
@@ -8144,6 +8149,7 @@ impl<SP: Deref> OutboundV2Channel<SP> where SP::Target: SignerProvider {
8144
8149
channel_keys_id,
8145
8150
holder_signer,
8146
8151
pubkeys,
8152
+ logger,
8147
8153
)?,
8148
8154
unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 },
8149
8155
dual_funding_context: DualFundingChannelContext {
@@ -9523,11 +9529,12 @@ mod tests {
9523
9529
keys_provider.expect(OnGetShutdownScriptpubkey {
9524
9530
returns: non_v0_segwit_shutdown_script.clone(),
9525
9531
});
9532
+ let logger = test_utils::TestLogger::new();
9526
9533
9527
9534
let secp_ctx = Secp256k1::new();
9528
9535
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9529
9536
let config = UserConfig::default();
9530
- match OutboundV1Channel::<&TestKeysInterface>::new(&LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 253 }), &&keys_provider, &&keys_provider, node_id, &features, 10000000, 100000, 42, &config, 0, 42, None) {
9537
+ match OutboundV1Channel::<&TestKeysInterface>::new(&LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 253 }), &&keys_provider, &&keys_provider, node_id, &features, 10000000, 100000, 42, &config, 0, 42, None, &&logger ) {
9531
9538
Err(APIError::IncompatibleShutdownScript { script }) => {
9532
9539
assert_eq!(script.into_inner(), non_v0_segwit_shutdown_script.into_inner());
9533
9540
},
@@ -9547,10 +9554,11 @@ mod tests {
9547
9554
let seed = [42; 32];
9548
9555
let network = Network::Testnet;
9549
9556
let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9557
+ let logger = test_utils::TestLogger::new();
9550
9558
9551
9559
let node_a_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9552
9560
let config = UserConfig::default();
9553
- let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&bounded_fee_estimator, &&keys_provider, &&keys_provider, node_a_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
9561
+ let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&bounded_fee_estimator, &&keys_provider, &&keys_provider, node_a_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &&logger ).unwrap();
9554
9562
9555
9563
// Now change the fee so we can check that the fee in the open_channel message is the
9556
9564
// same as the old fee.
@@ -9577,7 +9585,7 @@ mod tests {
9577
9585
// Create Node A's channel pointing to Node B's pubkey
9578
9586
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9579
9587
let config = UserConfig::default();
9580
- let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
9588
+ let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &&logger ).unwrap();
9581
9589
9582
9590
// Create Node B's channel by receiving Node A's open_channel message
9583
9591
// Make sure A's dust limit is as we expect.
@@ -9657,10 +9665,11 @@ mod tests {
9657
9665
let seed = [42; 32];
9658
9666
let network = Network::Testnet;
9659
9667
let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9668
+ let logger = test_utils::TestLogger::new();
9660
9669
9661
9670
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9662
9671
let config = UserConfig::default();
9663
- let mut chan = OutboundV1Channel::<&TestKeysInterface>::new(&fee_est, &&keys_provider, &&keys_provider, node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
9672
+ let mut chan = OutboundV1Channel::<&TestKeysInterface>::new(&fee_est, &&keys_provider, &&keys_provider, node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &&logger ).unwrap();
9664
9673
9665
9674
let commitment_tx_fee_0_htlcs = commit_tx_fee_msat(chan.context.feerate_per_kw, 0, chan.context.get_channel_type());
9666
9675
let commitment_tx_fee_1_htlc = commit_tx_fee_msat(chan.context.feerate_per_kw, 1, chan.context.get_channel_type());
@@ -9709,7 +9718,7 @@ mod tests {
9709
9718
// Create Node A's channel pointing to Node B's pubkey
9710
9719
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9711
9720
let config = UserConfig::default();
9712
- let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
9721
+ let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &&logger ).unwrap();
9713
9722
9714
9723
// Create Node B's channel by receiving Node A's open_channel message
9715
9724
let open_channel_msg = node_a_chan.get_open_channel(chain_hash);
@@ -9773,12 +9782,12 @@ mod tests {
9773
9782
// Test that `OutboundV1Channel::new` creates a channel with the correct value for
9774
9783
// `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
9775
9784
// which is set to the lower bound + 1 (2%) of the `channel_value`.
9776
- let chan_1 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_2_percent), 10000000, 100000, 42, &config_2_percent, 0, 42, None).unwrap();
9785
+ let chan_1 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_2_percent), 10000000, 100000, 42, &config_2_percent, 0, 42, None, &&logger ).unwrap();
9777
9786
let chan_1_value_msat = chan_1.context.channel_value_satoshis * 1000;
9778
9787
assert_eq!(chan_1.context.holder_max_htlc_value_in_flight_msat, (chan_1_value_msat as f64 * 0.02) as u64);
9779
9788
9780
9789
// Test with the upper bound - 1 of valid values (99%).
9781
- let chan_2 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_99_percent), 10000000, 100000, 42, &config_99_percent, 0, 42, None).unwrap();
9790
+ let chan_2 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_99_percent), 10000000, 100000, 42, &config_99_percent, 0, 42, None, &&logger ).unwrap();
9782
9791
let chan_2_value_msat = chan_2.context.channel_value_satoshis * 1000;
9783
9792
assert_eq!(chan_2.context.holder_max_htlc_value_in_flight_msat, (chan_2_value_msat as f64 * 0.99) as u64);
9784
9793
@@ -9798,14 +9807,14 @@ mod tests {
9798
9807
9799
9808
// Test that `OutboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
9800
9809
// if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
9801
- let chan_5 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_0_percent), 10000000, 100000, 42, &config_0_percent, 0, 42, None).unwrap();
9810
+ let chan_5 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_0_percent), 10000000, 100000, 42, &config_0_percent, 0, 42, None, &&logger ).unwrap();
9802
9811
let chan_5_value_msat = chan_5.context.channel_value_satoshis * 1000;
9803
9812
assert_eq!(chan_5.context.holder_max_htlc_value_in_flight_msat, (chan_5_value_msat as f64 * 0.01) as u64);
9804
9813
9805
9814
// Test that `OutboundV1Channel::new` uses the upper bound of the configurable percentage values
9806
9815
// (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
9807
9816
// than 100.
9808
- let chan_6 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_101_percent), 10000000, 100000, 42, &config_101_percent, 0, 42, None).unwrap();
9817
+ let chan_6 = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&config_101_percent), 10000000, 100000, 42, &config_101_percent, 0, 42, None, &&logger ).unwrap();
9809
9818
let chan_6_value_msat = chan_6.context.channel_value_satoshis * 1000;
9810
9819
assert_eq!(chan_6.context.holder_max_htlc_value_in_flight_msat, chan_6_value_msat);
9811
9820
@@ -9858,7 +9867,7 @@ mod tests {
9858
9867
9859
9868
let mut outbound_node_config = UserConfig::default();
9860
9869
outbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (outbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
9861
- let chan = OutboundV1Channel::<&TestKeysInterface>::new(&&fee_est, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&outbound_node_config), channel_value_satoshis, 100_000, 42, &outbound_node_config, 0, 42, None).unwrap();
9870
+ let chan = OutboundV1Channel::<&TestKeysInterface>::new(&&fee_est, &&keys_provider, &&keys_provider, outbound_node_id, &channelmanager::provided_init_features(&outbound_node_config), channel_value_satoshis, 100_000, 42, &outbound_node_config, 0, 42, None, &&logger ).unwrap();
9862
9871
9863
9872
let expected_outbound_selected_chan_reserve = cmp::max(MIN_THEIR_CHAN_RESERVE_SATOSHIS, (chan.context.channel_value_satoshis as f64 * outbound_selected_channel_reserve_perc) as u64);
9864
9873
assert_eq!(chan.context.holder_selected_channel_reserve_satoshis, expected_outbound_selected_chan_reserve);
@@ -9895,7 +9904,7 @@ mod tests {
9895
9904
// Create Node A's channel pointing to Node B's pubkey
9896
9905
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9897
9906
let config = UserConfig::default();
9898
- let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
9907
+ let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &&logger ).unwrap();
9899
9908
9900
9909
// Create Node B's channel by receiving Node A's open_channel message
9901
9910
// Make sure A's dust limit is as we expect.
@@ -9971,7 +9980,7 @@ mod tests {
9971
9980
let config = UserConfig::default();
9972
9981
let features = channelmanager::provided_init_features(&config);
9973
9982
let mut outbound_chan = OutboundV1Channel::<&TestKeysInterface>::new(
9974
- &feeest, &&keys_provider, &&keys_provider, node_b_node_id, &features, 10000000, 100000, 42, &config, 0, 42, None
9983
+ &feeest, &&keys_provider, &&keys_provider, node_b_node_id, &features, 10000000, 100000, 42, &config, 0, 42, None, &&logger
9975
9984
).unwrap();
9976
9985
let inbound_chan = InboundV1Channel::<&TestKeysInterface>::new(
9977
9986
&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config),
@@ -10125,7 +10134,7 @@ mod tests {
10125
10134
let counterparty_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
10126
10135
let mut config = UserConfig::default();
10127
10136
config.channel_handshake_config.announced_channel = false;
10128
- let mut chan = OutboundV1Channel::<&Keys>::new(&LowerBoundedFeeEstimator::new(&feeest), &&keys_provider, &&keys_provider, counterparty_node_id, &channelmanager::provided_init_features(&config), 10_000_000, 0, 42, &config, 0, 42, None).unwrap(); // Nothing uses their network key in this test
10137
+ let mut chan = OutboundV1Channel::<&Keys>::new(&LowerBoundedFeeEstimator::new(&feeest), &&keys_provider, &&keys_provider, counterparty_node_id, &channelmanager::provided_init_features(&config), 10_000_000, 0, 42, &config, 0, 42, None, &logger ).unwrap(); // Nothing uses their network key in this test
10129
10138
chan.context.holder_dust_limit_satoshis = 546;
10130
10139
chan.context.counterparty_selected_channel_reserve_satoshis = Some(0); // Filled in in accept_channel
10131
10140
@@ -10872,7 +10881,7 @@ mod tests {
10872
10881
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
10873
10882
let config = UserConfig::default();
10874
10883
let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
10875
- node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
10884
+ node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &&logger ).unwrap();
10876
10885
10877
10886
let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
10878
10887
channel_type_features.set_zero_conf_required();
@@ -10907,7 +10916,7 @@ mod tests {
10907
10916
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
10908
10917
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
10909
10918
&channelmanager::provided_init_features(&UserConfig::default()), 10000000, 100000, 42,
10910
- &config, 0, 42, None
10919
+ &config, 0, 42, None, &&logger
10911
10920
).unwrap();
10912
10921
assert!(!channel_a.context.channel_type.supports_anchors_zero_fee_htlc_tx());
10913
10922
@@ -10918,7 +10927,7 @@ mod tests {
10918
10927
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
10919
10928
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
10920
10929
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
10921
- None
10930
+ None, &&logger
10922
10931
).unwrap();
10923
10932
10924
10933
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -10956,7 +10965,7 @@ mod tests {
10956
10965
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
10957
10966
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
10958
10967
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
10959
- None
10968
+ None, &&logger
10960
10969
).unwrap();
10961
10970
10962
10971
// Set `channel_type` to `None` to force the implicit feature negotiation.
@@ -11003,7 +11012,7 @@ mod tests {
11003
11012
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
11004
11013
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
11005
11014
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
11006
- None
11015
+ None, &&logger
11007
11016
).unwrap();
11008
11017
11009
11018
let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -11022,7 +11031,7 @@ mod tests {
11022
11031
// LDK.
11023
11032
let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
11024
11033
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b, &simple_anchors_init,
11025
- 10000000, 100000, 42, &config, 0, 42, None
11034
+ 10000000, 100000, 42, &config, 0, 42, None, &&logger
11026
11035
).unwrap();
11027
11036
11028
11037
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -11072,7 +11081,8 @@ mod tests {
11072
11081
&config,
11073
11082
0,
11074
11083
42,
11075
- None
11084
+ None,
11085
+ &&logger
11076
11086
).unwrap();
11077
11087
11078
11088
let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
0 commit comments