@@ -1814,7 +1814,7 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
1814
1814
Ok(channel_context)
1815
1815
}
1816
1816
1817
- fn new_for_outbound_channel<'a, ES: Deref, F: Deref>(
1817
+ fn new_for_outbound_channel<'a, ES: Deref, F: Deref, L: Deref >(
1818
1818
fee_estimator: &'a LowerBoundedFeeEstimator<F>,
1819
1819
entropy_source: &'a ES,
1820
1820
signer_provider: &'a SP,
@@ -1831,11 +1831,13 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
1831
1831
channel_keys_id: [u8; 32],
1832
1832
holder_signer: <SP::Target as SignerProvider>::EcdsaSigner,
1833
1833
pubkeys: ChannelPublicKeys,
1834
+ logger: &L,
1834
1835
) -> Result<ChannelContext<SP>, APIError>
1835
1836
where
1836
1837
ES::Target: EntropySource,
1837
1838
F::Target: FeeEstimator,
1838
1839
SP::Target: SignerProvider,
1840
+ L::Target: Logger,
1839
1841
{
1840
1842
// This will be updated with the counterparty contribution if this is a dual-funded channel
1841
1843
let channel_value_satoshis = funding_satoshis;
@@ -7514,13 +7516,14 @@ pub(super) struct OutboundV1Channel<SP: Deref> where SP::Target: SignerProvider
7514
7516
}
7515
7517
7516
7518
impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
7517
- pub fn new<ES: Deref, F: Deref>(
7519
+ pub fn new<ES: Deref, F: Deref, L: Deref >(
7518
7520
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP, counterparty_node_id: PublicKey, their_features: &InitFeatures,
7519
7521
channel_value_satoshis: u64, push_msat: u64, user_id: u128, config: &UserConfig, current_chain_height: u32,
7520
- outbound_scid_alias: u64, temporary_channel_id: Option<ChannelId>
7522
+ outbound_scid_alias: u64, temporary_channel_id: Option<ChannelId>, logger: &L
7521
7523
) -> Result<OutboundV1Channel<SP>, APIError>
7522
7524
where ES::Target: EntropySource,
7523
- F::Target: FeeEstimator
7525
+ F::Target: FeeEstimator,
7526
+ L::Target: Logger,
7524
7527
{
7525
7528
let holder_selected_channel_reserve_satoshis = get_holder_selected_channel_reserve_satoshis(channel_value_satoshis, config);
7526
7529
if holder_selected_channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
@@ -7552,6 +7555,7 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
7552
7555
channel_keys_id,
7553
7556
holder_signer,
7554
7557
pubkeys,
7558
+ logger,
7555
7559
)?,
7556
7560
unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 }
7557
7561
};
@@ -8128,14 +8132,15 @@ pub(super) struct OutboundV2Channel<SP: Deref> where SP::Target: SignerProvider
8128
8132
8129
8133
#[cfg(any(dual_funding, splicing))]
8130
8134
impl<SP: Deref> OutboundV2Channel<SP> where SP::Target: SignerProvider {
8131
- pub fn new<ES: Deref, F: Deref>(
8135
+ pub fn new<ES: Deref, F: Deref, L: Deref >(
8132
8136
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP,
8133
8137
counterparty_node_id: PublicKey, their_features: &InitFeatures, funding_satoshis: u64,
8134
8138
user_id: u128, config: &UserConfig, current_chain_height: u32, outbound_scid_alias: u64,
8135
- funding_confirmation_target: ConfirmationTarget,
8139
+ funding_confirmation_target: ConfirmationTarget, logger: &L,
8136
8140
) -> Result<OutboundV2Channel<SP>, APIError>
8137
8141
where ES::Target: EntropySource,
8138
8142
F::Target: FeeEstimator,
8143
+ L::Target: Logger,
8139
8144
{
8140
8145
let channel_keys_id = signer_provider.generate_channel_keys_id(false, funding_satoshis, user_id);
8141
8146
let holder_signer = signer_provider.derive_channel_signer(funding_satoshis, channel_keys_id);
@@ -8167,6 +8172,7 @@ impl<SP: Deref> OutboundV2Channel<SP> where SP::Target: SignerProvider {
8167
8172
channel_keys_id,
8168
8173
holder_signer,
8169
8174
pubkeys,
8175
+ logger,
8170
8176
)?,
8171
8177
unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 },
8172
8178
dual_funding_context: DualFundingChannelContext {
@@ -9574,11 +9580,12 @@ mod tests {
9574
9580
keys_provider.expect(OnGetShutdownScriptpubkey {
9575
9581
returns: non_v0_segwit_shutdown_script.clone(),
9576
9582
});
9583
+ let logger = test_utils::TestLogger::new();
9577
9584
9578
9585
let secp_ctx = Secp256k1::new();
9579
9586
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9580
9587
let config = UserConfig::default();
9581
- match OutboundV1Channel::<&TestKeysInterface>::new(&LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 253 }), &&keys_provider, &&keys_provider, node_id, &features, 10000000, 100000, 42, &config, 0, 42, None) {
9588
+ 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 ) {
9582
9589
Err(APIError::IncompatibleShutdownScript { script }) => {
9583
9590
assert_eq!(script.into_inner(), non_v0_segwit_shutdown_script.into_inner());
9584
9591
},
@@ -9598,10 +9605,11 @@ mod tests {
9598
9605
let seed = [42; 32];
9599
9606
let network = Network::Testnet;
9600
9607
let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9608
+ let logger = test_utils::TestLogger::new();
9601
9609
9602
9610
let node_a_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9603
9611
let config = UserConfig::default();
9604
- 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();
9612
+ 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();
9605
9613
9606
9614
// Now change the fee so we can check that the fee in the open_channel message is the
9607
9615
// same as the old fee.
@@ -9628,7 +9636,7 @@ mod tests {
9628
9636
// Create Node A's channel pointing to Node B's pubkey
9629
9637
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9630
9638
let config = UserConfig::default();
9631
- 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();
9639
+ 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();
9632
9640
9633
9641
// Create Node B's channel by receiving Node A's open_channel message
9634
9642
// Make sure A's dust limit is as we expect.
@@ -9708,10 +9716,11 @@ mod tests {
9708
9716
let seed = [42; 32];
9709
9717
let network = Network::Testnet;
9710
9718
let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9719
+ let logger = test_utils::TestLogger::new();
9711
9720
9712
9721
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9713
9722
let config = UserConfig::default();
9714
- 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();
9723
+ 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();
9715
9724
9716
9725
let commitment_tx_fee_0_htlcs = commit_tx_fee_msat(chan.context.feerate_per_kw, 0, chan.context.get_channel_type());
9717
9726
let commitment_tx_fee_1_htlc = commit_tx_fee_msat(chan.context.feerate_per_kw, 1, chan.context.get_channel_type());
@@ -9760,7 +9769,7 @@ mod tests {
9760
9769
// Create Node A's channel pointing to Node B's pubkey
9761
9770
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9762
9771
let config = UserConfig::default();
9763
- 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();
9772
+ 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();
9764
9773
9765
9774
// Create Node B's channel by receiving Node A's open_channel message
9766
9775
let open_channel_msg = node_a_chan.get_open_channel(chain_hash);
@@ -9824,12 +9833,12 @@ mod tests {
9824
9833
// Test that `OutboundV1Channel::new` creates a channel with the correct value for
9825
9834
// `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
9826
9835
// which is set to the lower bound + 1 (2%) of the `channel_value`.
9827
- 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();
9836
+ 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();
9828
9837
let chan_1_value_msat = chan_1.context.channel_value_satoshis * 1000;
9829
9838
assert_eq!(chan_1.context.holder_max_htlc_value_in_flight_msat, (chan_1_value_msat as f64 * 0.02) as u64);
9830
9839
9831
9840
// Test with the upper bound - 1 of valid values (99%).
9832
- 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();
9841
+ 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();
9833
9842
let chan_2_value_msat = chan_2.context.channel_value_satoshis * 1000;
9834
9843
assert_eq!(chan_2.context.holder_max_htlc_value_in_flight_msat, (chan_2_value_msat as f64 * 0.99) as u64);
9835
9844
@@ -9849,14 +9858,14 @@ mod tests {
9849
9858
9850
9859
// Test that `OutboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
9851
9860
// if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
9852
- 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();
9861
+ 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();
9853
9862
let chan_5_value_msat = chan_5.context.channel_value_satoshis * 1000;
9854
9863
assert_eq!(chan_5.context.holder_max_htlc_value_in_flight_msat, (chan_5_value_msat as f64 * 0.01) as u64);
9855
9864
9856
9865
// Test that `OutboundV1Channel::new` uses the upper bound of the configurable percentage values
9857
9866
// (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
9858
9867
// than 100.
9859
- 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();
9868
+ 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();
9860
9869
let chan_6_value_msat = chan_6.context.channel_value_satoshis * 1000;
9861
9870
assert_eq!(chan_6.context.holder_max_htlc_value_in_flight_msat, chan_6_value_msat);
9862
9871
@@ -9909,7 +9918,7 @@ mod tests {
9909
9918
9910
9919
let mut outbound_node_config = UserConfig::default();
9911
9920
outbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (outbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
9912
- 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();
9921
+ 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();
9913
9922
9914
9923
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);
9915
9924
assert_eq!(chan.context.holder_selected_channel_reserve_satoshis, expected_outbound_selected_chan_reserve);
@@ -9946,7 +9955,7 @@ mod tests {
9946
9955
// Create Node A's channel pointing to Node B's pubkey
9947
9956
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9948
9957
let config = UserConfig::default();
9949
- 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();
9958
+ 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();
9950
9959
9951
9960
// Create Node B's channel by receiving Node A's open_channel message
9952
9961
// Make sure A's dust limit is as we expect.
@@ -10022,7 +10031,7 @@ mod tests {
10022
10031
let config = UserConfig::default();
10023
10032
let features = channelmanager::provided_init_features(&config);
10024
10033
let mut outbound_chan = OutboundV1Channel::<&TestKeysInterface>::new(
10025
- &feeest, &&keys_provider, &&keys_provider, node_b_node_id, &features, 10000000, 100000, 42, &config, 0, 42, None
10034
+ &feeest, &&keys_provider, &&keys_provider, node_b_node_id, &features, 10000000, 100000, 42, &config, 0, 42, None, &&logger
10026
10035
).unwrap();
10027
10036
let inbound_chan = InboundV1Channel::<&TestKeysInterface>::new(
10028
10037
&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config),
@@ -10176,7 +10185,7 @@ mod tests {
10176
10185
let counterparty_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
10177
10186
let mut config = UserConfig::default();
10178
10187
config.channel_handshake_config.announced_channel = false;
10179
- 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
10188
+ 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
10180
10189
chan.context.holder_dust_limit_satoshis = 546;
10181
10190
chan.context.counterparty_selected_channel_reserve_satoshis = Some(0); // Filled in in accept_channel
10182
10191
@@ -10923,7 +10932,7 @@ mod tests {
10923
10932
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
10924
10933
let config = UserConfig::default();
10925
10934
let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
10926
- node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
10935
+ node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &&logger ).unwrap();
10927
10936
10928
10937
let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
10929
10938
channel_type_features.set_zero_conf_required();
@@ -10958,7 +10967,7 @@ mod tests {
10958
10967
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
10959
10968
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
10960
10969
&channelmanager::provided_init_features(&UserConfig::default()), 10000000, 100000, 42,
10961
- &config, 0, 42, None
10970
+ &config, 0, 42, None, &&logger
10962
10971
).unwrap();
10963
10972
assert!(!channel_a.context.channel_type.supports_anchors_zero_fee_htlc_tx());
10964
10973
@@ -10969,7 +10978,7 @@ mod tests {
10969
10978
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
10970
10979
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
10971
10980
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
10972
- None
10981
+ None, &&logger
10973
10982
).unwrap();
10974
10983
10975
10984
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -11007,7 +11016,7 @@ mod tests {
11007
11016
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
11008
11017
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
11009
11018
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
11010
- None
11019
+ None, &&logger
11011
11020
).unwrap();
11012
11021
11013
11022
// Set `channel_type` to `None` to force the implicit feature negotiation.
@@ -11054,7 +11063,7 @@ mod tests {
11054
11063
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
11055
11064
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
11056
11065
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
11057
- None
11066
+ None, &&logger
11058
11067
).unwrap();
11059
11068
11060
11069
let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -11073,7 +11082,7 @@ mod tests {
11073
11082
// LDK.
11074
11083
let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
11075
11084
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b, &simple_anchors_init,
11076
- 10000000, 100000, 42, &config, 0, 42, None
11085
+ 10000000, 100000, 42, &config, 0, 42, None, &&logger
11077
11086
).unwrap();
11078
11087
11079
11088
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -11123,7 +11132,8 @@ mod tests {
11123
11132
&config,
11124
11133
0,
11125
11134
42,
11126
- None
11135
+ None,
11136
+ &&logger
11127
11137
).unwrap();
11128
11138
11129
11139
let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
0 commit comments