Skip to content

Commit 881c0f5

Browse files
author
Antoine Riard
committed
Move compute_output_value as part of package member functions
1 parent bb0e33f commit 881c0f5

File tree

2 files changed

+23
-31
lines changed

2 files changed

+23
-31
lines changed

lightning/src/chain/onchaintx.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ use chain::chaininterface::{FeeEstimator, BroadcasterInterface};
2828
use chain::channelmonitor::{ANTI_REORG_DELAY, CLTV_SHARED_CLAIM_BUFFER};
2929
use chain::keysinterface::{Sign, KeysInterface};
3030
use chain::package::PackageTemplate;
31-
use chain::package;
3231
use util::logger::Logger;
3332
use util::ser::{Readable, ReadableArgs, Writer, Writeable, VecWriter};
3433
use util::byte_utils;
@@ -348,7 +347,7 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
348347
let amt = cached_request.package_amount();
349348
if cached_request.is_malleable() {
350349
let predicted_weight = cached_request.package_weight(&self.destination_script);
351-
if let Some((output_value, new_feerate)) = package::compute_output_value(predicted_weight, amt, cached_request.feerate(), fee_estimator, logger) {
350+
if let Some((output_value, new_feerate)) = cached_request.compute_package_output(predicted_weight, amt, fee_estimator, logger) {
352351
assert!(new_feerate != 0);
353352

354353
let transaction = cached_request.finalize_package(self, output_value, self.destination_script.clone(), logger).unwrap();

lightning/src/chain/package.rs

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -500,9 +500,6 @@ impl PackageTemplate {
500500
pub(crate) fn aggregable(&self) -> bool {
501501
self.aggregable
502502
}
503-
pub(crate) fn feerate(&self) -> u64 {
504-
self.feerate_previous
505-
}
506503
pub(crate) fn set_feerate(&mut self, new_feerate: u64) {
507504
self.feerate_previous = new_feerate;
508505
}
@@ -654,6 +651,28 @@ impl PackageTemplate {
654651
}
655652
current_height + LOW_FREQUENCY_BUMP_INTERVAL
656653
}
654+
/// Returns value in satoshis to be included as package outgoing output amount and feerate with which package finalization should be done.
655+
pub(crate) fn compute_package_output<F: Deref, L: Deref>(&self, predicted_weight: usize, input_amounts: u64, fee_estimator: &F, logger: &L) -> Option<(u64, u64)>
656+
where F::Target: FeeEstimator,
657+
L::Target: Logger,
658+
{
659+
// If old feerate is 0, first iteration of this claim, use normal fee calculation
660+
if self.feerate_previous != 0 {
661+
if let Some((new_fee, feerate)) = feerate_bump(predicted_weight, input_amounts, self.feerate_previous, fee_estimator, logger) {
662+
// If new computed fee is superior at the whole claimable amount burn all in fees
663+
if new_fee > input_amounts {
664+
return Some((0, feerate));
665+
} else {
666+
return Some((input_amounts - new_fee, feerate));
667+
}
668+
}
669+
} else {
670+
if let Some((new_fee, feerate)) = compute_fee_from_spent_amounts(input_amounts, predicted_weight, fee_estimator, logger) {
671+
return Some((input_amounts - new_fee, feerate));
672+
}
673+
}
674+
None
675+
}
657676
pub (crate) fn build_package(txid: Txid, vout: u32, input_solving_data: PackageSolvingData, soonest_conf_deadline: u32, aggregable: bool, height_original: u32) -> Self {
658677
let malleability = match input_solving_data {
659678
PackageSolvingData::RevokedOutput(..) => { PackageMalleability::Malleable },
@@ -805,29 +824,3 @@ fn feerate_bump<F: Deref, L: Deref>(predicted_weight: usize, input_amounts: u64,
805824
};
806825
Some((new_fee, new_fee * 1000 / (predicted_weight as u64)))
807826
}
808-
809-
/// Deduce a new proposed fee from the claiming transaction output value.
810-
/// If the new proposed fee is superior to the consumed outpoint's value, burn everything in miner's
811-
/// fee to deter counterparties attacker.
812-
pub(crate) fn compute_output_value<F: Deref, L: Deref>(predicted_weight: usize, input_amounts: u64, previous_feerate: u64, fee_estimator: &F, logger: &L) -> Option<(u64, u64)>
813-
where F::Target: FeeEstimator,
814-
L::Target: Logger,
815-
{
816-
// If old feerate is 0, first iteration of this claim, use normal fee calculation
817-
if previous_feerate != 0 {
818-
if let Some((new_fee, feerate)) = feerate_bump(predicted_weight, input_amounts, previous_feerate, fee_estimator, logger) {
819-
// If new computed fee is superior at the whole claimable amount burn all in fees
820-
if new_fee > input_amounts {
821-
return Some((0, feerate));
822-
} else {
823-
return Some((input_amounts - new_fee, feerate));
824-
}
825-
}
826-
} else {
827-
if let Some((new_fee, feerate)) = compute_fee_from_spent_amounts(input_amounts, predicted_weight, fee_estimator, logger) {
828-
return Some((input_amounts - new_fee, feerate));
829-
}
830-
}
831-
None
832-
}
833-

0 commit comments

Comments
 (0)