Skip to content

Commit 371a42c

Browse files
committed
Test fee rate bumping
1 parent b05286d commit 371a42c

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

lightning/src/chain/package.rs

+53-1
Original file line numberDiff line numberDiff line change
@@ -1354,7 +1354,7 @@ where
13541354

13551355
#[cfg(test)]
13561356
mod tests {
1357-
use crate::chain::package::{CounterpartyOfferedHTLCOutput, CounterpartyReceivedHTLCOutput, HolderFundingOutput, HolderHTLCOutput, PackageTemplate, PackageSolvingData, RevokedHTLCOutput, RevokedOutput, WEIGHT_REVOKED_OUTPUT, weight_offered_htlc, weight_received_htlc};
1357+
use crate::chain::package::{CounterpartyOfferedHTLCOutput, CounterpartyReceivedHTLCOutput, HolderFundingOutput, HolderHTLCOutput, PackageTemplate, PackageSolvingData, RevokedHTLCOutput, RevokedOutput, WEIGHT_REVOKED_OUTPUT, weight_offered_htlc, weight_received_htlc, feerate_bump};
13581358
use crate::chain::Txid;
13591359
use crate::ln::chan_utils::HTLCOutputInCommitment;
13601360
use crate::types::payment::{PaymentPreimage, PaymentHash};
@@ -1372,7 +1372,10 @@ mod tests {
13721372

13731373
use bitcoin::secp256k1::{PublicKey,SecretKey};
13741374
use bitcoin::secp256k1::Secp256k1;
1375+
use crate::chain::chaininterface::{ConfirmationTarget, FeeEstimator, FEERATE_FLOOR_SATS_PER_KW, LowerBoundedFeeEstimator};
1376+
use crate::chain::onchaintx::FeerateStrategy;
13751377
use crate::types::features::ChannelTypeFeatures;
1378+
use crate::util::test_utils::TestLogger;
13761379

13771380
fn fake_txid(n: u64) -> Txid {
13781381
Transaction {
@@ -1682,4 +1685,53 @@ mod tests {
16821685
}
16831686
}
16841687
}
1688+
1689+
struct TestFeeEstimator {
1690+
sat_per_kw: u32,
1691+
}
1692+
1693+
impl FeeEstimator for TestFeeEstimator {
1694+
fn get_est_sat_per_1000_weight(&self, _: ConfirmationTarget) -> u32 {
1695+
self.sat_per_kw
1696+
}
1697+
}
1698+
1699+
#[test]
1700+
fn test_feerate_bump() {
1701+
let sat_per_kw = FEERATE_FLOOR_SATS_PER_KW;
1702+
let test_fee_estimator = &TestFeeEstimator { sat_per_kw };
1703+
let fee_estimator = LowerBoundedFeeEstimator::new(test_fee_estimator);
1704+
let fee_rate_strategy = FeerateStrategy::ForceBump;
1705+
let confirmation_target = ConfirmationTarget::UrgentOnChainSweep;
1706+
let logger = TestLogger::new();
1707+
1708+
{
1709+
let predicted_weight_units = 1000;
1710+
let input_satoshis = 861;
1711+
1712+
let bumped_fee_rate = feerate_bump(predicted_weight_units, input_satoshis, 546, 253, &fee_rate_strategy, confirmation_target, &fee_estimator, &logger);
1713+
assert!(bumped_fee_rate.is_none());
1714+
logger.assert_log_regex("lightning::chain::package", regex::Regex::new(r"Can't new-estimation bump new claiming tx, output amount 545 would end up below dust threshold 546").unwrap(), 1);
1715+
}
1716+
1717+
{
1718+
let predicted_weight_units = 1000;
1719+
let input_satoshis = 862;
1720+
1721+
let bumped_fee_rate = feerate_bump(predicted_weight_units, input_satoshis, 546, 253, &fee_rate_strategy, confirmation_target, &fee_estimator, &logger);
1722+
assert!(bumped_fee_rate.is_none());
1723+
logger.assert_log_regex("lightning::chain::package", regex::Regex::new(r"Naive fee bump of 63s does not meet min relay fee requirements of 253s").unwrap(), 1);
1724+
logger.assert_log_regex("lightning::chain::package", regex::Regex::new(r"Can't new-estimation bump new claiming tx, output amount 356 would end up below dust threshold 546").unwrap(), 1);
1725+
}
1726+
1727+
{
1728+
let predicted_weight_units = 1000;
1729+
let input_satoshis = 2000; // 2000 satoshis
1730+
1731+
let bumped_fee_rate = feerate_bump(predicted_weight_units, input_satoshis, 546, 253, &fee_rate_strategy, confirmation_target, &fee_estimator, &logger).unwrap();
1732+
assert_eq!(bumped_fee_rate, (506, 506));
1733+
logger.assert_log_regex("lightning::chain::package", regex::Regex::new(r"Naive fee bump of 63s does not meet min relay fee requirements of 253s").unwrap(), 2);
1734+
logger.assert_log_regex("lightning::chain::package", regex::Regex::new(r"Fee rate bumped by 253s from 253 s/KWU \(253 s\) to 506 s/KWU \(506 s\) \(naive: 316 s/KWU \(316 s\)\)").unwrap(), 1);
1735+
}
1736+
}
16851737
}

0 commit comments

Comments
 (0)