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 %}
+ 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