diff --git a/docs/api/remote-procedure-call-quick-reference.md b/docs/api/remote-procedure-call-quick-reference.md
index a767eef8..c1885368 100644
--- a/docs/api/remote-procedure-call-quick-reference.md
+++ b/docs/api/remote-procedure-call-quick-reference.md
@@ -64,7 +64,7 @@ These RPCs are all Dash-specific and not found in Bitcoin Core
* [GetCoinJoinInfo](../api/remote-procedure-calls-dash.md#getcoinjoininfo): returns an object containing an information about CoinJoin settings and state. _New in Dash Core 0.15.0_
* [GetSuperblockBudget](../api/remote-procedure-calls-dash.md#getsuperblockbudget): returns the absolute maximum sum of superblock payments allowed.
* [GObject](../api/remote-procedure-calls-dash.md#gobject): provides a set of commands for managing governance objects and displaying information about them. **Updated in Dash Core 19.0.0**
-* [Masternode](../api/remote-procedure-calls-dash.md#masternode): provides a set of commands for managing masternodes and displaying information about them. **Updated in Dash Core 19.0.0**
+* [Masternode](../api/remote-procedure-calls-dash.md#masternode): provides a set of commands for managing masternodes and displaying information about them. **Updated in Dash Core 19.2.0**
* [MasternodeList](../api/remote-procedure-calls-dash.md#masternodelist): returns a list of masternodes in different modes. **Updated in Dash Core 19.0.0**
* [MnSync](../api/remote-procedure-calls-dash.md#mnsync): returns the sync status, updates to the next step or resets it entirely. _Updated in Dash Core 0.14.0_
* [CoinJoin](../api/remote-procedure-calls-dash.md#coinjoin): controls the CoinJoin process. _Updated in Dash Core 0.12.3_
@@ -75,7 +75,7 @@ These RPCs are all Dash-specific and not found in Bitcoin Core
## [Evolution RPCs](../api/remote-procedure-calls-evo.md)
* [BLS](../api/remote-procedure-calls-evo.md#bls): provides a set of commands to execute BLS-related actions. **Updated in Dash Core 19.0.0**
-* [ProTx](../api/remote-procedure-calls-evo.md#protx): provides a set of commands to execute ProTx related actions. **Updated in Dash Core 19.0.0**
+* [ProTx](../api/remote-procedure-calls-evo.md#protx): provides a set of commands to execute ProTx related actions. **Updated in Dash Core 19.2.0**
* [Quorum](../api/remote-procedure-calls-evo.md#quorum): provides a set of commands for quorums (LLMQs). **Updated in Dash Core 19.0.0**
* [VerifyChainLock](../api/remote-procedure-calls-evo.md#verifychainlock): tests if a quorum signature is valid for a ChainLock. **_New in Dash Core 0.17.0_**
* [VerifyISLock](../api/remote-procedure-calls-evo.md#verifyislock): tests if a quorum signature is valid for an InstantSend lock. **_New in Dash Core 0.17.0_**
diff --git a/docs/api/remote-procedure-calls-dash.md b/docs/api/remote-procedure-calls-dash.md
index d6b4332b..9e7bdd73 100644
--- a/docs/api/remote-procedure-calls-dash.md
+++ b/docs/api/remote-procedure-calls-dash.md
@@ -1312,6 +1312,7 @@ The `masternode status` RPC prints masternode status information.
| →
`collateralHash` | string (hex) | Optional
(0 or 1) | The masternode's collateral hash |
| →
`collateralIndex` | int | Optional
(0 or 1) | Index of the collateral |
| →
`dmnState` | object | Optional
(0 or 1) | Deterministic Masternode State |
+| → →
`version` | int | Required
(exactly 1) | **Added in Dash Core 19.2.0**
The version of the most recent ProRegTx or ProUpRegTx |
| → →
`service` | string | Required
(exactly 1) | The IP address/port of the masternode |
| → →
`registeredHeight` | int | Required
(exactly 1) | Block height at which the masternode was registered |
| → →
`lastPaidHeight` | int | Required
(exactly 1) | Block height at which the masternode was last paid |
@@ -1321,16 +1322,16 @@ The `masternode status` RPC prints masternode status information.
| → →
`revocationReason` | int | Required
(exactly 1) | Reason code for of masternode operator key revocation |
| → →
`ownerAddress` | string | Required
(exactly 1) | The owner address |
| → →
`votingAddress` | string | Required
(exactly 1) | The voting address |
-| → →
`platformNodeId` | string | Optional
(0 or 1) | **Added in Dash Core 19.0.0**
Platform P2P node ID, derived from P2P public key (evonodes only) |
-| → →
`platformP2PPort` | int | Optional
(0 or 1) | **Added in Dash Core 19.0.0**
Platform P2P port (evonodes only) |
-| → →
`platformHTTPPort` | int | Optional
(0 or 1) | **Added in Dash Core 19.0.0**
TCP port of Platform HTTP/API interface (evonodes only) |
+| → →
`platformNodeId` | string | Optional
(0 or 1) | **Added in Dash Core 19.0.0**
Platform P2P node ID, derived from P2P public key (evonodes only) |
+| → →
`platformP2PPort` | int | Optional
(0 or 1) | **Added in Dash Core 19.0.0**
Platform P2P port (evonodes only) |
+| → →
`platformHTTPPort` | int | Optional
(0 or 1) | **Added in Dash Core 19.0.0**
TCP port of Platform HTTP/API interface (evonodes only) |
| → →
`payoutAddress` | string | Required
(exactly 1) | The payout address |
| → →
`pubKeyOperator` | string | Required
(exactly 1) | The operator public key |
| → →
`operatorPayoutAddress` | string | Optional
(0 or 1) | The operator payout address |
| →
`state` | string | Required
(exactly 1) | The masternode's state. Valid states are:
• `WAITING_FOR_PROTX`
• `POSE_BANNED`
• `REMOVED`
• `OPERATOR_KEY_CHANGED`
• `PROTX_IP_CHANGED`
• `READY`
• `ERROR`
• `UNKNOWN` |
| →
`status` | string | Required
(exactly 1) | The masternode's status (description based on current state) |
-*Example from Dash Core 19.0.0*
+*Example from Dash Core 19.2.0*
``` bash
dash-cli -testnet masternode status
@@ -1340,28 +1341,29 @@ Result:
``` json
{
- "outpoint": "01bb7dc587bb7306444eb5c8106b15a033b9c34c782d2fb46c4910552b59a067-1",
- "service": "45.32.237.76:19999",
- "proTxHash": "3979cfb79c4562e819aca69ffae2ea84b9b8f29bd89bdc68be67b88c6f31bf99",
+ "outpoint": "6ce8545e25d4f03aba1527062d9583ae01827c65b234bd979aca5954c6ae3a59-27",
+ "service": "34.214.48.68:19999",
+ "proTxHash": "9cb04f271ba050132c00cc5838fb69e77bc55b5689f9d2d850dc528935f8145c",
"type": "HighPerformance",
- "collateralHash": "01bb7dc587bb7306444eb5c8106b15a033b9c34c782d2fb46c4910552b59a067",
- "collateralIndex": 1,
+ "collateralHash": "6ce8545e25d4f03aba1527062d9583ae01827c65b234bd979aca5954c6ae3a59",
+ "collateralIndex": 27,
"dmnState": {
- "service": "45.32.237.76:19999",
- "registeredHeight": 854390,
- "lastPaidHeight": 865943,
+ "version": 2,
+ "service": "34.214.48.68:19999",
+ "registeredHeight": 850334,
+ "lastPaidHeight": 852599,
"consecutivePayments": 0,
"PoSePenalty": 0,
- "PoSeRevivedHeight": 854739,
+ "PoSeRevivedHeight": -1,
"PoSeBanHeight": -1,
"revocationReason": 0,
- "ownerAddress": "yg1zQCne1gSVdJKwUy7LRB3X6tVd6hHiTF",
- "votingAddress": "yiCk7DjwBbUGJuJofTA7eXU4hyybu123pD",
- "platformNodeID": "71b5c04007f6af71d99893478feb52df0f5a7701",
- "platformP2PPort": 22821,
- "platformHTTPPort": 22822,
- "payoutAddress": "ygRPwFLoC8WeW3ujqrskqHZiQvKpTHF6qv",
- "pubKeyOperator": "a73d8c1e640d29e2257042a39bbbac8d867f69ae252e146884816b98ab0d0526ed4992d9cff22ef04878423f66583382"
+ "ownerAddress": "yeJdYWA1rNSKxxfo7mE2eBUj3ejBGUR6UB",
+ "votingAddress": "yeJdYWA1rNSKxxfo7mE2eBUj3ejBGUR6UB",
+ "platformNodeID": "62e960a3f6b650feed98a266b3ccdf6e363562cf",
+ "platformP2PPort": 36656,
+ "platformHTTPPort": 1443,
+ "payoutAddress": "yeRZBWYfeNE4yVUHV4ZLs83Ppn9aMRH57A",
+ "pubKeyOperator": "b6ee48c7a71a9d8e0813e68ca09846245fa155285f24a62b0ce9cb0102b1994ec58af8ba2a01c09363bdcc395d41f3df"
},
"state": "READY",
"status": "Ready"
diff --git a/docs/api/remote-procedure-calls-evo.md b/docs/api/remote-procedure-calls-evo.md
index dc94b792..76b94dbe 100644
--- a/docs/api/remote-procedure-calls-evo.md
+++ b/docs/api/remote-procedure-calls-evo.md
@@ -127,20 +127,21 @@ The `protx diff` RPC calculates a diff and a proof between two masternode list.
| Name | Type | Presence | Description |
| ------------------------------ | ------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `result` | array | Required
(exactly 1) | An array of objects each containing a provider transaction, or JSON `null` if an error occurred |
+| →
`nVersion` | number | Required
(exactly 1) | **Added in Dash Core 19.0.0**
Simplified masternode list version returned |
| →
`baseBlockHash` | string (hex) | Required
(exactly 1) | The hash of the base block as hex in RPC byte order |
| →
`blockHash` | string (hex) | Required
(exactly 1) | The hash of the ending block as hex in RPC byte order |
| →
`cbTxMerkleTree` | string (hex) | Required
(exactly 1) | The coinbase transaction merkle tree |
| →
`cbTx` | string (hex) | Required
(exactly 1) | The coinbase transaction |
| →
`deletedMNs` | array | Required
(exactly 1) | An array of deleted masternode hashes |
| →
`mnlist` | array | Required
(exactly 1) | An array of masternode details |
+| → →
`nVersion` | number | Required
(exactly 1) | **Added in Dash Core 19.0.0**
BLS version
`1` - Legacy BLS scheme
`2` - [Basic BLS scheme](https://github.com/dashpay/dash/issues/5001) |
+| → →
`nType` | number | Required
(exactly 1) | **Added in Dash Core 19.0.0**
Type of masternode
`0` - Regular masternode
`1` - Evolution masternode |
| → →
`proRegTxHash` | string (hex) | Required
(exactly 1) | The hash of the initial provider registration transaction as hex in RPC byte order |
| → →
`confirmedHash` | string (hex) | Required
(exactly 1) | The hash of the block where the ProRegTx was mined |
| → →
`service` | string | Required
(exactly 1) | The IP address/Port of the masternode |
| → →
`pubKeyOperator` | string (hex) | Required
(exactly 1) | The operator public key |
| → →
`votingAddress` | string | Required
(exactly 1) | The voting address |
| → →
`isValid` | bool | Required
(exactly 1) | Set to `true` if masternode is valid |
-| → →
`nVersion` | number | Required
(exactly 1) | **Added in Dash Core 19.0.0**
BLS version
`1` - Legacy BLS scheme
`2` - [Basic BLS scheme](https://github.com/dashpay/dash/issues/5001) |
-| → →
`nType` | number | Required
(exactly 1) | **Added in Dash Core 19.0.0**
Type of masternode
`0` - Regular masternode
`1` - Evolution masternode |
| → →
`platformHTTPPort` | number | Optional
(0 or 1) | **Added in Dash Core 19.0.0**
TCP port of Platform HTTP/API interface (evonodes only) |
| → →
`platformNodeID` | string (hex) | Optional
(0 or 1) | **Added in Dash Core 19.0.0**
Platform P2P node ID, derived from P2P public key (evonodes only) |
| → →
`payoutAddress` | string | Optional
(0 or 1) | **Added in Dash Core 18.1.0**
The owner's payout address. Only included if the `extended` parameter is set to `true`. |
@@ -164,103 +165,90 @@ The `protx diff` RPC calculates a diff and a proof between two masternode list.
| →
`merkleRootMNList` | string (hex) | Required
(exactly 1) | Merkle root of the masternode list |
| →
`merkleRootQuorums` | string (hex) | Optional
(0 or 1) | *Added in Coinbase Transaction version 2 (Dash Core 0.14.0)*
Merkle root of the masternode list. |
-*Example from Dash Core 19.0.0*
+*Example from Dash Core 19.2.0*
```bash
-dash-cli -testnet protx diff 854380 854390 true
+dash-cli -testnet protx diff 100000 100500 true
```
Result (truncated):
```json
{
- "baseBlockHash": "000000bbd091c891ad93e76aad4413be498d5eb6bfe03738ce58130fcc2e4bfe",
- "blockHash": "0000033f0a531c5f686187642e5bf641f6c4bfbef6252703fd26d1514274e26f",
- "cbTxMerkleTree": "0c000000051bb37f83934f01a0cf8aebc24e630f19c8835734a18f8fd6640e7e754f3f18faee9c205f91e7a44c1a3f9518e8b0aa07bfb5b3a33ba9cda12fa51d26c8f68f3487fd38e9066fdc751be97471bbb66e7eb566624436829a1c2240b5f6aac892e0805eb23a3105bd978b79091dffbf3c0938bc523019ec5d8e7978035ab05a4e85e7dab693a20cd5b53bbdc36a66d29ceff7a9430b092e040a195d0f254ce931cf021f00",
- "cbTx": "03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff060376090d0101ffffffff0286fbe127000000001976a914ce4867d9a7282726bc58092254c0f1f5fef4a77688ac48f9d23b000000001976a9147f95c0f808aff27883260bfaf9cfe2b84519a6b288ac0000000046020076090d002d89fdcf255ece6e5480dd007221776a6abc82a1fdf842234f243b267f22144d203376da9306858eebf9a40fc88e563cb048e53d7274ad6b17c7fa69cdd50952",
+ "nVersion": 1,
+ "baseBlockHash": "000000008650f09124958e7352f844f9c15705171ac38ee6668534c5c238b916",
+ "blockHash": "000000000bcc2322bbfa41dbae3bc56f1468c4773c355a41671595e3cc9fbe71",
+ "cbTxMerkleTree": "03000000039c07679a6b4ca6f2865a6f6c3a4f188f74a211be75146f32f134212da580468a097c57203dc8d46de9db73463ae7a68704d823dd05dd97075116e83914136b1bdf955363517189da760b89ac71957734c6389315b74e41a23ed35ae85b3784960107",
+ "cbTx": "03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff4c03948801046c09df5c08fabe6d6d7804018887034cffffffff000000000000000000000000000000000000000000010000000000000057ffffd37c0100000d2f6e6f64655374726174756d2f000000000200240e43000000001976a914b7ce0ea9ce2010f58ba4aaa6caa76671c438e89088acf6230e43000000001976a9145889b4d255f6867504666d79e521be5cce30a4fd88ac00000000460200948801004cd4af41e87dedc9f93914689b6c8e90f20aa5ffb701dfcaabe716e682fd5fbd6aa200e13378d938ef435f1ce952594574ac956a6cd8ace46e6ba07a68161709",
"deletedMNs": [
- "a554045a49fb5e84a01af9e8bff2a3bf77846b27c36530a7552524f65164893a"
+ "e7d524e0b6b55bdba9721cc71f4e472eafbcaaa138c35899af3edfcad93eb6e2"
],
"mnList": [
{
- "proRegTxHash": "f3eeb1461780dc6c62c5793df607e23f55153945b17ee029b3404dce7450ca84",
- "confirmedHash": "00000045d877343952bdeaaa21f0cd9a09fe7ce96517d7469628d3e25a422a04",
- "service": "34.221.196.103:19999",
- "pubKeyOperator": "b0051db915bd86bd938746c14440b11ee3b2801cbc6d6c1c912e8b41ea5eb1d8f852abf220ae91ecdb6da094846c1ba8",
- "votingAddress": "yS3ZAL7bXkbXvMi72A42HedrTvoCqchBVF",
- "isValid": false,
- "nVersion": 2,
+ "nVersion": 1,
"nType": 0,
- "payoutAddress": "yVXDAM73Tg6A44Bm3qduXsMCYxzuqBCT48"
+ "proRegTxHash": "488910d2554fbc8f803011dd107b993b185ed6eeb7efef6dedfd74ec6656f58b",
+ "confirmedHash": "00000000031c08dad48934c9e2a0bf3dac307aa1b6106ed8aa4345b5423166cd",
+ "service": "51.38.80.34:19999",
+ "pubKeyOperator": "8b63fa3eb2ed4caba1fec3647bcec7a2886b5cde5b2cec6b5a60dc04193e959d21e96cbfa41388159450f244578de9a9",
+ "votingAddress": "yXRzKxTbQUGWCqYwXnMWw5SnNCPj19NBGZ",
+ "isValid": true,
+ "payoutAddress": "yWPKEmx59zHRyyVFgC5xYXAZvGoaHCxTDE"
},
{
- "proRegTxHash": "41c4a6b724a0d25cb089ef946b7c1985a2815bc6a4e45f15bbcbd445b6d10b79",
- "confirmedHash": "00000045d877343952bdeaaa21f0cd9a09fe7ce96517d7469628d3e25a422a04",
- "service": "34.220.187.233:19999",
- "pubKeyOperator": "87df25a28955c903cc19f836a4daa0842d203cfc0dc5ae9b57b8246a4787ee4c98ea3f2586203315d61f4e77b6c80dc5",
- "votingAddress": "yY7czguTxTFL7Zwq3NgJWjwtNKDsBx3Fob",
- "isValid": false,
- "nVersion": 2,
+ "nVersion": 1,
"nType": 0,
- "payoutAddress": "yVXDAM73Tg6A44Bm3qduXsMCYxzuqBCT48"
- },
- {
- "proRegTxHash": "3979cfb79c4562e819aca69ffae2ea84b9b8f29bd89bdc68be67b88c6f31bf99",
- "confirmedHash": "0000000000000000000000000000000000000000000000000000000000000000",
- "service": "173.199.119.242:19999",
- "pubKeyOperator": "a73d8c1e640d29e2257042a39bbbac8d867f69ae252e146884816b98ab0d0526ed4992d9cff22ef04878423f66583382",
- "votingAddress": "yPLtHqBSP9M6Fw7fXMqHm6nSa2NRnjoxeo",
+ "proRegTxHash": "9dadb2198c6c3f7d9aef77493ee2f8f0513198bada377078a99a1128ffa1b2b0",
+ "confirmedHash": "00000000006fef47babe96126b70087c46defeb9527de07a52e417fe7fcd2fce",
+ "service": "34.83.230.157:19999",
+ "pubKeyOperator": "963984167b298d8d77b1be02e38e2493a75251cf9abecc7facee85512eabab7b05ffe053e8956d98ad4a3c20b77ade1e",
+ "votingAddress": "yW5QUL6GqNswhSdMnWjcyAZ871VKrdY4jS",
"isValid": true,
- "nVersion": 2,
- "nType": 1,
- "platformHTTPPort": 22822,
- "platformNodeID": "71b5c04007f6af71d99893478feb52df0f5a7701",
- "payoutAddress": "ygRPwFLoC8WeW3ujqrskqHZiQvKpTHF6qv"
+ "payoutAddress": "yMvjw8sFTBZy72sgGVHHwisF1ETmhr9ngq"
}
],
- "nVersion": 2,
"deletedQuorums": [
{
"llmqType": 1,
- "quorumHash": "000000204cb6086ce482f5f64c6c065261c04cf9aea723a56aa457933e052390"
+ "quorumHash": "0000000004557649b0e4e3efddfab854ec08e26838cebc7eb42fff52d0602a06"
},
{
- "llmqType": 4,
- "quorumHash": "0000010203ca99f63415069d4d11a4fdbc2e62f73abcc55ce86e0fc07063ed3f"
+ "llmqType": 1,
+ "quorumHash": "00000000156618545aecc80d2dbb0385cc200a63137ddad75278ba3069ad2615"
}
],
"newQuorums": [
{
- "version": 3,
+ "version": 1,
"llmqType": 1,
- "quorumHash": "0000006c9019d33d73d077b9b44e307b21852d1731e7565d1c7612ae60efbf9c",
+ "quorumHash": "0000000006393472bb9a01853bcf86f62c3744a329f1ef7812b45f9ec68cf802",
"quorumIndex": 0,
- "signersCount": 46,
- "signers": "ffdfbf7fffbf03",
- "validMembersCount": 48,
- "validMembers": "ffdfbfffffff03",
- "quorumPublicKey": "8d0d6ee830f90723b7866a6d349555ff857a7bbccb272d227fe9452ea6b27dfdb3175545040ba55a97157737d6bd214b",
- "quorumVvecHash": "3979e4295701ae3a6242df6fde227527c73220210cb98364111ebb19d9fc7bdd",
- "quorumSig": "92fe70c0a188c8837b86efc2e39994b9456da78aa408a3e4864b4afb3ada80ab65158c528370e355cde598f741c281e40e59673ccee7ca793e8b99f6ad46f40d4dcb81ffc86faeb7c8d461091bde459688897ef1ce6fcb6f2c151a6614a97749",
- "membersSig": "8d0a5afb42e6f9bce8bf3f644ff8f3e125e8cd0b4f78c4ad6b808e2a52a1c6d7b03e5052c4da868464d494a7305a040c09adf153a992131482a2f1ae2a6b5088839ef5d5dca501ff4412c4bd28f269058127d8ce6bf970cb11180e507b128334"
+ "signersCount": 49,
+ "signers": "fffffffeffff03",
+ "validMembersCount": 49,
+ "validMembers": "fffffffeffff03",
+ "quorumPublicKey": "8999f54dab1dd04cabdd70532b929ec69e4d252f3283eadce1defd4b6a9550a7b2bdb303261a1b39733ebc1c089dbb17",
+ "quorumVvecHash": "65fe94b2ea695ca03428b32f03bc22cbee5c61fb85b170c6f6aca42562244283",
+ "quorumSig": "0e925a8fcfd8722ff52a9feb9780ecfc1173a0715dfa17b6af9fd7a0abd2f13953e3111b2c92cbb7b892423a984dc8440ad5842d294b1e10b34361227922a3b24395495475cef16688e626074426003ceb48021560e22582010a0338947eec03",
+ "membersSig": "80266b6ae1eea601fc50e46e00fb9d56596230fee64673e42bd61e17ccf65d45973ab6f9a96cee4e3b6db69ce9d9e81205b3e8ee81fab42699ce54ec78f70667fa0571c8cf78b6c2ec991956c2e0e6553bbfcb4a92e8e5529238185c1765682f"
},
{
- "version": 3,
- "llmqType": 4,
- "quorumHash": "0000006c9019d33d73d077b9b44e307b21852d1731e7565d1c7612ae60efbf9c",
+ "version": 1,
+ "llmqType": 1,
+ "quorumHash": "000000001cd753a7cdead3abaff75a6d6e009108e0b28c66b07042a940471706",
"quorumIndex": 0,
- "signersCount": 84,
- "signers": "fffffffffdf7effffffff70000",
- "validMembersCount": 85,
- "validMembers": "fffffffffdffeffffffff70000",
- "quorumPublicKey": "85b5ceda6935cbb24a13914a89639a53b2494773e4f956c085b9f6ccf77abdeae0a1d69d092c9f7928fd2d6aa9854944",
- "quorumVvecHash": "19b6f47e1c2d337c1ad1528c44f9938fcb046a6127ded7da75449bc7ce30e31a",
- "quorumSig": "b3943dfca1c53408cbcc3717ff330f5059a3d53badbe620e752aba20ade828ed29a411db547999011afebdafc73d9a500b254d778cc31935f2d00b23a418228bca9272a770f422bec015cf8ec13433a79f32c0fdeed9bcbb764b15863af91109",
- "membersSig": "b291e99dd28aaa60183787f8c75107ff8fa02fae41e50cb026921534e4a54ee699a66bad3d9ecb9e893eb2a4fa8693111905a80c4a43cd1329f3e9a3a1066bf4069d7cd2e520407755898a93c8fe8394023f1a92ae207dbdf8fb0de6e160f521"
+ "signersCount": 50,
+ "signers": "ffffffffffff03",
+ "validMembersCount": 50,
+ "validMembers": "ffffffffffff03",
+ "quorumPublicKey": "8282dc910667713e033b75cf59b3d415ba0d8cfa38eda468bdf6da1f67a66f13eef9e2a5b5280dc215320a47d84dcd06",
+ "quorumVvecHash": "5e1f653b26dba9bb59ed0e6cb7dd1335df11801189cdf282e53585c6eeff75ef",
+ "quorumSig": "1234604b562c454896b369b54a3c5e0f98b55d4e67b35be171860cd100a35a70bfe3280c4d2f878cbd6ae0f8163fab0d19f63aab5f57fa645aa73fda9eb2ed77a24054ae0f8a46d2a93a2958cd8a96430fa7b63f3f891ef434ad55b7302ea611",
+ "membersSig": "9545aa8277d340d234a76855972599f029d9f0d8b76ebed65178d7e584eb12541dd2c59877b592dd658cd765ac3b68fd1932cd5089108db0f32aa83e6b242a857d7a8c76db1a4f107dc8df0ecd6aab9443ed073dd0c91d19fdaff57c7ee3d65b"
}
],
- "merkleRootMNList": "4d14227f263b244f2342f8fda182bc6a6a77217200dd80546ece5e25cffd892d",
- "merkleRootQuorums": "5209d5cd69fac7176bad74723de548b03c568ec80fa4f9eb8e850693da763320"
+ "merkleRootMNList": "bd5ffd82e616e7abcadf01b7ffa50af2908e6c9b681439f9c9ed7de841afd44c",
+ "merkleRootQuorums": "091716687aa06b6ee4acd86c6a95ac74455952e91c5f43ef38d97833e100a26a"
}
```
@@ -272,72 +260,79 @@ The `protx info` RPC returns detailed information about a deterministic masterno
| Name | Type | Presence | Description |
| ----------------------------------- | ------------ | ----------------------- | ------------------------------------------------------------------------------------------ |
-| `result` | object | Required
(exactly 1) | An JSON object containing a provider transaction, or JSON `null` if an error occurred |
-|
Provider Transaction | object/null | Required
(exactly 1) | An object containing a provider transaction |
-| →
`proTxHash` | string (hex) | Required
(exactly 1) | The hash of the provider transaction as hex in RPC byte order |
-| →
`collateralHash` | string (hex) | Required
(exactly 1) | The hash of the collateral transaction as hex in RPC byte order |
-| →
`collateralIndex` | number (int) | Required
(exactly 1) | The collateral index |
-| → →
`collateralAddress` | string | Required
(exactly 1) | The collateral address |
-| →
`operatorReward` | number (int) | Required
(exactly 1) | The operator reward % |
-| →
`state` | object/null | Required
(exactly 1) | An object containing a provider transaction state |
-| → →
`service` | string | Required
(exactly 1) | The masternode's IP:Port |
-| → →
`registeredHeight` | number (int) | Required
(exactly 1) | The height where the masternode was registered |
-| → →
`lastPaidHeight` | number (int) | Required
(exactly 1) | The height where the masternode was last paid |
-| → →
`PoSePenalty` | number (int) | Required
(exactly 1) | The masternode's proof of service penalty |
-| → →
`PoSeRevivedHeight` | number (int) | Required
(exactly 1) | The height where the masternode recovered from a proof of service ban |
-| → →
`PoSeBanHeight` | number (int) | Required
(exactly 1) | The height where the masternode was banned for proof of service violations |
-| → →
`revocationReason` | number (int) | Required
(exactly 1) | The reason for a ProUpRegTx revocation |
-| → →
`ownerAddress` | string | Required
(exactly 1) | The owner address |
-| → →
`votingAddress` | string | Required
(exactly 1) | The voting address |
-| → →
`payoutAddress` | string | Required
(exactly 1) | The owner's payout address |
-| → →
`pubKeyOperator` | string (hex) | Required
(exactly 1) | The operator public key |
-| → →
`operatorPayoutAddress` | string | Required
(exactly 1) | The operator's payout address |
-| →
`confirmations` | number (int) | Required
(exactly 1) | The number of confirmations this ProTx has |
-| →
`wallet` | object/null | Required
(exactly 1) | An object containing a wallet details related to this ProTx |
-| → →
`hasOwnerKey` | bool | Required
(exactly 1) | The owner key is present in this wallet |
-| → →
`hasOperatorKey` | bool | Required
(exactly 1) | The operator key is present in this wallet |
-| → →
`hasVotingKey` | bool | Required
(exactly 1) | The voting key is present in this wallet |
-| → →
`ownsCollateral` | bool | Required
(exactly 1) | The collateral is owned by this wallet |
-| → →
`ownsPayeeScript` | bool | Required
(exactly 1) | The payee script is owned by this wallet |
-| → →
`ownsOperatorRewardScript` | bool | Required
(exactly 1) | The operator reward script is owned by this wallet |
-| →
`metaInfo` | object/null | Required
(exactly 1) | **Added in Dash Core 0.16.0**
An object containing a metainfo related to this ProTx |
-| → →
`lastDSQ` | string | Required
(exactly 1) | The owner key is present in this wallet |
-| → →
`mixingTxCount` | string | Required
(exactly 1) | The operator key is present in this wallet |
-| → →
`lastOutboundAttempt` | integer | Required
(exactly 1) | Unix epoch time of the last outbound attempted |
-| → →
`lastOutboundAttemptElapsed` | integer | Required
(exactly 1) | Elapsed time since last outbound attempt |
-| → →
`lastOutboundSuccess` | integer | Required
(exactly 1) | Unix epoch time of the last successful outbound connection |
-| → →
`lastOutboundSuccessElapsed` | integer | Required
(exactly 1) | Elapsed time since last successful outbound attempt |
+| `result` | object | Required
(exactly 1) | A JSON object containing a provider transaction, or JSON `null` if an error occurred |
+|
Provider Transaction | object/null | Required
(exactly 1) | An object containing a provider transaction |
+| →
`type` | string | Required
(exactly 1) | **Added in Dash Core 19.0.0**
The type of masternode |
+| →
`proTxHash` | string (hex) | Required
(exactly 1) | The hash of the provider transaction as hex in RPC byte order |
+| →
`collateralHash` | string (hex) | Required
(exactly 1) | The hash of the collateral transaction as hex in RPC byte order |
+| →
`collateralIndex` | number (int) | Required
(exactly 1) | The collateral index |
+| → →
`collateralAddress` | string | Required
(exactly 1) | The collateral address |
+| →
`operatorReward` | number (int) | Required
(exactly 1) | The operator reward % |
+| →
`state` | object/null | Required
(exactly 1) | An object containing a provider transaction state |
+| → →
`version` | number (int) | Required
(exactly 1) | **Added in Dash Core 19.2.0**
The version of the most recent ProRegTx or ProUpRegTx |
+| → →
`service` | string | Required
(exactly 1) | The masternode's IP:Port |
+| → →
`registeredHeight` | number (int) | Required
(exactly 1) | The height where the masternode was registered |
+| → →
`lastPaidHeight` | number (int) | Required
(exactly 1) | The height where the masternode was last paid |
+| → →
`consecutivePayments` | number (int) | Required
(exactly 1) | **Added in Dash Core 19.0.0**
The number of consecutive payments the masternode has received in the payment cycle |
+| → →
`PoSePenalty` | number (int) | Required
(exactly 1) | The masternode's proof of service penalty |
+| → →
`PoSeRevivedHeight` | number (int) | Required
(exactly 1) | The height where the masternode recovered from a proof of service ban |
+| → →
`PoSeBanHeight` | number (int) | Required
(exactly 1) | The height where the masternode was banned for proof of service violations |
+| → →
`revocationReason` | number (int) | Required
(exactly 1) | The reason for a ProUpRegTx revocation |
+| → →
`ownerAddress` | string | Required
(exactly 1) | The owner address |
+| → →
`votingAddress` | string | Required
(exactly 1) | The voting address |
+| → →
`payoutAddress` | string | Required
(exactly 1) | The owner's payout address |
+| → →
`pubKeyOperator` | string (hex) | Required
(exactly 1) | The operator public key |
+| → →
`operatorPayoutAddress` | string | Required
(exactly 1) | The operator's payout address |
+| →
`confirmations` | number (int) | Required
(exactly 1) | The number of confirmations this ProTx has |
+| →
`wallet` | object/null | Required
(exactly 1) | An object containing a wallet details related to this ProTx |
+| → →
`hasOwnerKey` | bool | Required
(exactly 1) | The owner key is present in this wallet |
+| → →
`hasOperatorKey` | bool | Required
(exactly 1) | The operator key is present in this wallet |
+| → →
`hasVotingKey` | bool | Required
(exactly 1) | The voting key is present in this wallet |
+| → →
`ownsCollateral` | bool | Required
(exactly 1) | The collateral is owned by this wallet |
+| → →
`ownsPayeeScript` | bool | Required
(exactly 1) | The payee script is owned by this wallet |
+| → →
`ownsOperatorRewardScript` | bool | Required
(exactly 1) | The operator reward script is owned by this wallet |
+| →
`metaInfo` | object/null | Required
(exactly 1) | **Added in Dash Core 0.16.0**
An object containing a metainfo related to this ProTx |
+| → →
`lastDSQ` | string | Required
(exactly 1) | The owner key is present in this wallet |
+| → →
`mixingTxCount` | string | Required
(exactly 1) | The operator key is present in this wallet |
+| → →
`outboundAttemptCount` | integer | Required
(exactly 1) | **Added in Dash Core 19.2.0**
Number of outbound attempts |
+| → →
`lastOutboundAttempt` | integer | Required
(exactly 1) | Unix epoch time of the last outbound attempted |
+| → →
`lastOutboundAttemptElapsed` | integer | Required
(exactly 1) | Elapsed time since last outbound attempt |
+| → →
`lastOutboundSuccess` | integer | Required
(exactly 1) | Unix epoch time of the last successful outbound connection |
+| → →
`lastOutboundSuccessElapsed` | integer | Required
(exactly 1) | Elapsed time since last successful outbound attempt |
-*Example from Dash Core 0.16.0*
+*Example from Dash Core 19.2.0*
```bash
dash-cli -testnet protx info\
- c48a44a9493eae641bea36992bc8c27eaaa33adb1884960f55cd259608d26d2f
+ b43dadbd485e4d1e1d202ea5180f0ad4e8e7f05e97a7e566a764ed714356bd1f
```
Result:
```json
{
- "proTxHash": "c48a44a9493eae641bea36992bc8c27eaaa33adb1884960f55cd259608d26d2f",
- "collateralHash": "e3270ff48c4b802d56ee58d3d53777f7f9c289964e4df0842518075fc81345b1",
- "collateralIndex": 3,
- "collateralAddress": "yYpzTXjVx7A5uohsmW8sRy7TJp4tihVuZg",
+ "type": "Regular",
+ "proTxHash": "b43dadbd485e4d1e1d202ea5180f0ad4e8e7f05e97a7e566a764ed714356bd1f",
+ "collateralHash": "acc1127471fb4417e2ca6420948143c82dfdd3595d5cb4336e19356df4e5715c",
+ "collateralIndex": 1,
+ "collateralAddress": "yMitd7GcJRUF8AeWhT7nWB9bDoruWM7tRb",
"operatorReward": 0,
"state": {
- "service": "173.61.30.231:19013",
- "registeredHeight": 7090,
- "lastPaidHeight": 134608,
- "PoSePenalty": 334,
- "PoSeRevivedHeight": 96516,
- "PoSeBanHeight": 134819,
+ "version": 1,
+ "service": "47.111.181.207:20001",
+ "registeredHeight": 247288,
+ "lastPaidHeight": 0,
+ "consecutivePayments": 0,
+ "PoSePenalty": 369,
+ "PoSeRevivedHeight": -1,
+ "PoSeBanHeight": 247428,
"revocationReason": 0,
- "ownerAddress": "yTMDce5yEpiPqmgPrPmTj7yAmQPJERUSVy",
- "votingAddress": "yTMDce5yEpiPqmgPrPmTj7yAmQPJERUSVy",
- "payoutAddress": "yU3UdrmS6KpWwBDLQTkp1KjXePwWsMbYdj",
- "pubKeyOperator": "8700add55a28ef22ec042a2f28e25fb4ef04b3024a7c56ad7eed4aebc736f312d18f355370dfb6a5fec9258f464b227e"
+ "ownerAddress": "yaMGQThTVPUf1LBqVqa1jMTtLW7ByVbN78",
+ "votingAddress": "yQ8oETtF1pRQfBP4iake2e5zyCCm85CAET",
+ "payoutAddress": "yZw2EYuVkTNUzUqd7mfXRNhCMReonL99tu",
+ "pubKeyOperator": "90c0e9ec9dc5f08b1d4d0211920fe5d96a225c555a4ba7dd7f6cb14e271c925f2fc72316a01282973f9ad9cf1e39e038"
},
- "confirmations": 292831,
+ "confirmations": 602825,
"wallet": {
"hasOwnerKey": false,
"hasOperatorKey": false,
@@ -349,10 +344,11 @@ Result:
"metaInfo": {
"lastDSQ": 0,
"mixingTxCount": 0,
+ "outboundAttemptCount": 0,
"lastOutboundAttempt": 0,
- "lastOutboundAttemptElapsed": 1588171300,
+ "lastOutboundAttemptElapsed": 1686685781,
"lastOutboundSuccess": 0,
- "lastOutboundSuccessElapsed": 1588171300
+ "lastOutboundSuccessElapsed": 1686685781
}
}
```
@@ -393,15 +389,18 @@ _Result (if `detailed` was `true`)---JSON provider registration transaction deta
| ----------------------------------- | ------------ | ----------------------- | ----------------------------------------------------------------------------------------------- |
| `result` | array | Required
(exactly 1) | An array of objects each containing a provider transaction, or JSON `null` if an error occurred |
|
Provider Transaction | object/null | Required
(exactly 1) | An object containing a provider transaction |
+| →
`type` | string | Required
(exactly 1) | **Added in Dash Core 19.0.0**
The type of masternode |
| →
`proTxHash` | string (hex) | Required
(exactly 1) | The hash of the provider transaction as hex in RPC byte order |
| →
`collateralHash` | string (hex) | Required
(exactly 1) | The hash of the collateral transaction as hex in RPC byte order |
| →
`collateralIndex` | number (int) | Required
(exactly 1) | The collateral index |
| → →
`collateralAddress` | string | Required
(exactly 1) | The collateral address |
| →
`operatorReward` | number (int) | Required
(exactly 1) | The operator reward % |
| →
`state` | object/null | Required
(exactly 1) | An object containing a provider transaction state |
+| → →
`version` | number (int) | Required
(exactly 1) | **Added in Dash Core 19.2.0**
The version of the most recent ProRegTx or ProUpRegTx |
| → →
`service` | string | Required
(exactly 1) | The masternode's IP:Port |
| → →
`registeredHeight` | number (int) | Required
(exactly 1) | The height where the masternode was registered |
| → →
`lastPaidHeight` | number (int) | Required
(exactly 1) | The height where the masternode was last paid |
+| → →
`consecutivePayments` | number (int) | Required
(exactly 1) | **Added in Dash Core 19.0.0**
The number of consecutive payments the masternode has received in the payment cycle |
| → →
`PoSePenalty` | number (int) | Required
(exactly 1) | The masternode's proof of service penalty |
| → →
`PoSeRevivedHeight` | number (int) | Required
(exactly 1) | The height where the masternode recovered from a proof of service ban |
| → →
`PoSeBanHeight` | number (int) | Required
(exactly 1) | The height where the masternode was banned for proof of service violations |
@@ -419,15 +418,16 @@ _Result (if `detailed` was `true`)---JSON provider registration transaction deta
| → →
`ownsCollateral` | bool | Required
(exactly 1) | The collateral is owned by this wallet |
| → →
`ownsPayeeScript` | bool | Required
(exactly 1) | The payee script is owned by this wallet |
| → →
`ownsOperatorRewardScript` | bool | Required
(exactly 1) | The operator reward script is owned by this wallet |
-| →
`metaInfo` | object/null | Required
(exactly 1) | **Added in Dash Core 0.16.0**
An object containing a metainfo related to this ProTx |
+| →
`metaInfo` | object/null | Required
(exactly 1) | **Added in Dash Core 0.16.0**
An object containing a metainfo related to this ProTx |
| → →
`lastDSQ` | string | Required
(exactly 1) | The owner key is present in this wallet |
| → →
`mixingTxCount` | string | Required
(exactly 1) | The operator key is present in this wallet |
+| → →
`outboundAttemptCount` | integer | Required
(exactly 1) | **Added in Dash Core 19.2.0**
Number of outbound attempts |
| → →
`lastOutboundAttempt` | integer | Required
(exactly 1) | Unix epoch time of the last outbound attempted |
| → →
`lastOutboundAttemptElapsed` | integer | Required
(exactly 1) | Elapsed time since last outbound attempt |
| → →
`lastOutboundSuccess` | integer | Required
(exactly 1) | Unix epoch time of the last successful outbound connection |
| → →
`lastOutboundSuccessElapsed` | integer | Required
(exactly 1) | Elapsed time since last successful outbound attempt |
-*Example from Dash Core 0.16.0*
+*Example from Dash Core 19.2.0*
```bash
dash-cli -testnet protx list
@@ -469,15 +469,17 @@ Result:
```json
[
{
+ "type": "Regular",
"proTxHash": "c48a44a9493eae641bea36992bc8c27eaaa33adb1884960f55cd259608d26d2f",
"collateralHash": "e3270ff48c4b802d56ee58d3d53777f7f9c289964e4df0842518075fc81345b1",
"collateralIndex": 3,
- "collateralAddress": "yYpzTXjVx7A5uohsmW8sRy7TJp4tihVuZg",
"operatorReward": 0,
"state": {
+ "version": 1,
"service": "173.61.30.231:19013",
"registeredHeight": 7090,
"lastPaidHeight": 0,
+ "consecutivePayments": 0,
"PoSePenalty": 0,
"PoSeRevivedHeight": -1,
"PoSeBanHeight": -1,
@@ -487,7 +489,7 @@ Result:
"payoutAddress": "yU3UdrmS6KpWwBDLQTkp1KjXePwWsMbYdj",
"pubKeyOperator": "8700add55a28ef22ec042a2f28e25fb4ef04b3024a7c56ad7eed4aebc736f312d18f355370dfb6a5fec9258f464b227e"
},
- "confirmations": 292830,
+ "confirmations": -1,
"wallet": {
"hasOwnerKey": false,
"hasOperatorKey": false,
@@ -499,10 +501,11 @@ Result:
"metaInfo": {
"lastDSQ": 0,
"mixingTxCount": 0,
+ "outboundAttemptCount": 0,
"lastOutboundAttempt": 0,
- "lastOutboundAttemptElapsed": 1588171141,
+ "lastOutboundAttemptElapsed": 1686684013,
"lastOutboundSuccess": 0,
- "lastOutboundSuccessElapsed": 1588171141
+ "lastOutboundSuccessElapsed": 1686684013
}
}
]
diff --git a/docs/reference/p2p-network-control-messages.md b/docs/reference/p2p-network-control-messages.md
index 13e7f842..b3397357 100644
--- a/docs/reference/p2p-network-control-messages.md
+++ b/docs/reference/p2p-network-control-messages.md
@@ -370,53 +370,81 @@ The [`spork` message](../reference/p2p-network-control-messages.md#spork) tells
| 8 | nTimeSigned | int64_t | Required | Time the spork value was signed
| 66 | vchSig | char[] | Required | Length (1 byte) + Signature (65 bytes)
-**Active Sporks (per [`src/spork.h`](https://github.com/dashpay/dash/blob/v0.17.x/src/spork.h#L24))**
+The following annotated hexdump shows a [`spork` message](../reference/p2p-network-control-messages.md#spork).
+
+``` text
+11270000 .................................... Spork ID: Spork 2 InstantSend enabled (10001)
+0000000000000000 ............................ Value (0)
+2478da5900000000 ............................ Epoch time: 2017-10-08 19:10:28 UTC (1507489828)
+
+41 .......................................... Signature length: 65
+
+1b6762d3e70890b5cfaed5d1fd72121c
+d32020c827a89f8128a00acd210f4ea4
+1b36c26c3767f8a24f48663e189865ed
+403ed1e850cdb4207cdd466419d9d183
+45 .......................................... Masternode Signature
+```
+
+### Active sporks
+
+The list of all active sporks can be found in
+[`src/spork.h`](https://github.com/dashpay/dash/blob/v19.x/src/spork.h#L34). See the [removed
+sporks section](#removed-sporks) for a list of previously removed sporks.
| Spork ID | Num. | Name | Description |
| :----------: | :----------: | ----------- | ----------- |
-| 10001 | 2 | `INSTANTSEND_ENABLED` | ***Updated in Dash Core 0.17.0***
Turns InstantSend on and off network wide. Also determines if new mempool transactions should be locked or not.
+| 10001 | 2 | `INSTANTSEND_ENABLED` | *Updated in Dash Core 0.17.0*
Turns InstantSend on and off network wide. Also determines if new mempool transactions should be locked or not.
| 10002 | 3 | `INSTANTSEND_BLOCK_`
`FILTERING` | Turns on and off InstantSend block filtering
| 10008 | 9 | `SUPERBLOCKS_ENABLED` | Superblocks are enabled (10% of the block reward allocated to fund the dash treasury for funding approved proposals)
| 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.
-| 10018 | 19 | `SPORK_19_CHAINLOCKS_`
`ENABLED` | Enable LLMQ-based ChainLocks.
-| 10020 | 21 | `SPORK_21_QUORUM_ALL_`
`CONNECTED` | ***Added in Dash Core 0.16.0***
Enable connections between all masternodes in a quorum to optimize the signature recovery process.
Note: Prior to Dash Core 0.17.0 this spork also enforced [PoSe requirements](../guide/dash-features-proof-of-service.md#distributed-key-generation-participation-requirements) for masternodes to support a minimum protocol version and maintain open ports.
-| 10022 | 23 | `SPORK_23_QUORUM_POSE`
`CONNECTED` | **Added in Dash Core 0.17.0**
Enforce [PoSe requirements](../guide/dash-features-proof-of-service.md#distributed-key-generation-participation-requirements) for masternodes to support a minimum protocol version and maintain open ports.
+| 10018 | 19 | `SPORK_19_CHAINLOCKS_`
`ENABLED` | ***Updated in Dash Core 19.2.0***
Enable LLMQ-based ChainLocks.
+| 10020 | 21 | `SPORK_21_QUORUM_ALL_`
`CONNECTED` | *Added in Dash Core 0.16.0*
Enable connections between all masternodes in a quorum to optimize the signature recovery process.
Note: Prior to Dash Core 0.17.0 this spork also enforced [PoSe requirements](../guide/dash-features-proof-of-service.md#distributed-key-generation-participation-requirements) for masternodes to support a minimum protocol version and maintain open ports.
+| 10022 | 23 | `SPORK_23_QUORUM_POSE`
`CONNECTED` | *Added in Dash Core 0.17.0*
Enforce [PoSe requirements](../guide/dash-features-proof-of-service.md#distributed-key-generation-participation-requirements) for masternodes to support a minimum protocol version and maintain open ports.
-> 📘 Spork 2 Values
->
-> As of Dash Core 0.17.0, spork 2 supports two different enabled values:
->
-> * `0` - Masternodes create locks for all transactions
-> * `1` - Masternodes only create locks for transactions included in a block. Transactions in the mempool are not locked.
->
->Mode 1 is only for use in the event of a sustained overload of InstantSend to ensure that ChainLocks can remain operational. See [PR 4024](https://github.com/dashpay/dash/pull/4024) for details.
+**Spork 2 values**
-> 📘 Spork 21 and 23 Values
->
-> Spork 21 and 23 support two different enabled values:
->
-> * `0` - The spork is active for all quorums regardless of quorum size.
-> * `1` - The spork is active only for quorums which have a member size less than 100.
->
-> Mode 1 is only for use in the event of a sustained overload of InstantSend to ensure that ChainLocks can remain operational. See [PR 4024](https://github.com/dashpay/dash/pull/4024) for details.
+As of Dash Core 0.17.0, spork 2 supports two different enabled values:
+
+* `0` - Masternodes create InstantSend locks for all transactions.
+* `1` - Masternodes only create InstantSend locks for transactions included in a block. Transactions
+ in the mempool are not locked.
+
+Mode 1 is only for use in the event of a sustained overload of InstantSend to ensure that ChainLocks
+can remain operational. See [PR 4024](https://github.com/dashpay/dash/pull/4024) for details.
+
+**Spork 19 values**
+
+As of Dash Core 19.2.0, spork 19 supports two different enable values:
+
+* `0` - Masternodes create ChainLocks for all blocks.
+* `1` - Masternodes retain existing ChainLocks, but do not sign new ones.
+
+See [PR 5398](https://github.com/dashpay/dash/pull/5398) for implementation details.
+
+**Spork 21 and 23 values**
+
+ Spork 21 and 23 support two different enabled values:
+
+* `0` - The spork is active for all quorums regardless of quorum size.
+* `1` - The spork is active only for quorums which have a member size less than 100.
+
+### Removed sporks
-**Removed Sporks**
The following sporks were used in the past but are no longer necessary and have been removed recently. To see sporks removed longer ago, please see the [previous version of documentation](https://dashcore.readme.io/v0.16.0/docs/core-ref-p2p-network-control-messages#spork).
-> 📘 Spork 6
->
-> Since spork 6 was never enabled on mainnet, it was removed in Dash Core 0.16.0. The associated logic was hardened in [PR 3662](https://github.com/dashpay/dash/pull/3662) to support testnet (where it is enabled). If testnet is reset at some point in the future, the remaining logic will be removed.
+Note that spork 6 was never enabled on mainnet and was removed in Dash Core 0.16.0. The associated logic was hardened in [PR 3662](https://github.com/dashpay/dash/pull/3662) to support testnet (where it is enabled). If testnet is reset at some point in the future, the remaining logic will be removed.
| Spork ID | Num. | Name | Description |
| :----------: | :----------: | ----------- | ----------- |
-| *10004* | *5* | `INSTANTSEND_MAX_VALUE` | _Removed in Dash Core 0.15.0.
Controls the max value for an InstantSend transaction (currently 2000 DASH)_
| *10005* | *6* | `NEW_SIGS` | _Removed in Dash Core 0.16.0.
Turns on and off new signature format for Dash-specific messages_
-| *10011* | *12* | `RECONSIDER_BLOCKS` | _Removed in Dash Core 0.15.0.
Forces reindex of a specified number of blocks to recover from unintentional network forks_
| *10014* | *15* | `DETERMINISTIC_MNS_`
`ENABLED` | _Removed in Dash Core 0.16.0.
Deterministic masternode lists are enabled_
| *10015* | *16* | `INSTANTSEND_AUTOLOCKS` | _Removed in Dash Core 0.16.0.
Automatic InstantSend for transactions with <=4 inputs (also eliminates the special InstantSend fee requirement for these transactions)_
| *10019* | *20* | `SPORK_20_INSTANTSEND_`
`LLMQ_BASED` | _Removed in Dash Core 0.16.0.
Enable LLMQ-based InstantSend._
| *10021* | *22* | `SPORK_22_PS_MORE_`
`PARTICIPANTS` | *Removed in Dash Core 0.17.0*
*Increase the maximum number of participants in CoinJoin sessions.*
+### Spork verification
+
To verify `vchSig`, compare the hard-coded spork public key (`strSporkPubKey` from [`src/chainparams.cpp`](https://github.com/dashpay/dash/blob/eaf90b77177efbaf9cbed46e822f0d794f1a0ee5/src/chainparams.cpp#L158)) with the public key recovered from the [`spork` message](../reference/p2p-network-control-messages.md#spork)'s hash and `vchSig` value (implementation details for Dash Core can be found in `CPubKey::RecoverCompact`). The hash is a double SHA-256 hash of:
* The spork magic message (`"DarkCoin Signed Message:\n"`)
@@ -429,22 +457,6 @@ To verify `vchSig`, compare the hard-coded spork public key (`strSporkPubKey` fr
| RegTest | Undefined |
| Devnets | 046f78dcf911fbd61910136f7f0f8d90578f68d0b3ac973b5040fb7afb50
1b5939f39b108b0569dca71488f5bbf498d92e4d1194f6f941307ffd95f7
5e76869f0e |
-The following annotated hexdump shows a [`spork` message](../reference/p2p-network-control-messages.md#spork).
-
-``` text
-11270000 .................................... Spork ID: Spork 2 InstantSend enabled (10001)
-0000000000000000 ............................ Value (0)
-2478da5900000000 ............................ Epoch time: 2017-10-08 19:10:28 UTC (1507489828)
-
-41 .......................................... Signature length: 65
-
-1b6762d3e70890b5cfaed5d1fd72121c
-d32020c827a89f8128a00acd210f4ea4
-1b36c26c3767f8a24f48663e189865ed
-403ed1e850cdb4207cdd466419d9d183
-45 .......................................... Masternode Signature
-```
-
## verack
The [`verack` message](../reference/p2p-network-control-messages.md#verack) acknowledges a previously-received [`version` message](../reference/p2p-network-control-messages.md#version), informing the connecting [node](../resources/glossary.md#node) that it can begin to send other messages. The [`verack` message](../reference/p2p-network-control-messages.md#verack) has no payload; for an example of a message with no payload, see the [message headers section](../reference/p2p-network-message-headers.md).
diff --git a/docs/reference/p2p-network-data-messages.md b/docs/reference/p2p-network-data-messages.md
index 843f05b5..192786cb 100644
--- a/docs/reference/p2p-network-data-messages.md
+++ b/docs/reference/p2p-network-data-messages.md
@@ -683,6 +683,7 @@ The [`mnlistdiff` message](../reference/p2p-network-data-messages.md#mnlistdiff)
| Bytes | Name | Data
type | Required | Description |
| ---------- | ----------- | --------- | -------- | -------- |
+| 2 | version | uint16_t | Required | **_Updated in protocol version 70228_**
Version of the message (currently `1`). |
| 32 | baseBlockHash | uint256 | Required | Hash of a block the requester already has a valid masternode list of. Can be all-zero to indicate that a full masternode list is requested.
| 32 | blockHash | uint256 | Required | Hash of the block for which the masternode list diff is requested
| 4 | totalTransactions | uint32_t | Required | Number of total transactions in `blockHash`
@@ -691,7 +692,6 @@ The [`mnlistdiff` message](../reference/p2p-network-data-messages.md#mnlistdiff)
| 1-9 | merkleFlags
Count | compactSize uint | Required | Number of Merkle flag bytes
| 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`
-| 2 | version | uint16_t | Required | **_Added in protocol version 70225_**
Version of the message |
| 1-9 | deletedMNsCount | compactSize uint | Required | Number of ProRegTx hashes which were deleted after baseBlockHash
| variable | deletedMNs | vector | Required | A list of ProRegTx hashes for masternode which were deleted after `baseBlockHash`
| variable | mnList | vector | Required | The list of Simplified Masternode List (SML) entries which were added or updated since `baseBlockHash`
@@ -704,14 +704,15 @@ Simplified Masternode List (SML) Entry
| Bytes | Name | Data type | Description |
| ---------- | ----------- | -------- | -------- |
+| 2 | nVersion | uint_16 | **_Added in protocol version 70228_**
The version of the simplified masternode list
+| 0 or 2 | type | uint_16 | Masternode type:
0 - regular masternode
1 - Evolution masternode
**Note**: Only present after the Dash v19.0.0 hard fork. |
| 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 operator public key
**Note**: serialization varies based on the Dash v19.0.0 fork:
- Before hard fork - legacy BLS scheme
- After hard fork - basic BLS scheme
+| 48 | pubKeyOperator | BLSPubKey | The operator public key
**Note**: serialization varies based on `nVersion`:
- 1 - legacy BLS scheme
- 2 - basic BLS scheme
| 20 |keyIDVoting | CKeyID | The public key hash used for voting.
| 1 | isValid | bool | True if a masternode is not PoSe-banned
-| 0 or 2 | type | uint_16 | Masternode type:
0 - regular masternode
1 - Evolution masternode
**Note**: Only present after the Dash v19.0.0 hard fork. |
| 0 or 2 | platformHTTPPort | uint_16 | TCP port of Platform HTTP/API interface (network byte order).
**Note**: Only present when mnlistdiff `version` is 2 and `type` is 1. |
0 or 20 | platformNodeID | byte[] | Dash Platform P2P node ID, derived from P2P public key.
**Note**: Only present when mnlistdiff `version` is 2 and `type` is 1. |
diff --git a/docs/reference/p2p-network-privatesend-messages.md b/docs/reference/p2p-network-privatesend-messages.md
index 545cf172..82267b9a 100644
--- a/docs/reference/p2p-network-privatesend-messages.md
+++ b/docs/reference/p2p-network-privatesend-messages.md
@@ -308,8 +308,8 @@ If the message indicates the queue is ready, the node responds with a [`dsi` mes
| Bytes | Name | Data type | Required | Description |
| ---------- | ----------- | --------- | -------- | -------- |
| 4 | nDenom | int | Required | Denomination allowed in this session
-| 36 | masternodeOutPoint | outPoint | *Required | **\* Replaced by `proTxHash` beginning with protocol version 70226**
The unspent outpoint of the masternode (holding 1000 DASH) which is hosting this session
-| 32 | proTxHash | uint256 | Required | **Added in protocol version 70226.
Replaces `masternodeOutPoint`.**
The ProRegTx hash of the masternode which is hosting this session
+| 36 | masternodeOutPoint | outPoint | *Required | **\* Replaced by `proTxHash` following the v19 hard fork**
The unspent outpoint of the masternode (holding 1000 DASH) which is hosting this session
+| 32 | proTxHash | uint256 | Required | **Added in Dash Core 19.2.0.
Replaces `masternodeOutPoint`.**
The ProRegTx hash of the masternode which is hosting this session
| 8 | nTime | int64_t | Required | Time this [`dsq` message](../reference/p2p-network-privatesend-messages.md#dsq) was created
| 1 | fReady | bool | Required | Indicates if the pool is ready to be executed
| 97 | vchSig | char[] | Required | BLS Signature of this message by masternode verifiable via pubKeyMasternode (Length (1 byte) + Signature (96 bytes))
**Note**: serialized using the basic BLS scheme after Dash 19.0 activation
@@ -487,8 +487,8 @@ The [`dstx` message](../reference/p2p-network-privatesend-messages.md#dstx) allo
| Bytes | Name | Data type | Required | Description |
| ---------- | ----------- | --------- | -------- | -------- |
| # | tx | [`tx` message](../reference/p2p-network-data-messages.md#tx) | Required | The transaction
-| 36 | masternode
OutPoint | outPoint | *Required | **\* Replaced by `proTxHash` beginning with protocol version 70226**
The unspent outpoint of the masternode (holding 1000 DASH) which is signing the message
-| 32 | proTxHash | uint256 | Required | **Added in protocol version 70226.
Replaces `masternodeOutPoint`.**
The ProRegTx hash of the masternode which is signing the message
+| 36 | masternode
OutPoint | outPoint | *Required | **\* Replaced by `proTxHash` following the v19 hard fork**
The unspent outpoint of the masternode (holding 1000 DASH) which is signing the message
+| 32 | proTxHash | uint256 | Required | **Added in Dash Core 19.2.0.
Replaces `masternodeOutPoint`.**
The ProRegTx hash of the masternode which is signing the message
| 97 | vchSig | char[] | Required | BLS Signature of this message by masternode verifiable via pubKeyMasternode (Length (1 byte) + Signature (96 bytes))
**Note**: serialized using the basic BLS scheme after Dash 19.0 activation
| 8 | sigTime | int64_t | Require | Time this message was signed
diff --git a/docs/reference/p2p-network-protocol-versions.md b/docs/reference/p2p-network-protocol-versions.md
index 7515f6d0..0acd7f52 100644
--- a/docs/reference/p2p-network-protocol-versions.md
+++ b/docs/reference/p2p-network-protocol-versions.md
@@ -4,11 +4,12 @@
The table below lists some notable versions of the P2P network protocol, with the most recent versions listed first.
-As of Dash Core 19.0.0, the most recent protocol version is 70227.
+As of Dash Core 19.2.0, the most recent protocol version is 70228.
| Version | Initial Release | Major Changes
|---------|------------------------------------|--------------
-| 70227 | Dash Core 19.0.0
(Apr 2023) | • Added Evolution masternode type (4000 DASH collateral)
• Removed [`reject` message](../reference/p2p-network-deprecated-messages.md#reject)
+| 70228 | Dash Core 19.2.0
(Jun 2023) | • Store protx version in simplified masternode list entries and use to serialize/deserialize masternode BLS operator keys
+| 70227 | Dash Core 19.0.0
(Apr 2023) | • [DIP 28](https://github.com/dashpay/dips/blob/master/dip-0028.md): Evolution masternodes (4000 DASH collateral)
• Removed [`reject` message](../reference/p2p-network-deprecated-messages.md#reject)
| 70224 | Dash Core 18.2.0
(Jan 2023) | • None (CoinJoin bugfix only)
| 70223 (unchanged) | Dash Core 18.1.0
(Oct 2022) | • [BIP 70](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki) support removed (Bitcoin backport)
• Account API removed (previously deprecated)
• Auto-loading wallets
| 70223 | Dash Core 18.0.0
(Aug 2022) | • [DIP 22](https://github.com/dashpay/dips/blob/master/dip-0022.md): Deterministic InstantSend
• Governance proposal fee reduction
• Multi-wallet GUI support
• [DIP 24](https://github.com/dashpay/dips/blob/master/dip-0024.md): LLMQ Rotation
diff --git a/docs/reference/transactions-special-transactions.md b/docs/reference/transactions-special-transactions.md
index f9a1af3b..d2390caf 100644
--- a/docs/reference/transactions-special-transactions.md
+++ b/docs/reference/transactions-special-transactions.md
@@ -41,7 +41,7 @@ The special transaction type is 1 and the extra payload consists of the followin
| Bytes | Name | Data type | Description |
| ---------- | ----------- | -------- | -------- |
-| 2 | version | uint_16 | Provider transaction version number. Currently set to 1. Updated to 2 after Dash Core 19.0.0 hard.
+| 2 | version | uint_16 | Provider transaction version number. Currently set to 1. Updated to 2 after v19 hard fork.
| 2 | type | uint_16 | Masternode type. Default set to 0.
| 2 | mode | uint_16 | Masternode mode. Default set to 0.
| 36 | collateralOutpoint | COutpoint | The collateral outpoint.
**Note:** The hash will be null if the collateral is part of this transaction, otherwise it will reference an existing collateral.