mirror of
https://github.com/bitcoin/bips.git
synced 2024-11-19 09:50:06 +01:00
Clarify txid and wtxid
This commit is contained in:
parent
2010cf4979
commit
b915ba5378
@ -34,13 +34,35 @@ By removing this data from the transaction structure committed to the transactio
|
|||||||
|
|
||||||
==Specification==
|
==Specification==
|
||||||
|
|
||||||
|
=== Transaction ID ===
|
||||||
|
|
||||||
|
A new data structure, <code>witness</code>, is defined. Each transaction will have 2 IDs.
|
||||||
|
|
||||||
|
Definition of <code>txid</code> remains unchanged: the double SHA256 of the traditional serialization format:
|
||||||
|
|
||||||
|
[nVersion][txins][txouts][nLockTime]
|
||||||
|
|
||||||
|
A new <code>wtxid</code> is defined: the double SHA256 of the new serialization with witness data:
|
||||||
|
|
||||||
|
[nVersion][marker][flag][txins][txouts][witness][nLockTime]
|
||||||
|
|
||||||
|
Format of <code>nVersion</code>, <code>txins</code>, <code>txouts</code>, and <code>nLockTime</code> are same as traditional serialization.
|
||||||
|
|
||||||
|
The <code>marker</code> MUST be <code>0x00</code>.
|
||||||
|
|
||||||
|
The <code>flag</code> MUST be a 1-byte non-zero value. Currently, <code>0x01</code> MUST be used.
|
||||||
|
|
||||||
|
The <code>witness</code> is a serialization of all witness data of the transaction. Each txin is associated with a witness field. A witness field starts with a <code>var_int</code> to indicate the number of stack items for the txin. It is followed by stack items, with each item starts with a <code>var_int</code> to indicate the length. Witness data is NOT script and is not restricted by the 520-byte push limit.
|
||||||
|
|
||||||
|
A non-witness program (defined hereinafter) txin MUST be associated with an empty witness field, represented by a <code>0x00</code>. If all txins are not witness program, a transaction's <code>wtxid</code> is equal to its <code>txid</code>.
|
||||||
|
|
||||||
=== Commitment structure ===
|
=== Commitment structure ===
|
||||||
|
|
||||||
A new block rule is added which requires a commitment to the witness hashes, the double SHA256 of a transaction including witnesses. The witness hash of coinbase transaction is assumed to be 0x0000....0000.
|
A new block rule is added which requires a commitment to the <code>wtxid</code>. The <code>wtxid</code> of coinbase transaction is assumed to be <code>0x0000....0000</code>.
|
||||||
|
|
||||||
A witness root hash is calculated with all those witness hashes as leaves, in a way similar to the hashMerkleRoot in the block header.
|
A witness root hash is calculated with all those <code>wtxid</code> as leaves, in a way similar to the hashMerkleRoot in the block header.
|
||||||
|
|
||||||
The commitment is recorded in a scriptPubKey of the coinbase transaction. It must be at least 38 bytes, with the first 6-byte of 0x6a24aa21a9ed, that is:
|
The commitment is recorded in a scriptPubKey of the coinbase transaction. It must be at least 38 bytes, with the first 6-byte of <code>0x6a24aa21a9ed</code>, that is:
|
||||||
|
|
||||||
1-byte - OP_RETURN (0x6a)
|
1-byte - OP_RETURN (0x6a)
|
||||||
1-byte - Push the following 36 bytes (0x24)
|
1-byte - Push the following 36 bytes (0x24)
|
||||||
|
Loading…
Reference in New Issue
Block a user