7ec33d29eb refactor: developer doc first (yancy)
5496feb5c1 Add base weight const to TxIn (yancy)

Pull request description:

  Add a base weight const to TxIn.  I also used this const in strippedsize() and scaledsize().  As a different PR, I think strippedsize and scaledsize could return Weight instead of usize.  Also added a small commit to re-arrange commit messages.

ACKs for top commit:
  apoelstra:
    ACK 7ec33d29eb
  tcharding:
    ACK 7ec33d29eb

Tree-SHA512: b20f95605ed664b88df0a5a178d48f15f27d90eb404c9707aef010c4504d7ffd4a3565c217710b9289f87ed2a0724fd8f7cc78a79a58547fe3ee87339c0d74c1
This commit is contained in:
Andrew Poelstra 2023-08-18 14:19:31 +00:00
commit 672656515e
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
1 changed files with 10 additions and 7 deletions

View File

@ -199,6 +199,9 @@ pub struct TxIn {
} }
impl TxIn { impl TxIn {
/// The weight of a `TxIn` excluding the `script_sig` and `witness`.
pub const BASE_WEIGHT: Weight = Weight::from_wu(32 + 4 + 4);
/// Returns true if this input enables the [`absolute::LockTime`] (aka `nLockTime`) of its /// Returns true if this input enables the [`absolute::LockTime`] (aka `nLockTime`) of its
/// [`Transaction`]. /// [`Transaction`].
/// ///
@ -612,8 +615,8 @@ impl cmp::Ord for Transaction {
} }
impl Transaction { impl Transaction {
/// Maximum transaction weight for Bitcoin Core 25.0.
// https://github.com/bitcoin/bitcoin/blob/44b05bf3fef2468783dcebf651654fdd30717e7e/src/policy/policy.h#L27 // https://github.com/bitcoin/bitcoin/blob/44b05bf3fef2468783dcebf651654fdd30717e7e/src/policy/policy.h#L27
/// Maximum transaction weight for Bitcoin Core 25.0.
pub const MAX_STANDARD_WEIGHT: Weight = Weight::from_wu(400_000); pub const MAX_STANDARD_WEIGHT: Weight = Weight::from_wu(400_000);
/// Computes a "normalized TXID" which does not include any signatures. /// Computes a "normalized TXID" which does not include any signatures.
@ -713,9 +716,9 @@ impl Transaction {
pub fn strippedsize(&self) -> usize { pub fn strippedsize(&self) -> usize {
let mut input_size = 0; let mut input_size = 0;
for input in &self.input { for input in &self.input {
input_size += 32 + 4 + 4 + // outpoint (32+4) + nSequence input_size += TxIn::BASE_WEIGHT.to_wu() as usize
VarInt(input.script_sig.len() as u64).len() + + VarInt(input.script_sig.len() as u64).len()
input.script_sig.len(); + input.script_sig.len();
} }
let mut output_size = 0; let mut output_size = 0;
for output in &self.output { for output in &self.output {
@ -741,9 +744,9 @@ impl Transaction {
let mut inputs_with_witnesses = 0; let mut inputs_with_witnesses = 0;
for input in &self.input { for input in &self.input {
input_weight += scale_factor input_weight += scale_factor
* (32 + 4 + 4 + // outpoint (32+4) + nSequence * (TxIn::BASE_WEIGHT.to_wu() as usize
VarInt(input.script_sig.len() as u64).len() + + VarInt(input.script_sig.len() as u64).len()
input.script_sig.len()); + input.script_sig.len());
if !input.witness.is_empty() { if !input.witness.is_empty() {
inputs_with_witnesses += 1; inputs_with_witnesses += 1;
input_weight += input.witness.serialized_len(); input_weight += input.witness.serialized_len();