add some comments to `Transaction::weight`

FIxes #1159
This commit is contained in:
Andrew Poelstra 2022-10-20 15:24:17 +00:00
parent 938b61bf66
commit 17f0d29d08
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
1 changed files with 10 additions and 0 deletions

View File

@ -717,6 +717,16 @@ impl Transaction {
/// For transactions with an empty witness, this is simply the consensus-serialized size times /// For transactions with an empty witness, this is simply the consensus-serialized size times
/// four. For transactions with a witness, this is the non-witness consensus-serialized size /// four. For transactions with a witness, this is the non-witness consensus-serialized size
/// multiplied by three plus the with-witness consensus-serialized size. /// multiplied by three plus the with-witness consensus-serialized size.
///
/// For transactions with no inputs, this function will return a value 2 less than the actual
/// weight of the serialized transaction. The reason is that zero-input transactions, post-segwit,
/// cannot be unambiguously serialized; we make a choice that adds two extra bytes. For more
/// details see [BIP 141](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki)
/// which uses a "input count" of `0x00` as a `marker` for a Segwit-encoded transaction.
///
/// If you need to use 0-input transactions, we strongly recommend you do so using the PSBT
/// API. The unsigned transaction encoded within PSBT is always a non-segwit transaction
/// and can therefore avoid this ambiguity.
#[inline] #[inline]
pub fn weight(&self) -> usize { pub fn weight(&self) -> usize {
self.scaled_size(WITNESS_SCALE_FACTOR) self.scaled_size(WITNESS_SCALE_FACTOR)