@@ -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;
@@ -7525,13 +7527,14 @@ pub(super) struct OutboundV1Channel<SP: Deref> where SP::Target: SignerProvider
7525
7527
}
7526
7528
7527
7529
impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
7528
- pub fn new<ES: Deref, F: Deref>(
7530
+ pub fn new<ES: Deref, F: Deref, L: Deref >(
7529
7531
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP, counterparty_node_id: PublicKey, their_features: &InitFeatures,
7530
7532
channel_value_satoshis: u64, push_msat: u64, user_id: u128, config: &UserConfig, current_chain_height: u32,
7531
- outbound_scid_alias: u64, temporary_channel_id: Option<ChannelId>
7533
+ outbound_scid_alias: u64, temporary_channel_id: Option<ChannelId>, logger: L
7532
7534
) -> Result<OutboundV1Channel<SP>, APIError>
7533
7535
where ES::Target: EntropySource,
7534
- F::Target: FeeEstimator
7536
+ F::Target: FeeEstimator,
7537
+ L::Target: Logger,
7535
7538
{
7536
7539
let holder_selected_channel_reserve_satoshis = get_holder_selected_channel_reserve_satoshis(channel_value_satoshis, config);
7537
7540
if holder_selected_channel_reserve_satoshis < MIN_CHAN_DUST_LIMIT_SATOSHIS {
@@ -7563,6 +7566,7 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
7563
7566
channel_keys_id,
7564
7567
holder_signer,
7565
7568
pubkeys,
7569
+ logger,
7566
7570
)?,
7567
7571
unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 }
7568
7572
};
@@ -8149,14 +8153,15 @@ pub(super) struct OutboundV2Channel<SP: Deref> where SP::Target: SignerProvider
8149
8153
8150
8154
#[cfg(any(dual_funding, splicing))]
8151
8155
impl<SP: Deref> OutboundV2Channel<SP> where SP::Target: SignerProvider {
8152
- pub fn new<ES: Deref, F: Deref>(
8156
+ pub fn new<ES: Deref, F: Deref, L: Deref >(
8153
8157
fee_estimator: &LowerBoundedFeeEstimator<F>, entropy_source: &ES, signer_provider: &SP,
8154
8158
counterparty_node_id: PublicKey, their_features: &InitFeatures, funding_satoshis: u64,
8155
8159
user_id: u128, config: &UserConfig, current_chain_height: u32, outbound_scid_alias: u64,
8156
- funding_confirmation_target: ConfirmationTarget,
8160
+ funding_confirmation_target: ConfirmationTarget, logger: L,
8157
8161
) -> Result<OutboundV2Channel<SP>, APIError>
8158
8162
where ES::Target: EntropySource,
8159
8163
F::Target: FeeEstimator,
8164
+ L::Target: Logger,
8160
8165
{
8161
8166
let channel_keys_id = signer_provider.generate_channel_keys_id(false, funding_satoshis, user_id);
8162
8167
let holder_signer = signer_provider.derive_channel_signer(funding_satoshis, channel_keys_id);
@@ -8188,6 +8193,7 @@ impl<SP: Deref> OutboundV2Channel<SP> where SP::Target: SignerProvider {
8188
8193
channel_keys_id,
8189
8194
holder_signer,
8190
8195
pubkeys,
8196
+ logger,
8191
8197
)?,
8192
8198
unfunded_context: UnfundedChannelContext { unfunded_channel_age_ticks: 0 },
8193
8199
dual_funding_context: DualFundingChannelContext {
@@ -9595,11 +9601,12 @@ mod tests {
9595
9601
keys_provider.expect(OnGetShutdownScriptpubkey {
9596
9602
returns: non_v0_segwit_shutdown_script.clone(),
9597
9603
});
9604
+ let logger = test_utils::TestLogger::new();
9598
9605
9599
9606
let secp_ctx = Secp256k1::new();
9600
9607
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9601
9608
let config = UserConfig::default();
9602
- match OutboundV1Channel::<&TestKeysInterface>::new(&LowerBoundedFeeEstimator::new(&TestFeeEstimator { fee_est: 253 }), &&keys_provider, &&keys_provider, node_id, &features, 10000000, 100000, 42, &config, 0, 42, None) {
9609
+ 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 ) {
9603
9610
Err(APIError::IncompatibleShutdownScript { script }) => {
9604
9611
assert_eq!(script.into_inner(), non_v0_segwit_shutdown_script.into_inner());
9605
9612
},
@@ -9619,10 +9626,11 @@ mod tests {
9619
9626
let seed = [42; 32];
9620
9627
let network = Network::Testnet;
9621
9628
let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9629
+ let logger = test_utils::TestLogger::new();
9622
9630
9623
9631
let node_a_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9624
9632
let config = UserConfig::default();
9625
- 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();
9633
+ 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();
9626
9634
9627
9635
// Now change the fee so we can check that the fee in the open_channel message is the
9628
9636
// same as the old fee.
@@ -9649,7 +9657,7 @@ mod tests {
9649
9657
// Create Node A's channel pointing to Node B's pubkey
9650
9658
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9651
9659
let config = UserConfig::default();
9652
- 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();
9660
+ 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();
9653
9661
9654
9662
// Create Node B's channel by receiving Node A's open_channel message
9655
9663
// Make sure A's dust limit is as we expect.
@@ -9729,10 +9737,11 @@ mod tests {
9729
9737
let seed = [42; 32];
9730
9738
let network = Network::Testnet;
9731
9739
let keys_provider = test_utils::TestKeysInterface::new(&seed, network);
9740
+ let logger = test_utils::TestLogger::new();
9732
9741
9733
9742
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9734
9743
let config = UserConfig::default();
9735
- 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();
9744
+ 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();
9736
9745
9737
9746
let commitment_tx_fee_0_htlcs = commit_tx_fee_msat(chan.context.feerate_per_kw, 0, chan.context.get_channel_type());
9738
9747
let commitment_tx_fee_1_htlc = commit_tx_fee_msat(chan.context.feerate_per_kw, 1, chan.context.get_channel_type());
@@ -9781,7 +9790,7 @@ mod tests {
9781
9790
// Create Node A's channel pointing to Node B's pubkey
9782
9791
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9783
9792
let config = UserConfig::default();
9784
- 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();
9793
+ 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();
9785
9794
9786
9795
// Create Node B's channel by receiving Node A's open_channel message
9787
9796
let open_channel_msg = node_a_chan.get_open_channel(chain_hash);
@@ -9845,12 +9854,12 @@ mod tests {
9845
9854
// Test that `OutboundV1Channel::new` creates a channel with the correct value for
9846
9855
// `holder_max_htlc_value_in_flight_msat`, when configured with a valid percentage value,
9847
9856
// which is set to the lower bound + 1 (2%) of the `channel_value`.
9848
- 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();
9857
+ 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();
9849
9858
let chan_1_value_msat = chan_1.context.channel_value_satoshis * 1000;
9850
9859
assert_eq!(chan_1.context.holder_max_htlc_value_in_flight_msat, (chan_1_value_msat as f64 * 0.02) as u64);
9851
9860
9852
9861
// Test with the upper bound - 1 of valid values (99%).
9853
- 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();
9862
+ 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();
9854
9863
let chan_2_value_msat = chan_2.context.channel_value_satoshis * 1000;
9855
9864
assert_eq!(chan_2.context.holder_max_htlc_value_in_flight_msat, (chan_2_value_msat as f64 * 0.99) as u64);
9856
9865
@@ -9870,14 +9879,14 @@ mod tests {
9870
9879
9871
9880
// Test that `OutboundV1Channel::new` uses the lower bound of the configurable percentage values (1%)
9872
9881
// if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a value less than 1.
9873
- 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();
9882
+ 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();
9874
9883
let chan_5_value_msat = chan_5.context.channel_value_satoshis * 1000;
9875
9884
assert_eq!(chan_5.context.holder_max_htlc_value_in_flight_msat, (chan_5_value_msat as f64 * 0.01) as u64);
9876
9885
9877
9886
// Test that `OutboundV1Channel::new` uses the upper bound of the configurable percentage values
9878
9887
// (100%) if `max_inbound_htlc_value_in_flight_percent_of_channel` is set to a larger value
9879
9888
// than 100.
9880
- 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();
9889
+ 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();
9881
9890
let chan_6_value_msat = chan_6.context.channel_value_satoshis * 1000;
9882
9891
assert_eq!(chan_6.context.holder_max_htlc_value_in_flight_msat, chan_6_value_msat);
9883
9892
@@ -9930,7 +9939,7 @@ mod tests {
9930
9939
9931
9940
let mut outbound_node_config = UserConfig::default();
9932
9941
outbound_node_config.channel_handshake_config.their_channel_reserve_proportional_millionths = (outbound_selected_channel_reserve_perc * 1_000_000.0) as u32;
9933
- 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();
9942
+ 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();
9934
9943
9935
9944
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);
9936
9945
assert_eq!(chan.context.holder_selected_channel_reserve_satoshis, expected_outbound_selected_chan_reserve);
@@ -9967,7 +9976,7 @@ mod tests {
9967
9976
// Create Node A's channel pointing to Node B's pubkey
9968
9977
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
9969
9978
let config = UserConfig::default();
9970
- 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();
9979
+ 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();
9971
9980
9972
9981
// Create Node B's channel by receiving Node A's open_channel message
9973
9982
// Make sure A's dust limit is as we expect.
@@ -10044,7 +10053,7 @@ mod tests {
10044
10053
let config = UserConfig::default();
10045
10054
let features = channelmanager::provided_init_features(&config);
10046
10055
let mut outbound_chan = OutboundV1Channel::<&TestKeysInterface>::new(
10047
- &feeest, &&keys_provider, &&keys_provider, node_b_node_id, &features, 10000000, 100000, 42, &config, 0, 42, None
10056
+ &feeest, &&keys_provider, &&keys_provider, node_b_node_id, &features, 10000000, 100000, 42, &config, 0, 42, None, &logger
10048
10057
).unwrap();
10049
10058
let inbound_chan = InboundV1Channel::<&TestKeysInterface>::new(
10050
10059
&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_channel_type_features(&config),
@@ -10198,7 +10207,7 @@ mod tests {
10198
10207
let counterparty_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
10199
10208
let mut config = UserConfig::default();
10200
10209
config.channel_handshake_config.announced_channel = false;
10201
- 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
10210
+ 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
10202
10211
chan.context.holder_dust_limit_satoshis = 546;
10203
10212
chan.context.counterparty_selected_channel_reserve_satoshis = Some(0); // Filled in in accept_channel
10204
10213
@@ -10945,7 +10954,7 @@ mod tests {
10945
10954
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
10946
10955
let config = UserConfig::default();
10947
10956
let node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
10948
- node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None).unwrap();
10957
+ node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &logger ).unwrap();
10949
10958
10950
10959
let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
10951
10960
channel_type_features.set_zero_conf_required();
@@ -10980,7 +10989,7 @@ mod tests {
10980
10989
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
10981
10990
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
10982
10991
&channelmanager::provided_init_features(&UserConfig::default()), 10000000, 100000, 42,
10983
- &config, 0, 42, None
10992
+ &config, 0, 42, None, &logger
10984
10993
).unwrap();
10985
10994
assert!(!channel_a.context.channel_type.supports_anchors_zero_fee_htlc_tx());
10986
10995
@@ -10991,7 +11000,7 @@ mod tests {
10991
11000
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
10992
11001
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
10993
11002
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
10994
- None
11003
+ None, &logger
10995
11004
).unwrap();
10996
11005
10997
11006
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -11029,7 +11038,7 @@ mod tests {
11029
11038
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
11030
11039
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
11031
11040
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
11032
- None
11041
+ None, &logger
11033
11042
).unwrap();
11034
11043
11035
11044
// Set `channel_type` to `None` to force the implicit feature negotiation.
@@ -11076,7 +11085,7 @@ mod tests {
11076
11085
let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
11077
11086
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
11078
11087
&channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
11079
- None
11088
+ None, &logger
11080
11089
).unwrap();
11081
11090
11082
11091
let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -11095,7 +11104,7 @@ mod tests {
11095
11104
// LDK.
11096
11105
let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
11097
11106
&fee_estimator, &&keys_provider, &&keys_provider, node_id_b, &simple_anchors_init,
11098
- 10000000, 100000, 42, &config, 0, 42, None
11107
+ 10000000, 100000, 42, &config, 0, 42, None, &logger
11099
11108
).unwrap();
11100
11109
11101
11110
let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network));
@@ -11145,7 +11154,8 @@ mod tests {
11145
11154
&config,
11146
11155
0,
11147
11156
42,
11148
- None
11157
+ None,
11158
+ &logger
11149
11159
).unwrap();
11150
11160
11151
11161
let open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network));
0 commit comments