Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 69 additions & 75 deletions doc/release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ Please report bugs using the issue tracker at GitHub:

<https://github.com/dashpay/dash/issues>


# Upgrading and downgrading

## How to Upgrade
Expand All @@ -27,13 +26,11 @@ require a reindex.

# Notable changes

EvoDB migration
---------------
## EvoDB migration

This release introduces a new internal format for masternode state data to support extended addresses and make future updates of this data seamless. Nodes will automatically migrate to the new format. Downgrading to an earlier version would require a full reindex. #6813

Breaking Change: Block Filter Index Format Update
-------------------------------------------------
## Breaking Change: Block Filter Index Format Update

The compact block filter index format has been updated to include Dash special transaction data, providing feature parity with bloom filters for SPV client support. This change is incompatible with existing blockfilter indexes. Existing blockfilter indexes will automatically be re-created with the new version.

Expand All @@ -52,16 +49,14 @@ The compact block filter index format has been updated to include Dash special t
- Feature parity between bloom filters and compact block filters
- Protection against serving incorrect filter data to light clients

Other notable changes
---------------------
## Other notable changes

* To help prevent fingerprinting transactions created by the Dash Core wallet, change output
amounts are now randomized. (#6685)
* Dash Core will no longer migrate EvoDb databases generated in v19 and v20, users upgrading
from these versions are recommended to run `-reindex` to rebuild all databases and indexes. (#6579)

Updated REST APIs
-----------------
## Updated REST APIs

- The `/headers/` and `/blockfilterheaders/` endpoints have been updated to use
a query parameter instead of a path parameter to specify the result count. The
Expand All @@ -76,21 +71,14 @@ Updated REST APIs
`GET /rest/blockfilterheaders/<FILTERTYPE>/<BLOCK-HASH>.<bin|hex|json>?count=<COUNT=5>` instead of
`GET /rest/blockfilterheaders/<FILTERTYPE>/<COUNT>/<BLOCK-HASH>.<bin|hex|json>` (deprecated)

P2P and network changes
-----------------------
## P2P and network changes

- `MIN_PEER_PROTO_VERSION` has been bumped to `70221`. (#6877)
- `cycleHash` field in `isdlock` message will now represent a DKG cycle starting block of the signing quorum instead of a DKG cycle starting block corresponding to the current chain height. While this is fully backwards compatible with older versions of Dash Core, other implementations might not be expecting this, so the P2P protocol version was bumped to 70237. (#6608)
- UNIX domain sockets can now be used for proxy connections. Set `-onion` or `-proxy` to the local socket path with the prefix `unix:` (e.g. `-onion=unix:/home/me/torsocket`). UNIX socket paths are now accepted for `-zmqpubrawblock` and `-zmqpubrawtx` with the format `-zmqpubrawtx=unix:/path/to/file`. (#6634)

Updated RPCs
------------
## Updated RPCs

* The keys `platformP2PPort` and `platformHTTPPort` have been deprecated for the following RPCs, `decoderawtransaction`,
`decodepsbt`, `getblock`, `getrawtransaction`, `gettransaction`, `masternode status` (only the `dmnState` key),
`protx diff`, `protx listdiff` and has been replaced with the key `addresses`.
* The deprecated key is still available without additional runtime arguments, but is liable to be removed in future versions
of Dash Core. (#6811)

* `protx revoke` will now use the legacy scheme version for legacy masternodes instead of defaulting to the
highest `ProUpRevTx` version. (#6729)
Expand All @@ -106,9 +94,37 @@ Updated RPCs

* The `instantsendtoaddress` RPC was deprecated in Dash Core v0.15 and is now removed. (#6686)

* The input field `ipAndPort` has been renamed to `coreP2PAddrs`.
* `coreP2PAddrs` can now, in addition to accepting a string, accept an array of strings, subject to validation rules.
* `quorum rotationinfo` will now expect the third param to be a JSON array. (#6628)

* `getislocks` will now return the request `id` for each InstantSend Lock in results. (#6607)

* `coinjoin status` is a new RPC that reports the status message of all running mix sessions. `coinjoin start` will no longer
report errors from mix sessions; users are recommended to query the status using `coinjoin status` instead. (#6594)

* The RPCs `masternode current` and `masternode winner` were deprecated in Dash Core v0.17 and are now removed. The `getpoolinfo` RPC was deprecated in Dash Core v0.15 and is now removed. (#6567)

* The `-deprecatedrpc=addresses` configuration option has been removed. RPCs `gettxout`, `getrawtransaction`, `decoderawtransaction`, `decodescript`, `gettransaction verbose=true` and REST endpoints `/rest/tx`, `/rest/getutxos`, `/rest/block` no longer return the `addresses` and `reqSigs` fields, which were previously deprecated in 21.0. (#22650)

* The `getblock` RPC command now supports verbosity level 3, containing transaction inputs `prevout` information. The existing `/rest/block/` REST endpoint is modified to contain this information too. Every `vin` field will contain an additional `prevout` subfield. (#22918)

* A new RPC `newkeypool` has been added, which will flush (entirely clear and refill) the keypool. (#23093)

* The return value of the `pruneblockchain` method had an off-by-one bug and now returns the height of the last pruned block as documented. (#24629)

* The `listdescriptors` RPC now includes an optional coinjoin field to identify CoinJoin descriptors. (#6835)

### Extended address support

Dash Core v23 introduces support for extended masternode addresses, replacing legacy single-endpoint fields and
enabling more flexible network setups. The following RPC changes implement this functionality:

#### New and deprecated fields

* The keys `platformP2PPort` and `platformHTTPPort` have been deprecated for the following RPCs, `decoderawtransaction`,
`decodepsbt`, `getblock`, `getrawtransaction`, `gettransaction`, `masternode status` (only the `dmnState` key),
`protx diff`, `protx listdiff` and has been replaced with the key `addresses`.
* The deprecated key is still available without additional runtime arguments, but is liable to be removed in future versions
of Dash Core. (#6811)
* The key `service` has been deprecated for some RPCs (`decoderawtransaction`, `decodepsbt`, `getblock`, `getrawtransaction`,
`gettransaction`, `masternode status` (only for the `dmnState` key), `protx diff`, `protx listdiff`) and has been replaced
with the key `addresses`.
Expand All @@ -118,39 +134,18 @@ Updated RPCs
* This change does not affect `masternode status` (except for the `dmnState` key) as `service` does not represent a payload
value but the external address advertised by the active masternode. (#6665)

#### Renamed input fields

* The input field `ipAndPort` has been renamed to `coreP2PAddrs`. In addition to accepting a string, `coreP2PAddrs` can
now accept an array of strings, subject to validation rules.
* The input field `platformP2PPort` has been renamed to `platformP2PAddrs`. In addition to numeric inputs (i.e. ports),
the field can now accept a string (i.e. an addr:port pair) and arrays of strings (i.e. multiple addr:port pairs),
subject to validation rules.

* The input field `platformHTTPPort` has been renamed to `platformHTTPSAddrs`. In addition to numeric inputs (i.e. ports),
the field can now accept a string (i.e. an addr:port pair) and arrays of strings (i.e. multiple addr:port pairs),
subject to validation rules.

* The field `addresses` will now also report on platform P2P and platform HTTPS endpoints as `addresses['platform_p2p']`
and `addresses['platform_https']` respectively.
* On payloads before extended addresses, if a masternode update affects `platformP2PPort` and/or `platformHTTPPort`
but does not affect `netInfo`, `protx listdiff` does not contain enough information to report on the masternode's
address and will report the changed port paired with the dummy address `255.255.255.255`.

This does not affect `protx listdiff` queries where `netInfo` was updated or diffs relating to masternodes that
have upgraded to extended addresses.

* If the masternode is eligible for extended addresses, `protx register{,_evo}` and `protx register_fund{,_evo}` will continue
allowing `coreP2PAddrs` to be left blank, as long as `platformP2PAddrs` and `platformHTTPSAddrs` are also left blank.
* Attempting to populate any three address fields will make populating all fields mandatory.
* This does not affect nodes ineligible for extended addresses (i.e. all nodes before fork activation or legacy BLS nodes)
and they will have to continue specifying `platformP2PAddrs` and `platformHTTPSAddrs` even if they wish to keep
`coreP2PAddrs` blank.

* If the masternode is eligible for extended addresses, `protx register{,_evo}` and `register_fund{,_evo}` will no longer
default to the core P2P port if a port is not specified in the addr:port pair. All ports must be specified explicitly.
* This does not affect nodes ineligible for extended addresses, continuing to default to the core P2P port if provided an
addr without a port.

* `protx register{,_evo}` and `register_fund{,_evo}` will continue to allow specifying only the port number for `platformP2PAddrs`
and `platformHTTPSAddrs`, pairing it with the address from the first `coreP2PAddrs` entry. This mirrors existing behavior.
* This method of entry may not be available in future releases of Dash Core and operators are recommended to switch over to
explicitly specifying (arrays of) addr:port strings for all address fields. (#6666)
#### Reporting behavior

* When reporting on extended address payloads, `platformP2PPort` and `platformHTTPPort` will read the port value from
`netInfo[PLATFORM_P2P][0]` and `netInfo[PLATFORM_HTTPS][0]` respectively as both fields are subsumed into `netInfo`.
Expand All @@ -161,29 +156,34 @@ Updated RPCs
dedicated diff flags and post-consolidation, all changes are now affected by `netInfo`'s diff flag.

To avoid the perception of changes to fields that are not serialized by extended address payloads, data from `netInfo` will
not be translated for this RPC call. (#6666)

* `quorum rotationinfo` will now expect the third param to be a JSON array. (#6628)

* `getislocks` will now return the request `id` for each InstantSend Lock in results. (#6607)

* `coinjoin status` is a new RPC that reports the status message of all running mix sessions. `coinjoin start` will no longer
report errors from mix sessions; users are recommended to query the status using `coinjoin status` instead. (#6594)

* The RPCs `masternode current` and `masternode winner` were deprecated in Dash Core v0.17 and are now removed. The `getpoolinfo` RPC was deprecated in Dash Core v0.15 and is now removed. (#6567)
not be translated for this RPC call. (#6666)
* The field `addresses` will now also report on platform P2P and platform HTTPS endpoints as `addresses['platform_p2p']`
and `addresses['platform_https']` respectively.
* On payloads before extended addresses, if a masternode update affects `platformP2PPort` and/or `platformHTTPPort`
but does not affect `netInfo`, `protx listdiff` does not contain enough information to report on the masternode's
address and will report the changed port paired with the dummy address `255.255.255.255`.

* The `-deprecatedrpc=addresses` configuration option has been removed. RPCs `gettxout`, `getrawtransaction`, `decoderawtransaction`, `decodescript`, `gettransaction verbose=true` and REST endpoints `/rest/tx`, `/rest/getutxos`, `/rest/block` no longer return the `addresses` and `reqSigs` fields, which were previously deprecated in 21.0. (#22650)
This does not affect `protx listdiff` queries where `netInfo` was updated or diffs relating to masternodes that
have upgraded to extended addresses.

* The `getblock` RPC command now supports verbosity level 3, containing transaction inputs `prevout` information. The existing `/rest/block/` REST endpoint is modified to contain this information too. Every `vin` field will contain an additional `prevout` subfield. (#22918)
#### Masternode rules

* A new RPC `newkeypool` has been added, which will flush (entirely clear and refill) the keypool. (#23093)
* If the masternode is eligible for extended addresses, `protx register{,_evo}` and `protx register_fund{,_evo}` will:
* Continue allowing `coreP2PAddrs` to be left blank, as long as `platformP2PAddrs` and `platformHTTPSAddrs` are also left blank.
* Attempting to populate any three address fields will make populating all fields mandatory.
* Continue to allow specifying only the port number for `platformP2PAddrs` and `platformHTTPSAddrs`, pairing it with the address
from the first `coreP2PAddrs` entry. This mirrors existing behavior.
* This method of entry may not be available in future releases of Dash Core and operators are recommended to switch over to
explicitly specifying (arrays of) addr:port strings for all address fields. (#6666)
* No longer default to the core P2P port if a port is not specified in the addr:port pair. All ports must be specified explicitly.

* The return value of the `pruneblockchain` method had an off-by-one bug and now returns the height of the last pruned block as documented. (#24629)
Masternodes ineligible for extended addresses (i.e. all nodes before fork activation or legacy BLS nodes) must follow
the legacy rules by continuing to:

* The `listdescriptors` RPC now includes an optional coinjoin field to identify CoinJoin descriptors. (#6835)
* Default to the core P2P port if provided an address without a port.
* Specify `platformP2PAddrs` and `platformHTTPSAddrs` even if they wish to keep `coreP2PAddrs` blank.

Updated settings
----------------
## Updated settings

- BIP157 compact block filters are now automatically enabled for masternodes. This improves privacy for light clients
connecting to masternodes and enables better support for pruned nodes. When a node is configured as a masternode
Expand All @@ -196,29 +196,25 @@ Updated settings

- Ports specified in `-port` and `-rpcport` options are now validated at startup. Values that previously worked and were considered valid can now result in errors. (#6634)

Statistics
----------
## Statistics

- IPv6 hosts are now supported by the StatsD client.
- `-statshost` now accepts URLs to allow specifying the protocol, host and port in one argument.
- Specifying invalid values will no longer result in the silent disablement of the StatsD client and will now cause errors at startup. (#6837)

- The arguments `-statsenabled`, `-statsns`, `-statshostname` have been removed. They were previously deprecated in v22.0 and will no longer be recognized on runtime. (#6505)

Build System
------------
## Build System

GCC 11.1 or later, or Clang 16.0 or later, are now required to compile Dash Core. (#6389)

Command-line Options
--------------------
## Command-line Options

### Changes in Existing Command-line Options

- `-platform-user` removed in v23 (deprecated in v22 and never used by platform). (#6482)

Wallet
------
## Wallet

- Wallet passphrases and mnemonic passphrases may now contain null characters. (#6780 #6792)

Expand All @@ -229,14 +225,12 @@ Wallet
- Fixed an issue where CoinJoin funds mixed in the Dash Android wallet were invisible when importing the mnemonic into Dash Core. Descriptor Wallets now include an additional default descriptor for mobile CoinJoin funds, ensuring seamless wallet migration and complete fund visibility across different Dash wallet implementations.
- This is a breaking change that increases the default number of descriptors from 2 to 3 on mainnet (internal, external, mobile CoinJoin) for newly created descriptor wallets only - existing wallets are unaffected. (#6835)

GUI changes
-----------
## GUI changes

- Added governance proposal voting functionality to the Qt interface. Users with masternode voting keys can now vote on governance proposals directly from the governance tab via right-click context menu. Added masternode count display to governance tab, showing how many masternodes the wallet can vote with. (#6690)
- Added a menu item to restore a wallet from a backup file. (#6648)

RPC Wallet
----------
## RPC Wallet

- `unloadwallet` now fails if a rescan is in progress. (#6759)
- `gettransaction`, `listtransactions`, `listsinceblock` now return the `abandoned` field for all transactions. (#25158)
Expand Down
Loading