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 validateconsensus_v51.1.
v3.11.0-rc.2 - 2026-06-05
Configuration
- Add
--execution.legacy-zero-base-fee-untilrestores the pre-v3.7 behavior of treating headers withArbOSFormatVersion <= 40andBaseFee == 0for affected chains. - Add
--execution.transaction-filtering.enablereplaces--execution.address-filter.enable. --node.transaction-streamer.shutdown-on-blockhash-mismatchnow defaults totrue: 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
GlobalStateto 4 bytes32 slots with backward-compatible hashing. - Makefile targets
build-unified-replay-envandbuild-unified-wasm-bin. - Add
scripts/rust-val-entry.shDocker entrypoint script that launches a single Rust validation server alongside the nitro node. - Add
nitro-node-rust-validatorDocker 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.
ExecuteNextMsgnow throttlesaccumulator not founderrors via an ephemeral error handler. - Iterator leak in
deleteWasmEntries: defer is now late-bound so the post-flush iterator is released. - Allow retrying
--init.urlafter a prior init created thewasm/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 toWasmComputationsoreceipt.MultiGasUsed.SingleGas()matchesreceipt.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.jsonschema - Sequencer reports filtered regular transactions to the filtering-report service via FilteringReportRPCClient.
- Address-filter
HashStorenow supportshashing_scheme: "sha256-rawbytesinput" - Optional
--execution.transaction-filtering.address-filter.s3.max-file-size-mbflag - 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.jsontest fixtures. - Refactor filtering report test infrastructure: rename
CheckReportBlockNumberAndParentBlockHashtoCheckCommonReportFieldswith additional common assertions and updateSetupFilteringReportto return the RPC stack. - Remove
-A static_mut_refsfromclippyinvocation 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.
EnableETHCallFilternow scopes toeth_estimateGasonly; no longer gates prechecker filtering.- Set default
EnableETHCallFilterto false. - Skip prechecker transaction-filter dry-run on sequencer nodes.
- Sign outbound webhook payloads from
cmd/filtering-reportwith an Ed25519 leaf certificate issued by an internal CA, so receivers verify the signature against the CA root and rotate keys transparently. GetEndParentChainBlockHashhost I/O opcode for MEL proving.melwavmiopackage providing WASM imports and native stubs for MEL.- Sequencer no longer rejects clean transactions following a filtered one in the same block.
PreTxFilternow operates on a fresh per-txaddressCheckerStateinstead of inheriting the previous tx's filter state.