Node v1.0.300 release notes
For the complete documentation index, see llms.txt
- Version: v1.0.300
- Date: September 22, 2026
- Components:
node-1.0.300,toolkit-1.0.300,runtime-1.0.300
Docker images
docker pull midnightntwrk/midnight-node:1.0.300
docker pull midnightntwrk/midnight-node-toolkit:1.0.300
High-level summary
Node v1.0.300 is a patch release on the v1.0.0 GA line that ships runtime 1.0.300. Preview, Preprod, and Mainnet run this runtime, and it calls version 2 of the apply_transaction and validate_guaranteed_execution ledger host functions. Node v1.0.2 and earlier do not provide these functions, so every node on those networks must run v1.0.300 to keep importing blocks.
The release also adds a block timestamp (tblock) correction so that a node syncing from genesis can import some historical blocks, adds toolkit support for the new runtime, and removes gdb from the node and toolkit Docker images. A node that syncs Mainnet from genesis still stops at block 1788979. See Known issues.
The changes below are the delta from v1.0.2, taken from the comparison between the two tags.
Audience
This release note is relevant for users who:
- Run a Midnight node on Preview, Preprod, or Mainnet. These networks run runtime 1.0.300, which node v1.0.2 and earlier cannot load.
- Use the node toolkit to fetch or replay blocks from Preview, Preprod, or Mainnet.
- Use
gdbinside the node or toolkit container, which the images no longer include.
DApp developers do not need to take any action for this release. transaction_version stays at 3, and the runtime metadata changes only in its version numbers.
What changed (Summary of updates)
The updates below describe the key changes introduced in this release.
- Raised the runtime to 1.0.300:
spec_versionmoves from1_000_000to1_000_300andsystem_versionfrom1to3.transaction_versionstays at3. - Added version 2 of the
Ledger8Bridgeapply_transactionandvalidate_guaranteed_executionhost functions. Runtime 1.0.300 calls them, so older node binaries cannot run it. - Added a block timestamp (
tblock) correction for blocks produced under earlier runtimes. The node validates the first ledger transaction of such a block at the parent block time plus 12 seconds. - Added toolkit support for
spec_version1_000_300and its metadata, so the toolkit can process blocks produced by the new runtime. - Removed
gdbfrom the node and toolkit images.
New features
No new features in this release.
Breaking changes
Upgrade every node to v1.0.300
All three public networks now run runtime 1.0.300:
| Network | Runtime upgrade block | Time (UTC) |
|---|---|---|
| Preprod | 2648468 | 21 September 2026, 15:12 |
| Mainnet | 2738210 | 25 September 2026, 15:08 |
| Preview | 1074620 | 29 September 2026, 07:16 |
The new runtime calls version 2 of the apply_transaction and validate_guaranteed_execution ledger host functions. Node v1.0.2 and earlier do not provide them, so a full, RPC, boot, or validator node on an older version cannot load the runtime and stops importing blocks after the upgrade block. It logs an error that includes runtime requires function imports which are not present on the host. Upgrade the node binary or Docker image to v1.0.300 and restart the node.
This release does not change the Preview, Preprod, or Mainnet chain specifications or genesis, so you do not need to reset or resync your node.
To confirm that your node follows the new runtime, call state_getRuntimeVersion. It returns specVersion 1000300, transactionVersion 3, and systemVersion 3.
Upgrade the toolkit to v1.0.300
Toolkit versions earlier than 1.0.300 cannot process blocks produced by runtime 1.0.300 and fail with UnsupportedBlockVersion(1000300). Use the midnightntwrk/midnight-node-toolkit:1.0.300 image or the toolkit binary attached to the release.
Bug fixes and quality improvements
Block timestamp correction for historical blocks
When a transaction enters the mempool, the node validates it against a timestamp 12 seconds (two slots) after the parent block and caches the result. The block producer reused that cached result for the first transaction in a block, so some historical blocks contain a first transaction that is valid only against that later timestamp. A node that validates those blocks against the block's own timestamp, such as a node syncing from genesis, can reject them (#1924).
Node v1.0.300 validates the first ledger transaction of a block at the parent block's timestamp plus 12 seconds, but only when it replays a block produced by a runtime earlier than 1.0.300. From the runtime upgrade onward, the node validates every transaction against its own block's timestamp. The node hardcodes the 12-second offset, and there are no configuration settings for it. (#1932, #1965, #2002)
Runtime system_version 3
Runtime 1.0.300 raises system_version from 1 to 3. With this change, a later set_code first stores the new runtime as pending code, so off-chain runtime API calls, such as RPC queries, no longer run the new runtime against storage it has not migrated yet. You do not need to take any action. (#1900)
Debugger removed from the node and toolkit images
Removed gdb from the midnight-node and midnight-node-toolkit Docker images. strace, procps-ng, vim, jq, and tree remain for troubleshooting. (#2187)
Release re-issued on 30 September 2026
The node-1.0.300 tag moved on 30 September 2026 to a commit that pins runtime build dependencies in Cargo.lock, with no source code changes (#2224). The node team republished the release binaries, runtime files, and 1.0.300 Docker images the same day, so their checksums and digests differ from those published on 22 September. As of 2 October 2026, the GitHub release description still lists the 22 September values. Check downloads against the SHA256SUMS and srtool-digest.json files attached to the release instead. The compressed runtime attached to the release, midnight_node_runtime-1.0.300.compact.compressed.wasm, has the BLAKE2-256 hash 0x39568eeb0802fa59d74ac0bc5c7ab62fc05c23ea947937458a4b011558516138, the same hash that state_getStorageHash returns for the :code key (0x3a636f6465) on Preview, Preprod, and Mainnet.
Known issues
A node that syncs Mainnet from genesis with v1.0.300 stops at block 1788979 and cannot import block 1788980. The node logs an error that includes Intent TTL has expired. Nodes that were already past block 1788980 are not affected. The node team plans to fix this in v1.0.400. (#2229)