Use min(feerate,ancestor_feerate) for ancestor score

This commit is contained in:
Mononaut 2023-06-29 12:56:54 -04:00
parent 552818607a
commit ccbed8ec58
No known key found for this signature in database
GPG Key ID: A3F058E41374C04E

View File

@ -15,6 +15,7 @@ pub struct AuditTransaction {
pub weight: u32, pub weight: u32,
pub sigop_adjusted_vsize: u32, pub sigop_adjusted_vsize: u32,
pub sigops: u32, pub sigops: u32,
adjusted_fee_per_vsize: f64,
pub effective_fee_per_vsize: f64, pub effective_fee_per_vsize: f64,
pub dependency_rate: f64, pub dependency_rate: f64,
pub inputs: Vec<u32>, pub inputs: Vec<u32>,
@ -73,6 +74,18 @@ impl Ord for AuditTransaction {
} }
} }
#[inline]
fn calc_fee_rate(
fee: f64,
vsize: u32,
) -> f64 {
fee / (if vsize == 0 {
1.0
} else {
f64::from(vsize)
})
}
impl AuditTransaction { impl AuditTransaction {
pub fn from_thread_transaction(tx: &ThreadTransaction) -> Self { pub fn from_thread_transaction(tx: &ThreadTransaction) -> Self {
// rounded up to the nearest integer // rounded up to the nearest integer
@ -83,6 +96,7 @@ impl AuditTransaction {
weight: tx.weight, weight: tx.weight,
sigop_adjusted_vsize, sigop_adjusted_vsize,
sigops: tx.sigops, sigops: tx.sigops,
adjusted_fee_per_vsize: calc_fee_rate(tx.fee, sigop_adjusted_vsize),
effective_fee_per_vsize: tx.effective_fee_per_vsize, effective_fee_per_vsize: tx.effective_fee_per_vsize,
dependency_rate: f64::INFINITY, dependency_rate: f64::INFINITY,
inputs: tx.inputs.clone(), inputs: tx.inputs.clone(),
@ -135,12 +149,7 @@ impl AuditTransaction {
/// Safety: This function must NEVER set score to NaN. /// Safety: This function must NEVER set score to NaN.
#[inline] #[inline]
fn calc_new_score(&mut self) { fn calc_new_score(&mut self) {
self.score = (self.ancestor_fee as f64) self.score = self.adjusted_fee_per_vsize.min(calc_fee_rate(self.ancestor_fee as f64, self.ancestor_sigop_adjusted_vsize));
/ (if self.ancestor_sigop_adjusted_vsize == 0 {
1.0
} else {
f64::from(self.ancestor_sigop_adjusted_vsize)
});
} }
#[inline] #[inline]