Skip to content
Merged
Show file tree
Hide file tree
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
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ AC_PREREQ([2.69])
dnl Don't forget to push a corresponding tag when updating any of _CLIENT_VERSION_* numbers
define(_CLIENT_VERSION_MAJOR, 23)
define(_CLIENT_VERSION_MINOR, 1)
define(_CLIENT_VERSION_BUILD, 5)
define(_CLIENT_VERSION_BUILD, 7)
define(_CLIENT_VERSION_IS_RELEASE, false)
define(_COPYRIGHT_YEAR, 2026)
define(_COPYRIGHT_HOLDERS,[The %s developers])
Expand Down
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 @@ -21,6 +21,7 @@
</screenshot>
</screenshots>
<releases>
<release date="2026-06-30" version="23.1.7"/>
<release date="2026-06-19" version="23.1.5"/>
<release date="2026-06-13" version="23.1.4"/>
<release date="2026-05-15" version="23.1.3"/>
Expand Down
6 changes: 3 additions & 3 deletions doc/man/dash-cli.1
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DASH-CLI "1" "June 2026" "dash-cli v23.1.5" "User Commands"
.TH DASH-CLI "1" "June 2026" "dash-cli v23.1.7" "User Commands"
.SH NAME
dash-cli \- manual page for dash-cli v23.1.5
dash-cli \- manual page for dash-cli v23.1.7
.SH SYNOPSIS
.B dash-cli
[\fI\,options\/\fR] \fI\,<command> \/\fR[\fI\,params\/\fR] \fI\,Send command to Dash Core\/\fR
Expand All @@ -15,7 +15,7 @@ dash-cli \- manual page for dash-cli v23.1.5
.B dash-cli
[\fI\,options\/\fR] \fI\,help <command> Get help for a command\/\fR
.SH DESCRIPTION
Dash Core RPC client version v23.1.5
Dash Core RPC client version v23.1.7
.SH OPTIONS
.HP
\-?
Expand Down
8 changes: 4 additions & 4 deletions doc/man/dash-qt.1
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DASH-QT "1" "June 2026" "dash-qt v23.1.5" "User Commands"
.TH DASH-QT "1" "June 2026" "dash-qt v23.1.7" "User Commands"
.SH NAME
dash-qt \- manual page for dash-qt v23.1.5
dash-qt \- manual page for dash-qt v23.1.7
.SH SYNOPSIS
.B dash-qt
[\fI\,command-line options\/\fR] [\fI\,URI\/\fR]
.SH DESCRIPTION
Dash Core version v23.1.5
Dash Core version v23.1.7
.PP
Optional URI is a Dash address in BIP21 URI format.
.SH OPTIONS
Expand Down Expand Up @@ -1172,7 +1172,7 @@ Set the font weight for bold texts. Possible range 0 to 8 (default: 4)
.HP
\fB\-font\-weight\-normal\fR
.IP
Set the font weight for normal texts. Possible range 0 to 8 (default: 2)
Set the font weight for normal texts. Possible range 0 to 8 (default: 1)
.HP
\fB\-lang=\fR<lang>
.IP
Expand Down
6 changes: 3 additions & 3 deletions doc/man/dash-tx.1
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DASH-TX "1" "June 2026" "dash-tx v23.1.5" "User Commands"
.TH DASH-TX "1" "June 2026" "dash-tx v23.1.7" "User Commands"
.SH NAME
dash-tx \- manual page for dash-tx v23.1.5
dash-tx \- manual page for dash-tx v23.1.7
.SH SYNOPSIS
.B dash-tx
[\fI\,options\/\fR] \fI\,<hex-tx> \/\fR[\fI\,commands\/\fR] \fI\,Update hex-encoded dash transaction\/\fR
.br
.B dash-tx
[\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] \fI\,Create hex-encoded dash transaction\/\fR
.SH DESCRIPTION
Dash Core dash\-tx utility version v23.1.5
Dash Core dash\-tx utility version v23.1.7
.SH OPTIONS
.HP
\-?
Expand Down
6 changes: 3 additions & 3 deletions doc/man/dash-util.1
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DASH-UTIL "1" "June 2026" "dash-util v23.1.5" "User Commands"
.TH DASH-UTIL "1" "June 2026" "dash-util v23.1.7" "User Commands"
.SH NAME
dash-util \- manual page for dash-util v23.1.5
dash-util \- manual page for dash-util v23.1.7
.SH SYNOPSIS
.B dash-util
[\fI\,options\/\fR] [\fI\,commands\/\fR] \fI\,Do stuff\/\fR
.SH DESCRIPTION
Dash Core dash\-util utility version v23.1.5
Dash Core dash\-util utility version v23.1.7
.SH OPTIONS
.HP
\-?
Expand Down
6 changes: 3 additions & 3 deletions doc/man/dash-wallet.1
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DASH-WALLET "1" "June 2026" "dash-wallet v23.1.5" "User Commands"
.TH DASH-WALLET "1" "June 2026" "dash-wallet v23.1.7" "User Commands"
.SH NAME
dash-wallet \- manual page for dash-wallet v23.1.5
dash-wallet \- manual page for dash-wallet v23.1.7
.SH DESCRIPTION
Dash Core dash\-wallet version v23.1.5
Dash Core dash\-wallet version v23.1.7
.PP
dash\-wallet is an offline tool for creating and interacting with Dash Core wallet files.
By default dash\-wallet will act on wallets in the default mainnet wallet directory in the datadir.
Expand Down
6 changes: 3 additions & 3 deletions doc/man/dashd.1
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DASHD "1" "June 2026" "dashd v23.1.5" "User Commands"
.TH DASHD "1" "June 2026" "dashd v23.1.7" "User Commands"
.SH NAME
dashd \- manual page for dashd v23.1.5
dashd \- manual page for dashd v23.1.7
.SH SYNOPSIS
.B dashd
[\fI\,options\/\fR] \fI\,Start Dash Core\/\fR
.SH DESCRIPTION
Dash Core version v23.1.5
Dash Core version v23.1.7
.SH OPTIONS
.HP
\-?
Expand Down
42 changes: 32 additions & 10 deletions doc/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Dash Core version v23.1.5
# Dash Core version v23.1.7

This is a new patch version release, bringing bug fixes.
This release is **optional** for all nodes, although recommended.
This is a new patch version release, bringing security hardening and build fixes
for newer compiler toolchains.
This release is **recommended** for all nodes, and especially for masternodes.

Please report bugs using the issue tracker at GitHub:

Expand All @@ -25,23 +26,43 @@ require a reindex.

# Release Notes

## Bug Fixes
## Security

- Corrected the checkpoint hash for height 2487500 (dash#7368).
This release hardens several peer-to-peer message handlers against
denial-of-service from remote peers. These issues do not affect consensus and do
not put funds at risk, but they could be used to crash or degrade nodes -
masternodes in particular - so upgrading is recommended.

## Documentation
- Networking: a peer whose receive buffer filled up could keep the socket-handler
thread spinning at 100% CPU for the duration of the backpressure. The thread now
falls back to its normal poll wait while such peers are paused.
- LLMQ / DKG: pushed DKG messages are now accepted only from verified masternodes,
are bounded in size, and are structurally validated before being retained;
malformed signatures can no longer trigger an assertion failure during batch
signature verification.
- BLS: verifying a DKG contribution share whose verification vector was never
received no longer dereferences a null pointer.
- InstantSend: locks with an oversized input set are now rejected before any
expensive processing, and the queues holding not-yet-verified and
awaiting-transaction locks are bounded to prevent unbounded memory growth.
- Governance: vote-sync requests carrying a bloom filter outside the permitted size
are rejected, preventing a CPU-amplification stall of P2P message processing.

- Updated the v23.1.4 release notes intro and wording (dash#7369).
## Build

# v23.1.5 Change log
- Fixed GCC 16 build failures in warning-enabled builds by tightening header
includes and initializing LevelDB compaction output size.

# v23.1.7 Change log

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

# Credits

Thanks to everyone who directly contributed to this release:

- PastaClaw
- knst
- PastaPastaPasta

As well as everyone that submitted issues, reviewed pull requests and helped
debug the release candidates.
Expand All @@ -50,6 +71,7 @@ debug the release candidates.

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

- [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
Expand All @@ -67,4 +89,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/9adc0b16f93d15fe065692cbe77f3950419db0cb...dashpay:v23.1.5
[set-of-changes]: https://github.com/dashpay/dash/compare/v23.1.5...dashpay:v23.1.7
70 changes: 70 additions & 0 deletions doc/release-notes/dash/release-notes-23.1.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Dash Core version v23.1.5

This is a new patch version release, bringing bug fixes.
This release is **optional** for all nodes, although recommended.

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

## Bug Fixes

- Corrected the checkpoint hash for height 2487500 (dash#7368).

## Documentation

- Updated the v23.1.4 release notes intro and wording (dash#7369).

# v23.1.5 Change log

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

# Credits

Thanks to everyone who directly contributed to this release:

- PastaClaw

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.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/9adc0b16f93d15fe065692cbe77f3950419db0cb...dashpay:v23.1.5
1 change: 1 addition & 0 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ BITCOIN_CORE_H = \
llmq/commitment.h \
llmq/context.h \
llmq/debug.h \
llmq/dkgmessages.h \
llmq/dkgsession.h \
llmq/dkgsessionhandler.h \
llmq/dkgsessionmgr.h \
Expand Down
6 changes: 5 additions & 1 deletion src/bls/bls_worker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -708,7 +708,11 @@ std::future<bool> CBLSWorker::AsyncVerifyContributionShare(const CBLSId& forId,
const BLSVerificationVectorPtr& vvec,
const CBLSSecretKey& skContribution)
{
if (!forId.IsValid() || !VerifyVerificationVector(*vvec)) {
// vvec may be null when the verification vector for that member was never
// received (e.g. a non-member observer that did not get the member's QCONTRIB).
// Dereferencing it here is a remote-triggerable crash; treat a missing vvec as a
// failed verification, mirroring the null check in VerifyVerificationVectors().
if (!forId.IsValid() || vvec == nullptr || !VerifyVerificationVector(*vvec)) {
auto p = BuildFutureDoneCallback<bool>();
p.first(false);
return std::move(p.second);
Expand Down
2 changes: 1 addition & 1 deletion src/consensus/consensus.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/** The maximum allowed size for a serialized block, in bytes (network rule) */
static const unsigned int MAX_LEGACY_BLOCK_SIZE = 1000000;
static const unsigned int MAX_DIP0001_BLOCK_SIZE = 2000000;
inline unsigned int MaxBlockSize(bool fDIP0001Active = true)
constexpr unsigned int MaxBlockSize(bool fDIP0001Active = true)
{
return fDIP0001Active ? MAX_DIP0001_BLOCK_SIZE : MAX_LEGACY_BLOCK_SIZE;
}
Expand Down
9 changes: 9 additions & 0 deletions src/governance/net_governance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,15 @@ void NetGovernance::ProcessMessage(CNode& peer, const std::string& msg_type, CDa
vRecv >> nProp;
vRecv >> filter;

// The per-object vote-sync path tests this peer-supplied filter against every
// cached vote (CBloomFilter::contains() loops nHashFuncs times). An unbounded
// nHashFuncs would force billions of MurmurHash3 evaluations per vote while the
// message-processing mutex is held. Enforce the same bound filterload uses.
if (!filter.IsWithinSizeConstraints()) {
m_peer_manager->PeerMisbehaving(peer.GetId(), 100);
return;
}

LogPrint(BCLog::GOBJECT, "MNGOVERNANCESYNC -- syncing governance objects to our peer %s\n", peer.GetLogString());
if (nProp == uint256()) {
// Full sync of all governance objects
Expand Down
15 changes: 15 additions & 0 deletions src/instantsend/instantsend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ void CInstantSendManager::EnqueueInstantSendLock(NodeId from, const uint256& has
}

LOCK(cs_pendingLocks);
if (pendingInstantSendLocks.size() >= MAX_PENDING_INSTANTSEND_LOCKS) {
// Drop instead of growing the queue without bound. A peer cannot pin
// unbounded memory with unverified islocks; honest islocks are re-relayed.
LogPrint(BCLog::INSTANTSEND, "CInstantSendManager::%s -- pending islock queue full (%d), dropping islock=%s peer=%d\n",
__func__, pendingInstantSendLocks.size(), hash.ToString(), from);
return;
}
pendingInstantSendLocks.emplace(hash, instantsend::PendingISLockFromPeer{from, std::move(islock)});
}

Expand Down Expand Up @@ -110,6 +117,14 @@ void CInstantSendManager::AddPendingISLock(const uint256& hash, const instantsen
{
// put it in a separate pending map and try again later
LOCK(cs_pendingLocks);
if (pendingNoTxInstantSendLocks.size() >= MAX_PENDING_INSTANTSEND_LOCKS) {
// Bound this queue too: a malicious quorum could otherwise mint valid islocks
// for transactions that never arrive, growing it without limit.
// Honest islocks are re-relayed, so dropping under flood is not fatal.
LogPrint(BCLog::INSTANTSEND, "CInstantSendManager::%s -- no-tx pending islock queue full (%d), dropping islock=%s peer=%d\n",
__func__, pendingNoTxInstantSendLocks.size(), hash.ToString(), from);
return;
}
pendingNoTxInstantSendLocks.try_emplace(hash, instantsend::PendingISLockFromPeer{from, islock});
}

Expand Down
8 changes: 8 additions & 0 deletions src/instantsend/instantsend.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ class CInstantSendManager
instantsend::CInstantSendDb db;
CSporkManager& spork_manager;

// Hard ceiling on the number of peer-supplied InstantSend locks retained in each of
// the pending queues -- pendingInstantSendLocks (received, not yet BLS-verified) and
// pendingNoTxInstantSendLocks (verified, awaiting the locked transaction). The work
// thread drains continuously, so normal operation keeps only a handful pending; this
// never triggers legitimately, but it bounds memory if a peer floods locks faster than
// they can be processed.
static constexpr size_t MAX_PENDING_INSTANTSEND_LOCKS{1024};
Comment thread
coderabbitai[bot] marked this conversation as resolved.

mutable Mutex cs_pendingLocks;
// Incoming and not verified yet
Uint256HashMap<instantsend::PendingISLockFromPeer> pendingInstantSendLocks GUARDED_BY(cs_pendingLocks);
Expand Down
2 changes: 1 addition & 1 deletion src/instantsend/lock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ uint256 InstantSendLock::GetRequestId() const
*/
bool InstantSendLock::TriviallyValid() const
{
if (txid.IsNull() || inputs.empty()) {
if (txid.IsNull() || inputs.empty() || inputs.size() > MAX_INPUTS) {
return false;
}

Expand Down
10 changes: 10 additions & 0 deletions src/instantsend/lock.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#define BITCOIN_INSTANTSEND_LOCK_H

#include <bls/bls.h>
#include <consensus/consensus.h>
#include <serialize.h>
#include <uint256.h>

Expand All @@ -18,6 +19,15 @@ class COutPoint;
namespace instantsend {
struct InstantSendLock {
static constexpr uint8_t CURRENT_VERSION{1};
// An islock pins the same outpoints as the locked transaction's inputs, so it can
// never carry more inputs than a consensus-valid transaction. Such a transaction must
// fit in a block (MaxBlockSize()) and each transaction input (CTxIn) serializes to at
// least 41 bytes (COutPoint 36 + scriptSig length 1 + nSequence 4), bounding it at
// MaxBlockSize() / 41 inputs; the islock stores those inputs as 36-byte COutPoints.
// Deriving from MaxBlockSize() keeps this cap in lockstep with any future block-size
// change. The ceiling can never reject a valid islock, but it lets us drop oversized
// locks before the O(n) hashing/dedup work and bounds each retained pending entry.
static constexpr size_t MAX_INPUTS{MaxBlockSize() / 41};

uint8_t nVersion{CURRENT_VERSION};
std::vector<COutPoint> inputs;
Expand Down
Loading
Loading