Releases: OffchainLabs/nitro
Arbitrum Nitro v3.7.0
This release has several bug fixes and improvements, but it is not a required upgrade.
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.7.0-6d34456
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.7.0-6d34456-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
Very Special Note
Nitro 3.7.0 has a performance regression that increases CPU usage, which is especially noticable for eth_calls. Version 3.7.1 will be released soon to fix the performance regression
Special Note 1
Nitro 3.7.0 pulls in go-ethereum 1.15.6 which changed log index from bloombits to filtermap. This means that on startup there will be elevated CPU usage for 50+ hours while new FilterMaps are generated for log indexing. If log queries are not used, the parameter --execution.rpc.log-no-history can be used to completely disable log indexing.
Special Note 2
Nitro 3.7.0 pulls in go-ethereum 1.15.11 which includes a brand new log indexing system called filtermaps that has resulted in an increase in log indexing latency due to Nitro’s current reliance on HashDB (instead of PathDB). In some cases, this can delay log queries from being served anywhere between 5 seconds to 2 minutes on Arbitrum One during long tail unindexing. We’ve observed that this happens roughly once per day based on Arbitrum One mainnet traffic levels.
Teams who need to serve log queries with consisten latency (e.g. eth_getLogs, eth_getFilterLogs, eth_getFilterChanges) can use the configuration parameter --execution.rpc.log-history=0 to keep all log history, which will only slightly increase database growth. Teams running their own log indexer may be unaffected.
Future releases of Nitro are expected to fix the issue of log index pruning being able to block log queries.
What's Changed
Update go-ethereum to 1.15.11, fixed issue where a getLogs query was requesting too many blocks at once which can cause issues when using some node providers, and various internal improvements.
Configuration Changes
- The parameters
--node.maintenance.time-of-dayand--node.maintenance.triggerablehave been removed - New parameters
--node.maintenance.check-intervaland--node.maintenance.enableare now used to control when database maintenance is performed. This functionality is still being investigated, so no recommendations for use are available at this time - The parameters
--execution.rpc.bloom-bits-blocksand--execution.rpc.bloom-confirmshave been removed - The parameter
--execution.tx-lookup-limithas been replaced with--execution.tx-indexer.tx-lookup-limit
User-facing improvements
- Split single large getLogs query into multiple smaller queries: #3397
- Merge v1.15.6 v1.15.7 v1.15.8 v1.15.9 v1.15.10 v1.15.11: #3225
- Notify clients when nonce-failure transactions expire (#3408): #3463
Internal highlights
- Run Docker Build on All PRs: #3335
- Fix autoclaim defaults for auctioneer: #3333
- Also run our nightly-ci jobs on arbitrator-ci machines: #3337
- Add the missing prefix in dasserver config: #3339
- [MEL] - Implement a Pure, Batch Lookup Function Using Only a Parent Chain Block: #3280
- Use Tsahi's Parallelization in System Test Builder: #3167
- Add metrics for staker balance in BoLD: #3288
- Use standard max supported arbos version check in execution engine: #3338
- Print transaction info in hex format for fast confirm logs: #3345
- [MEL] - Fetch All Txs for Block Using Preimage Reads: #3309
- Use an Empty DataDir for L1 in System Tests to Force In-Memory DB Usage: #3350
- Fix GetLiveliness impl in redis coordinator: #3351
- Return 0 in CalcBlobFee for arbitrum chains since arbitrum does not have blobs: #3343
- [MEL] - Implement a Receipt Trie Reader for the MEL Replay Binary Using Preimages: #3308
- In ParseStateScheme make sure to set genesis block number properly based on arb/eth chain: #3353
- Update nitro-testnode pin: #3341
- [MEL] - Add Batch Serialization Without Needing Ethclient: #3282
- transaction_streamer: fix sync-till-block: #3346
- Gas Dimension Trace Tests: Nested Call Tests: #3354
- Use gotestsum.sh in Makefile: #3358
- use MessageRunContext struct: #2779
- Add 30 more minutes to the nightly ci timeout: #3361
- Add support for consensus v42-rc.1 to Docker: #3364
- Fix race failures in nightly CI: #3365
- Express Lane Proxy tool for testing purposes: #3108
- Update bold pin so contracts and bold/contracts match: #3368
- Fix for changed-files action: #3371
- bump c-kzg: #3330
- [MEL] - Add a Pure Function to Extract Messages From a Sequencer Message: #3283
- [MEL] - The Message Extraction Function: #3359
- Add a type for modeling a Resource Constraint: #3374
- Fix: handle Redis error in sequencer release: #3357
- Remove four unreachable constants and variables: #3375
- Switch to pull_request_target for the trigger events: #3380
- Add extra validation to bids by making sure eth_call for auction resolution succeeds: #3369
- Update the ApproxExpBasisPoints method: #3281
- Fix system_tests failing race in nightly CI: #3366
- Error initializing staker if fast confirmation is enabled at genesis: #3363
- Disable logging in maxprocs: #3356
- feat: precompilesgen from contracts-local: #3386
- [MEL] - Add a Delayed Message Reader in the MEL Replay Binary: #3381
- recompile wasm for missing targets: #3314
- Fix expected surplus metric: #3360
- [config change] Add transaction indexer configs: #3385
- [MEL] - Database implementation: #3387
- Create ADR-0002 Multi-dimensional gas metering: #3401
- Update go-ethereum pin: #3402
- Bump golang.org/x/oauth2 from 0.22.0 to 0.27.0: #3398
- Fix brotli build script: correct softfloat check and target directory handling: #3391
- Fix TestSequencerInboxReader failing race detection in nightly CI: #3395
- Replace Timer metrics with BoundedHistogram for proper expiry behavior: #3393
- Only increment batchPosterFailureCounter metric in cases of non-ephemeral errors: #3399
- Add support for consensus v50-alpha.1 to Docker: #3404
- [Config Change] Consensus asks Execution if maintenance should be triggered: #3253
- Upgrade go to 1.24.5: #3406
- Use latest version of fastcache: #3405
- Update submodule pin check for safe-smart-account: #3417
- Use node.js 24.4.1: #3412
- add msgIdx to error print when blockhash mismatch: #3418
- Add a new binary to generate genesis hash based on provided genesis.json: #3394
- Fix
make .make/fmtby upgrading golangci-lint from v1 to v2 command line arguments: #3424 - Updates nvmrc to node v24: #3420
- Update nitro-testnode pin to latest: #3415
- Fix go formatting: #3427
- small fix in arbitrator profiling tool: #304...
Arbitrum Nitro v3.7.0-rc.8
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.7.0-rc.8-6d34456
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.7.0-rc.8-6d34456-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
Special Note
Nitro 3.7.0 uses go-ethereum 1.15.11 and includes a brand new log indexing system called filtermaps that has resulted in an increase in log indexing latency due to Nitro’s current reliance on HashDB (instead of PathDB). In some cases, this can delay log queries from being served anywhere between 5 seconds to 2 minutes on Arbitrum One during long tail unindexing. We’ve observed that this happens roughly once per day based on Arbitrum One mainnet traffic levels.
Teams who need to serve log queries with consisten latency (e.g. eth_getLogs, eth_getFilterLogs, eth_getFilterChanges) can use the configuration parameter --execution.rpc.log-history=0 to keep all log history, which will only slightly increase database growth. Teams running their own log indexer may be unaffected.
Future releases of Nitro are expected to fix the issue of log indexing being able to block log queries.
What's Changed
Various internal bugfixes
Internal highlights
- Fix ArbNativeTokenManager precompile inclusion: #3497
- add configurable jit executable path via CLI flag: #3495
- github actions: use foundry v1.0.0: #3499
- block validator benchmark to use Options-based signature: #3502
- Improve description of trivial contributions: #3504
- stylus wasmer version: don't upgrade if unnecessary: #3508
- Stylus cranelift: #3480
- Update fastcache: #3503
- BoLD GlobalState not in chain should be a fatal error:: #3449
- Basic seq-coordinator config validation: #3489
- Close part files after the copy is done: #3512
- resolve race condition in storage test goroutines: #3509
- Fix relay backlog corruption at segment boundaries: #3516
- Revert "Disable HTTP/2 for das aggregator by default": #3517
- Return a fatal error instead of stopping the StopWaiter in case of Er…: #3520
Full Changelog: v3.7.0-rc.7...v3.7.0-rc.8
consensus-v41
This release signifies a WASM fraud proof consensus version, and is not a good version to run a node on
WAVM Module Root: 0xa18d6266cef250802c3cb2bfefe947ea1aa9a32dd30a8d1dfc4568a8714d3a7a
This consensus release supports ArbOS 41.
Warning
This release should only be run by chain operators which want to support native token management (a.k.a. Mint and Burn.) If you are not 100% sure you need this feature, please do not run with this version of ArbOS on your chain.
Full Changelog: consensus-v40...consensus-v41
Arbitrum Nitro v3.7.0-rc.7
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.7.0-rc.7-efa52d5
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.7.0-rc.7-efa52d5-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
** Note
Nitro 3.6.8 to 3.7.0 upgrades its internal go-ethereum version from v1.15.5 to v1.15.11, which includes a totally new log indexing system (filtermaps). Nitro still uses hashdb instead of pathdb and this makes the new log indexing operations expensive. Log indexing operations can sometimes block log queries, we have observed anywhere from 5s to 2m on Arbitrum One during log tail unindexing, which happens about once a day with arb1 traffic levels. Don't use 3.7.0 if your application or users will be broken by these delays.
What's changed
Fix timeboost regression caused by go-ethereum log indexing switch to filtermaps
User-facing improvements
- Fix gas accounting for eth_call: #3431
- Blob prices should not be used if parent chain doesn't return blob price: #3450
- Notify clients when nonce-failure transactions expire: #3463
Internal highlights
- Expanding support for multi-dimensional gas: #3429
- improve error message accuracy in CorrespondingL1BlockNumber: #3422
- Use new golangci-lint fmt and fix solidity formatter: #3432
- Update actions/setup-node to v4 : #3433
- don't run the nitro CodeQL build in parallel: #3434
- Increase EVM Call timeout to avoid flaky CI: #3435
- Bring in missing BoLD PRs: #3430, #3443
- Upgrade the GitHub Actions: #3442
- optimize regex compilation in Uncolor function: #3462
- Tx sequencing using hooks: #3454
- Workaround stuck timeboost auction logs via contract call: #3472
Full Changelog: v3.7.0-rc.6...v3.7.0-rc.7
Arbitrum Nitro v3.7.0-rc.6
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.7.0-rc.6-db7a785
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.7.0-rc.6-db7a785-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
What's Changed
Various internal improvements
Internal Highlights
Full Changelog: v3.7.0-rc.5...v3.7.0-rc.6
Arbitrun Nitro v3.7.0-rc.5
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.7.0-rc.5-78441d7
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.7.0-rc.5-78441d7-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
What's Changed
Various Internal improvements
Internal Highlights
- Fix
make .make/fmtby upgrading golangci-lint from v1 to v2 command line arguments: #3424 - Revert "Add a go workspace file": #3425
- Updates nvmrc to node v24: #3420
- Update nitro-testnode pin to latest: #3415
Full Changelog: v3.7.0-rc.4...v3.7.0-rc.5
Arbitrum Nitro v3.7.0-rc.4
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.7.0-rc.4-16a1aef
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.7.0-rc.4-16a1aef-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
What's changed
Fixed issue where getLogs query was requesting too many blocks at once which can cause issues for some node providers.
User-facing Improvements
- Fix issue with getLogs requesting too many blocks at once: #3397
Internal Highlights
- Update submodule pin check for safe-smart-account: #3417
- Use node.js 24.4.1: #3412
- add msgIdx to error print when blockhash mismatch: #3418
- Add a new binary to generate genesis hash based on provided genesis.json: #3394
- Add a go workspace file: #3419
Full Changelog: v3.7.0-rc.3...v3.7.0-rc.4
Arbitrum Nitro v3.7.0-rc.3
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.7.0-rc.3-21117c6
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.7.0-rc.3-21117c6-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
Note: This release candidate is exclusively to check if we have gained memory improvements by upgrading fastcache.
Internal Highlights
Full Changelog: v3.7.0-rc.2...v3.7.0-rc.3
Arbitrum Nitro v3.7.0-rc.2
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.7.0-rc.2-9bac2d5
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.7.0-rc.2-9bac2d5-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
What's Changed
Configuration Changes
- The parameters
--node.maintenance.time-of-dayand--node.maintenance.triggerablehave been removed - New parameters
--node.maintenance.check-intervaland--node.maintenance.enableare now used to control when database maintenance is performed. This functionality is still being investigated, so no recommendations for use are available at this time
User-facing improvements
Internal Highlights
- Consensus asks Execution if maintenance should be triggered in #3253
- [MEL] - Add a Pure Function to Extract Messages From a Sequencer Message in #3283
- [MEL] - The Message Extraction Function in #3359
- [MEL] - Add a Delayed Message Reader in the MEL Replay Binary in #3381
- [MEL] - Database implementation in #3387
- Replace Timer metrics with BoundedHistogram for proper expiry behavior in #3393
- Fix race failures in nightly CI in #3365
- Express Lane Proxy tool for testing purposes in #3108
- Update bold pin so contracts and bold/contracts match in #3368
- Fix for changed-files action in #3371
- bump c-kzg in #3330
- Updates actions/cache from v3 to v4 in #3362
- Add a type for modeling a Resource Constraint in #3374
- Fix: handle Redis error in sequencer release in #3357
- Update actions/setup-go from v4 to v5 in #3373
- Remove four unreachable constants and variables in #3375
- Add a close-trivial-prs workflow in #3377
- Address 3 minor issues in the close-trivial-prs workflow in #3378
- Swtich to pull_request_target for the trigger events in #3380
- Add extra validation to bids by making sure eth_call for auction resolution succeeds in #3369
- Update the ApproxExpBasisPoints method in #3281
- Fix system_tests failing race in nightly CI in #3366
- Error initializing staker if fast confirmation is enabled at genesis in #3363
- Disable logging in maxprocs in #3356
- feat: precompilesgen from contracts-local in #3386
- recompile wasm for missing targets in #3314
- Fix expected surplus metric in #3360
- Add transaction indexer configs in #3385
- Create ADR-0002 Multi-dimensional gas metering in #3401
- Update go-ethereum pin in #3402
- Bump golang.org/x/oauth2 from 0.22.0 to 0.27.0 in #3398
- Fix brotli build script: correct softfloat check and target directory handling in #3391
- Fix TestSequencerInboxReader failing race detection in nightly CI in #3395
- Only increment batchPosterFailureCounter metric in cases of non-ephemeral errors in #3399
- Add support for consensus v50-alpha.1 to Docker in #3404
Full Changelog: v3.7.0-rc.1...v3.7.0-rc.2
Consensus V50 Alpha 1
This release signifies a WASM fraud proof consensus version, and is not a good version to run a node on
WAVM Module Root: 0x28cfd8d81613ce4ebe750e77bfd95d6d95d4f53240488095a11c1ad3a494fa82
This is an early alpha build of a consensus release for ArbOS 50
Full Changelog: consensus-v41...consensus-v50-alpha.1