github OffchainLabs/nitro v2.1.0
Arbitrum Nitro v2.1.0

latest releases: v3.3.0-rc.1, v3.2.1, consensus-v32...
13 months ago

This release is available as a Docker image on Docker Hub at offchainlabs/nitro-node:v2.1.0-72ccc0c

Warning

We're investigating reports of a crash on archive nodes on this version. If you run an archive node, we'd recommend skipping to v2.1.1.

What's Changed

This release adds support for L3 Arbitrum Orbit chains, improves batch poster reliability, and adds various new RPC features.

Configuration Changes

All changes are referred to by the CLI argument but the equivalent JSON options have also been changed accordingly.

  • --l2.chain-id has been renamed to --chain.id
    • You can now optionally specify --chain.name instead, with the possibilities "arb1", "nova", and "goerli-rollup"
  • --l1.url has been renamed to --parent-chain.connection.url
  • --l1.connection-attempts was removed (see the --parent-chain.connection.* family of options for replacements, but the defaults should result in a good number of attempts already)
  • --l1.chain-id has been renamed to --parent-chain.id
  • All other --l2.* options have been renamed to --chain.*
  • All other --l1.* options have been renamed to --parent-chain.*
  • --node.batch-poster.poll-delay has been renamed to --node.batch-poster.poll-interval

User-facing Improvements

  • Orbit chain (L3) support
    • Support the node loading chain information from a JSON file: #1577
    • Support L2.chain-name, ifps and base64 encoded l2Chain configs: #1645
    • Add option to dataposter to not store the state: #1794
    • More implementation details of this are listed under the "Internal Highlights" section
  • Add sepolia-rollup testnet support: #1829
    • Fix sepolia-rollup feed connection scheme: #1830
  • Fix the eth_estimateGas RPC gas cap: #1615
  • Add option to disable L1 charging to the eth_call RPC: #1790
  • Add new RPC GetL2BlockRangeForL1 to fetch L2 block range for L1 block number: #1860
  • Upgrade ConditionalOptions variables (for the eth_sendRawTransactionConditional RPC) to type math.HexOrDecimal64: #1848
  • Allow separate wallets for validator and batch poster: #1605
  • Execution service 2: separate block validation from the rest of the node: #1536
    • This is useful to separate block validator resource consumption (and potential out of memory kills) from the rest of the node
    • Separate block validation node command: #1578
  • Prune old messages and delayed messages: #1569
  • Don't save every state on archive node: #1542
  • Recreate missing state for RPCs on archive nodes: #1455
  • Reject RPC requests if optional memory limit is exceeded: #1738
    • Fixed memory limits rather than percentage based: #1878
    • Metrics for memory limit and usage: #1888
  • Implement leveldb storage for dataposter: #1736
    • Make the default data poster storage backend LevelDB: #1856
  • Wait for block bounds to be safe before posting batches: #1665
  • Add gas used since startup to prometheus metric: #1762
    • Rename "arb/sequencer/gasused" to "arb/gas_used": #1800
  • Run pprof (by default disabled) on a separate port than metrics: #1758
  • Introduce initial max tip cap for dataposter: #1797
  • Add ability to dump das keyset bytes to datool: #1698
  • Add a raw l1 private key option to the deploy script: #1748
  • Use the data poster for validators/stakers, improving transaction posting reliability
    • Use dataposter from EoaValidatorWallet: #1787
    • Enable dataposter for validator contract wallet: #1788
  • Default to using "safe" instead of "finalized" for delayed sequencing: #1804
  • Add sequencer coordinator management terminal UI tool: #1822

Consensus v10.2: L3 Orbit Chain Improvements

This consensus upgrade is only for Arbitrum Orbit L3 chains and need not be applied to L2s like Arbitrum One or Arbitrum Nova.

  • Parse the initial data cost out of the init message: #1704
  • Parse new BatchPostingReport field extraGas: #1701

Pending ArbOS Version 11 Improvements (work in progress)

  • Add EVM Shanghai support: #1583
    • Regenerate the state and header after the internal transaction in ProduceBlockAdvanced: #1664
    • Only update ArbOS version after recreating header after internal tx: #1712
  • Resolve chain owners list in ArbOS version 11 upgrade: #1768
  • Update L1 pricing params to more accurate values: #1549
  • Add GetL1RewardRate and GetL1RewardRecipient methods to ArbGasInfo: #1775
  • Fix retrayble fee refund: #1789

Internal Highlights

  • L3 support implementation details
    • replay: load chain config from init msg / arbos state: #1598
    • Update GetPendingCallBlockNumber to handle l3 chains: #1593
    • Use ParentChainBlockNumber instead of assuming that parent is l1: #1594
    • Store rollup node ArbSys block numbers if on an Arbitrum host chain: #1597
    • Add support for consensus v10.2 to Dockerfile: #1722
    • Use create2 to deploy the RollupProxy and predict address: #1629
    • Sequence txs with the L1 (not parent chain) block number: #1693
    • Make the staker NodeInfo BlockProposed an L1 block: #1695
    • Miscellaneous L3 timing fixes: #1717
    • Improve batch poster reliability for L3s: #1835
    • Fix batch bounds calculation on L3s: #1841
    • Disable wait-for-l1-finality on L3 data posters: #1846
    • Improve batch size and tx size limit defaults for L3s: #1855
  • Update arb1 and nova feed URLs to new domain: #1886
  • inbox_tracker: bugfix - remove values from batchMeta cache: #1699
  • Fix lost txQueueItems in sequencer: #1808
  • Fix changing the basefee in non-mutating calls: #1850
  • In the data poster, properly allocate fee spending across transactions: #1818
  • Make the data poster nonce query resilient: #1640
    • Fix data poster nonce query: #1682
  • Add a safety check that we aren't reposting a known batch: #1685
  • If the data poster fails to acquire the redis lock, retry quicker: #1684
  • Store haveUsefulMessage in buildingBatch: #1696
  • Handle nil parent chain BaseFee in data poster instead of crashing: #1707
  • Check that the nonce is correct in the data poster: #1834
  • Fix batch poster fixAccErr not resetting when the error stops: #1849
  • Add the missing ContractAddress field to the logs receipt RLP format: #1632
  • seq_coordinator: only take over if all blocks were built: #1623
  • When acquiring the lockout, populate the feed backlog: #1627
    • Populate the feed backlog on sequencer startup even if coordinator disabled: #1634
  • Merge in upstream go-ethereum v1.12.0: #1691
  • block_processor: fix header for block being built: #1650
  • Create rpcclient: #1603
  • Fix error handling in block validator: #1697
  • Add maintenance lock to sequencers: #1709
  • Track validation count in client: #1728
  • Don't unnecessarily marshal RPC arguments for logging: #1733
  • Handroll validation input preimages JSON marshal/unmarshal: #1734
  • recordingDb: add config, metrics, and size limits: #1741
  • Optionally Ignore Rollup's Wasm Module Root When Staking: #1749
  • txstreamer: bugfix: update lastMsgCount: #1750
  • block_validator: fix calls to writeLastValidated: #1752
  • Poll for data poster batch reverts: #1715
  • Release leveldb iterators: #1754
  • das: Don't log l1SyncService l1 errs until >5: #1761
  • Fix defers on main process: #1780
  • Fix default value of delayed-sequencer.enable: #1763
  • Default paths of jwtsecret and log should be outside the nitro directory: #1755
  • Fix build-brotli.sh target path: #1809
  • Drop pointer comparisons: #1821
  • Fix flag initializations in sample_hmac.go, init.go and data_poster.go: #1824
  • Fix off by 1 in validator logging: #1847
  • Reorder prechecker balance and conditional options checks: #1862
  • Add DAS error log when 1 error away from failure: #1875
  • Add flag to dataposter and clear leveldb when that flag is set: #1872

Full Changelog: v2.0.14...v2.1.0

Don't miss a new nitro release

NewReleases is sending notifications on new releases.