From 28514b62d7c2335c07875e22be81870b07dfb4ad Mon Sep 17 00:00:00 2001 From: thephez Date: Wed, 26 Dec 2018 11:05:10 -0500 Subject: [PATCH] V0.13.0 RC updates (#95) * Content - RPC - Update quick reference * RPC - Update getblockchaininfo to show BIP-9 progress Related to dashpay/dash#2435 * RPC - Update gobject prepare with new params Use-IS (dashpay/dash#2452) Use specific UTXO for fee (dashpay/dash#2482) * RPC - Update mode name * RPC - Update protx default mode dashpay/dash#2513 * Content - Add spork 17 * Content - Special transactions Add info for Quorum commitment Remove messages not in 13.0 (SubTx) * P2P - Add new txlvote fields masternodeProTxHash (dashpay/dash#2484) quorumModifierHash (dashpay/dash#2505) * RPC - Update protx list Make all options follow the same parameter format (dashpay/dash#2559) * Content - version bump 0.13.0.0 bumped to 70213 (dashpay/dash#2557) * Guide - PrivateSend dstx message limit Up to 5 simultaneous dstxs per MN allowed (dashpay/dash#2552) * RPC - Update getblock Add missing versionHex field (dashpay/dash@e7d9ffa) Change to use verbosity syntax (dashpay/dash#2506 and bitcoin/bitcoin#8704) * P2P - Add qfcommit message (no hexdump example) DIP6 quorum final commitment (dashpay/dash#2477) * P2P - qfcommit typo Change description of llmqType field * P2P - Special tx payload size clarification * Guide - Update MN payment description Related to dashpay/dash#2258 * Guide - fix broken link * Guide - Update some example txs Change to hashes on the chain following the 12.3.4 reset * P2P - Add QcTx hexdump * P2P - DIP4 message updates Add SML entry Update hexdump to include new fields Add getmnlistd and mnlistdiff to cross ref * P2P - minor DIP3-related comments --- _autocrossref.yaml | 7 + _config.yml | 5 +- .../devdoc/dash-core/rpcs/quick-reference.md | 32 +-- .../devdoc/dash-core/rpcs/rpcs/getblock.md | 271 +++++++++++++++--- .../dash-core/rpcs/rpcs/getblockchaininfo.md | 25 ++ .../devdoc/dash-core/rpcs/rpcs/gobject.md | 31 ++ .../dash-core/rpcs/rpcs/masternodelist.md | 2 +- _includes/devdoc/dash-core/rpcs/rpcs/protx.md | 37 +-- _includes/devdoc/guide_dash_features.md | 31 +- _includes/devdoc/ref_p2p_networking.md | 131 +++++++-- _includes/devdoc/ref_transactions.md | 111 +++++-- _includes/layout/base/rpc-table.html | 6 +- _includes/references.md | 6 +- 13 files changed, 549 insertions(+), 146 deletions(-) diff --git a/_autocrossref.yaml b/_autocrossref.yaml index 5cd39bcf..e7c0bce7 100644 --- a/_autocrossref.yaml +++ b/_autocrossref.yaml @@ -69,6 +69,8 @@ fiat: '`getheaders` messages': getheaders message '`getaddr` message': getaddr message '`getaddr` messages': getaddr message +'`getmnlistd` message': getmnlistd message +'`getmnlistd` messages': getmnlistd message '`getsporks` message': getsporks message '`getsporks` messages': getsporks message '`govobj` message': govobj message @@ -114,6 +116,8 @@ micropayment channels: micropayment channel '`mnb` messages': mnb message '`mnget` message': mnget message '`mnget` messages': mnget message +'`mnlistdiff` message': mnlistdiff message +'`mnlistdiff` messages': mnlistdiff message '`mnp` message': mnp message '`mnp` messages': mnp message '`mnv` message': mnv message @@ -170,6 +174,9 @@ protocol version 70012: section protocol versions protocol version 70013: section protocol versions protocol version 70014: section protocol versions public key infrastructure: pki +'QcTx': quorum commitment special tx +'`qfcommit` message': qfcommit message +'`qfcommit` messages': qfcommit message '`r`': r receipt: DO NOT AUTOCROSSREF recurrent rebilling: diff --git a/_config.yml b/_config.yml index b4fab8d2..940789f0 100644 --- a/_config.yml +++ b/_config.yml @@ -514,7 +514,7 @@ devsearches: - "DIP4: Simplified Verification of Deterministic Masternode Lists": "https://github.com/dashpay/dips/blob/master/dip-0004.md" - "DIP5: Blockchain Users": "https://github.com/dashpay/dips/blob/master/dip-0005.md" - "DIP6: Long-Living Masternode Quorums": "https://github.com/dashpay/dips/blob/master/dip-0006.md" - - "DIP7: LLMQ Signing Requests / Sessions": "https://github.com/dashpay/dips/blob/master/dip-0007.md" + - "DIP7: LLMQ Signing Requests / Sessions": "https://github.com/dashpay/dips/blob/master/dip-0007.md" ## Bitcoin P2P Protocol messages documented on Bitcoin.org "P2P Messages": @@ -532,10 +532,12 @@ devsearches: - "getblocktxn": "/en/developer-reference#getblocktxn" - "getdata": "/en/developer-reference#getdata" - "getheaders": "/en/developer-reference#getheaders" + - "getmnlistd": "/en/developer-reference#getmnlistd" - "headers": "/en/developer-reference#headers" - "inv": "/en/developer-reference#inv" - "mempool": "/en/developer-reference#mempool" - "merkleblock": "/en/developer-reference#merkleblock" + - "mnlistdiff": "/en/developer-reference#mnlistdiff" - "notfound": "/en/developer-reference#notfound" - "ping": "/en/developer-reference#ping" - "pong": "/en/developer-reference#pong" @@ -572,6 +574,7 @@ devsearches: - "mnw": "/en/developer-reference#mnw" - "mnwb": "/en/developer-reference#mnwb" - "ssc": "/en/developer-reference#ssc" + - "qfcommit": "/en/developer-reference#qfcommit" # Dash - governance - "govobj": "/en/developer-reference#govobj" diff --git a/_includes/devdoc/dash-core/rpcs/quick-reference.md b/_includes/devdoc/dash-core/rpcs/quick-reference.md index 3c55d81c..deab1b83 100644 --- a/_includes/devdoc/dash-core/rpcs/quick-reference.md +++ b/_includes/devdoc/dash-core/rpcs/quick-reference.md @@ -101,8 +101,8 @@ These RPCs are all Dash-specific and not found in Bitcoin Core {% autocrossref %} * [GetBestBlockHash][rpc getbestblockhash]: {{summary_getBestBlockHash}} -* [GetBlock][rpc getblock]: {{summary_getBlock}} {{UPDATED0_13_0}} -* [GetBlockChainInfo][rpc getblockchaininfo]: {{summary_getBlockChainInfo}} {{DASH_UPDATED0_12_3}} {{UPDATED0_12_1}} +* [GetBlock][rpc getblock]: {{summary_getBlock}} {{DASH_UPDATED0_13_0}} +* [GetBlockChainInfo][rpc getblockchaininfo]: {{summary_getBlockChainInfo}} {{DASH_UPDATED0_13_0}} {{UPDATED0_12_1}} * [GetBlockCount][rpc getblockcount]: {{summary_getBlockCount}} * [GetBlockHash][rpc getblockhash]: {{summary_getBlockHash}} * [GetBlockHashes][rpc getblockhashes]: {{summary_getBlockHashes}} {{DASH_NEW0_12_1}} @@ -146,11 +146,11 @@ These RPCs are all Dash-specific and not found in Bitcoin Core {% autocrossref %} -* [GetGovernanceInfo][rpc getgovernanceinfo]: {{summary_getGovernanceInfo}} {{DASH_UPDATED0_12_3}} +* [GetGovernanceInfo][rpc getgovernanceinfo]: {{summary_getGovernanceInfo}} {{DASH_UPDATED0_13_0}} * [GetPoolInfo][rpc getpoolinfo]: {{summary_getPoolInfo}} * [GetSuperblockBudget][rpc getsuperblockbudget]: {{summary_getSuperblockBudget}} -* [GObject][rpc gobject]: {{summary_gObject}} {{DASH_UPDATED0_12_3}} -* [Masternode][rpc masternode]: {{summary_masternode}} {{DASH_UPDATED0_12_3}} +* [GObject][rpc gobject]: {{summary_gObject}} {{DASH_UPDATED0_13_0}} +* [Masternode][rpc masternode]: {{summary_masternode}} {{DASH_UPDATED0_13_0}} * [MasternodeBroadcast][rpc masternodebroadcast]: {{summary_masternodeBroadcast}} * [MasternodeList][rpc masternodelist]: {{summary_masternodeList}} {{DASH_UPDATED0_12_3}} * [MnSync][rpc mnsync]: {{summary_mnSync}} @@ -189,7 +189,7 @@ These RPCs are all Dash-specific and not found in Bitcoin Core {% autocrossref %} -* [GetBlockTemplate][rpc getblocktemplate]: {{summary_getBlockTemplate}} {{DASH_UPDATED0_12_3}} +* [GetBlockTemplate][rpc getblocktemplate]: {{summary_getBlockTemplate}} {{DASH_UPDATED0_13_0}} * [GetMiningInfo][rpc getmininginfo]: {{summary_getMiningInfo}} {{UPDATED0_14_0}} * [GetNetworkHashPS][rpc getnetworkhashps]: {{summary_getNetworkHashPS}} * [PrioritiseTransaction][rpc prioritisetransaction]: {{summary_prioritiseTransaction}} @@ -228,7 +228,7 @@ These RPCs are all Dash-specific and not found in Bitcoin Core * [DecodeRawTransaction][rpc decoderawtransaction]: {{summary_decodeRawTransaction}} {{UPDATED0_13_0}} * [DecodeScript][rpc decodescript]: {{summary_decodeScript}} * [FundRawTransaction][rpc fundrawtransaction]: {{summary_fundRawTransaction}} {{DASH_UPDATED0_12_3}} {{UPDATED0_14_0}} -* [GetRawTransaction][rpc getrawtransaction]: {{summary_getRawTransaction}} {{DASH_UPDATED0_12_3}} {{UPDATED0_14_0}} +* [GetRawTransaction][rpc getrawtransaction]: {{summary_getRawTransaction}} {{DASH_UPDATED0_13_0}} {{UPDATED0_14_0}} * [SendRawTransaction][rpc sendrawtransaction]: {{summary_sendRawTransaction}} * [SignRawTransaction][rpc signrawtransaction]: {{summary_signRawTransaction}} @@ -267,16 +267,16 @@ default. * [BackupWallet][rpc backupwallet]: {{summary_backupWallet}} * [DumpHDInfo][rpc dumphdinfo]: {{summary_dumpHDInfo}} {{DASH_NEW0_12_2}} * [DumpPrivKey][rpc dumpprivkey]: {{summary_dumpPrivKey}} -* [DumpWallet][rpc dumpwallet]: {{summary_dumpWallet}} +* [DumpWallet][rpc dumpwallet]: {{summary_dumpWallet}} {{DASH_UPDATED0_13_0}} * [EncryptWallet][rpc encryptwallet]: {{summary_encryptWallet}} * [GetAccount][rpc getaccount]: {{summary_getAccount}} {{DEPRECATED}} * [GetAccountAddress][rpc getaccountaddress]: {{summary_getAccountAddress}} {{DEPRECATED}} * [GetAddressesByAccount][rpc getaddressesbyaccount]: {{summary_getAddressesByAccount}} {{DEPRECATED}} -* [GetBalance][rpc getbalance]: {{summary_getBalance}} +* [GetBalance][rpc getbalance]: {{summary_getBalance}} {{DASH_UPDATED0_13_0}} * [GetNewAddress][rpc getnewaddress]: {{summary_getNewAddress}} * [GetRawChangeAddress][rpc getrawchangeaddress]: {{summary_getRawChangeAddress}} -* [GetReceivedByAccount][rpc getreceivedbyaccount]: {{summary_getReceivedByAccount}} {{DEPRECATED}} -* [GetReceivedByAddress][rpc getreceivedbyaddress]: {{summary_getReceivedByAddress}} +* [GetReceivedByAccount][rpc getreceivedbyaccount]: {{summary_getReceivedByAccount}} {{DASH_UPDATED0_13_0}} {{DEPRECATED}} +* [GetReceivedByAddress][rpc getreceivedbyaddress]: {{summary_getReceivedByAddress}} {{DASH_UPDATED0_13_0}} * [GetTransaction][rpc gettransaction]: {{summary_getTransaction}} {{UPDATED0_12_0}} * [GetUnconfirmedBalance][rpc getunconfirmedbalance]: {{summary_getUnconfirmedBalance}} * [GetWalletInfo][rpc getwalletinfo]: {{summary_getWalletInfo}} {{DASH_UPDATED0_12_3}} @@ -290,20 +290,20 @@ default. * [InstantSendToAddress][rpc instantsendtoaddress]: {{summary_instantSendToAddress}} * [KeePass][rpc keepass]: {{summary_keepass}} {{DARKCOIN_NEW0_11_0}} * [KeyPoolRefill][rpc keypoolrefill]: {{summary_keyPoolRefill}} -* [ListAccounts][rpc listaccounts]: {{summary_listAccounts}} {{DEPRECATED}} +* [ListAccounts][rpc listaccounts]: {{summary_listAccounts}} {{DASH_UPDATED0_13_0}} {{DEPRECATED}} * [ListAddressBalances][rpc listaddressbalances]: {{summary_listAddressBalances}} {{DASH_NEW0_12_3}} * [ListAddressGroupings][rpc listaddressgroupings]: {{summary_listAddressGroupings}} * [ListLockUnspent][rpc listlockunspent]: {{summary_listLockUnspent}} -* [ListReceivedByAccount][rpc listreceivedbyaccount]: {{summary_listReceivedByAccount}} {{DEPRECATED}} -* [ListReceivedByAddress][rpc listreceivedbyaddress]: {{summary_listReceivedByAddress}} +* [ListReceivedByAccount][rpc listreceivedbyaccount]: {{summary_listReceivedByAccount}} {{DASH_UPDATED0_13_0}} {{DEPRECATED}} +* [ListReceivedByAddress][rpc listreceivedbyaddress]: {{summary_listReceivedByAddress}} {{DASH_UPDATED0_13_0}} * [ListSinceBlock][rpc listsinceblock]: {{summary_listSinceBlock}} * [ListTransactions][rpc listtransactions]: {{summary_listTransactions}} {{UPDATED0_12_1}} * [ListUnspent][rpc listunspent]: {{summary_listUnspent}} {{DASH_UPDATED0_12_3}} {{UPDATED0_13_0}} * [LockUnspent][rpc lockunspent]: {{summary_lockUnspent}} * [Move][rpc move]: {{summary_move}} {{DEPRECATED}} * [RemovePrunedFunds][rpc removeprunedfunds]: {{summary_removePrunedFunds}} {{DASH_NEW0_12_3}} {{NEW0_13_0}} -* [SendFrom][rpc sendfrom]: {{summary_sendFrom}} {{DEPRECATED}} -* [SendMany][rpc sendmany]: {{summary_sendMany}} +* [SendFrom][rpc sendfrom]: {{summary_sendFrom}} {{DASH_UPDATED0_13_0}} {{DEPRECATED}} +* [SendMany][rpc sendmany]: {{summary_sendMany}} {{DASH_UPDATED0_13_0}} * [SendToAddress][rpc sendtoaddress]: {{summary_sendToAddress}} * [SetAccount][rpc setaccount]: {{summary_setAccount}} {{DEPRECATED}} * [SetPrivateSendAmount][rpc setprivatesendamount]: {{summary_setPrivateSendAmount}} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getblock.md b/_includes/devdoc/dash-core/rpcs/rpcs/getblock.md index 2b11232a..7a59b0e6 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getblock.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getblock.md @@ -13,10 +13,10 @@ http://opensource.org/licenses/MIT. The `getblock` RPC {{summary_getBlock}} -*Parameter #1---header hash* +*Parameter #1---block hash* {% itemplate ntpd1 %} -- n: "Header Hash" +- n: "Block Hash" t: "string (hex)" p: "Required
(exactly 1)" d: "The hash of the header of the block to get, encoded as hex in RPC byte order" @@ -26,14 +26,14 @@ The `getblock` RPC {{summary_getBlock}} *Parameter #2---whether to get JSON or hex output* {% itemplate ntpd1 %} -- n: "Format" - t: "boolean" - p: "Optional
(true or false)" - d: "Set to `false` to get the block in serialized block format; set to `true` (the default) to get the decoded block as a JSON object" +- n: "Verbosity" + t: "number (int)" + p: "Optional
(0 or 1)" + d: "Set to one of the following verbosity levels:
• `0` - Get the block in serialized block format;
• `1` - Get the decoded block as a JSON object (default)
• `2` - Get the decoded block as a JSON object with transaction details" {% enditemplate %} -*Result (if format was `false`)---a serialized block* +*Result (if verbosity was `0`)---a serialized block* {% itemplate ntpd1 %} - n: "`result`" @@ -43,7 +43,7 @@ The `getblock` RPC {{summary_getBlock}} {% enditemplate %} -*Result (if format was `true` or omitted)---a JSON block* +*Result (if verbosity was `1` or omitted)---a JSON block with transaction hashes* {% itemplate ntpd1 %} - n: "`result`" @@ -76,6 +76,11 @@ The `getblock` RPC {{summary_getBlock}} p: "Required
(exactly 1)" d: "This block's version number. See [block version numbers][section block versions]" +- n: "→
`versionHex`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "_Added in Bitcoin Core 0.13.0_

The block version formatted in hexadecimal" + - n: "→
`merkleroot`" t: "string (hex)" p: "Required
(exactly 1)" @@ -133,63 +138,253 @@ The `getblock` RPC {{summary_getBlock}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Result (if verbosity was `2`---a JSON block with full transaction details* + +{% assign DEPTH="→" %} +{% include helpers/vars.md %} + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object/null" + p: "Required
(exactly 1)" + d: "An object containing the requested block, or JSON `null` if an error occurred" + +- n: "→
`hash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of this block's block header encoded as hex in RPC byte order. This is the same as the hash provided in parameter #1" + +- n: "→
`confirmations`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The number of confirmations the transactions in this block have, starting at 1 when this block is at the tip of the best block chain. This score will be -1 if the the block is not part of the best block chain" + +- n: "→
`size`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The size of this block in serialized block format, counted in bytes" + +- n: "→
`height`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height of this block on its block chain" + +- n: "→
`version`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "This block's version number. See [block version numbers][section block versions]" + +- n: "→
`versionHex`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "_Added in Bitcoin Core 0.13.0_

The block version formatted in hexadecimal" + +- n: "→
`merkleroot`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The merkle root for this block, encoded as hex in RPC byte order" + +- n: "→
`tx`" + t: "array" + p: "Required
(exactly 1)" + d: "An array containing the TXIDs of all transactions in this block. The transactions appear in the array in the same order they appear in the serialized block" + +{{INCLUDE_DECODE_RAW_TRANSACTION}} + +- n: "→
`time`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The value of the *time* field in the block header, indicating approximately when the block was created" + +- n: "→
`mediantime`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "*Added in Bitcoin Core 0.12.0*

The median block time in Unix epoch time" + +- n: "→
`nonce`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The nonce which was successful at turning this particular block into one that could be added to the best block chain" + +- n: "→
`bits`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The value of the *nBits* field in the block header, indicating the target threshold this block's header had to pass" + +- n: "→
`difficulty`" + t: "number (real)" + p: "Required
(exactly 1)" + d: "The estimated amount of work done to find this block relative to the estimated amount of work done to find block 0" + +- n: "→
`chainwork`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The estimated number of block header hashes miners had to check from the genesis block to this block, encoded as big-endian hex" + +- n: "→
`previousblockhash`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "The hash of the header of the previous block, encoded as hex in RPC byte order. Not returned for genesis block" + +- n: "→
`nextblockhash`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "The hash of the next block on the best block chain, if known, encoded as hex in RPC byte order" + +{% enditemplate %} + +*Example from Dash Core 0.13.0* Get a block in raw hex: {% highlight bash %} dash-cli -testnet getblock \ - 0000000037955fcc39af8b1ae75914ffb422313c0fca7eba96a1ac99c2e57f84 \ - false + 00000012e877c56af0b33d79aae888b5cb40b47809b4bee764e8fea7a9033994 \ + 0 {% endhighlight %} Result (wrapped): {% highlight text %} -0100002011f5719a0a0c4881ff98b4a68c1c828dc3b10f5b51033f5f93d48dbf\ -000000004b8e38f197d6ee878e160d2bae3ce05ab898a6252458ec67ce770140\ -260397c4dd2ed659a1dd001d00636b5601010000000100000000000000000000\ -00000000000000000000000000000000000000000000ffffffff4b02041204dd\ -2ed65908fabe6d6d7445746d63506b62572d2d35584853467a765a6748696972\ -30657a3a6f6d656e010000000000000017fffff9020000000d2f6e6f64655374\ -726174756d2f00000000058028bb13010000001976a914bad55652dffb1af943\ -41015c94feea79793442fd88ac40e553b1020000001976a9142b7856de53d4c1\ -823090c98f8ad79862842c09b588ac4094dd89000000001976a914c2c29ebc78\ -7954ef99d01c5f79115abf7012fb8e88ac4094dd89000000001976a914d7b47d\ -4b40a23c389f5a17754d7f60f511c7d0ec88ac4094dd89000000001976a914dc\ -3e0793134b081145ec0c67a9c72a7b297df27c88ac00000000 +01000020d2fb795188566bd52deaa8e62de6f59c2833e842f9f6a48cea026689\ +04000000c7274c45e043e5953f2d62a1938818b513d8fd4c9f99c2c1541d1449\ +7f368602c2d8175c417b4d1d0007a96501010000000100000000000000000000\ +00000000000000000000000000000000000000000000ffffffff1202a91a0e2f\ +5032506f6f6c2d74444153482fffffffff0404e65a96010000001976a9144f79\ +c383bc5d3e9d4d81b98f87337cedfa78953688ac40c3609a010000001976a914\ +f627e64c0453f74d879f6e6a37709189af0298da88ac3cdd0504000000001976\ +a914badadfdebaa6d015a0299f23fbc1fcbdd72ba96f88ac0000000000000000\ +2a6a285fb560df18bc5145faa0860841df9daf30dc544c7b0cdb52ff28c06fa3\ +b33924000000000100000000000000 {% endhighlight %} Get the same block in JSON: {% highlight bash %} dash-cli -testnet getblock \ - 0000000037955fcc39af8b1ae75914ffb422313c0fca7eba96a1ac99c2e57f84 + 00000012e877c56af0b33d79aae888b5cb40b47809b4bee764e8fea7a9033994 {% endhighlight %} Result: {% highlight json %} { - "hash": "0000000037955fcc39af8b1ae75914ffb422313c0fca7eba96a1ac99c2e57f84", - "confirmations": 3, - "size": 377, - "height": 4612, + "hash": "00000012e877c56af0b33d79aae888b5cb40b47809b4bee764e8fea7a9033994", + "confirmations": 1, + "size": 303, + "height": 6825, "version": 536870913, - "merkleroot": "c4970326400177ce67ec582425a698b85ae03cae2b0d168e87eed697f1388e4b", + "versionHex": "20000001", + "merkleroot": "0286367f49141d54c1c2999f4cfdd813b5188893a1622d3f95e543e0454c27c7", "tx": [ - "c4970326400177ce67ec582425a698b85ae03cae2b0d168e87eed697f1388e4b" + "0286367f49141d54c1c2999f4cfdd813b5188893a1622d3f95e543e0454c27c7" ], - "time": 1507208925, - "mediantime": 1507208645, - "nonce": 1449878272, - "bits": "1d00dda1", - "difficulty": 1.155066358813473, - "chainwork": "000000000000000000000000000000000000000000000000000001c3e86f0f04", - "previousblockhash": "00000000bf8dd4935f3f03515b0fb1c38d821c8ca6b498ff81480c0a9a71f511", - "nextblockhash": "0000000028817c7fce55d802f3647640600535a983d00e16076f284ec6cb001b" + "time": 1545066690, + "mediantime": 1545065992, + "nonce": 1705576192, + "bits": "1d4d7b41", + "difficulty": 0.01290611629979371, + "chainwork": "00000000000000000000000000000000000000000000000000000647104aa574", + "previousblockhash": "00000004896602ea8ca4f6f942e833289cf5e62de6a8ea2dd56b56885179fbd2" } +{% endhighlight %} +Get the same block in JSON with transaction details: + +{% highlight bash %} +dash-cli -testnet getblock \ + 00000012e877c56af0b33d79aae888b5cb40b47809b4bee764e8fea7a9033994 2 +{% endhighlight %} + +Result: + +{% highlight json %} +{ + "hash": "00000012e877c56af0b33d79aae888b5cb40b47809b4bee764e8fea7a9033994", + "confirmations": 1, + "size": 303, + "height": 6825, + "version": 536870913, + "versionHex": "20000001", + "merkleroot": "0286367f49141d54c1c2999f4cfdd813b5188893a1622d3f95e543e0454c27c7", + "tx": [ + { + "txid": "0286367f49141d54c1c2999f4cfdd813b5188893a1622d3f95e543e0454c27c7", + "size": 222, + "version": 1, + "type": 0, + "locktime": 0, + "vin": [ + { + "coinbase": "02a91a0e2f5032506f6f6c2d74444153482f", + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 68.17506820, + "valueSat": 6817506820, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 4f79c383bc5d3e9d4d81b98f87337cedfa789536 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a9144f79c383bc5d3e9d4d81b98f87337cedfa78953688ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "yTZg6eePKxbJZyoaC93bVrTUq5vjhFrbst" + ] + } + }, + { + "value": 68.85000000, + "valueSat": 6885000000, + "n": 1, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 f627e64c0453f74d879f6e6a37709189af0298da OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914f627e64c0453f74d879f6e6a37709189af0298da88ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "yikzsfaaQ2eZ1RpVUpf1EvedzgGdJD17dC" + ] + } + }, + { + "value": 0.67493180, + "valueSat": 67493180, + "n": 2, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 badadfdebaa6d015a0299f23fbc1fcbdd72ba96f OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914badadfdebaa6d015a0299f23fbc1fcbdd72ba96f88ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "ydMSjYqwv4xTossPJ1xndTxwS1Hho9DmuM" + ] + } + }, + { + "value": 0.00000000, + "valueSat": 0, + "n": 3, + "scriptPubKey": { + "asm": "OP_RETURN 5fb560df18bc5145faa0860841df9daf30dc544c7b0cdb52ff28c06fa3b339240000000001000000", + "hex": "6a285fb560df18bc5145faa0860841df9daf30dc544c7b0cdb52ff28c06fa3b339240000000001000000", + "type": "nulldata" + } + } + ], + "instantlock": false + } + ], + "time": 1545066690, + "mediantime": 1545065992, + "nonce": 1705576192, + "bits": "1d4d7b41", + "difficulty": 0.01290611629979371, + "chainwork": "00000000000000000000000000000000000000000000000000000647104aa574", + "previousblockhash": "00000004896602ea8ca4f6f942e833289cf5e62de6a8ea2dd56b56885179fbd2" +} {% endhighlight %} *See also* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md index 4e90fc8b..1d4e1f12 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md @@ -165,6 +165,31 @@ The `getblockchaininfo` RPC {{summary_getBlockChainInfo}} p: "Optional
(0 or 1)" d: "The bit (0-28) in the block version field used to signal this softfork. Field is only shown when status is `started`" +- n: "→ → →
`period`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The window size/period for this softfork. Field is only shown when status is `started`" + +- n: "→ → →
`threshold`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The threshold for this softfork. Field is only shown when status is `started`" + +- n: "→ → →
`windowStart`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The starting block height of the current window. Field is only shown when status is `started`" + +- n: "→ → →
`windowBlocks`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The number of blocks in the current window that had the version bit set for this softfork. Field is only shown when status is `started`" + +- n: "→ → →
`windowProgress`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The progress (between 0 and 1) for activation of this softfork. Field is only shown when status is `started`" + - n: "→ → →
`startTime`" t: "numeric
(int)" p: "Required
(exactly 1)" diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/gobject.md b/_includes/devdoc/dash-core/rpcs/rpcs/gobject.md index 19850f2e..b9cfe57b 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/gobject.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/gobject.md @@ -116,6 +116,37 @@ The `gobject prepare` RPC prepares a governance object by signing and creating a {% enditemplate %} +*Parameter #5---use-IS* + +{% itemplate ntpd1 %} +- n: "`use-IS`" + t: "boolean" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

InstantSend lock the collateral, only requiring one chain confirmation" + +{% enditemplate %} + +*Parameter #6---outputHash* + +{% itemplate ntpd1 %} +- n: "`outputHash`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The single output to submit the proposal fee from" + +{% enditemplate %} + +*Parameter #7---outputIndex* + +{% itemplate ntpd1 %} +- n: "`outputIndex`" + t: "numeric" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The output index (required if the `outputHash` parameter is provided)" + +{% enditemplate %} + + *Result---collateral transaction ID* {% itemplate ntpd1 %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md b/_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md index d51aa6ac..e31b0d28 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md @@ -40,7 +40,7 @@ Mode | Description `lastseen` | Print timestamp of when a masternode was last seen on the network `payee` | Print Dash address associated with a masternode (can be additionally filtered, partial match) `protocol` | Print protocol of a masternode (can be additionally filtered, exact match) -`pubkey` | Print the masternode (not collateral) public key +`keyid` | Print the masternode (not collateral) key id `rank` | Print rank of a masternode based on current block `sentinel` | Print sentinel version of a masternode (can be additionally filtered, exact match) `status` | Print masternode status: PRE_ENABLED / ENABLED / EXPIRED / SENTINEL_PING_EXPIRED / NEW_START_REQUIRED / UPDATE_REQUIRED / POSE_BAN / OUTPOINT_SPENT (can be additionally filtered, partial match) diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/protx.md b/_includes/devdoc/dash-core/rpcs/rpcs/protx.md index 71168134..99d59caa 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/protx.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/protx.md @@ -415,7 +415,7 @@ Result: The `protx list` RPC returns a list of provider transactions. Lists all ProTxs in your wallet or on-chain, depending on the given type. If -`type` is not specified, it defaults to `wallet`. All types have the optional +`type` is not specified, it defaults to `registered`. All types have the optional argument `detailed` which if set to `true` will result in a detailed list being returned. If set to `false`, only the hashes of the ProTx will be returned. @@ -428,29 +428,6 @@ returned. If set to `false`, only the hashes of the ProTx will be returned. d: "The type of ProTxs to list:
`registered` - all ProTxs registered at height
`valid` - all active/valid ProTxs at height
`wallet` - all ProTxs found in the current wallet

Height defaults to current chain-tip if one is not provided" {% enditemplate %} -**List Type - `registered` or `valid`** - -*Parameter #2---height* - -{% itemplate ntpd1 %} -- n: "`height`" - t: "bool" - p: "Optional
(0 or 1)" - d: "List ProTxs from this height." -{% enditemplate %} - -*Parameter #3---detailed* - -{% itemplate ntpd1 %} -- n: "`detailed`" - t: "bool" - p: "Optional
(0 or 1)" - d: "If set to `false` (default), only ProTx hashes are returned. If set to `true`, a detailed list of ProTx details is returned." -{% enditemplate %} - - -**List Type - `wallet`** - *Parameter #2---detailed* {% itemplate ntpd1 %} @@ -460,6 +437,14 @@ returned. If set to `false`, only the hashes of the ProTx will be returned. d: "If set to `false` (default), only ProTx hashes are returned. If set to `true`, a detailed list of ProTx details is returned." {% enditemplate %} +*Parameter #3---height* + +{% itemplate ntpd1 %} +- n: "`height`" + t: "bool" + p: "Optional
(0 or 1)" + d: "List ProTxs from this height (default: current chain tip)." +{% enditemplate %} *Result (if `detailed` was `false`)---provider registration transaction hash* @@ -505,7 +490,7 @@ Result: List of ProTxs which are active/valid at the given chain height. {% highlight bash %} -dash-cli -testnet protx list valid 700 +dash-cli -testnet protx list valid false 700 {% endhighlight %} Result: @@ -518,7 +503,7 @@ Result: Detailed list of ProTxs which are active/valid at the given chain height. {% highlight bash %} -dash-cli -testnet protx list valid 700 true +dash-cli -testnet protx list valid true 700 {% endhighlight %} Result: diff --git a/_includes/devdoc/guide_dash_features.md b/_includes/devdoc/guide_dash_features.md index f6c30972..0d02cb7f 100644 --- a/_includes/devdoc/guide_dash_features.md +++ b/_includes/devdoc/guide_dash_features.md @@ -154,7 +154,7 @@ integer value used in P2P messages, and the actual Dash value. | 3 | 8 | 00.0100001 | | 4 | 16 | 00.00100001 | -Protocol version 70212 added a 5th denomination (0.001 DASH). +Protocol version 70213 added a 5th denomination (0.001 DASH). The denominations are structured to allow converting between denominations directly without requiring additional inputs or creating change (for example, @@ -162,14 +162,14 @@ directly without requiring additional inputs or creating change (for example, {% endautocrossref %} -[Example Testnet denomination creation transaction](https://testnet-insight.dashevo.org/insight/tx/702e77d19dcb0fbfe7d7daa5543bcfeacec0f552c49e398b27fb8141ae52d3e2) +[Example Testnet denomination creation transaction](https://testnet-insight.dashevo.org/insight/tx/f0174fc87d68a18617c2990df4d9455c0459c601d2d6473934357a66f9b8b70a) {% autocrossref %} **Creating Collaterals** PrivateSend collaterals are used to pay mixing fees, but are kept separate from -the denominations to maximize privacy. Since protocol version 70212, the minimum +the denominations to maximize privacy. Since protocol version 70213, the minimum collateral fee is 1/10 of the smallest denomination for all mixing sessions regardless of denomination. In Dash Core, collaterals are created with enough value to pay 4 collateral fees @@ -182,9 +182,9 @@ input from 1x the minimum collateral amount to the maximum collateral amount. {% endautocrossref %} -[Example Testnet collateral creation transaction](https://testnet-insight.dashevo.org/insight/tx/c2fc4af6a9940bf33446f3dddf6892c3dac4351fd0add89157666ca1019454ca) +[Example Testnet collateral creation transaction](https://testnet-insight.dashevo.org/insight/tx/8f9b15973983876f7ce4eb2c32b09690dfb0432d2caf6c6df516196a8d17689f) -[Example Testnet collateral payment transaction](https://testnet-insight.dashevo.org/insight/tx/70404808f1871e600cc8d30ad1eaf2bab63906dd1f3ae4a799b7182e1689721b) +[Example Testnet collateral payment transaction](https://testnet-insight.dashevo.org/insight/tx/de51e6f7c5ef75aad0dbb0a808ef4873d7ef6d67b25f3a658d5a241db4f3eeeb) #### PrivateSend Mixing @@ -251,6 +251,13 @@ mixing pool. * Inputs/outputs are ordered deterministically as defined by [BIP-69](https://github.com/quantumexplorer/bips/blob/master/bip-0069.mediawiki#Abstract) to avoid leaking any data ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend-server.cpp#L321-#L322)) * Clients must sign their inputs to the Final Transaction within 15 seconds or risk forfeiting the collateral they provided in the `dsi` message (Step 4) ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend.h#L23)) + _**Step 10 - Final Transaction broadcast**_ + + * Prior to protocol version 70213, masternodes could only send a single + un-mined `dstx` message at a time. As of protocol version 70213, up to 5 + (`MASTERNODE_MAX_MIXING_TXES`) un-mined `dstx` messages per masternode are + allowed. + _**General**_ With the exception of the `dsq` message and the `dstx` message (which need @@ -295,6 +302,20 @@ value of only 0.00000546 DASH as shown by the calculation below. {% autocrossref %} +Since DIP3 (introduced in Dash Core 0.13.0), masternode reward payments are based +on the deterministic masternode list information found on-chain in each block. +This results in a transparent, deterministic process that operates using the +[algorithm described in DIP3](https://github.com/dashpay/dips/blob/master/dip-0003.md#masternode-rewards). + +On-chain masternode lists reduce the complexity of reward payments, make +payments much more predictable, and also allow masternode payments to be +enforced for all blocks (enforcement for superblocks was not possible in the +previous system). + +**Historical Note** + +Prior to DIP3, the masternode payment process operated as described below. + Masternode payment uses a verifiable process to determine which masternode is paid in each block. When a new block is processed, a quorum of `MNPAYMENTS_SIGNATURES_TOTAL` (10) masternodes vote on the next masternode diff --git a/_includes/devdoc/ref_p2p_networking.md b/_includes/devdoc/ref_p2p_networking.md index f9e9d810..5cb55896 100644 --- a/_includes/devdoc/ref_p2p_networking.md +++ b/_includes/devdoc/ref_p2p_networking.md @@ -66,7 +66,7 @@ with the most recent versions listed first. (If you know of a protocol version that implemented a major change but which is not listed here, please [open an issue][docs issue].) -As of Dash Core 0.13.0.0, the most recent protocol version is 70212. +As of Dash Core 0.13.0.0, the most recent protocol version is 70213. | Version | Initial Release | Major Changes |---------|------------------------------------|-------------- @@ -174,6 +174,7 @@ The currently-available type identifiers are: | 18 | [`MSG_GOVERNANCE_OBJECT_VOTE`][msg_governance_object_vote]{:#term-msg_governance_object_vote}{:.term} | The hash is a Governance Object Vote. | 19 | [`MSG_MASTERNODE_VERIFY`][msg_masternode_verify]{:#term-msg_masternode_verify}{:.term} | The hash is a Masternode Verify. | 20 | [`MSG_CMPCT_BLOCK`][msg_cmpct_block]{:#term-msg_cmpct_block}{:.term} | The hash is of a block header; identical to `MSG_BLOCK`. When used in a `getdata` message, this indicates the response should be a `cmpctblock` message. **Only for use in `getdata` messages.** +| 21 | [`MSG_QUORUM_FINAL_COMMITMENT`][msg_quorum_final_commitment]{:#term-msg_quorum_final_commitment}{:.term} | The hash is a long-living masternode quorum final commitment. Type identifier zero and type identifiers greater than twenty are reserved for future implementations. Dash Core ignores all inventories with @@ -547,10 +548,12 @@ to the `getheaders` message will include as many as 2,000 block headers. {% autocrossref %} -*Added in protocol version 70212* +*Added in protocol version 70213* -The `getmnlistd` message is sent to request a full masternode list or an -update to a previously requested masternode list. +The `getmnlistd` message requests a `mnlistdiff` message that provides either: + + 1. A full masternode list (if `baseBlockHash` is all-zero) + 2. An update to a previously requested masternode list | Bytes | Name | Data type | Required | Description | | ---------- | ----------- | --------- | -------- | -------- | @@ -882,7 +885,7 @@ template near the beginning of this subsection. {% autocrossref %} -*Added in protocol version 70212* +*Added in protocol version 70213* The `mnlistdiff` message is a reply to a `getmnlistd` message which requested either a full masternode list or a diff for a range of blocks. @@ -898,7 +901,19 @@ requested either a full masternode list or a diff for a range of blocks. | variable | merkleFlags | vector | Required | Merkle flag bits, packed per 8 in a byte, least significant bit first | variable | cbTx | CTransaction | Required | The fully serialized coinbase transaction of `blockHash` | variable | deletedMNs | vector | Required | A list of ProRegTx hashes for masternode which were deleted after `baseBlockHash` -| variable | mnList | vector | Required | The list of SML entries which were added or updated since `baseBlockHash` +| variable | mnList | vector | Required | The list of Simplified Masternode List (SML) entries which were added or updated since `baseBlockHash` + +Simplified Masternode List (SML) Entry + +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 32 | proRegTxHash | uint256 | The hash of the ProRegTx that identifies the masternode +| 32 | confirmedHash | uint256 | The hash of the block at which the masternode got confirmed +| 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) +| 48 | pubKeyOperator | BLSPubKey | The operators public key +| 20 |keyIDVoting | CKeyID | The public key hash used for voting. +| 1 | isValid | bool | True if a masternode is not PoSe-banned The following annotated hexdump shows a `mnlistdiff` message. (The message header has been omitted.) @@ -936,6 +951,10 @@ Masternode List | Masternode 1 | | 01040eb32f760490054543356cff4638 | | 65633439dd073cffa570305eb086f70e ....... ProRegTx hash +| | +| | 000001ee5108348a2c59396da29dc576 +| | 9b2a9bb303d7577aee9cd95136c49b9b ....... Confirmed block hash +| | | | 00000000000000000000000000000000 ....... IP Address: ::ffff:0.0.0.0 | | 0000 ................................... Port: 0 | | @@ -943,10 +962,16 @@ Masternode List | | 0000000000000000000000000000000000000000 | | 0000000000000000 ....................... Operator public key (BLS) | | c2ae01fb4084cbc3bc31e7f59b36be228a320404 Voting pubkey hash (ECDSA) +| | +| | 0 ...................................... Valid (0 - No) | | Masternode 2 | | f7737beb39779971e9bc59632243e13f | | c5fc9ada93b69bf48c2d4c463296cd5a ....... ProRegTx hash +| | +| | 0000030f51f12e7069a7aa5f1bc9085d +| | db3fe368976296fd3b6d73fdaf898cc0 ....... Confirmed block hash +| | | | 000000000000000000000000cf9af40d ....... IP Address: ::ffff:207.154.244.13 | | 4e1f ................................... Port: 19999 | | @@ -954,6 +979,8 @@ Masternode List | | de4a8db4d76fda6d6985dbdf10404fb9bb5cd0e8 | | c22f4a914a6c5566 ....................... Operator public key (BLS) | | 43ce12751c4ba45dcdfe2c16cefd61461e17a54d Voting pubkey hash (ECDSA) +| | +| | 1 ...................................... Valid (1 - Yes) {% endhighlight %} {% endautocrossref %} @@ -1742,6 +1769,7 @@ Sporks (per [`src/spork.h`][spork.h]) | 10013 | 14 | `REQUIRE_SENTINEL_FLAG` | Only masternode's running sentinel will be paid | 10014 | 15 | `DETERMINISTIC_MNS_ENABLED` | Deterministic masternode lists are enabled | 10015 | 16 | `INSTANTSEND_AUTOLOCKS` | Automatic InstantSend for transactions with <=4 inputs (also eliminates the special InstantSend fee requirement for these transactions) +| 10016 | 17 | `SPORK_17_QUORUM_DKG_ENABLED` | Enable long-living masternode quorum (LLMQ) distributed key generation (DKG). When enabled, simple PoSe scoring and banning is active as well. | | | | | | | **Removed Sporks** | | _10012_ | _13_ | _`OLD_SUPERBLOCK_FLAG`_ | _Removed in Dash Core 0.12.3. No network function since block 614820_ @@ -1904,32 +1932,41 @@ is sent by masternodes to indicate approval of a transaction lock request | 32 | txHash | uint256 | Required | TXID of the transaction to lock | 36 | outPoint | outpoint | Required | The unspent outpoint to lock in this transaction | 36 | outpointMasternode | outpoint | Required | The outpoint of the masternode which is signing the vote -| 66* | vchMasternodeSignature | char[] | Required | 66 bytes in most cases. Length (1 byte) + Signature (65 bytes) +| 32 | quorumModifierHash | uint256 | Required | *Added in protocol version 70213. Only present when Spork 15 is active.*

+| 32 | masternodeProTxHash | uint256 | Required | *Added in protocol version 70213. Only present when Spork 15 is active.*

The proTxHash of the DIP3 masternode which is signing the vote +| 96 | vchMasternodeSignature | char[] | Required | Masternode BLS signature The following annotated hexdump shows a `txlvote` message. (The message header has been omitted.) {% highlight text %} -3c121fb4a12b2f715e2f70a9fa282115 -be197dde14073959fb2a2b8e95a7418f ..... TXID +84a27bb879f316482598fe65b0b51544 +e85490d85fc36af1c293e186da373c02 ..... TXID Outpoint to lock -| bb607995757c6a6efd6429215dcb3688 -| b252d34d835c81fed310fd905f487020 ... Outpoint TXID -| 01000000 ........................... Outpoint index number: 1 - -Masternode Outpoint -| de9029c7e9b7eb7cd11f27ba670b2349 -| 0c3f0717b86ed949c316874589405cd2 ... Outpoint TXID +| 4c1e6318bab4f9284d3bc0e49ec7fe76 +| 1e9c914b8ea0bcac4563005daa451221 ... Outpoint TXID | 00000000 ........................... Outpoint index number: 0 -41 ................................... Signature length: 65 +Masternode Outpoint +| 5d02f07c7318411e41fdd4be9f1e5ece +| 16d680cfe318306087edc8fb205e507b ... Outpoint TXID +| 01000000 ........................... Outpoint index number: 1 -1ccc39ffb9c62111a8c82823d3ce61d2 -380db4e8f76ec238d568908f37558a90 -4e79566a53663de12ec2be1183c87d61 -250e8ebd57be171be1d4b5e89b69c263 -88 ................................... Masternode Signature +b62cb5007704d2db8595d5b31cfb7cb0 +8d7e530c16a7597e1db4430a00000000 ..... Quorum Modifier hash + +569abbea4ab45f36dd059c44f1dc0804 +f3f13071379c2f418d3637fb548c4159 ..... Masternode ProRegTx hash + +60 ................................... Signature length: 96 + +0b0b97ec14fbc1f12566c3a90ed113e4 +e9c5ee6cdcf2fe2171e4b5f387286146 +a0632a250d64ea507ce5e1d1f1983aae +0b70e568ad2856a0cc13008001c6d0f3 +5bdeb380f6aba0c54663a3b5e2d86d44 +305c2e5d855c72588ffb0e8e2a36482c ..... Masternode BLS Signature {% endhighlight %} {% endautocrossref %} @@ -2831,6 +2868,9 @@ ecd50100 ................................... Dashd Deamon Version (12.3.0) {% autocrossref %} +![Warning icon](/img/icons/icon_warning.svg) NOTE: This message will be deprecated +following activation of DIP3 which implements deterministic masternode lists. + The `mnv` message is used by masternodes to verify each other. Several `mnv` messages are exchanged in the process. This results in the IP address of masternode 1 being validated as of the provided block height. @@ -3031,8 +3071,8 @@ Sync Item IDs | ID | Description | Response To |------|--------------|--------------- -| 2 | MASTERNODE_SYNC_LIST | `dseg` message -| 3 | MASTERNODE_SYNC_MNW | `mnget` message +| 2 | MASTERNODE_SYNC_LIST | _Deprecated following activation of DIP3 in Dash Core 0.13.0_

`dseg` message +| 3 | MASTERNODE_SYNC_MNW | _Deprecated following activation of DIP3 in Dash Core 0.13.0_

`mnget` message | 10 | MASTERNODE_SYNC_GOVOBJ | `govsync` message | 11 | MASTERNODE_SYNC_GOVOBJ_VOTE | `govsync` message with non-zero hash @@ -3046,6 +3086,49 @@ bf110000 ................................... Count: 4543 {% endautocrossref %} +#### qfcommit +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +The `qfcommit` message is used to finalize a long-living masternode quorum setup +by aggregating the information necessary to mine the on-chain QcTx +special transaction. The message contains all the necessary information required +to validate the long-living masternode quorum's signing results. + +It is possible to receive multiple valide final commitments for the same DKG +session. These should only differ in the number of signers, which can be ignored +as long as there are at least `quorumThreshold` number of signers. The set of +valid members for these final commitments should always be the same, as each +member only creates a single premature commitment. This means that only one set +of valid members (and thus only one quorum verification vector and quorum public +key) can gain a majority. If the threshold is not reached, there will be no +valid final commitment. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 2 | version | uint16_t | Version of the final commitment message +| 1 | llmqType | uint8_t | The type of LLMQ +| 32 | quorumHash | uint256 | The quorum identifier +| 1-9 | signersSize | compactSize uint | Bit size of the signers bitvector +| (bitSize + 7) / 8 | signers | byte[] | Bitset representing the aggregated signers of this final commitment +| 1-9 | validMembersSize | compactSize uint | Bit size of the `validMembers` bitvector +| (bitSize + 7) / 8 | validMembers | byte[] | Bitset of valid members in this commitment +| 48 | quorumPublicKey | BLSPubKey | The quorum public key +| 32 | quorumVvecHash | uint256 | The hash of the quorum verification vector +| 96 | quorumSig | BLSSig | Recovered threshold signature +| 96 | sig | BLSSig | Aggregated BLS signatures from all included commitments + + +{% endautocrossref %} ### Governance Messages {% include helpers/subhead-links.md %} diff --git a/_includes/devdoc/ref_transactions.md b/_includes/devdoc/ref_transactions.md index 3fb73c12..75d5be6d 100644 --- a/_includes/devdoc/ref_transactions.md +++ b/_includes/devdoc/ref_transactions.md @@ -414,7 +414,9 @@ 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 +2. Adding support for a generic extra payload following the `lock_time` field. The + maximum allowed size for a transaction version 3 extra payload is 10000 bytes + (`MAX_TX_EXTRA_PAYLOAD`). 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 @@ -427,7 +429,7 @@ transaction types is maintained in the [DIP repository](https://github.com/dashp {% autocrossref %} -*Added in protocol version 70212 of Dash Core as described by DIP3* +*Added in protocol version 70213 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 @@ -585,7 +587,7 @@ ProRegTx Payload {% autocrossref %} -*Added in protocol version 70212 of Dash Core as described by DIP3* +*Added in protocol version 70213 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 @@ -658,7 +660,7 @@ ProUpServTx Payload {% autocrossref %} -*Added in protocol version 70212 of Dash Core as described by DIP3* +*Added in protocol version 70213 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 @@ -739,7 +741,7 @@ ProRegTx Payload {% autocrossref %} -*Added in protocol version 70212 of Dash Core as described by DIP3* +*Added in protocol version 70213 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 @@ -801,7 +803,7 @@ ProUpRevTx Payload {% autocrossref %} -*Added in protocol version 70212 of Dash Core as described by DIP4* +*Added in protocol version 70213 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 @@ -867,48 +869,95 @@ Coinbase Transaction Payload {% endautocrossref %} -#### Quorum Commitment +#### QcTx {% include helpers/subhead-links.md %} {% autocrossref %} -Quorum Commitment +*Added in protocol version 70213 of Dash Core as described by DIP6* -{% endautocrossref %} +The Quorum Commitment (QcTx) special transaction adds the best final commitment from a +Long-Living Masternode Quorum (LLMQ) Distributed Key Generation (DKG) session to +the chain. This special transaction has no inputs and no outputs and thus also +pays no fee. -#### SubTxRegister -{% include helpers/subhead-links.md %} +Since this special transaction pays no fees, it is mandatory by consensus rules +to ensure that miners include it. Exactly one quorum commitment transaction MUST +be included in every block while in the mining phase of the LLMQ process until a +valid commitment is present in a block. -{% autocrossref %} +If a DKG failed or a miner did not receive a final commitment in-time, a null +commitment has to be included in the special transaction payload. A null +commitment must have the `signers` and `validMembers` bitsets set to the +`quorumSize` and all bits set to zero. All other fields must be set to the null +representation of the field’s types. -Register Blockchain User +The special transaction type used for Quorum Commitment Transactions is 6 and +the extra payload consists of the following data: -{% endautocrossref %} +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 2 | version | uint_16 | Quorum Commitment version number. Currently set to 1. +| 4 | height | uint32_t | Height of the block +| Variable | commitment | qfcommit | The payload of the `qfcommit` message -#### SubTxTopup -{% include helpers/subhead-links.md %} +The following annotated hexdump shows a QcTx transaction. -{% autocrossref %} + -Topup Blockchain User Credit +An itemized quorum commitment transaction: -{% endautocrossref %} +{% highlight text %} +0300 ....................................... Version (3) +0600 ....................................... Type (6 - Quorum Commitment) -#### SubTxResetKey -{% include helpers/subhead-links.md %} +00 ......................................... Number of inputs +00 ......................................... Number of outputs -{% autocrossref %} +00000000 ................................... Locktime -Change Blockchain User Public Key +fd4901 ..................................... Extra payload size (329) -{% endautocrossref %} - -#### SubTxCloseAccount -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -Close Blockchain User Account +Quorum Commitment Transaction Payload +| 0100 ..................................... Version (1) +| +| 921d0000 ................................. Block height: 7570 +| +| Payload from the qfcommit message +| | 01 ..................................... LLMQ Type (1) +| | +| | 8d80561839648b844ade10b6e81069fa +| | 6c4bde6166dd59242be3487a00000000 ....... Quorum hash +| | +| | 32 ..................................... Number of signers (50) +| | ff7effffbebe02 ......................... Aggregrated signers bitvector +| | +| | 32 ..................................... Number of valid members (50) +| | ff7effffbebe02 ......................... Valid members bitvector +| | +| | 81d0717b893b557f54daacbd060bcffa +| | 2dc341175d0b89c7974dc57ef482ae27 +| | e10fb273eda534596993999950817cd4 ....... Quorum public key (BLS) +| | +| | ed93bc215d15350bd7030be811cf1df2 +| | c114f6b34df9bd4095161af93608ed90 ....... Quorum verification vector hash +| | +| | Quorum threshold signature (BLS) +| | 8d2bbb0b9c5b8626eb852ea0ff4f2509 +| | 19becc2d24653910fb8e11cf5573062f +| | 9f64c03a5031f1d462163ce98e8bf78a +| | 1470f7074a8e6fe23ccb53d73635ecd5 +| | ad71b26a938fc21638bcae7d272af9fa +| | 919f296a17e77191e3d4c708bc6e1b9a ....... BLS Signatures (96 bytes) +| | +| | Aggregated signatures from all commitments (BLS) +| | 19e702ff84ff851312cceba1de528ee7 +| | ffe33647ae28ef895b35558512901394 +| | b430c804c7c42494a3312545606b5598 +| | 0480985494fa2c49f50c65d47570380f +| | 13c2851ce33d8584b64e8b659146d732 +| | 67d821c78d09ba7caea3d03641f78c7a ....... BLS Signature (96 bytes) +{% endhighlight %} {% endautocrossref %} diff --git a/_includes/layout/base/rpc-table.html b/_includes/layout/base/rpc-table.html index 2537d83a..de5e9fcc 100644 --- a/_includes/layout/base/rpc-table.html +++ b/_includes/layout/base/rpc-table.html @@ -71,13 +71,13 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Blockchain GetBlock Y - + Updated in 0.13.0.0 Blockchain GetBlockChainInfo Y - Updated in 0.12.3.0 + Updated in 0.13.0.0 Blockchain @@ -245,7 +245,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Dash GObject Y - Updated in 0.12.3.0 + Updated in 0.13.0.0 Dash diff --git a/_includes/references.md b/_includes/references.md index fd28e792..c1484610 100644 --- a/_includes/references.md +++ b/_includes/references.md @@ -33,7 +33,7 @@ http://opensource.org/licenses/MIT. [msg_governance_object_vote]: /en/developer-reference#term-msg_governance_object_vote "Governance object vote data type identifier of an inventory on the P2P network" [msg_masternode_verify]: /en/developer-reference#term-msg_masternode_verify "Masternode Verify data type identifier of an inventory on the P2P network" [msg_cmpct_block]: /en/developer-reference#term-msg_cmpct_block "An alternative to the block header hash data type identifier of an inventory on the P2P network used to request a compact block" - +[msg_quorum_final_commitment]: /en/developer-reference#term-msg_quorum_final_commitment "The Long-Living Masternode Quorum Final Commitment data type identifier of an inventory on the P2P network" [network]: /en/developer-guide#term-network "The Dash P2P network which broadcasts transactions and blocks" [op_checkmultisig]: /en/developer-reference#term-op-checkmultisig "Opcode which returns true if one or more provided signatures (m) sign the correct parts of a transaction and match one or more provided public keys (n)" [op_checksig]: /en/developer-reference#term-op-checksig "Opcode which returns true if a signature signs the correct parts of a transaction and matches a provided public key" @@ -234,6 +234,7 @@ http://opensource.org/licenses/MIT. [getblocktxn message]: /en/developer-reference#getblocktxn "A P2P protocol message used to request transactions from a compact block" [getdata message]: /en/developer-reference#getdata "A P2P protocol message used to request one or more transactions, blocks, or merkle blocks" [getheaders message]: /en/developer-reference#getheaders "A P2P protocol message used to request a range of block headers" +[getmnlistd message]: /en/developer-reference#getmnlistd "A P2P protool message used to request a simplified masternode list" [getsporks message]: /en/developer-reference#getsporks "A P2P network message used to request the status of sporks" [govobj message]: /en/developer-reference#govobj "A P2P network message used to send governance objects (proposals, etc.)" [govobjvote message]: /en/developer-reference#govobjvote "A P2P network message used to send governance object votes" @@ -245,12 +246,14 @@ http://opensource.org/licenses/MIT. [merkleblock message]: /en/developer-reference#merkleblock "A P2P protocol message used to request a filtered block useful for SPV proofs" [mnb message]: /en/developer-reference#mnb "A P2P protocol message used to describe the masternode entry and how to validate messages from it" [mnget message]: /en/developer-reference#mnget "A P2P protocol message that requests masternode payment sync" +[mnlistdiff message]: /en/developer-reference#mnlistdiff "A P2P protocol message used to send a diff of simplified masternode list entries between two blocks" [mnp message]: /en/developer-reference#mnp "A P2P protocol message sent by masternodes every few minutes to ping the network with a message that propagates across the whole network" [mnv message]: /en/developer-reference#mnv "A P2P protocol message used by masternodes to verify other masternode's IP Addresses." [mnw message]: /en/developer-reference#mnw "A P2P protocol message used to pick the next winning masternode (payee)" [notfound message]: /en/developer-reference#notfound "A P2P protocol message sent to indicate that the requested data was not available" [ping message]: /en/developer-reference#ping "A P2P network message used to see if the remote host is still connected" [pong message]: /en/developer-reference#pong "A P2P network message used to reply to a P2P network ping message" +[qfcommit message]: /en/developer-reference#qfcommit "A P2P network message used to finalize the members of a long-living masternode quorum (LLMQ)" [reject message]: /en/developer-reference#reject "A P2P network message used to indicate a previously-received message was rejected for some reason" [sendcmpct message]: /en/developer-reference#sendcmpct "A P2P network message used to request new blocks be announced as compact blocks" [sendheaders message]: /en/developer-reference#sendheaders "A P2P network message used to request new blocks be announced through headers messages rather than inv messages" @@ -458,6 +461,7 @@ http://opensource.org/licenses/MIT. [proupservtx special tx]: /en/developer-reference#proupservtx [python-bitcoinlib]: https://github.com/petertodd/python-bitcoinlib [python-blkmaker]: https://gitorious.org/bitcoin/python-blkmaker +[quorum commitment special tx]: /en/developer-reference#qctx [Satoshi Nakamoto]: https://en.bitcoin.it/wiki/Satoshi_Nakamoto [setup tor]: https://www.torproject.org/ [SHA256]: https://en.wikipedia.org/wiki/SHA-2