Skip to content

Arbitrum Nitro v3.3.0

Compare
Choose a tag to compare
@joshuacolvin0 joshuacolvin0 released this 06 Jan 20:22
· 1082 commits to master since this release
5b5e179

This release is available as a Docker Image on Docker Hub at offchainlabs/nitro-node:v3.3.0-5b5e179

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.3.0-5b5e179-validator which has the extra script /usr/local/bin/split-val-entry.sh as the entrypoint.

What's Changed

A new parameter --node.batch-poster.max-empty-batch-delay with a default of 3 days has been added. Nitro chains turn validation permissionless if there have been no assertions created within a 2 week period, so this was added to regularly create an empty batch so that validators can post an assertion even if no traffic has been sent to the chain.

This version includes initial support for BoLD: permissionless validation for Arbitrum chains. More information available here: https://docs.arbitrum.io/how-arbitrum-works/bold/gentle-introduction

Configuration Changes

  • --execution.caching.stylus-lru-cache has been replaced by --execution.caching.stylus-lru-cache-capacity which is now measured in megabytes.
  • --blocks-reexecutor.blocks-per-thread has been renamed to --blocks-reexecutor.min-blocks-per-thread
  • --chain.info-ipfs-url and --chain.info-ipfs-download-path have been removed, however, they were already nonfunctional in previous releases.
  • --node.block-validator.redis-validation-client-config.producer-config.* no longer has the enable-reproduce, check-pending-interval, keepalive-timeout and check-pending-items config options.
  • --validation.arbitrator.redis-validation-server-config.consumer-config.keepalive-timeout has been removed.

User-facing Improvements

  • Allow external-signer for batch-poster with DA: #2669
  • Make timeout configurable for block validator jit execution: #2698
  • Sort storage_flush_cache to make Stylus tracing deterministic: #2693
  • Support multiple producers in redis streams for stateless block validators: #2581
  • Support google cloud storage as das: #2643
    • Document the fact OCL does not support google cloud storage: #2727
  • Create a build diagnostic tool V1: #2733
  • Support seamless switchover redis for sequencer coordinator: #2526
    • This has not been tested in a real chain setup yet, and may be unstable to use.
  • New parameter --node.batch-poster.max-empty-batch-delay added: #2657
  • Support the Arbitrum BoLD Challenge Protocol in Nitro: #2362
  • Fix nitro-node validator docker image graceful shutdown: #2780

Internal Highlights

  • Merge in go-ethereum v1.14.0: #2517
  • RPC posting gas hook refactor: #2774
  • Init-reorg: fix logic: #2681
  • Improve stability of getNodeCreationBlock for L3s: #2682
  • Be more precise when selecting firstMsg in the batch poster: #2646
  • Fix CaptureHostIO when slices are bigger than 2^16: #2704
  • Stylus LRU cache with bytes capacity instead of number of entries capacity : #2595
  • Stylus cache improvements: #2712
  • Add dangerous batch poster options to cli: #2776
  • Do not use SetFinalizer to remove entries from preimageResolvers to free memory sooner from block validators: #2752
  • Use MessageCommitMode when executing future head block messages: #2705
  • Gives preference to IPv4 when connecting to Sequencer's feed: #2650
  • Jit prover should accept InputJSON format and execute a full block: #2730
  • Adjusts benchbin's args to have the same names as prover's args: #2724
  • Add Gas and Ink types in rust: #2736
  • Improve BlocksReExecutor implementation: #2714
  • Add flags and other info for nitro --dev: #2751
  • Redis streams: Attempt to clear from PEL again after successfull deletion of Lower: #2755
  • Fix inbox reading window after a reorg: #2673
  • Use Golang version 1.23: #2711
  • Update aws-sdk-go-v2: #2720
  • Log from batch poster for which das backends are using chunked vs legacy store: #2747
  • Log the DAS public key on startup: #2717
  • Remove brotli build dir in make clean: #2703
  • Fix spurious refund error log to just be debug: #2617
  • Fix spurious "failed to re-send transaction" error logs: #2627
  • Validation Inputs wiring: #2604
  • DAS RPC Client Metrics: #2549
  • Remove arbutil's L1Interface and use *ethclient.Client instead: #2641
  • Adjusts log levels for some logs: #2719
  • Remove IPFS support: #2636
  • Fix memory leak when getting stylus cache metrics: #2734
  • Add buildspec.yml for AWS CodeBuild: #2645
  • Allow builds without Docker inside of Docker for cbrotli-wasm: #2748
  • Merge in upstream go-ethereum v1.14.2: #2552
  • Explicitly create zombies for geth v1.14.2: #2732
  • Update config description for batch poster max batch size: #2790
  • Make golangci-lint 1.62.0 happy: #2785
  • Bump google.golang.org/grpc from 1.64.0 to 1.64.1: #2726
  • Blocks ReExecution should require --init.then-quit: #2792
  • Get rid of the hardcoded list of chains in config_arbitrum.go (geth) instead use arbitrum_chain_info.json (nitro): #2658
  • Remove gobwas/ws handshake extensions race condition workaround : #2793
  • Move ArbOS upgrade handling to a bit later in block production: #2791
  • Update AEP link: #2813
  • Revert accidental change to tipReceipient: OffchainLabs/go-ethereum#386
  • Include tx compression level in calldata units cache: #2849