From 88440cb2efdb116c65bc43f5a512850d92864bfe Mon Sep 17 00:00:00 2001 From: thephez Date: Mon, 12 Jun 2023 12:54:30 -0400 Subject: [PATCH 1/2] docs: spork updates (#35) * docs: integrate spork 6 info into paragraph * docs: add updated info about spork 19 and refactor spork values info * chore: update url and formatting * chore: remove sporks deprecated more than 4 versions ago * style: inconsistent list ending * refactor: relocate hexdump to better location and add subheadings * fix: correct typo --- .../reference/p2p-network-control-messages.md | 98 +++++++++++-------- 1 file changed, 55 insertions(+), 43 deletions(-) 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). From ccd078ec6bfc4cdf44fb9e6dd768751bfc7cfc6a Mon Sep 17 00:00:00 2001 From: thephez Date: Tue, 20 Jun 2023 08:20:30 -0400 Subject: [PATCH 2/2] feat: 19.2 rpc updates (#36) * docs(rpc): update protx list for 19.2 * docs(rpc): update quick reference * docs(rpc): update protx info for 19.2 * docs(rpc): minor update to protx diff and example updated * chore: update protx diff example command to match results * docs(rpc): update masternode status for 19.2 * chore: minor formatting update * docs(rpc): update quick ref * docs: update protocol version * chore: add DIP-28 link * docs(p2p): add nVersion to sml entry From dashpay/dash#5397 * docs(p2p): update dsq and dstx for 19.2 Will use protx instead of mn outpoint after v19 activation per dashpay/dash#5404 * docs(rpc): update masternode status example * docs(p2p): minor updates to mnlistdiff change order of some fields. mnlistdiff version always 1 * docs(rpc): update masternode status example output * docs(rpc): update protx diff field location and example output * Update docs/reference/transactions-special-transactions.md Co-authored-by: UdjinM6 --------- Co-authored-by: UdjinM6 --- .../remote-procedure-call-quick-reference.md | 4 +- docs/api/remote-procedure-calls-dash.md | 42 +-- docs/api/remote-procedure-calls-evo.md | 251 +++++++++--------- docs/reference/p2p-network-data-messages.md | 7 +- .../p2p-network-privatesend-messages.md | 8 +- .../p2p-network-protocol-versions.md | 5 +- .../transactions-special-transactions.md | 2 +- 7 files changed, 163 insertions(+), 156 deletions(-) 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-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.