How to find out Bitcoin transaction size

By | 4. October 2020

A Bitcoin Transaction is composed of the following:

  • Version (4 Bytes)
  • TxIn Count (1 ~ 9B)
  • For each TxIn:
    • Outpoint (36B)
    • Script Length (1 ~ 9B)
    • ScriptSig(?)
    • Sequence (4B)
  • TxOut Count (1 ~ 9B)
  • For each TxOut:
    • Value (8B)
    • Script Length(1 ~ 9B)*
    • Script (?)*
  • LockTime (4B)

 

Assuming a standard P2SH/P2PKH transaction is created, the script length marked in asterisk will be bound to 1byte as the Script Length is encoded as a variable integer; while the script size marked in asterisks will be bound to 24bytes as it will only contain a script hash.

So, in summary, we can assume that the maximum bound of each TxOut to be 34 bytes if we are paying to a P2SH/P2PKH address, since there are 4 opcodes in each output script. A great breakdown can be found here.

Assuming we are spending P2PKH outpoints for our TxIn. Our ScriptSig (composed of a 72byte DER Encoded Transaction Signature + 33byte Public Key) would be 146bytes in size and our script length will only consume 1byte as the size of the ScriptSig is less than 0xFD.

Therefore, a standard P2PKH/P2SH transaction spending a ONE UTXO redeemable with a basic ScriptSig paying to only ONE output is 189bytes. Otherwise, we can also further generalize this to:

in marks the number of TxIns

out marks the number of TxOuts

Assuming that  in < 254 and  out < 254.

Computing the size of P2SH/P2PKH transaction that is being funded with complex inputs (i.e. UTXOs spendable with M-of-N signatures, hashed-timelocked contracts) is inherently difficult and is dependent on the complexity of the redeemScript used to produce the scriptHash of the prior P2SH transaction.

 

Basic’ bitcoin transactions with 1 input and 2 outputs are typically ~250 bytes of data.

 

Source

 

Leave a Reply