Skip to content

update 3.9.4#45

Merged
AnkushinDaniil merged 3102 commits into
nethermindfrom
daniil/update/3.9.4
Dec 31, 2025
Merged

update 3.9.4#45
AnkushinDaniil merged 3102 commits into
nethermindfrom
daniil/update/3.9.4

Conversation

@AnkushinDaniil

Copy link
Copy Markdown
Collaborator

No description provided.

ganeshvanahalli and others added 30 commits September 12, 2025 09:34
…ooks (OffchainLabs#3627)

Co-authored-by: Pepper Lebeck-Jobe <pepper@offchainlabs.com>
…ata-streaming-receiver

Extract streaming protocol (receiver)
…tely (OffchainLabs#3582)

* Handle node.staker.strategy and node.bold.strategy appropriately

* Update nitro-testnode
* update contracts for internal batch posting report fields

* batch-gas-cost: check for floor-gas-cost in arbos-50

* replace calldataprice with parentGasFloorPerToken

* internal_tx: use floorGasPerToken

* update acts and support legacy feed

* contracts: revert to version on master

* precompiles: updates for parent-gas-floor

* internal_tx: add per-batch-gas even if using floor

* eth-config: update forkid

* Add a test for gas floor

* Enable delayed sequencer, satisfy finality requirements

* internal_tx: use a constant instead of PerBatchGasCost

* update gas floor price test

* incomingmessage: fix comments

* Remove leftover comment
…firm

Make sure to retry fast confirmation on failure
)

* Add FloorGasAdditionalTokens to floor-gas computation

* typos
…finitionoverload

Fix redefining of staker related metrics
* Instrument multi-gas in account HostIOs

* Review fixes: account multigas test the other hostios
fix: use RLock instead of Lock in CollectMachineHashes for concurrent…
joshuacolvin0 and others added 23 commits November 14, 2025 13:29
Pre-stylus legacy validator was no longer needed, so was removed from split validator.  Similar split validator functionality is desired for ArbOS50, so adding it back in.
Port - Fix parent chain reader bug in creating smart contract wallet [PR-4019]
Add legacy validator back for split validator
…bs#4047) (OffchainLabs#4068)

* l2pricing: add arbosVersion parameter

* create free-storage and use for gas constraints

* l2pricing-simulator: build fix

* common test: test by default with multiple constraints

* fix TestRetryableSubmissionAndRedeemFees

* lint fixes

* system_test: don't take ownership if no owner

* fix more system tests

* fix more tests

* Add test proving issue with redeem and constraints

* Refactor redeem gasPoolUpdateCost to a function

* Revert "create free-storage and use for gas constraints"

This reverts commit f48b38f.

* Correct GasPoolUpdateCost for ArbOS 51

* Increase redeemAllAndCreateAddresses gas for retryable

* recreate_rpc: do take ownership

* l2pricingstate: restructure arbos version checking

* l2pricingmodel: fixes

* rework gas constraints

* fix typo in test

* Post-merge fix: use gasConstraintsMaxNum

---------

Co-authored-by: Tsahi Zidenberg <65945052+tsahee@users.noreply.github.com>
…lassic-tx-by-hash

Port: Fix searching for tx hash in block for ArbitrumLegacyTx
…ate-non-empty-genesis

Modify validateGenesisAssertion to handle non-empty genesis (OffchainLabs#4031)
The Ethereum Fusaka fork introduced /eth/v1/beacon/blobs as a replacement
for the legacy /eth/v1/beacon/blob_sidecars endpoint. Nitro's getBlobs()
function fetches from the new endpoint but was not saving blobs to disk.

The legacy blobSidecars() function saves blobs in "Version 0" format with
full metadata (commitments, proofs, block roots). The new endpoint returns
only blob data, requiring a minimal storage format optimized for hash-based
lookups.

Additionally, there was no ReadBlobsFromDisk() function - blobs could be
saved but not read back. This commit adds the reader for testing and to
enable a future beacon endpoint emulator that we may add.

Storage Format V1 (new):
- Stores blobs as versioned hash -> blob map
- File: {blob-directory}/{slot}
- Format: {"version": 1, "data": {"0xHASH": "0xBLOB", ...}}
- Used by getBlobs() when fetching from /eth/v1/beacon/blobs

Storage Format V0 (legacy, backward compatible):
- Stores blob_sidecars array with full metadata
- Format: {"data": [{"blob": "0x...", "kzg_commitment": "0x...",
  "kzg_proof": "0x...", ...}]}
- Used by blobSidecars() when fetching from legacy endpoint
- Still readable for backward compatibility

ReadBlobsFromDisk() (new):
- Reads blobs from disk, transparently handling V0 or V1 format
- Auto-detects version via presence of "version" field
- Validates blob integrity:
  * V1: Computes commitment -> versioned hash, verifies match to key
  * V0: Computes commitment from blob, verifies match to stored commitment
- No migration needed - both formats coexist

Renamed functions for clarity:
- saveBlobDataToDisk -> saveBlobsV0ToDisk (legacy format)
- Added saveBlobsV1ToDisk (new format)

Testing improvements:
- Updated createTestBlobs() to use production blobs.EncodeBlobs()
- All tests now use real KZG blobs with valid commitments
- Added TestReadBlobsV1ValidationFailure and TestReadBlobsV0ValidationFailure
- Renamed existing tests to indicate format (e.g., TestSaveBlobsV0ToDisk)

(cherry picked from commit 0ea5b8f)
…ched

The Fusaka hard fork introduced the new /eth/v1/beacon/blobs endpoint which
is now universally available. This removes all code related to the legacy
blob_sidecars endpoint including the toggle logic that would switch between
endpoints on errors.

- Remove useLegacyEndpoint config field and --use-legacy-endpoint flag
- Remove blobSidecars() function from blob_client.go
- Simplify GetBlobsBySlot() to always use getBlobs()
- Remove --compare-endpoints flag and compareEndpoints() from blobtool
- Keep saveBlobsV0ToDisk() and V0 reading code for backwards compatibility
  with existing blob files saved to disk

(cherry picked from commit 8299e50)
The Fusaka hard fork made cell proofs (Version1) universally required, so
the legacy single-proof-per-blob (Version0) code path is no longer needed.

- Remove enableCellProofs parameter from ComputeProofs(), always use cell proofs
- Remove EnableCellProofs config field and --enable-cell-proofs flag
- Remove shouldEnableCellProofs() function from data_poster.go
- Remove SupportsCellProofs() function from parent.go
- Remove Version0 tests

(cherry picked from commit 3df0d2e)
…ob-ports

v3.9.x post fusaka blob backports
# Conflicts:
#	.github/workflows/_arbitrator.yml
#	.github/workflows/_bold-legacy.yml
#	.github/workflows/_codecov.yml
#	.github/workflows/_fast.yml
#	.github/workflows/_go-tests.yml
#	.github/workflows/ci.yml
#	.github/workflows/docker.yml
#	.github/workflows/merge.yml
#	.github/workflows/shellcheck-ci.yml
#	.gitignore
#	Dockerfile
#	arbnode/batch_poster.go
#	arbnode/dataposter/data_poster.go
#	arbnode/node.go
#	arbnode/simple_redis_lock_test.go
#	arbos/addressSet/addressSet_test.go
#	arbos/arbosState/arbosstate.go
#	arbos/internal_tx.go
#	arbos/l2pricing/l2pricing.go
#	arbos/l2pricing/model.go
#	arbos/parse_l2.go
#	bold/state-commitments/history/history_commitment.go
#	broadcaster/backlog/backlog_test.go
#	cmd/blobtool/blobtool.go
#	cmd/chaininfo/arbitrum_chain_info.json
#	cmd/conf/init.go
#	cmd/datool/datool.go
#	cmd/el-proxy/main.go
#	cmd/genericconf/server.go
#	cmd/nitro/init.go
#	cmd/nitro/nitro.go
#	contracts-local/Makefile
#	contracts-local/src/mocks/ArbNativeTokenManagerTest.sol
#	contracts-local/src/osp/ReferenceDAProofValidator.sol
#	daprovider/daclient/daclient.go
#	daprovider/das/dasutil/dasutil.go
#	daprovider/das/rpc_client.go
#	daprovider/das/rpc_server.go
#	daprovider/data_streaming/protocol_test.go
#	daprovider/data_streaming/sender.go
#	daprovider/data_streaming/signing.go
#	daprovider/reader.go
#	daprovider/referenceda/certificate.go
#	daprovider/referenceda/reference_reader.go
#	daprovider/referenceda/reference_validator.go
#	execution/gethexec/blockchain.go
#	execution/gethexec/node.go
#	go.mod
#	go.sum
#	precompiles/ArbAggregator.go
#	precompiles/ArbOwner.go
#	precompiles/ArbRetryableTx.go
#	precompiles/constraints_test.go
#	scripts/check-build.sh
#	system_tests/batch_poster_test.go
#	system_tests/bold_l3_support_test.go
#	system_tests/common_test.go
#	system_tests/eth_config_test.go
#	system_tests/full_challenge_impl_test.go
#	system_tests/gas_limits_test.go
#	system_tests/multi_constraint_pricer_test.go
#	system_tests/precompile_test.go
#	system_tests/program_recursive_test.go
#	system_tests/program_test.go
#	system_tests/recreatestate_rpc_test.go
#	util/blobs/blobs.go
#	util/blobs/blobs_test.go
#	util/containers/promise.go
#	util/headerreader/blob_client.go
#	validator/server_api/json.go

@svlachakis svlachakis left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like Arbitrum One Mainnet boots and producing blocks fine

@AnkushinDaniil AnkushinDaniil merged commit bdf996e into nethermind Dec 31, 2025
@AnkushinDaniil AnkushinDaniil deleted the daniil/update/3.9.4 branch December 31, 2025 10:33
wurdum pushed a commit that referenced this pull request Apr 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.