mirror of
https://github.com/seigler/dash-docs
synced 2025-07-27 01:36:13 +00:00
V13.0 special txs (#90)
* Content - Add section for Special txs * Content - Add necessary cross-refs * Content - DIP3 - Add ProRegTx details Description and example hexdump added * Content - Minor DIP 2-5 formatting * Content - formatting fix * Content - DIP3 - Update ProRegTx Op Key info Uses BLS public key instead of ECDSA pubkeyhash * Content - DIP3 - Add ProUpServTx details * Content - DIP3 - Update ProRegTx Hexdump for both new collateral and reference to existing on * Content - DIP3 - Update ProUpServTx Add note about missing payloadSigSize Hexdump corrections * Content - DIP3 - Update ProUpServTx Minor formatting updates * Content - DIP3 - Add ProUpRevTx details * Content - DIP4 - Add CbTx details * Content - Update raw tx per DIP2 Split version into version and type Add extra_payload fields * Content - DIP3 - Add ProUpRegTx details
This commit is contained in:
parent
1c5293bb91
commit
b68663de1e
1 changed files with 515 additions and 1 deletions
|
@ -7,6 +7,8 @@ http://opensource.org/licenses/MIT.
|
|||
## Transactions
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
<!-- __ -->
|
||||
|
||||
The following subsections briefly document core transaction details.
|
||||
|
||||
#### OpCodes
|
||||
|
@ -222,12 +224,15 @@ A raw transaction has the following top-level format:
|
|||
|
||||
| Bytes | Name | Data Type | Description
|
||||
|----------|--------------|---------------------|-------------
|
||||
| 4 | version | uint32_t | Transaction version number; currently version 2. Programs creating transactions using newer consensus rules may use higher version numbers.
|
||||
| 2 | version | uint16_t | Transaction version number; currently version 3. Programs creating transactions using newer consensus rules may use higher version numbers.
|
||||
| 2 | type | uint16_t | Transaction type number; 0 for classical transactions; Non-zero for DIP2 special transactions.
|
||||
| *Varies* | tx_in count | compactSize uint | Number of inputs in this transaction.
|
||||
| *Varies* | tx_in | txIn | Transaction inputs. See description of txIn below.
|
||||
| *Varies* | tx_out count | compactSize uint | Number of outputs in this transaction.
|
||||
| *Varies* | tx_out | txOut | Transaction outputs. See description of txOut below.
|
||||
| 4 | lock_time | uint32_t | A time (Unix epoch time) or block number. See the [locktime parsing rules][].
|
||||
| *Varies* | extra_payload size | compactSize uint | *Added by DIP2*<br><br>Variable number of bytes of extra payload for DIP2-based special transactions
|
||||
| *Varies* | extra_payload | blob | *Added by DIP2*<br><br>Special transaction payload.
|
||||
|
||||
A transaction may have multiple inputs and outputs, so the txIn and
|
||||
txOut structures may recur within a transaction. CompactSize unsigned
|
||||
|
@ -398,6 +403,515 @@ have multiple outputs depending on the number of proposals being funded.
|
|||
|
||||
{% endautocrossref %}
|
||||
|
||||
### Special Transactions
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
The Special Transaction framework established by DIP2 enabled the implementation
|
||||
of new on-chain features and consensus mechanisms. These transactions provide the
|
||||
flexibility to expand beyond the financial uses of classical transactions. DIP2
|
||||
transactions modified classical transactions by:
|
||||
|
||||
1. Splitting the 32 bit `version` field into two 16 bit fields (`version` and `type`)
|
||||
2. Adding support for a generic extra payload following the `lock_time` field
|
||||
|
||||
Classical (financial) transactions have a `type` of 0 while special transactions
|
||||
have a `type` defined in the DIP describing them. A list of current special
|
||||
transaction types is maintained in the [DIP repository](https://github.com/dashpay/dips/blob/master/dip-0002-special-transactions.md).
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### ProRegTx
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
*Added in protocol version 70211 of Dash Core as described by DIP3*
|
||||
|
||||
The Masternode Registration (ProRegTx) special transaction is used to join the
|
||||
masternode list by proving ownership of the 1000 DASH necessary to create a
|
||||
masternode.
|
||||
|
||||
A ProRegTx is created and sent using the `protx` RPC. The ProRegTx must either
|
||||
include an output with 1000 DASH (`protx register`) or refer to an existing
|
||||
unspent output holding 1000 DASH (`protx fund_register`). If the 1000 DASH is an
|
||||
output of the ProRegTx, the collateralOutpoint hash field should be null.
|
||||
|
||||
The special transaction type is 1 and the extra payload consists of the following
|
||||
data:
|
||||
|
||||
| Bytes | Name | Data type | Description |
|
||||
| ---------- | ----------- | -------- | -------- |
|
||||
| 2 | version | uint_16 | Provider transaction version number. Currently set to 1.
|
||||
| 2 | type | uint_16 | Masternode type. Default set to 0.
|
||||
| 2 | mode | uint_16 | Masternode mode. Default set to 0.
|
||||
| 36 | collateralOutpoint | COutpoint | The collateral outpoint.<br>**Note:** The hash will be null if the collateral is part of this transaction, otherwise it will reference an existing collateral.
|
||||
| 16 | ipAddress | byte[] | IPv6 address in network byte order. Only IPv4 mapped addresses are allowed (to be extended in the future)
|
||||
| 2 | port | uint_16 | Port (network byte order)
|
||||
| 20 | KeyIdOwner | CKeyID | The public key hash used for owner related signing (ProTx updates, governance voting)
|
||||
| 48 | PubKeyOperator | CBLSPublicKey | The BLS public key used for operational related signing (network messages, ProTx updates)
|
||||
| 20 | KeyIdVoting | CKeyID | The public key hash used for voting.
|
||||
| 2 | operatorReward | uint_16 | A value from 0 to 10000.
|
||||
| 1-9 | scriptPayoutSize | compactSize uint | Size of the Payee Script.
|
||||
| Variable | scriptPayout | Script | Payee script (p2pkh/p2sh)
|
||||
| 32 | inputsHash | uint256 | Hash of all the outpoints of the transaction inputs
|
||||
| 1-9 | payloadSigSize |compactSize uint | Size of the Signature
|
||||
| Variable | payloadSig | vector | Signature of the hash of the ProTx fields. Signed with the key corresponding to the collateral outpoint in case the collateral is not part of the ProRegTx itself, empty otherwise.
|
||||
|
||||
The following annotated hexdump shows a ProRegTx transaction referencing an
|
||||
existing collateral. (Parts of the classical transaction section have been omitted.)
|
||||
|
||||
{% highlight text %}
|
||||
0300 ....................................... Version (3)
|
||||
0100 ....................................... Type (1 - ProRegTx)
|
||||
|
||||
[...] ...................................... Transaction inputs omitted
|
||||
[...] ...................................... Transaction outputs omitted
|
||||
|
||||
00000000 ................................... locktime: 0 (a block height)
|
||||
|
||||
fd1201 ..................................... Extra payload size (274)
|
||||
|
||||
ProRegTx Payload
|
||||
| 0100 ..................................... Version (1)
|
||||
| 0000 ..................................... Type (0)
|
||||
| 0000 ..................................... Mode (0)
|
||||
|
|
||||
| 4859747b0eb19bb2dae5a12ef7b6a69b
|
||||
| 03712bfeded1174de0b6ab1334ab2e8b ......... Outpoint TXID
|
||||
| 01000000 ................................. Outpoint index number: 1
|
||||
|
|
||||
| 00000000000000000000ffffc0000233 ......... IP Address: ::ffff:192.0.2.51
|
||||
| 270f ..................................... Port: 9999
|
||||
|
|
||||
|
|
||||
| 1636e84d02310b0b458f3eb51d8ea8b2e684b7ce . Owner pubkey hash (ECDSA)
|
||||
| 88d719278eef605d9c19037366910b59bc28d437
|
||||
| de4a8db4d76fda6d6985dbdf10404fb9bb5cd0e8
|
||||
| c22f4a914a6c5566 ......................... Operator public key (BLS)
|
||||
| 1636e84d02310b0b458f3eb51d8ea8b2e684b7ce . Voting pubkey hash (ECDSA)
|
||||
|
|
||||
| f401 ..................................... Operator reward (500 -> 5%)
|
||||
|
|
||||
| Payout script
|
||||
| 19 ....................................... Bytes in pubkey script: 25
|
||||
| | 76 ..................................... OP_DUP
|
||||
| | a9 ..................................... OP_HASH160
|
||||
| | 14 ..................................... Push 20 bytes as data
|
||||
| | | fc136008111fcc7a05be6cec66f97568
|
||||
| | | 727a9e51 ............................. PubKey hash
|
||||
| | 88 ..................................... OP_EQUALVERIFY
|
||||
| | ac ..................................... OP_CHECKSIG
|
||||
|
|
||||
| 0fcfb7d939078ba6a6b81ecf1dc2e05d
|
||||
| e2776f49f7b503ac254798be6a672699 ......... Inputs hash
|
||||
|
|
||||
| Payload signature
|
||||
| 41 ....................................... Signature Size (65)
|
||||
| 200476f193b465764093014ba44bd4ff
|
||||
| de2b3fc92794c4acda9cad6305ca172e
|
||||
| 9e3d6b1cd6e30f86678dae8e6595e53d
|
||||
| 2b30bc32141b6c0151eb58479121b3e6a4 ....... Signature
|
||||
{% endhighlight %}
|
||||
|
||||
The following annotated hexdump shows a ProRegTx transaction creating a new
|
||||
collateral.
|
||||
|
||||
**Note the presence of the output, a null Outpoint TXID and the
|
||||
absence of a signature (since it isn't referring to an existing collateral).**
|
||||
(Parts of the classical transaction section have been omitted.)
|
||||
|
||||
{% highlight text %}
|
||||
0300 ....................................... Version (3)
|
||||
0100 ....................................... Type (1 - ProRegTx)
|
||||
|
||||
[...] ...................................... Transaction inputs omitted
|
||||
|
||||
02 ......................................... Number of outputs
|
||||
| [...] .................................... 1 output omitted
|
||||
|
|
||||
| Masternode collateral output
|
||||
| | 00e8764817000000 ....................... Duffs (1000 DASH)
|
||||
| | 1976a9149e648c7e4b61482aa3
|
||||
| | 9bd10e0bf0b5268768005f88ac ............. Script
|
||||
|
||||
00000000 ................................... locktime: 0 (a block height)
|
||||
|
||||
d1 ......................................... Extra payload size (209)
|
||||
|
||||
ProRegTx Payload
|
||||
| 0100 ..................................... Version (1)
|
||||
| 0000 ..................................... Type (0)
|
||||
| 0000 ..................................... Mode (0)
|
||||
|
|
||||
| 00000000000000000000000000000000
|
||||
| 00000000000000000000000000000000 ......... Outpoint TXID
|
||||
| 01000000 ................................. Outpoint index number: 1
|
||||
|
|
||||
| 00000000000000000000ffffc0000233 ......... IP Address: ::ffff:192.0.2.51
|
||||
| 270f ..................................... Port: 9999
|
||||
|
|
||||
| 757a2171bbf92517e358249f20c37a8ad2d7a5bc . Owner pubkey hash (ECDSA)
|
||||
| 0e02146e9c34cfbcb3f3037574a1abb35525e2ca
|
||||
| 0c3c6901dbf82ac591e30218d1711223b7ca956e
|
||||
| df39f3d984d06d51 ......................... Operator public key (BLS)
|
||||
| 757a2171bbf92517e358249f20c37a8ad2d7a5bc . Voting pubkey hash (ECDSA)
|
||||
|
|
||||
| f401 ..................................... Operator reward (500 -> 5%)
|
||||
|
|
||||
| Payout script
|
||||
| 19 ....................................... Bytes in pubkey script: 25
|
||||
| | 76 ..................................... OP_DUP
|
||||
| | a9 ..................................... OP_HASH160
|
||||
| | 14 ..................................... Push 20 bytes as data
|
||||
| | | 9e648c7e4b61482aa39bd10e0bf0b526
|
||||
| | | 8768005f ............................. PubKey hash
|
||||
| | 88 ..................................... OP_EQUALVERIFY
|
||||
| | ac ..................................... OP_CHECKSIG
|
||||
|
|
||||
| 57b115d681b9aff82824ff7e22af99d4
|
||||
| ac4b39ad7be7cb70b662e9011827d589 ......... Inputs hash
|
||||
|
|
||||
| Payload signature
|
||||
| 00 ....................................... Signature Size (0)
|
||||
| .......................................... Signature (Empty)
|
||||
{% endhighlight %}
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### ProUpServTx
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
*Added in protocol version 70211 of Dash Core as described by DIP3*
|
||||
|
||||
The Masternode Provider Update Service (ProUpServTx) special transaction is used
|
||||
to update the IP Address and port of a masternode. If a non-zero operatorReward
|
||||
was set in the initial ProRegTx, the operator may also set the scriptOperatorPayout
|
||||
field in the ProUpServTx.
|
||||
|
||||
A ProUpServTx is only valid for masternodes in the registered masternodes subset.
|
||||
When processed, it updates the metadata of the masternode entry and revives the
|
||||
masternode if it was previously marked as PoSe-banned.
|
||||
|
||||
A ProUpServTx is created and sent using the `protx update_service` RPC.
|
||||
|
||||
The special transaction type used for ProUpServTx Transactions is 2 and the extra
|
||||
payload consists of the following data:
|
||||
|
||||
| Bytes | Name | Data type | Description |
|
||||
| ---------- | ----------- | -------- | -------- |
|
||||
| 2 | version | uint_16 | ProUpServTx version number. Currently set to 1.
|
||||
| 32 | proTXHash | uint256 | The hash of the initial ProRegTx
|
||||
| 16 | ipAddress | byte[] | IPv6 address in network byte order. Only IPv4 mapped addresses are allowed (to be extended in the future)
|
||||
| 2 | port | uint_16 | Port (network byte order)
|
||||
| 1-9 | scriptOperator<br>PayoutSize | compactSize uint | Size of the Operator Payee Script.
|
||||
| Variable | scriptOperator<br>Payout | Script | Operator Payee script (p2pkh/p2sh)
|
||||
| 32 | inputsHash | uint256 | Hash of all the outpoints of the transaction inputs
|
||||
| 1-9 | payloadSigSize |compactSize uint | Size of the Signature<br>**Note:** not present in BLS implementation
|
||||
| 96 | payloadSig | vector | BLS Signature of the hash of the ProUpServTx fields. Signed by the Operator.
|
||||
|
||||
The following annotated hexdump shows a ProUpServTx transaction. (Parts of the
|
||||
classical transaction section have been omitted.)
|
||||
|
||||
{% highlight text %}
|
||||
0300 ....................................... Version (3)
|
||||
0200 ....................................... Type (2 - ProUpServTx)
|
||||
|
||||
[...] ...................................... Transaction inputs omitted
|
||||
[...] ...................................... Transaction outputs omitted
|
||||
|
||||
00000000 ................................... locktime: 0 (a block height)
|
||||
|
||||
b5 ......................................... Extra payload size (181)
|
||||
|
||||
ProUpServTx Payload
|
||||
| 0100 ..................................... Version (1)
|
||||
|
|
||||
| db60b8cecae691a3d078a2341d460b06
|
||||
| b2914f6b092f1906b5c815589399b0ff ......... ProRegTx Hash
|
||||
|
|
||||
| 00000000000000000000ffffc0000233 ......... IP Address: ::ffff:192.0.2.51
|
||||
| 270f ..................................... Port: 9999
|
||||
|
|
||||
| 00 ....................................... Operator payout script size (0)
|
||||
| .......................................... Operator payout script (Empty)
|
||||
|
|
||||
| a9569d037b0eacc8bca05c5829c95283
|
||||
| 4ac27d1c7e7df610500b7ba70fd46507 ......... Inputs hash
|
||||
|
|
||||
| Payload signature (BLS)
|
||||
| 0267702ef85d186ef7fa32dc40c65f2f
|
||||
| eca0a7465715eb7c30f81beb69e35ee4
|
||||
| 1f6ff7f292b82a9caebb5aa961b0f915
|
||||
| 02501becf629e93c0a01c76162d56a6c
|
||||
| 65a9675c3ca9d5297f053e68f91393dd
|
||||
| 789beed8ef7e8839695a334c2e1bd37c ......... BLS Signature (96 bytes)
|
||||
{% endhighlight %}
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### ProUpRegTx
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
*Added in protocol version 70211 of Dash Core as described by DIP3*
|
||||
|
||||
The Masternode Provider Update Registrar (ProUpRegTx) special transaction is used
|
||||
by a masternode owner to update masternode metadata (e.g. operator/voting key
|
||||
details or the payout script).
|
||||
|
||||
A ProUpRegTx is created and sent using the `protx update_registrar` RPC.
|
||||
|
||||
The special transaction type is 3 and the extra payload consists of the following
|
||||
data:
|
||||
|
||||
| Bytes | Name | Data type | Description |
|
||||
| ---------- | ----------- | -------- | -------- |
|
||||
| 2 | version | uint_16 | Provider update registrar transaction version number. Currently set to 1.
|
||||
| 32 | proTXHash | uint256 | The hash of the initial ProRegTx
|
||||
| 2 | mode | uint_16 | Masternode mode. Default set to 0.
|
||||
| 48 | PubKeyOperator | CBLSPublicKey | The BLS public key used for operational related signing (network messages, ProTx updates)
|
||||
| 20 | KeyIdVoting | CKeyID | The public key hash used for voting.
|
||||
| 1-9 | scriptPayoutSize | compactSize uint | Size of the Payee Script.
|
||||
| Variable | scriptPayout | Script | Payee script (p2pkh/p2sh)
|
||||
| 32 | inputsHash | uint256 | Hash of all the outpoints of the transaction inputs
|
||||
| 1-9 | payloadSigSize |compactSize uint | Size of the Signature
|
||||
| Variable | payloadSig | vector | Signature of the hash of the ProTx fields. Signed with the key corresponding to the collateral outpoint in case the collateral is not part of the ProRegTx itself, empty otherwise.
|
||||
|
||||
The following annotated hexdump shows a ProUpRegTx transaction referencing an
|
||||
existing collateral. (Parts of the classical transaction section have been omitted.)
|
||||
|
||||
<!--devnet-dashdocs getrawtransaction 702390ef06b10c174841ad7b863df23c166c27815e3be2438e2fee6f87882b91 true-->
|
||||
|
||||
{% highlight text %}
|
||||
0300 ....................................... Version (3)
|
||||
0300 ....................................... Type (3 - ProUpRegTx)
|
||||
|
||||
[...] ...................................... Transaction inputs omitted
|
||||
[...] ...................................... Transaction outputs omitted
|
||||
|
||||
00000000 ................................... locktime: 0 (a block height)
|
||||
|
||||
e4 ......................................... Extra payload size (228)
|
||||
|
||||
ProRegTx Payload
|
||||
| 0100 ..................................... Version (1)
|
||||
|
|
||||
| ddaf13bf1b02de39711de911e646c63e
|
||||
| f089b6cee786a1b776086ae130331bba ......... ProRegTx Hash
|
||||
|
|
||||
| 0000 ..................................... Mode (0)
|
||||
|
|
||||
| 0e02146e9c34cfbcb3f3037574a1abb35525e2ca
|
||||
| 0c3c6901dbf82ac591e30218d1711223b7ca956e
|
||||
| df39f3d984d06d51 ......................... Operator public key (BLS)
|
||||
| 757a2171bbf92517e358249f20c37a8ad2d7a5bc . Voting pubkey hash (ECDSA)
|
||||
|
|
||||
| Payout script
|
||||
| 19 ....................................... Bytes in pubkey script: 25
|
||||
| | 76 ..................................... OP_DUP
|
||||
| | a9 ..................................... OP_HASH160
|
||||
| | 14 ..................................... Push 20 bytes as data
|
||||
| | | 9e648c7e4b61482aa39bd10e0bf0b526
|
||||
| | | 8768005f ............................. PubKey hash
|
||||
| | 88 ..................................... OP_EQUALVERIFY
|
||||
| | ac ..................................... OP_CHECKSIG
|
||||
|
|
||||
| 50b50b24193b2b16f0383125c1f4426e
|
||||
| 883d256eeadee96d500f8c08b0e0f9e4 ......... Inputs hash
|
||||
|
|
||||
| Payload signature
|
||||
| 41 ....................................... Signature Size (65)
|
||||
| 1ffa8a27ae0301e414176d4c876cff2e
|
||||
| 20b810683a68ab7dcea95de1f8f36441
|
||||
| 4c56368f189a3ef7a59b83bd77f22431
|
||||
| a73d347841a58768b94c771819dc2bbce3 ....... Signature
|
||||
{% endhighlight %}
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### ProUpRevTx
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
*Added in protocol version 70211 of Dash Core as described by DIP3*
|
||||
|
||||
The Masternode Operator Revocation (ProUpRevTx) special transaction allows an
|
||||
operator to revoke their key in case of compromise or if they wish to terminate
|
||||
service. If a masternode's operator key is revoked, the masternode becomes
|
||||
ineligible for payment until the owner provides a new operator key (via a ProUpRegTx).
|
||||
|
||||
A ProUpRevTx is created and sent using the `protx revoke` RPC.
|
||||
|
||||
The special transaction type used for ProUpServTx Transactions is 4 and the extra
|
||||
payload consists of the following data:
|
||||
|
||||
| Bytes | Name | Data type | Description |
|
||||
| ---------- | ----------- | -------- | -------- |
|
||||
| 2 | version | uint_16 | ProUpRevTx version number. Currently set to 1.
|
||||
| 32 | proTXHash | uint256 | The hash of the initial ProRegTx
|
||||
| 2 | reason | uint_16 | The reason for revoking the key.<br>`0` - Not specified<br>`1` - Termination of Service<br>`2` - Compromised Key<br>`3` - Change of key
|
||||
| 32 | inputsHash | uint256 | Hash of all the outpoints of the transaction inputs
|
||||
| 1-9 | payloadSigSize |compactSize uint | Size of the Signature<br>**Note:** not present in BLS implementation
|
||||
| 96 | payloadSig | vector | BLS Signature of the hash of the ProUpServTx fields. Signed by the Operator.
|
||||
|
||||
The following annotated hexdump shows a ProUpRevTx transaction. (Parts of the
|
||||
classical transaction section have been omitted.)
|
||||
|
||||
{% highlight text %}
|
||||
0300 ....................................... Version (3)
|
||||
0400 ....................................... Type (4 - ProUpRevTx)
|
||||
|
||||
[...] ...................................... Transaction inputs omitted
|
||||
[...] ...................................... Transaction outputs omitted
|
||||
|
||||
00000000 ................................... locktime: 0 (a block height)
|
||||
|
||||
a4 ......................................... Extra payload size (164)
|
||||
|
||||
ProUpRevTx Payload
|
||||
| 0100 ..................................... Version (1)
|
||||
|
|
||||
| ddaf13bf1b02de39711de911e646c63e
|
||||
| f089b6cee786a1b776086ae130331bba ......... ProRegTx Hash
|
||||
|
|
||||
| 0000 ..................................... Reason: 0 (Not specified)
|
||||
|
|
||||
| cb0dfe113c87f8e9cde2c5d18aae12fc
|
||||
| 8d0617c42c34ca5c2f2f6ab4b1dae164 ......... Inputs hash
|
||||
|
|
||||
| Payload signature (BLS)
|
||||
| 0adaef4bf1a904308f1b0efbdfaffc93
|
||||
| 864f9e047fd83415c831589180303711
|
||||
| 0f0d8adb312ab43ddd7f8086042d3f5b
|
||||
| 09029a6a16c341c9d2a62789b495fef4
|
||||
| e068da711dac28106ff354db7249ae88
|
||||
| 05877d82ff7d1af00ae2d303dea5eb3b ......... BLS Signature (96 bytes)
|
||||
{% endhighlight %}
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### CbTx
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
*Added in protocol version 70211 of Dash Core as described by DIP4*
|
||||
|
||||
The Coinbase (CbTx) special transaction adds information to the block’s coinbase
|
||||
transaction that enables verification of the deterministic masternode list without
|
||||
the full chain (e.g. from SPV clients). This allows light-clients to properly
|
||||
verify InstantSend transactions and support additional deterministic masternode
|
||||
list functionality in the future.
|
||||
|
||||
The special transaction type used for CbTx Transactions is 5 and the extra
|
||||
payload consists of the following data:
|
||||
|
||||
| Bytes | Name | Data type | Description |
|
||||
| ---------- | ----------- | -------- | -------- |
|
||||
| 2 | version | uint_16 | CbTx version number. Currently set to 1.
|
||||
| 4 | height | uint32_t | Height of the block
|
||||
| 32 | merkleRootMNList | uint256 | Merkle root of the masternode list
|
||||
|
||||
The following annotated hexdump shows a CbTx transaction.
|
||||
|
||||
<!--devnet-DRA getrawtransaction 072b8eb47a87799a1242a8bd959a9c5eab93a346700d2f674420cfea70b2ed1c true-->
|
||||
|
||||
An itemized coinbase transaction:
|
||||
|
||||
{% highlight text %}
|
||||
0300 ....................................... Version (3)
|
||||
0500 ....................................... Type (5 - Coinbase)
|
||||
|
||||
01 ......................................... Number of inputs
|
||||
| 00000000000000000000000000000000
|
||||
| 00000000000000000000000000000000 ......... Previous outpoint TXID
|
||||
| ffffffff ................................. Previous outpoint index
|
||||
|
|
||||
| 05 ....................................... Bytes in coinbase: 5
|
||||
| |
|
||||
| | 02 ..................................... Bytes in height
|
||||
| | | 0608 ................................. Height: 2054
|
||||
| |
|
||||
| | 0101 ................................... Arbitrary data
|
||||
| ffffffff ................................. Sequence
|
||||
|
||||
02 ......................................... Output count
|
||||
| Transaction Output 1
|
||||
| | 00902f5009000000 ....................... Duffs (400 DASH)
|
||||
| | 2102c633b7022b4dab169c8a8459d83b7e0
|
||||
| | 6e0f8da0f89bf7e788ec98c8038107989ac .... Script
|
||||
|
|
||||
| Transaction Output 2
|
||||
| | 00e40b5402000000 ....................... Duffs (100 DASH)
|
||||
| | 1976a914ebafa153cffbb5b37c30fb93
|
||||
| | 886f2fe0f1d549ed88ac ................... P2PKH script
|
||||
|
||||
00000000 ................................... Locktime
|
||||
|
||||
26 ......................................... Extra payload size (38)
|
||||
|
||||
Coinbase Transaction Payload
|
||||
| 0100 ..................................... Version (1)
|
||||
|
|
||||
| 06080000 ................................. Block height: 2054
|
||||
|
|
||||
| 69010fa8b729b53c78a1e209946c82e2
|
||||
| 3159439022ea4055aa60d4393fffba46 ......... MN List merkle root
|
||||
{% endhighlight %}
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### Quorum Commitment
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
Quorum Commitment
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### SubTxRegister
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
Register Blockchain User
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### SubTxTopup
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
Topup Blockchain User Credit
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### SubTxResetKey
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
Change Blockchain User Public Key
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
#### SubTxCloseAccount
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
{% autocrossref %}
|
||||
|
||||
Close Blockchain User Account
|
||||
|
||||
{% endautocrossref %}
|
||||
|
||||
### CompactSize Unsigned Integers
|
||||
{% include helpers/subhead-links.md %}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue