Skip to main content

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 gdb inside 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_version moves from 1_000_000 to 1_000_300 and system_version from 1 to 3. transaction_version stays at 3.
  • Added version 2 of the Ledger8Bridge apply_transaction and validate_guaranteed_execution host 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_version 1_000_300 and its metadata, so the toolkit can process blocks produced by the new runtime.
  • Removed gdb from 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:

NetworkRuntime upgrade blockTime (UTC)
Preprod264846821 September 2026, 15:12
Mainnet273821025 September 2026, 15:08
Preview107462029 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)