Releases: OffchainLabs/nitro
Release list
Arbitrum Nitro v3.11.3
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.11.3-beb2108
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
If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.11.3-beb2108-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
v3.11.3 - 2026-08-03
Fixed
- Capture panics on prefetch-tx execution and log them instead of returning. [commit]
- Filter retryable submissions by who actually gets funds, and catch filtered L1 senders/depositors that previously slipped through.[commit]
Changed
- Filtered transactions rejected by the sequencer now return the RPC error message "Transaction rejected by chain policy" instead of the generic "internal error". [commit]
- Filtered-tx reports are now logged node-side when reported. Unbounded fields truncated to keep entries compact. [commit]
cmd/filtering-reportforwarder no longer logs the full report body; its forward success/failure logs now include only the report id and tx hash. [commit]- Onchain-filtered transactions now trace (e.g.
debug_traceTransaction) with the error message "Transaction rejected by chain policy", matching the RPC rejection message. [commit]
Arbitrum Nitro v3.11.2
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.11.2-3599aca
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\
If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.11.2-3599aca-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
v3.11.2 - 2026-06-30
Configuration
- Add
--node.dangerous.always-fallback-to-parent-chain-dato support retiring chains off AnyTrust. [commit] - Add
--execution.transaction-filtering.address-filter.s3.preallocate-memory(default true) to preallocate and commit the hash-list memory at startup, engaging only whens3.max-file-size-mbis set. [commit]
Added
- Added consensus-v61 to dockerfile, remove rc and older consensus. [commit]
Changed
- Default
--file-logging.max-backupsincreased from 20 to 40. [commit] - The address filter now decodes the S3 hash list directly into preallocated, reused data structures committed at startup, so reloads perform no large allocation and cannot OOM the node. [commit]
- Lowered the "Delayed message filtered - HALTING delayed sequencer" log from
ErrortoInfo, since halting on a filtered delayed message is expected operation. [commit]
Fixed
- Sequencer fee check now uses the current block's base fee instead of a value cached when block creation started. [commit]
- With file logging enabled, Go runtime panics and fatal errors are now also written to a
<log-file>.crashfile, not only to stderr. [commit] - Emit a balanced top-level call frame for EVM-skipped transactions (onchain-filtered txs, pre-recorded reverts, and retryable-redeem error paths) so tracing no longer fails with "incorrect number of top-level calls". [commit]
- Fix unnecessary delays handling delayed messages when address filtering is enabled. [commit]
- BoLD auto-deposit now detects WETH-compatible stake tokens via an
eth_callprobe ofdeposit()instead of scanning the token's bytecode, so stake tokens deployed behind a proxy are no longer misclassified as non-WETH. [commit]
Arbitrum Nitro v3.11.1
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.11.1-8512b8c
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\
If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.11.1-8512b8c-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
v3.11.1 - 2026-06-29
Fixed
Arbitrum Nitro v3.11.0
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.11.0-a618155
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\
If you're running a validator without a split validation server (this will be true of most validators), you should instead use the image offchainlabs/nitro-node:v3.11.0-a618155-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
v3.11.0 - 2026-06-22
Added
- ArbOS60 supported.
- 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. - Sequencer reports filtered regular transactions to the filtering-report service via FilteringReportRPCClient.
- Unified replay binary (
cmd/unified-replay/) combining MEL message extraction and block production into a single WASM-compilable program. GetEndParentChainBlockHashhost I/O opcode for MEL proving.melwavmiopackage providing WASM imports and native stubs for MEL.- Extended
GlobalStateto 4 bytes32 slots with backward-compatible hashing. - Makefile targets
build-unified-replay-envandbuild-unified-wasm-bin. - 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. - 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
S3SyncManagernow includesfilterSetIDin the successful hash-list load log line so operators can correlate it with theFilterSetIDreported on filtered tx reports.- Replace
sha3/digestkeccak withtiny-keccakacrossproverandcaller-env. --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.- Update README.md with support policy.
- 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.
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.
- 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. - Updated
log.*calls to use slog key/value pairs. - Address filter now records the L1 destination of
ArbSys.withdrawEth/ArbSys.sendTxToL1via a newReasonToL1, closing a gap where L2→L1 withdrawals to a filtered address were not caught. - Fix invalid Prometheus metric names in filtering-report and transaction-filterer components; hyphens in geth metric paths survive the
/→_translation and produce names that violate the Prometheus spec. - Removed legacy validator (was included but not working since wasmer upgrade).
- Removed unnecessary tokens from consensus machine downloads in Dockerfile.
- pin nitro-testnode master branch.
- 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. - Do not combine multi-gas refunds with EVM refunds.
Internal
- stylus-raw-deploycode - a small utility that helps deploy stylus contracts for testing.
- Make
validationcrate no-std friendly. - Remove JIT wrappers for wasi and wavmio.
- Fix inner call and pushcontract address filter recording
cmd/filtering-reportforwarder now emits an info log on successful report forwarding and includes the SQS message body in the existing forward-failure error log.- NIT-5012: fail fast when delayed-sequencing filtering is active but
transaction-filterer-rpc-client.urlis unset, and pin thetransaction-filtererbinary to serve only thetransactionfiltererRPC namespace. - Make
GuestPtrfield private with checked addition (panics on overflow instead of silent wraparound). - Remove JIT wrappers for arbcrypto and arbcompress.
- Address-filter S3 hash list now expects the upstream
latest.jsonschema - 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.
Arbitrum Nitro v3.11.0-rc.3
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.11.0-rc.3-7b9e49b
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\
v3.11.0-rc.3 - 2026-06-08
Changed
- Replace
sha3/digestkeccak withtiny-keccakacrossproverandcaller-env.
Fixed
- Fix invalid Prometheus metric names in filtering-report and transaction-filterer components; hyphens in geth metric paths survive the
/→_translation and produce names that violate the Prometheus spec. - Removed legacy validator (was included but not working since wasmer upgrade).
- Removed unnecessary tokens from consensus machine downloads in Dockerfile.
Internal
- NIT-5012: fail fast when delayed-sequencing filtering is active but
transaction-filterer-rpc-client.urlis unset, and pin thetransaction-filtererbinary to serve only thetransactionfiltererRPC namespace. - Make
GuestPtrfield private with checked addition (panics on overflow instead of silent wraparound). - Remove JIT wrappers for arbcrypto and arbcompress.
Arbitrum Nitro v3.11.0-rc.2
This release is available as a Docker Image on Docker Hub at offchainlabs/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.
Arbitrum Nitro Consensus v61
This release signifies a WASM fraud proof consensus version, and is not a good version to run a node on
WAVM Module Root: 0xc10cd7ec6acaf1c441a3f6bd0900ad20f15855ba775a96f1939118cbc629dc97
This is a consensus release for ArbOS v61
Full Changelog: consensus-v60-rc.5...consensus-v61
Arbitrum Nitro Consensus v61-rc.2
This release signifies a WASM fraud proof consensus version, and is not a good version to run a node on
WAVM Module Root: 0xc10cd7ec6acaf1c441a3f6bd0900ad20f15855ba775a96f1939118cbc629dc97
This is a consensus release for ArbOS v61 RC 2
Full Changelog: OffchainLabs/nitro-private@consensus-v60-rc.5...consensus-v61-rc.2
Arbitrum Nitro v3.10.2
Important Note: Once a database is run with v3.10.x, the database cannot be used with v3.9.9.
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.10.2-db30ef0
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\
Special note: On Monday, May 18, 2026 at 17:00 UTC, ArbOS 60 will activate on the Arbitrum Sepolia chain. Arbitrum Sepolia node operators must upgrade to Nitro v3.10 ahead of this activation to continue syncing the chain. This is not a required upgrade for Arbitrum One at this time, the date for Arbitrum One ArboOS upgrade has not been set yet.
Sepolia validators can use block-validator.pending-upgrade-module root="0x7a9e6a77354888257a9989ce0b6bb39df5fedf222d453932933fdf7a489cbb57" to validate against the planned arbos-60 upgrade
Important for any chains still on ArbOS40:
- Any chain running ArbOS40 can upgrade non-validator nodes to latest version.
- Any chain running ArbOS40, upgrading validators to Nitro v3.10.x needs to update module root to Consensus v60-rc.4 at the same time. Do NOT perform ArbOS upgrade to ArbOS60, only ArbOS5x.
- If a chain is on ArbOS40 and has already upgraded validators to v3.10.x, the module root should be updated to Consensus v60-rc.4 as soon as possible. Do NOT perform ArbOS upgrade to ArbOS60, only ArbOS5x.
v3.10.2 - 2026-06-02
Configuration
- Add
--execution.transaction-filtering.enablemaster switch (defaultfalse), replaces--execution.address-filter.enable.
Fixed
- Improve BoLD assertion poster logs.
- Fixed initialization of redis-validator.
Added
- NIT-4804: address-filter now supports
hashing_scheme: "sha256-rawbytesinput"
Changed
EnableETHCallFilternow scopes toeth_estimateGasonly; no longer gates prechecker filtering.- Skip prechecker transaction-filter dry-run on sequencer nodes.
Internal
- Cache hash keys for MultiGasFees substorage.
Arbitrum Nitro v3.10.1
Important Note: Once a database is run with v3.10.x, the database cannot be used with v3.9.9.
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.10.1-d7f07be
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\
Special note: On Monday, May 18, 2026 at 17:00 UTC, ArbOS 60 will activate on the Arbitrum Sepolia chain. Arbitrum Sepolia node operators must upgrade to Nitro v3.10 ahead of this activation to continue syncing the chain. This is not a required upgrade for Arbitrum One at this time, the date for Arbitrum One ArboOS upgrade has not been set yet.
Sepolia validators can use block-validator.pending-upgrade-module root="0x7a9e6a77354888257a9989ce0b6bb39df5fedf222d453932933fdf7a489cbb57" to validate against the planned arbos-60 upgrade
Important for any chains still on ArbOS40:
- Any chain running ArbOS40 can upgrade non-validator nodes to latest version.
- Any chain running ArbOS40, upgrading validators to Nitro v3.10.x needs to update module root to Consensus v60-rc.4 at the same time. Do NOT perform ArbOS upgrade
- If a chain is on ArbOS40 and has already upgraded validators to v3.10.x, the module root should be updated to Consensus v60-rc.4 as soon as possible. Do NOT perform ArbOS upgrade
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.10.1 - 2026-05-12
Configuration
- Add
--execution.legacy-zero-base-fee-until <unix-ts>opt-in compatibility flag (default 0 = disabled). When set, restores the pre-v3.7 behavior of treating headers withArbOSFormatVersion <= 40andBaseFee == 0as non-arbitrum, for blocks with timestamp strictly less than the given value.
Added
- Include transaction-filterer binary in nitro-node and nitro-node-stripped Docker images.
Changed
- Set default
EnableETHCallFilterto false. - Update address-filter S3 hash list format
- Ensure genesis block is appropriately validated
Fixed
- Resolve BoLD Staking Bug That Attempts Self-Challenge