| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| CHECKSUMS.txt | 2026-07-06 | 894 Bytes | |
| linux-glibc-arm64.zip | 2026-07-06 | 206.6 MB | |
| linux-glibc-x64.zip | 2026-07-06 | 219.1 MB | |
| linux-musl-arm64.zip | 2026-07-06 | 205.3 MB | |
| linux-musl-x64.zip | 2026-07-06 | 207.3 MB | |
| macos-arm64.zip | 2026-07-06 | 46.8 MB | |
| windows-x64.zip | 2026-07-06 | 201.5 MB | |
| README.md | 2026-07-06 | 7.3 kB | |
| Release 3.4.0.0.4 source code.tar.gz | 2026-07-06 | 13.6 MB | |
| Release 3.4.0.0.4 source code.zip | 2026-07-06 | 14.8 MB | |
| Totals: 10 Items | 1.1 GB | 0 | |
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 3.4.x.x.x.
The version of stacks-signer compatible with this release is 3.4.0.0.4.0, available at: https://github.com/stacks-network/stacks-core/releases/tag/signer-3.4.0.0.4.0.
This release is recommended for all Stacks node operators.
This release includes the following changes: https://github.com/stacks-network/stacks-core/blob/3.4.0.0.4/CHANGELOG.md
Added
- New
stacks-profilerandstacks-profiler-macrosinstrumentation crates for efficient and minimally-invasive profiling of code in this workspace - Added documentation for the arithmetic checker
- Added execution_stats data to the blockreplay/blocksimulate api.
- Added a wall-clock deadline to the Clarity contract-analysis phase, bounding the time a single transaction can spend being analyzed on the block-assembly (mining) and block-proposal (signer) validation paths. A transaction whose analysis exceeds the deadline is treated as problematic (deterministic replay and block commit remain unbounded).
- Added
max_analysis_time_secsto the[miner]configuration section to bound the per-transaction contract-analysis time (in seconds) during block assembly. Defaults to 30 seconds. - Added
block_proposal_max_tx_analysis_time_secsto the[connection_options]configuration section to bound the per-transaction contract-analysis time (in seconds) during block-proposal validation. Defaults to 30 seconds. - Add snapshot copy of canonical epoch 2.x block files, confirmed microblock streams, and Nakamoto staging blocks into squashed output.
- Add snapshot copy of canonical burnchain.sqlite tables into squashed output, using the squashed sortition DB as the canonical set.
- Add snapshot copy of Clarity side-storage tables (data_table, metadata_table) into a squashed Clarity MARF.
- Add snapshot framework for copying canonical chainstate index side-tables into squashed output
- Add snapshot copy of canonical sortition side tables into squashed output, with an optional Stacks-tip boundary rewrite for the sortition tip memo tables.
- Add snapshot copy of Bitcoin SPV headers and complete chain-work intervals up to the squash height into squashed output.
- Allow nodes booted from a squashed MARF snapshot to resolve coinbase heights and Nakamoto reward sets in the pruned range by reading the underlying immutable keys at the canonical chain tip
- Add the
marf-squashoffline CLI (contrib/marf-squash) that produces a bootable Pruned Chainstate Snapshot (PCS) from another chainstate. - Add MARF squash engine (
squash_to_path) and squash-aware trie lookups for root hashes and block heights - Reduced tenure extend timings
- Moved transaction-codec tests from
stackslibinto thestacks-codeccrate and added new tests for previously-untested wire-format edges.
Changed
- Moved
StacksTransactionand its supporting types (TransactionAuth,*SpendingCondition,TransactionPayload,ClarityVersion,StacksMicroblockHeader,Txid,StacksString,TenureChangePayload, and related) fromstackslibinto thestacks-codeccrate (#7200) - Rust toolchain bumped from 1.94.0 to 1.96.0 and new clippy lint warnings addressed
- Drop unused p2p message types (BlocksAvailable, MicroblocsAvailable, BlocksData)
- Ensure that the version in the block header matches the expected version for the current epoch, enabling use of this version for future changes to the header structure.
- Pipeline MARF squash blob reads using
posix_fadviseprefetch to overlap I/O with node processing during DFS collection - Connections opened through
sqlite_open(including all MARF and Clarity side-store connections) now use SQLite multi-thread (SQLITE_OPEN_NO_MUTEX) mode instead of serialized mode; the redundant per-connection mutex measurably slowed hot paths (~11% Nakamoto catch-up throughput improvement measured on a mainnet follower). - Exposed connection options
max_stackerdb_push_bandwidth,max_nakamoto_block_push_bandwidth,max_transaction_push_bandwidthas TOML configuration to set bandwidth cap on message reception. - Set connection option
max_stackerdb_push_bandwidthdefault to 4 MB/seconds - Enforced StackerDB message chunk-size check against replica configuration instead of statically against
STACKERDB_MAX_CHUNK_SIZE - Improved StackerDB configuration creation for miner to set chunk-size to
STACKERDB_MAX_CHUNK_SIZEinstead ofMAX_PAYLOAD_LEN
Fixed
- Prevent blocks that contain transactions with non-normalized "high S" secp256k1 signatures. Consensus still allows them (this will be changed in a future epoch), but miners won't mine them and signers won't sign them.
- Performance improvement that prevents unnecessary work in the block downloader if nothing has changed.
- Fixed a bug where under certain conditions, a few unspecified configuration options (notably:
connection_options.private_neighbors) did not correctly use the documented default value. - Gracefully handle clock skew when computing P2P bandwidth stats.
- Cleanup unwraps/panics in Epoch 2.x microblock downloader
- Wired the per-call memory-abort callback and wall-clock execution-time limit into the
/v2/contracts/call-readand/v3/contracts/fast-call-readread-only RPC handlers. Also added a newread_only_call_max_mem_bytesconnection option (default 1 GB;0disables) to bound the heap a single read-only call may allocate. - Reject blocks which contain transactions with PoX assetmap overwrites
- Signers now ignore StackerDB chunks whose payload type is not valid for the contract they were received in.
- The sortition MARF index now auto-detects external-blob storage (a sibling
marf.sqlite.blobsfile) instead of assuming internal SQLite blobs. - Fixed flake in tests::signer::v0::tenure_extend::non_blocking_minority_configured_to_favour_incoming_miner
Docker images have been published to GitHub Container Registry:
stacks-core
-
Debian (glibc): https://github.com/stacks-network/stacks-core/pkgs/container/stacks-core/1005429479?tag=3.4.0.0.4
:::sh docker pull ghcr.io/stacks-network/stacks-core:3.4.0.0.4@sha256:176d858038d4e9864f39023e24fc06c3ec3812e1733bf1017d07d5ab2482e395
-
Alpine (musl): https://github.com/stacks-network/stacks-core/pkgs/container/stacks-core/1005429132?tag=3.4.0.0.4-alpine
:::sh docker pull ghcr.io/stacks-network/stacks-core:3.4.0.0.4-alpine@sha256:68dfb16a8170dcedbba877ee4e49af68842addb053817e8793ae52eb7bc1bbe0
stacks-signer
-
Debian (glibc): https://github.com/stacks-network/stacks-signer/pkgs/container/stacks-signer/1005425720?tag=3.4.0.0.4.0
:::sh docker pull ghcr.io/stacks-network/stacks-signer:3.4.0.0.4.0@sha256:a743a6bd04147dbb3d21ccdd6ffd12fe92ef872025fde190b033c773ee25a036
-
Alpine (musl): https://github.com/stacks-network/stacks-signer/pkgs/container/stacks-signer/1005425623?tag=3.4.0.0.4.0-alpine
:::sh docker pull ghcr.io/stacks-network/stacks-signer:3.4.0.0.4.0-alpine@sha256:4496906fe6a63fa01874a6ad5074cba60490b48e345f61acaeb0f805e9031141