Skip to content

Commit

Permalink
descriptors: add method to get max tx weight
Browse files Browse the repository at this point in the history
Errors in the weight calculation could be hidden when converting
to vbytes. This separate method will make it easier to spot any
such errors.
  • Loading branch information
jp1ac4 committed Nov 15, 2024
1 parent 327f0ea commit 03a3230
Showing 1 changed file with 12 additions and 7 deletions.
19 changes: 12 additions & 7 deletions liana/src/descriptors/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -545,20 +545,25 @@ impl LianaDescriptor {
Ok(self.prune_bip32_derivs(psbt, path_info))
}

/// Maximum possible size in vbytes of an unsigned transaction, `tx`,
/// Maximum possible weight in weight units of an unsigned transaction, `tx`,
/// after satisfaction, assuming all inputs of `tx` are from this
/// descriptor.
pub fn unsigned_tx_max_vbytes(&self, tx: &bitcoin::Transaction, use_primary_path: bool) -> u64 {
let witness_factor: u64 = WITNESS_SCALE_FACTOR.try_into().unwrap();
fn unsigned_tx_max_weight(&self, tx: &bitcoin::Transaction, use_primary_path: bool) -> u64 {
let num_inputs: u64 = tx.input.len().try_into().unwrap();
let max_sat_weight: u64 = self.max_sat_weight(use_primary_path).try_into().unwrap();
// Add weights together before converting to vbytes to avoid rounding up multiple times.
let tx_wu = tx
.weight()
tx.weight()
.to_wu()
.checked_add(max_sat_weight.checked_mul(num_inputs).unwrap())
.unwrap();
tx_wu
.unwrap()
}

/// Maximum possible size in vbytes of an unsigned transaction, `tx`,
/// after satisfaction, assuming all inputs of `tx` are from this
/// descriptor.
pub fn unsigned_tx_max_vbytes(&self, tx: &bitcoin::Transaction, use_primary_path: bool) -> u64 {
let witness_factor: u64 = WITNESS_SCALE_FACTOR.try_into().unwrap();
self.unsigned_tx_max_weight(tx, use_primary_path)
.checked_add(witness_factor.checked_sub(1).unwrap())
.unwrap()
.checked_div(witness_factor)
Expand Down

0 comments on commit 03a3230

Please sign in to comment.