Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
3174d5f
fix(instantsend): propagate !cs_timingsTxSeen to the callers of Remov…
UdjinM6 Oct 29, 2026
c8627a6
fix(llmq): drop DKG members whose verification vectors share coeffici…
UdjinM6 Oct 29, 2026
1ec6aaa
test: cover DKG members dealing identical contributions
UdjinM6 Oct 29, 2026
12bbd21
fix(llmq): weight batched DKG contribution verification
UdjinM6 Oct 29, 2026
593f252
fix(bls): weight batch-verified signatures so complementary errors ca…
UdjinM6 Oct 29, 2026
5d9fe74
fix(governance): don't vote NO-FUNDING on triggers before their matur…
PastaPastaPasta Oct 29, 2026
bd948aa
fix(governance): don't vote on triggers while not synced
PastaPastaPasta Oct 29, 2026
95fbf22
fix(bls): stop weighted contribution batch verification on an invalid…
PastaPastaPasta Oct 29, 2026
dfd9820
fix(llmq): accept equal DKG secret key shares when aggregating a memb…
PastaPastaPasta Oct 29, 2026
a28c030
Merge dashpay/dash-internal#15: fix(llmq): v23.1.x werror build, DKG …
PastaPastaPasta Oct 30, 2026
a08d35e
Merge dashpay/dash-internal#19: fix(governance): prevent governance D…
PastaPastaPasta Oct 30, 2026
5f17c2e
Merge dashpay/dash-internal#16: fix(bls): weight batch-verified signa…
PastaPastaPasta Oct 30, 2026
aeffa7e
Merge dashpay/dash-internal#17: fix(llmq): weight batched DKG contrib…
PastaPastaPasta Oct 30, 2026
01dc7e0
chore: prepare v23.1.10 release
PastaPastaPasta Oct 30, 2026
703b2a0
Merge #7983: chore: prepare v23.1.10 release
PastaPastaPasta Oct 30, 2026
6b9790d
Merge tag 'v23.1.10' (master) into develop
PastaPastaPasta Nov 2, 2026
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
1 change: 1 addition & 0 deletions contrib/flatpak/org.dash.dash-core.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
</screenshots>
<releases>
<release date="2026-11-05" version="24.0.0"/>
<release date="2026-10-30" version="23.1.10"/>
<release date="2026-10-29" version="23.1.9"/>
<release date="2026-07-30" version="23.1.8"/>
<release date="2026-06-30" version="23.1.7"/>
Expand Down
137 changes: 49 additions & 88 deletions doc/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# Dash Core version v23.1.9
# Dash Core version v23.1.10

This is a new patch version release. It fixes a consensus-affecting
transaction-encoding bug, several remotely reachable crashes and
denial-of-service issues in the masternode, DKG, signing and governance paths,
and backports a number of hardening and robustness fixes from later releases.
This is a new patch version release. It fixes a governance issue that could
stop a superblock from paying any proposals, and hardens DKG and BLS signature
verification against misbehaving quorum members and peers.

Upgrading is **strongly recommended** for all nodes, and required for
masternodes.
Expand All @@ -30,100 +29,61 @@ require a reindex.

# Release Notes

## Consensus

- Transactions whose version field is negative are now rejected once DIP3 is
active. The version and type share one 32-bit field; a negative version was
sign-extended when a transaction was re-serialized, so a block containing such
a transaction could be accepted by a node that received the original bytes and
rejected by every node that received the re-serialized form, leading to a
persistent chain split. The new rule rejects these transactions uniformly. No
valid or historical transaction is affected and transaction ids are unchanged.

## Crash fixes

These issues do not affect consensus rules or put funds at risk, but each one
can take a node offline.

- Fixed an abort during the DKG when a quorum member sent a contribution whose
decrypted secret-key share was invalid: the share reached an aggregation
assertion and terminated the process on every honest member of the quorum.
Invalid shares are now rejected before aggregation.
- Fixed block-template failures caused by provider transactions: a
`ProUpServTx` with an invalid type, a `ProRegTx` reusing collateral already
referenced by an in-mempool update, and a pending owner key colliding with a
Platform node id are now rejected at mempool acceptance.
- Bounded the masternode-list caches by size so a peer cannot drive unbounded
memory growth between blocks.
- Bounded `DomainPort` deserialization so a small provider transaction can no
longer make the node allocate and zero very large buffers while holding
`cs_main`.
- Decoding an unknown-version provider transaction through the verbose decode
RPCs no longer dereferences a missing network-info object.
- `masternode payments` no longer aborts at the genesis block, and the
masternode-list RPCs no longer cache a list for a block outside the active
chain.
- Evonodes no longer abort at credit-pool snapshot boundaries when the pool is
first constructed outside a block connection (for example by
`getassetunlockstatuses`).
- Flat-file (block and undo) positions are now stored and seeked as 64-bit
values. Block-undo data can be several times the size of its block, so a busy
chain could push a data file past the point a 32-bit offset can address; the
write and seek paths no longer narrow the position to 32 bits, which avoided a
silent wrap (and, on Windows, a failure past 2 GiB).

## InstantSend

- Provider (masternode) transactions are no longer given InstantSend locks.
Locking them served no purpose and interacted badly with lock eviction on
mempool removal. Software that waited for an InstantSend lock on a provider
transaction should wait for a ChainLock or for confirmations instead.
## Governance

- Masternodes no longer vote NO-FUNDING on a superblock trigger before that
superblock's maturity window opens (about 3 days before the superblock on
mainnet), when they have no candidate of their own to compare it against.
These early votes could keep a trigger with the correct payments from
reaching the funding threshold, so the superblock paid no proposals.
Triggers that don't match a masternode's candidate still receive a NO vote
once the window opens.
- Masternodes no longer vote on triggers until they are fully synced. A
masternode restarting inside the maturity window could otherwise vote NO on
the correct trigger before it was able to build its own candidate.

Masternodes running older versions still cast the early NO votes, so this
protection becomes effective as masternodes upgrade. Masternode operators
should upgrade before the next superblock.

## Security and denial-of-service hardening

These issues do not affect consensus and do not put funds at risk.

- DKG contribution verification: a single verification-vector coefficient
shared between two members no longer fails the whole verification batch.
Previously that marked unrelated honest members' contributions invalid and
caused them to be complained about; contributions are now verified
individually, so only the offending member is affected.
- Signature-share batch verification is now scoped per sender, so one peer can
no longer get an honest peer penalised or have a forged share stored in place
of an honest one. Malformed detached quorum share batches are rejected, and
signing intake is gated against the active-quorum set before any quorum is
retrieved.
- Governance: an orphan vote now requires a valid masternode signature before
it is cached, the number of orphan parent objects re-requested per tick is
bounded, governance vote signature checks are memoised to bound the cost of a
sync request, a vote is no longer recorded before it is validated, and a
failed BLS vote-signature check is logged under the governance category
instead of unconditionally, so a peer cannot fill `debug.log` with it.
- Socket exception monitoring is now consistent between the `poll()` and
`select()` backends, and a peer whose send buffer stalls is now subject to the
send timeout, so it can no longer hold a connection slot indefinitely.
- Verified inbound connections are bounded per operator identity; `CHECKDATASIG`
uses the signature cache; repeated authenticated Platform bans are skipped;
`DYNBITSET` allocation is bounded against the remaining stream size; a bogus
InstantSend lock no longer drops a batch of unrelated locks; and
`-allowprivatenet` no longer influences masternode address validation.

## Wallet

- Invalid-mnemonic errors no longer echo the recovery phrase, an encrypted
wallet is relocked if an HD upgrade fails after it was unlocked, and a wallet
unlock deadline can no longer be extended without re-authenticating.

# v23.1.9 Change log
- BLS batch verification (signature shares, recovered signatures, InstantSend
locks and DKG messages) now weights each signature with a secret random
factor before aggregating. Previously two invalid signatures whose errors
cancelled out could pass as a valid batch. A peer could use this to disrupt
InstantSend or ChainLock signing, get honest peers penalised, or get honest
DKG members marked bad.
- Batched verification of DKG contributions is weighted the same way, so
colluding members can no longer give another member invalid secret-key
shares that pass verification, which could leave that member unable to sign
for the quorum. This did not expose the quorum key.
- A DKG member copying another member's entire contribution could prevent the
whole quorum from forming. Members whose verification vectors share a
coefficient are now excluded from the commitment instead of the round
failing. This excludes both the copying member and the member it copied,
and both receive the usual PoSe penalty for failed DKG participation.
- Colluding DKG members could stop chosen honest members from building their
secret-key share, which could prevent a quorum from forming without any
member being blamed. The same condition made a node penalise an honest peer
serving quorum data during share recovery. Equal secret-key shares from
different members are now accepted; the resulting key share is still
verified against the quorum's verification vector.

Like the governance fix, the DKG fixes protect a quorum once enough of its
members run this version. Weighted batch verification does more work per
message, so masternodes may see higher CPU use during DKG and signing.

# v23.1.10 Change log

See detailed [set of changes][set-of-changes].

# Credits

Thanks to everyone who directly contributed to this release:

- Konstantin Akimov
- PastaClaw
- PastaPastaPasta
- UdjinM6

Expand All @@ -134,6 +94,7 @@ debug the release candidates.

These releases are considered obsolete. Old release notes can be found here:

- [v23.1.9](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.9.md) released Oct/29/2026
- [v23.1.8](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.8.md) released Jul/29/2026
- [v23.1.7](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.7.md) released Jun/30/2026
- [v23.1.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.5.md) released Jun/19/2026
Expand All @@ -154,4 +115,4 @@ These releases are considered obsolete. Old release notes can be found here:
- [v21.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-21.0.0.md) released Jul/25/2024
- [v20.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.1.1.md) released April/3/2024

[set-of-changes]: https://github.com/dashpay/dash/compare/v23.1.8...dashpay:v23.1.9
[set-of-changes]: https://github.com/dashpay/dash/compare/v23.1.9...dashpay:v23.1.10
157 changes: 157 additions & 0 deletions doc/release-notes/dash/release-notes-23.1.9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
# Dash Core version v23.1.9

This is a new patch version release. It fixes a consensus-affecting
transaction-encoding bug, several remotely reachable crashes and
denial-of-service issues in the masternode, DKG, signing and governance paths,
and backports a number of hardening and robustness fixes from later releases.

Upgrading is **strongly recommended** for all nodes, and required for
masternodes.

Please report bugs using the issue tracker at GitHub:

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

# Upgrading and downgrading

## How to Upgrade

If you are running an older version, shut it down. Wait until it has completely
shut down (which might take a few minutes for older versions), then run the
installer (on Windows) or just copy over /Applications/Dash-Qt (on Mac) or
dashd/dash-qt (on Linux).

## Downgrade warning

### Downgrade to a version < v23.0.0

Downgrading to a version older than v23.0.0 is not supported, and will
require a reindex.

# Release Notes

## Consensus

- Transactions whose version field is negative are now rejected once DIP3 is
active. The version and type share one 32-bit field; a negative version was
sign-extended when a transaction was re-serialized, so a block containing such
a transaction could be accepted by a node that received the original bytes and
rejected by every node that received the re-serialized form, leading to a
persistent chain split. The new rule rejects these transactions uniformly. No
valid or historical transaction is affected and transaction ids are unchanged.

## Crash fixes

These issues do not affect consensus rules or put funds at risk, but each one
can take a node offline.

- Fixed an abort during the DKG when a quorum member sent a contribution whose
decrypted secret-key share was invalid: the share reached an aggregation
assertion and terminated the process on every honest member of the quorum.
Invalid shares are now rejected before aggregation.
- Fixed block-template failures caused by provider transactions: a
`ProUpServTx` with an invalid type, a `ProRegTx` reusing collateral already
referenced by an in-mempool update, and a pending owner key colliding with a
Platform node id are now rejected at mempool acceptance.
- Bounded the masternode-list caches by size so a peer cannot drive unbounded
memory growth between blocks.
- Bounded `DomainPort` deserialization so a small provider transaction can no
longer make the node allocate and zero very large buffers while holding
`cs_main`.
- Decoding an unknown-version provider transaction through the verbose decode
RPCs no longer dereferences a missing network-info object.
- `masternode payments` no longer aborts at the genesis block, and the
masternode-list RPCs no longer cache a list for a block outside the active
chain.
- Evonodes no longer abort at credit-pool snapshot boundaries when the pool is
first constructed outside a block connection (for example by
`getassetunlockstatuses`).
- Flat-file (block and undo) positions are now stored and seeked as 64-bit
values. Block-undo data can be several times the size of its block, so a busy
chain could push a data file past the point a 32-bit offset can address; the
write and seek paths no longer narrow the position to 32 bits, which avoided a
silent wrap (and, on Windows, a failure past 2 GiB).

## InstantSend

- Provider (masternode) transactions are no longer given InstantSend locks.
Locking them served no purpose and interacted badly with lock eviction on
mempool removal. Software that waited for an InstantSend lock on a provider
transaction should wait for a ChainLock or for confirmations instead.

## Security and denial-of-service hardening

These issues do not affect consensus and do not put funds at risk.

- DKG contribution verification: a single verification-vector coefficient
shared between two members no longer fails the whole verification batch.
Previously that marked unrelated honest members' contributions invalid and
caused them to be complained about; contributions are now verified
individually, so only the offending member is affected.
- Signature-share batch verification is now scoped per sender, so one peer can
no longer get an honest peer penalised or have a forged share stored in place
of an honest one. Malformed detached quorum share batches are rejected, and
signing intake is gated against the active-quorum set before any quorum is
retrieved.
- Governance: an orphan vote now requires a valid masternode signature before
it is cached, the number of orphan parent objects re-requested per tick is
bounded, governance vote signature checks are memoised to bound the cost of a
sync request, a vote is no longer recorded before it is validated, and a
failed BLS vote-signature check is logged under the governance category
instead of unconditionally, so a peer cannot fill `debug.log` with it.
- Socket exception monitoring is now consistent between the `poll()` and
`select()` backends, and a peer whose send buffer stalls is now subject to the
send timeout, so it can no longer hold a connection slot indefinitely.
- Verified inbound connections are bounded per operator identity; `CHECKDATASIG`
uses the signature cache; repeated authenticated Platform bans are skipped;
`DYNBITSET` allocation is bounded against the remaining stream size; a bogus
InstantSend lock no longer drops a batch of unrelated locks; and
`-allowprivatenet` no longer influences masternode address validation.

## Wallet

- Invalid-mnemonic errors no longer echo the recovery phrase, an encrypted
wallet is relocked if an HD upgrade fails after it was unlocked, and a wallet
unlock deadline can no longer be extended without re-authenticating.

# v23.1.9 Change log

See detailed [set of changes][set-of-changes].

# Credits

Thanks to everyone who directly contributed to this release:

- Konstantin Akimov
- PastaClaw
- PastaPastaPasta
- UdjinM6

As well as everyone that submitted issues, reviewed pull requests and helped
debug the release candidates.

# Older releases

These releases are considered obsolete. Old release notes can be found here:

- [v23.1.8](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.8.md) released Jul/29/2026
- [v23.1.7](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.7.md) released Jun/30/2026
- [v23.1.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.5.md) released Jun/19/2026
- [v23.1.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.4.md) released Jun/18/2026
- [v23.1.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.3.md) released May/28/2026
- [v23.1.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.2.md) released Mar/12/2026
- [v23.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.1.0.md) released Feb/15/2026
- [v23.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.0.2.md) released Dec/4/2025
- [v23.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-23.0.0.md) released Nov/10/2025
- [v22.1.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-22.1.3.md) released Jul/15/2025
- [v22.1.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-22.1.2.md) released Apr/15/2025
- [v22.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-22.1.1.md) released Feb/17/2025
- [v22.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-22.1.0.md) released Feb/10/2025
- [v22.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-22.0.0.md) released Dec/12/2024
- [v21.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-21.1.1.md) released Oct/22/2024
- [v21.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-21.1.0.md) released Aug/8/2024
- [v21.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-21.0.2.md) released Aug/1/2024
- [v21.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-21.0.0.md) released Jul/25/2024
- [v20.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.1.1.md) released April/3/2024

[set-of-changes]: https://github.com/dashpay/dash/compare/v23.1.8...dashpay:v23.1.9
Loading
Loading