@@ -9888,11 +9888,11 @@ fn do_test_max_dust_htlc_exposure(dust_outbound_balance: bool, exposure_breach_e
9888
9888
let chanmon_cfgs = create_chanmon_cfgs(2);
9889
9889
let mut config = test_default_channel_config();
9890
9890
config.channel_config.max_dust_htlc_exposure = if multiplier_dust_limit {
9891
- // Default test fee estimator rate is 253 sat/kw, so we set the multiplier to 5_000_000 / 253
9892
- // to get roughly the same initial value as the default setting when this test was
9891
+ // Default test fee estimator rate is 253 sat/kw. so we set the multiplier to 6_000_000 /
9892
+ // 253 to get roughly the same initial value as the default setting when this test was
9893
9893
// originally written.
9894
- MaxDustHTLCExposure::FeeRateMultiplier(5_000_000 / 253)
9895
- } else { MaxDustHTLCExposure::FixedLimitMsat(5_000_000 ) }; // initial default setting value
9894
+ MaxDustHTLCExposure::FeeRateMultiplier(6_000_000 / 253)
9895
+ } else { MaxDustHTLCExposure::FixedLimitMsat(6_000_000 ) }; // initial default setting value
9896
9896
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
9897
9897
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(config), None]);
9898
9898
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
@@ -9958,34 +9958,34 @@ fn do_test_max_dust_htlc_exposure(dust_outbound_balance: bool, exposure_breach_e
9958
9958
9959
9959
if on_holder_tx {
9960
9960
if dust_outbound_balance {
9961
- // Outbound dust threshold: 2223 sats (`dust_buffer_feerate` * HTLC_TIMEOUT_TX_WEIGHT / 1000 + holder's `dust_limit_satoshis`)
9962
- // Outbound dust balance: 4372 sats
9963
- // Note, we need sent payment to be above outbound dust threshold on counterparty_tx of 2132 sats
9961
+ // Outbound dust threshold: 2390 sats (`dust_buffer_feerate` * HTLC_TIMEOUT_TX_WEIGHT / 1000 + holder's `dust_limit_satoshis`)
9962
+ // Outbound dust balance: 4780 sats(dust_outbound_htlc_on_holder_tx * dust_outbound_htlc_on_holder_tx_msat)
9963
+ // Note, we need sent payment to be above outbound dust threshold on counterparty_tx of 1500 sats(dust_htlc_on_counterparty_tx * dust_htlc_on_counterparty_tx_msat)
9964
9964
for _ in 0..dust_outbound_htlc_on_holder_tx {
9965
9965
let (route, payment_hash, _, payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[1], dust_outbound_htlc_on_holder_tx_msat);
9966
9966
nodes[0].node.send_payment_with_route(&route, payment_hash,
9967
9967
RecipientOnionFields::secret_only(payment_secret), PaymentId(payment_hash.0)).unwrap();
9968
9968
}
9969
9969
} else {
9970
- // Inbound dust threshold: 2324 sats (`dust_buffer_feerate` * HTLC_SUCCESS_TX_WEIGHT / 1000 + holder's `dust_limit_satoshis`)
9971
- // Inbound dust balance: 4372 sats
9972
- // Note, we need sent payment to be above outbound dust threshold on counterparty_tx of 2031 sats
9970
+ // Inbound dust threshold: 2501 sats (`dust_buffer_feerate` * HTLC_SUCCESS_TX_WEIGHT / 1000 + holder's `dust_limit_satoshis`)
9971
+ // Inbound dust balance: 5002 sats(dust_inbound_htlc_on_holder_tx * dust_inbound_htlc_on_holder_tx_msat)
9972
+ // Note, we need sent payment to be above outbound dust threshold on counterparty_tx of 1500 sats(dust_htlc_on_counterparty_tx * dust_htlc_on_counterparty_tx_msat)
9973
9973
for _ in 0..dust_inbound_htlc_on_holder_tx {
9974
9974
route_payment(&nodes[1], &[&nodes[0]], dust_inbound_htlc_on_holder_tx_msat);
9975
9975
}
9976
9976
}
9977
9977
} else {
9978
9978
if dust_outbound_balance {
9979
- // Outbound dust threshold: 2132 sats (`dust_buffer_feerate` * HTLC_TIMEOUT_TX_WEIGHT / 1000 + counteparty's `dust_limit_satoshis`)
9980
- // Outbound dust balance: 5000 sats
9979
+ // Outbound dust threshold: 2198 sats (`dust_buffer_feerate` * HTLC_TIMEOUT_TX_WEIGHT / 1000 + counteparty's `dust_limit_satoshis`)
9980
+ // Outbound dust balance: 4396 sats(dust_outbound_htlc_on_holder_tx * dust_outbound_htlc_on_holder_tx_msat)
9981
9981
for _ in 0..dust_htlc_on_counterparty_tx - 1 {
9982
9982
let (route, payment_hash, _, payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[1], dust_htlc_on_counterparty_tx_msat);
9983
9983
nodes[0].node.send_payment_with_route(&route, payment_hash,
9984
9984
RecipientOnionFields::secret_only(payment_secret), PaymentId(payment_hash.0)).unwrap();
9985
9985
}
9986
9986
} else {
9987
- // Inbound dust threshold: 2031 sats (`dust_buffer_feerate` * HTLC_TIMEOUT_TX_WEIGHT / 1000 + counteparty's `dust_limit_satoshis`)
9988
- // Inbound dust balance: 5000 sats
9987
+ // Inbound dust threshold: 2309 sats (`dust_buffer_feerate` * HTLC_SUCCESS_TX_WEIGHT / 1000 + counteparty's `dust_limit_satoshis`)
9988
+ // Inbound dust balance: 4618 sats(dust_inbound_htlc_on_holder_tx * dust_inbound_htlc_on_holder_tx_msat)
9989
9989
for _ in 0..dust_htlc_on_counterparty_tx - 1 {
9990
9990
route_payment(&nodes[1], &[&nodes[0]], dust_htlc_on_counterparty_tx_msat);
9991
9991
}
@@ -10016,12 +10016,12 @@ fn do_test_max_dust_htlc_exposure(dust_outbound_balance: bool, exposure_breach_e
10016
10016
nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &payment_event.msgs[0]);
10017
10017
// With default dust exposure: 5000 sats
10018
10018
if on_holder_tx {
10019
- // Outbound dust balance: 6399 sats
10019
+ // Outbound dust balance: 7503 sats (dust_outbound_htlc_on_holder_tx * dust_outbound_htlc_on_holder_tx_msat + dust_inbound_htlc_on_holder_tx_msat)
10020
10020
let dust_inbound_overflow = dust_inbound_htlc_on_holder_tx_msat * (dust_inbound_htlc_on_holder_tx + 1);
10021
10021
let dust_outbound_overflow = dust_outbound_htlc_on_holder_tx_msat * dust_outbound_htlc_on_holder_tx + dust_inbound_htlc_on_holder_tx_msat;
10022
10022
nodes[0].logger.assert_log("lightning::ln::channel", format!("Cannot accept value that would put our exposure to dust HTLCs at {} over the limit {} on holder commitment tx", if dust_outbound_balance { dust_outbound_overflow } else { dust_inbound_overflow }, max_dust_htlc_exposure_msat), 1);
10023
10023
} else {
10024
- // Outbound dust balance: 5200 sats
10024
+ // Outbound dust balance: 6000 sats(dust_htlc_on_counterparty_tx * dust_htlc_on_counterparty_tx_msat)
10025
10025
nodes[0].logger.assert_log("lightning::ln::channel",
10026
10026
format!("Cannot accept value that would put our exposure to dust HTLCs at {} over the limit {} on counterparty commitment tx",
10027
10027
dust_htlc_on_counterparty_tx_msat * (dust_htlc_on_counterparty_tx - 1) + dust_htlc_on_counterparty_tx_msat + 4,
@@ -10032,7 +10032,7 @@ fn do_test_max_dust_htlc_exposure(dust_outbound_balance: bool, exposure_breach_e
10032
10032
// For the multiplier dust exposure limit, since it scales with feerate,
10033
10033
// we need to add a lot of HTLCs that will become dust at the new feerate
10034
10034
// to cross the threshold.
10035
- for _ in 0..20 {
10035
+ for _ in 0..30 {
10036
10036
let (_, payment_hash, payment_secret) = get_payment_preimage_hash(&nodes[1], Some(1_000), None);
10037
10037
nodes[0].node.send_payment_with_route(&route, payment_hash,
10038
10038
RecipientOnionFields::secret_only(payment_secret), PaymentId(payment_hash.0)).unwrap();
@@ -10054,12 +10054,12 @@ fn do_test_max_dust_htlc_exposure(dust_outbound_balance: bool, exposure_breach_e
10054
10054
fn do_test_max_dust_htlc_exposure_by_threshold_type(multiplier_dust_limit: bool) {
10055
10055
do_test_max_dust_htlc_exposure(true, ExposureEvent::AtHTLCForward, true, multiplier_dust_limit);
10056
10056
do_test_max_dust_htlc_exposure(false, ExposureEvent::AtHTLCForward, true, multiplier_dust_limit);
10057
+ do_test_max_dust_htlc_exposure(false, ExposureEvent::AtHTLCForward, false, multiplier_dust_limit);
10058
+ do_test_max_dust_htlc_exposure(true, ExposureEvent::AtHTLCForward, false, multiplier_dust_limit);
10057
10059
do_test_max_dust_htlc_exposure(false, ExposureEvent::AtHTLCReception, true, multiplier_dust_limit);
10058
10060
do_test_max_dust_htlc_exposure(false, ExposureEvent::AtHTLCReception, false, multiplier_dust_limit);
10059
- do_test_max_dust_htlc_exposure(true, ExposureEvent::AtHTLCForward, false, multiplier_dust_limit);
10060
10061
do_test_max_dust_htlc_exposure(true, ExposureEvent::AtHTLCReception, false, multiplier_dust_limit);
10061
10062
do_test_max_dust_htlc_exposure(true, ExposureEvent::AtHTLCReception, true, multiplier_dust_limit);
10062
- do_test_max_dust_htlc_exposure(false, ExposureEvent::AtHTLCForward, false, multiplier_dust_limit);
10063
10063
do_test_max_dust_htlc_exposure(true, ExposureEvent::AtUpdateFeeOutbound, true, multiplier_dust_limit);
10064
10064
do_test_max_dust_htlc_exposure(true, ExposureEvent::AtUpdateFeeOutbound, false, multiplier_dust_limit);
10065
10065
do_test_max_dust_htlc_exposure(false, ExposureEvent::AtUpdateFeeOutbound, false, multiplier_dust_limit);
0 commit comments