This release has many bug fixes and improvements. This is not a mandatory upgrade, but any nodes running v3.8.0-rc.* versions are highly encouraged to upgrade.
This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.8.0-62c0aa7
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-62c0aa7-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.
Special Note about ArbOS 50 Support
Release v3.8.0 is unrelated to ArbOS50. A future version of Nitro that supports ArbOS50 will eventually be mandatory if the DAO votes to adopt ArbOS50, but this will be addressed later.
Special Note For Database Schema
- Nitro 3.8.0 changes the database schema, so once a database has been run with 3.8.0, the database can no longer be opened with Nitro 3.7.x.
Schema Change
- ArbOS database schema version is updated to version 2. This is a one-way upgrade and nodes may not be downgraded to a pre-v3.8.0 release without restoring their database from a backup.
Configuration Changes
nitro
--node.batch-poster.data-poster.post-4844-blobshas been removed, now detected automatically--node.bold.strategyhas been removed, should use--node.staker.strategyinstead--node.data-availability.rpc-aggregator.enable-chunked-storehas been removed--node.data-availability.rpc-aggregator.max-store-chunk-body-sizehas been removed--node.staker.data-poster.blob-tx-replacement-timeshas been removed--node.staker.data-poster.max-blob-tx-tip-cap-gweihas been removed--node.staker.data-poster.min-blob-tx-tip-cap-gweihas been removed--node.staker.data-poster.post-4844-blobshas been removed, now detected automatically
datool
--urlchanged to--server-url
User-Facing Changs
- Allow same prevTimestamp in eth_simulateV1: #3535
- Add GetNativeTokenManagementFrom precompile to ArbOwnerPublic: #3534
- Fix EIP 2537 in nitro enable it as part of arbos 50 dia: #3492
- Implement EIP-7825: #3545
- Update EIP-7910 implementation: #3571
- Handle --node.staker.strategy and --node.bold.strategy appropriately: #3582
- Remove deprecated AnyTrust db storage service: #3701
Internal Highlights
- fix(backend): fix error handling and add comprehensive tests: #3510
- Optimize sender address derivation: #3518
- Don't log error if unable to return expired nonce cache failure: #3486
- Add multi-dimensional gas collector: #3453
- Refactor move multigascollector to arbos: #3524
- Add debug flag to enable deep copy of backlog msgs: #3519
- Merge geth v1.16.0: #3523
- Use the parent chain for BlobFeePerByte instead of an RPC call: #3531
- fix acquiring redis lock in batch poster: #3511
- Merge geth v1.16.1: #3528
- Account multi-gas in StartTxHook: #3533
- Return False When Checking if Deposit Tx Type Has Poster Costs: #3536
- Merge geth v1.16.2: #3537
- Improve CPU performance when processing blocks: #3541
- fix that arbos didnt get updated for l1 calldata price: #3470
- Support passing multi gas by value: #3543
- Skip block size cap for arbitrum chains: #3544
- Record only specific targets needed for stylus: #3416
- Remove rust nightly dependency: #3546
- Enable arbos 50: #3547
- Treat precompile code as empty during delegation after arbos 50: #3549
- Enable ArbOS 50 in system tests: #3550
- Add consensus v41 to Dockerfile: #3555
- prover: remove unnecessary wasm exports: #3554
- Move the MaxTxGas limit enforcement: #3557
- Add support for consensus v50 to Docker: #3551
- Store single-gas in multi-gas collector: #3552
- fix: correct error aggregation for multi-target compile results: #3532
- fix: prevent HTTP response body leaks in restful DAS client: #3558
- Instrument multi-gas in StylusPrograms (just for getBytes32): #3539
- fix: correct rightshift linter documentation: #3562
- Update gammazero dependency: #3565
- Update go version to 1.24.x across github workflows: #3567
- Merge geth v1.16.3: #3568
- Multigas: support geth multigas api changes: #3569
- Add suppoort for Consensus V50 (rc.3) to Docker: #3574
- fix: Correctly count struct fields in the structinit linter: #3579
- Fix PublishedMachine tests to handle cases when latest release is behind latest ArbOS: #3581
- Multigas: Instrument GasChargingHook with multi-gas: #3576
- Run execution-spec-tests in nightly CI: #3577
- Fix: Return proper error on non-200 in RestfulDasClient.ExpirationPolicy: #3585
- Move output dir setup to constructor; make Start launch-only: #3578
- Small fixes related to DA: #3591
- fix: Make structinit linter work cross packages: #3586
- Test Genesis assertion on nitro init: #3570
- Update Rust to 1.88.0: #3553
- CustomDA core Arbitrator & WASM infra: #3548
- Remove redundant Background context initialization in poster_test: #3595
- Include msg.SetCodeAuthorizations field when constructing arbitrum.TransactionArgs: #3598
- Fail instead of panic when building second node if first node was not built with L1: #3601
- Turn bold into a sub-package of nitro: #3599
- Unify DAS interfaces: #3593
- Add to chain_info: feed-signed: #3583
- Update the implementation of EIP-7825: #3589
- Fix l1 pricing state field order: #3602
- Multigas: Add multi gas to transaction receipt and remove collector: #3594
- bugfix: genesis validation without l1 reader: #3607
- Extract streaming protocol (sender): #3603
- Hide multi-gas behind feature flag: #3613
- Fix race in DAS chunk assembly by adding per-batch locking: #3588
- Arbos50 block gaslimit: #3606
- bold/e2e: fix Anvil startup race causing RPC hangs in end-to-end tests: #3612
- Fix ProduceBlockAdvanced handling of txs that don't need sequencing hooks: #3627
- Extract streaming protocol (receiver): #3625
- Gas floor: #3618
- Multigas: Fix api.go to use new
evm.Createsignature: #3630 - Add suppoort for Consensus V50 (rc.4) to Docker: #3638
- Make sure to retry fast confirmation on failure: #3640
- fix: recreate-missing-state-from panic: #3464
- Add FloorGasAdditionalTokens to floor-gas computation: #3642
- Fix redefining of staker related metrics: #3592
- Multigas: Fix api.go to use new callcode/delegatecall/staticcall signatures: #3635
- Instrument multi-gas in account HostIOs: #3645
- fix: use RLock instead of Lock in CollectMachineHashes for concurrent…: #3632
- fix: extract SerializedChainConfig from json directly: #3636
- Remove unnecessary alias imports: #3637
- Fix goroutine loop variable capture in sequencer shutdown forwarding: #3623
- fix: Docker and tool version checks for accurate reporting: #3643
- Account for multi-gas in transaction intrinsic gas: #3639
- batch_posting report: fix addition of batchExtraGas: #3654
- Fix some tests: #3657
- stylus target: infer support of previous sse versions from more advanced ones: #3649
- test(programs): wire cranelift flag through compileNative in testcompile: #3634
- Reduce error message to trace: #3660
- arbos: Instrument multi-gas in emitLog HostIO: #3646
- Fix data race in LocalFileStorageService pruning goroutine: #3659
- fix(fuzz): validate --fuzzcache-path against fuzzcachepath, not binpath: #3656
- Fix DAS server http.Server.Addr and add graceful shutdown timeout: #3673
- Data stream improvements: #3661
- Revert change to the server address: #3677
- arbos: Instrument multi-gas in create HostIO: #3672
- fix: correct safe-wait delta calculation in edge tracker and transact: #3633
- arbos: Instrument multi-gas in doCall HostIO: #3663
- Fix underflow inside the gas charging hook: #3688
- fix sendroot generation for genesis generator: #3686
- enable ReadHeaderTimeout config and add tests: #3683
- Remove the quadrupling of MaxPerBlockGasLimit: #3692
- fix: expected hash in parent-chain linkage error: #3628
- Detailed batch post report: #3696
- Move funding common accounts to genesis block for L1: #3682
- Revert #3700: #3711
- arbos: Fixup log messages in attributeWasmComputation: #3709
- remove no-op OS-specific prerequisites block in check-build.sh: #3675
- fix: missing reassignment of rivals when recording creation times in block snapshot: #3619
- fix(events): use stable subscription ids and remove by id: #3563
- System tests should use BOLD contracts by default: #3690
- Fix timer leaks in transaction streamer retry logic: #3717
- arbos: Instrument multi-gas in setTrieSlots HostIO: #3713
- fix: correct error message formatting in blockchain and genesis generator: #3722
- Interpolate the RUN_URL in Slack notification: #3723
- fix: use Counter for nonceFailureCache overflow metric: #3648
- Close HTTP response body to prevent connection leaks in REST URL list fetcher: #3715
- Fix secondary beacon URL parsing in BlobClient: #3721
- fix(solimpl): correct UpperChild zero-check to use UpperChildId: #3703
- Add multi-dimensional gas metrics: #3726
- Instrument multi-gas in precompiles: #3729
- Refactor caller context creationi and remove redundant argument: #3733
- Merge v1.16.4: #3734
- timeboost: replace time.After in loop with cancellable timer to prevent leaks: #3728
- feat(nitro-val): implement ValidationNodeConfig.Validate with logging and persistent checks: #3735
- remove: delete unused HashPlusInt function from arbos/util: #3730
- Add support for consensus-v50-rc.5 to Dockerfile: #3744
- Remove Double Account Creation in BoLD Challenge Tests: #3746
- Add DA proof support to daprovider interface: #3600
- Refactor consensus-execution sync to push sync data: #3538
- update arbdb schema version to 2: #3759
- Extend CodeCov operations in CI: #3749
- rpcclient: respect context cancellation during reconnect wait: #3751
- Support multi-dimensional resource constraints: #3755
- fix: Close response body on non-200 Beacon REST responses to prevent connection leaks: #3756
- DataPoster: Verify external-signer transaction is signed by the expected address: #3731
- Hardening: fix CloseExec race, secure chunk-size tests, enforce gci: #3747
- fix: IP address string conversion in connection limiter: #3762
- DataStreaming: Fix last-chunk size validation when totalSize is a multiple of chunkSize: #3732
- feature(das): make trie iterators robust to stray files: #3739
- Import data streaming changes: #3770
- Fix falkiness in TestTimeboostBulkBlockMetadataAPI: #3781
- Remove pre sylus validation: #3785
- tests: Assert multi gas in system tests: #3752
- Consolidate
gotestsumto run all packages at once for CI performance gains: #3743 - Add flag to enable cell proofs for fusaka: #3788
- Fix stylus multi-gas test: #3795
- Fix precision on the calculation of the backlog cost and the l1 gas p…: #3777
- Change MaxArbosVersionSupported to 40: #3800
- Fix backward incompatible data-streaming protocol change: #3802
- Backport Correct the order TransactionStreamer and PopulateFeedBacklog (#3812): #3813
- Reject Estimates for BoLD Txs that Exceed Fusaka's Max Tx Gas Cap (#3…: #3815
- Add support for new beacon chain /blobs endpoint: #3831
- For L3 on arbitrum return false for shouldEnableCellProofs instread of erroring out: #3827
- don't open freezer for wasm and arbitrumdata databases : #3832
- misleading blob-related dataposter config to v3.8.x-release: #3833
- Toggle rpc endpoint used on errors: #3837
- Fix out of bounds config access in dataposter: #3839
- getNextBlockToRead does not deped on FillInBatchGasField (#3851): #3864
- Fix broadcast client shutdown deadlock: #3885
- Turn off feed-signed flag for sepolia (#3891): #3895
- Fix fast confirm not working for EOA on pre - bold (#3902): #3903
- Add hardcoded transaction hash and gas for ArbSepolia (#3876, #3901): #3904
- identify already exists errors correctly while creating assertions (#3875): #3878
- Fix Fusaka Cell Proof support for external signers (#3910): #3911
- remove lock when setting finality data (#3916): #3921
- update sepolia contract address (#3917): #3922
- Fix PopulateFeedBacklog implementation (#3953): #3955
- Remove internal daprovider server for AnyTrust: #3956
- Remove redundant DataStreamer retry mechanism: #3957
Full Changelog: v3.7.6...v3.8.0