github OffchainLabs/nitro v3.11.0-rc.2
Arbitrum Nitro v3.11.0-rc.2

latest release: consensus-v61-rc.2
pre-release9 hours ago

This release is available as a Docker Image on Docker Hub at offchain-labs/nitro-node:v3.11.0-rc.2-b4e3c3e
This Docker image specifies default flags in its entrypoint which should be replicated if you're overriding the entrypoint: /usr/local/bin/nitro --validation.wasm.allowed-wasm-module-roots /home/user/nitro-legacy/machines,/home/user/target/machines\

Important for any chains that previously upgraded to ArbOS51 with consensus_v51:

  • Validator should use configuration option --node.block-validator.pending-upgrade-module-root="" to avoid performing unnecessary work trying to validate consensus_v51.1.

v3.11.0-rc.2 - 2026-06-05

Configuration

  • Add --execution.legacy-zero-base-fee-until restores the pre-v3.7 behavior of treating headers with ArbOSFormatVersion <= 40 and BaseFee == 0 for affected chains.
  • Add --execution.transaction-filtering.enable replaces --execution.address-filter.enable.
  • --node.transaction-streamer.shutdown-on-blockhash-mismatch now defaults to true: on a feed-vs-local block hash mismatch the node refuses to persist or rebroadcast the result and shuts down gracefully.

Added

  • ArbOS60 supported.
  • Unified replay binary (cmd/unified-replay/) combining MEL message extraction and block production into a single WASM-compilable program.
  • Extended GlobalState to 4 bytes32 slots with backward-compatible hashing.
  • Makefile targets build-unified-replay-env and build-unified-wasm-bin.
  • Add scripts/rust-val-entry.sh Docker entrypoint script that launches a single Rust validation server alongside the nitro node.
  • Add nitro-node-rust-validator Docker target.
  • Support for ArbOS 61.
  • Add per-worker slowdown on consecutive retryable HTTP errors from the external endpoint to avoid hammering a degraded service and consuming max receive count quota unnecessarily.
  • Download the consensus-v61-rc.1 replay machine in the Docker build.

Changed

  • Update CONTRIBUTING.md with the new development process.
  • Reduced GC frequency for in replay binary (for wasm targets).
  • Use Option for interface vars that can be empty.
  • Update README.md with support policy.

Fixed

  • Skip extra header columns in iostat parsing.
  • Improve locking mechanism in backlogSizeInBytes().
  • Reduce log spam during node sync. ExecuteNextMsg now throttles accumulator not found errors via an ephemeral error handler.
  • Iterator leak in deleteWasmEntries: defer is now late-bound so the post-flush iterator is released.
  • Allow retrying --init.url after a prior init created the wasm/ subdirectory but did not complete chain initialization.
  • Fixed initialization of redis-validator.
  • Re-run genesis assertion validation on startup while the chain head is still at genesis, so a previously failed validation is not silently skipped on subsequent restarts.
  • Canonicalize NaN values returned by soft-float library functions so WAVM and JIT produce identical results when floating-point operations yield NaN.
  • fix docker build to work in both nitro-private and public nitro.
  • Fixed honest-validator self-challenge bug in BoLD where a slow catchup goroutine could downgrade latestAgreedAssertion
  • ArbOS 61: skip multi-gas refund when no constraints are configured.
  • ArbOS 61: use block basefee for the SingleDim refund override.
  • ArbOS 61: account for EVM SSTORE refunds in the multi-gas refund.
  • Stylus pre-VM OOG: when contract.BurnGas(callCost) drains the call frame before WASM runs, attribute the residual to WasmComputation so receipt.MultiGasUsed.SingleGas() matches receipt.GasUsed.
  • pin nitro-testnode master branch.
  • Do not combine multi-gas refunds with EVM refunds.

Internal

  • Address-filter S3 hash list now expects the upstream latest.json schema
  • Sequencer reports filtered regular transactions to the filtering-report service via FilteringReportRPCClient.
  • Address-filter HashStore now supports hashing_scheme: "sha256-rawbytesinput"
  • Optional --execution.transaction-filtering.address-filter.s3.max-file-size-mb flag
  • The transaction prechecker now reports address-filtered transactions to the filtering-report service.
  • Send non-retryable HTTP errors to an optional poison queue for manual inspection or reprocessing.
  • Include transaction-filterer binary in nitro-node and nitro-node-stripped Docker images.
  • Report filtered delayed transactions to filtering-report service with structured FilteredTxReport.
  • Add script to generate large filtered-addresses-hashed-list.json test fixtures.
  • Refactor filtering report test infrastructure: rename CheckReportBlockNumberAndParentBlockHash to CheckCommonReportFields with additional common assertions and update SetupFilteringReport to return the RPC stack.
  • Remove -A static_mut_refs from clippy invocation in CI (we do not use mutable statics anymore).
  • Add forge version validation to scripts/check-build.sh.
  • Cache hash keys for MultiGasFees substorage.
  • Add FilterSetID field to FilteredAddressRecord and expose it through the AddressChecker and StateDB interfaces so callers can stamp each record with the active filter set id.
  • EnableETHCallFilter now scopes to eth_estimateGas only; no longer gates prechecker filtering.
  • Set default EnableETHCallFilter to false.
  • Skip prechecker transaction-filter dry-run on sequencer nodes.
  • Sign outbound webhook payloads from cmd/filtering-report with an Ed25519 leaf certificate issued by an internal CA, so receivers verify the signature against the CA root and rotate keys transparently.
  • GetEndParentChainBlockHash host I/O opcode for MEL proving.
  • melwavmio package providing WASM imports and native stubs for MEL.
  • Sequencer no longer rejects clean transactions following a filtered one in the same block. PreTxFilter now operates on a fresh per-tx addressCheckerState instead of inheriting the previous tx's filter state.

Don't miss a new nitro release

NewReleases is sending notifications on new releases.