This release contains bugfixes and improvements to the stacks-node and stacks-signer binaries, ensuring more consistent block production.
This release is compatible with chainstate directories from 4.0.x.
This release is recommended for all Stacks node and signer operators.
This release includes the following changes:
https://github.com/stacks-network/stacks-core/blob/4.0.3/CHANGELOG.md
Added
- Adds opt-in logging to help observe where StackerDB chunks come from. Set
node.log_stackerdb_chunk_sources = trueto enable it. - Added a new authenticated RPC endpoint
POST /v3/transactions/simulatewhich simulates a single transaction on top of a chain tip (the canonical tip by default, or the one selected with thetipquery parameter), discarding all state changes, and reports its result, events, and execution cost.
Changed
- Moved Clarity transaction-error classification from
stackslibtoclarity, with authoritative included/rejected dispositions that can be shared with WASM consumers - The miner now ties mempool nonce-cache validity to the specific parent block it builds on, automatically resetting the caches whenever the parent changes (e.g. across mining retries), instead of relying on a manually-maintained flag.
read_only_call_max_mem_bytesnow caps each read-only RPC request end to end: parsing the body's Clarity values (call arguments and map keys) counts toward the same per-request limit as execution, and requests whose parsing exceeds it are rejected with HTTP 400.- Read-only call RPC endpoints now cap the
argumentsarray at 262,144 entries, even whenread_only_call_max_mem_bytesis0. - Lower the default StackerDB timeouts to retry HTTP RPC sooner.
- Moved transaction post-condition verification out of
stackslibinto a newstacks-transactionscrate, so that it can be used in WASM environments and is no longer coupled to the Clarity VM
Fixed
- Fix a bug that prevented duplicate name detection in some cases during contract analysis. This change applies starting in epoch 4.1.
- Prevent one potential cause for miner stalls by moving signer state machine retrieval from HTTP requests to DB lookup.
- Fixed a block-commit timing race that made the release-only Epoch CI job fail deterministically on
tests::epoch_21::transition_fixes_bitcoin_rigidity. - Fixed Prometheus execution-cost write-count utilization metrics to use the write-count block limit, and fixed RPC response bytes being counted as inbound instead of outbound bandwidth.
- Fixed the miner thread exiting (and stalling for the remainder of the tenure) on transient errors. The miner now retries when it hits DB contention, a parent block that has not been processed yet, a new parent block discovered mid-mining, or a mempool cache reset failure, instead of giving up on the tenure.
- When a StackerDB chunk push fails, remove the receiver and immediately try the next receiver for the same chunk. This prevents an unavailable receiver from delaying the push.
- Broadcast HTTP-uploaded StackerDB chunks even when no event observer is attached. This allows uploaded chunks to reach peers in configurations that do not use an event observer.
- Fixed a StackerDB chunk uploaded over HTTP being stored and acknowledged but never announced to the node's event observers, which could stall consensus indefinitely when the lost chunk was a signer's block pre-commit. The chunk's pending event notification was discarded whenever the relayer fell behind and a peer echoed the same chunk back, or whenever the node's own view advanced before the relayer processed the upload.
Removed
- Removed the special-casing of transactions with high-S signatures from mempool admittance and block validation. Now that we've transitioned into Epoch 4.0, those signatures are forbidden by consensus and no longer need to be special-cased.
Docker images have been published to GitHub Container Registry:
stacks-core
- Debian (glibc): https://github.com/stacks-network/stacks-core/pkgs/container/stacks-core/1207102142?tag=4.0.3
docker pull ghcr.io/stacks-network/stacks-core:4.0.3@sha256:9c45dbf25dbe6a2b5051657f914b98abccfbec1a9f84d1df45233d627446227d- Alpine (musl): https://github.com/stacks-network/stacks-core/pkgs/container/stacks-core/1207100105?tag=4.0.3-alpine
docker pull ghcr.io/stacks-network/stacks-core:4.0.3-alpine@sha256:f5ee022d224e40d93d27d2241a0bf6c5d0f550beab0723307fef5462d5f2d0b5stacks-signer
- Debian (glibc): https://github.com/stacks-network/stacks-signer/pkgs/container/stacks-signer/1207098950?tag=4.0.3
docker pull ghcr.io/stacks-network/stacks-signer:4.0.3@sha256:6cb6f31a6fdaf6e002816ec75691d7d44b654046fc433b253591f239742e1d58- Alpine (musl): https://github.com/stacks-network/stacks-signer/pkgs/container/stacks-signer/1207098218?tag=4.0.3-alpine
docker pull ghcr.io/stacks-network/stacks-signer:4.0.3-alpine@sha256:ca5d96697a3446a3a054e00c638a0c457267ac83b30d619c85e780696d637335