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.8.0-rc.3-TBD
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.8.0-rc.3-TBD-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
Special Note 1
Nitro 3.7.0 pulled in go-ethereum 1.15.6 which changed log index from bloombits to filtermap. This means that database previously running pre-Nitro 3.7.0 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.tx-indexer.enable=false
can be used to completely disable log indexing.
Special Note 2
Nitro 3.7.0 pulled 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 consistent 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. At some point, a future release of Nitro is expected to fix the issue of log index pruning being able to block log queries.
User facing changes
- Important! If you have previously used the
ArbOwner.setMaxTxGasLimit
to set the max transaction and block gas limits for your chain, you should add calls toArbOwner.setMaxTxGasLimit
andArbOwner.SetMaxBlockGasLimit
to your upgrade action to arbos 50. (When it's time.) - After the arbos 50 upgrade, there is a new
ArbOwner.setParentGasFloorPerToken
which can be used to set the parent chain's blob base fee per token (4 bytes) of calldata. This is for allowing the state transition function to adjust for the parent chain having enabled EIP-7623: Increase calldata cost
Highlights
- Nitro is ready for Fusaka
- Arbitrum One node operators need to upgrade to v3.8.0 before mainnet upgrades to Fusaka
- Arbitrum One and Arbitrum Nova will both upgrade to ArbOS 50 as described in the AIP
- Makes Nitro configurable to handle the parent chain implementing EIP-7623
What's Changed
- Add extra logs to debug missing onchain controller in #3561
- chore: Add require-exhaustive-init linter to structs (1/n) in #3575
- fix: Correctly count struct fields in the structinit linter in #3579
- Fix PublishedMachine tests to handle cases when latest release is behind latest ArbOS in #3581
- Multigas: Instrument GasChargingHook with multi-gas in #3576
- Run execution-spec-tests in nightly CI in #3577
- Fix: Return proper error on non-200 in RestfulDasClient.ExpirationPolicy in #3585
- Move output dir setup to constructor; make Start launch-only in #3578
- Small fixes related to DA in #3591
- fix: Make structinit linter work cross packages in #3586
- Test Genesis assertion on nitro init in #3570
- Update Rust to 1.88.0 in #3553
- CustomDA core Arbitrator & WASM infra in #3548
- Remove redundant Background context initialization in poster_test in #3595
- Include msg.SetCodeAuthorizations field when constructing arbitrum.TransactionArgs in #3598
- Fail instead of panic when building second node if first node was not built with L1 in #3601
- Turn bold into a sub-package of nitro in #3599
- Unify DAS interfaces in #3593
- Add to chain_info: feed-signed in #3583
- Update the implementation of EIP-7825 in #3589
- Fix l1 pricing state field order in #3602
- Multigas: Add multi gas to transaction receipt and remove collector in #3594
- bugfix: genesis validation without l1 reader in #3607
- Extract streaming protocol (sender) in #3603
- Named initializer linter in #3604
- Linters cleanup in #3609
- Hide multi-gas behind feature flag in #3613
- Fix race in DAS chunk assembly by adding per-batch locking in #3588
- Arbos50 block gaslimit in #3606
- bold/e2e: fix Anvil startup race causing RPC hangs in end-to-end tests in #3612
- Ignore the go.work and go.work.sum files in #3620
- Recursively fetch submodules in CI in #3621
- Hotfix: remove hardcoded value in TestMultigasStylus_GetBytes32 in #3614
- Fix ProduceBlockAdvanced handling of txs that don't need sequencing hooks in #3627
- Extract streaming protocol (receiver) in #3625
- [config] Handle node.staker.strategy and node.bold.strategy appropriately in #3582
- Gas floor in #3618
- Multigas: Fix api.go to use new
evm.Create
signature in #3630 - Add suppoort for Consensus V50 (rc.4) to Docker in #3638
Full Changelog: v3.8.0-rc.2...v3.8.0-rc.3