diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 34dcdf6482d4..bae511e8d963 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -9,3 +9,39 @@
/Dockerfile* @nethermindeth/core-devops @rubo
/LICENSE* @rubo @LukaszRozmej @MarekM25
*.md @rubo @LukaszRozmej @MarekM25
+
+/src/Nethermind/Ethereum.Test.Base/ @flcl42
+/src/Nethermind/Nethermind.Abi @LukaszRozmej
+/src/Nethermind/Nethermind.Blockchain @LukaszRozmej @MarekM25 @flcl42
+/src/Nethermind/Nethermind.Consensus @LukaszRozmej @MarekM25 @flcl42
+/src/Nethermind/Nethermind.Crypto @LukaszRozmej @Marchhill
+/src/Nethermind/Nethermind.Db.Rocks @LukaszRozmej @asdacap @damian-orzechowski
+/src/Nethermind/Nethermind.Era1 @ak88 @Marchhill @smartprogrammer93
+/src/Nethermind/Nethermind.Evm.Precompiles @LukaszRozmej @benaadams @rubo @Marchhill
+/src/Nethermind/Nethermind.Evm @LukaszRozmej @benaadams @Demuirgos
+/src/Nethermind/Nethermind.ExternalSigner.Plugin @ak88
+/src/Nethermind/Nethermind.History @LukaszRozmej @Marchhill
+/src/Nethermind/Nethermind.Hive @flcl42 @marcindsobczak
+/src/Nethermind/Nethermind.Init @LukaszRozmej @asdacap
+/src/Nethermind/Nethermind.JsonRpc.TraceStore @LukaszRozmej
+/src/Nethermind/Nethermind.JsonRpc @LukaszRozmej @benaadams @smartprogrammer93
+/src/Nethermind/Nethermind.Merge.Plugin @LukaszRozmej @MarekM25 @flcl42 @benaadams @Marchhill
+/src/Nethermind/Nethermind.Merkleization @ak88 @Marchhill @smartprogrammer93 @flcl42
+/src/Nethermind/Nethermind.Network.Discovery @LukaszRozmej @flcl42 @asdacap
+/src/Nethermind/Nethermind.Network @LukaszRozmej @flcl42 @asdacap @marcindsobczak
+/src/Nethermind/Nethermind.Optimism @emlautarom1 @deffrian
+/src/Nethermind/Nethermind.Runner @LukaszRozmej @flcl42
+/src/Nethermind/Nethermind.Serialization.Json @LukaszRozmej @benaadams
+/src/Nethermind/Nethermind.Serialization.Rlp @LukaszRozmej @Marchhill
+/src/Nethermind/Nethermind.Serialization.Ssz @flcl42 @ak88 @Marchhill
+/src/Nethermind/Nethermind.Serialization.SszGenerator @flcl42 @ak88 @Marchhill
+/src/Nethermind/Nethermind.Shutter @Marchhill
+/src/Nethermind/Nethermind.Sockets @LukaszRozmej @benaadams
+/src/Nethermind/Nethermind.Specs @smartprogrammer93
+/src/Nethermind/Nethermind.State @LukaszRozmej @benaadams @asdacap @flcl42 @damian-orzechowski @tanishqjasoria
+/src/Nethermind/Nethermind.Synchronization @LukaszRozmej @benaadams @asdacap @flcl42 @marcindsobczak
+/src/Nethermind/Nethermind.Taiko @smartprogrammer93 @dipkakwani
+/src/Nethermind/Nethermind.Trie @LukaszRozmej @benaadams @asdacap @flcl42 @damian-orzechowski @tanishqjasoria
+/src/Nethermind/Nethermind.TxPool @LukaszRozmej @benaadams @flcl42 @marcindsobczak
+/src/Nethermind/Nethermind.UI @benaadams
+/src/Nethermind/Nethermind.Xdc @ak88 @Demuirgos @cicr99
diff --git a/.github/workflows/build-nethermind-packages.yml b/.github/workflows/build-nethermind-packages.yml
index 4155421f3cc1..b2ed56d0e9bd 100644
--- a/.github/workflows/build-nethermind-packages.yml
+++ b/.github/workflows/build-nethermind-packages.yml
@@ -22,7 +22,7 @@ jobs:
run: |
sudo apt-get update && sudo apt-get install xmlstarlet -y --no-install-recommends
version_prefix=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionPrefix" Directory.Build.props)
- version_suffix=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionSuffix" Directory.Build.props)
+ version_suffix=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionSuffix" -n Directory.Build.props)
version=$([[ -n "$version_suffix" ]] && echo "$version_prefix-$version_suffix" || echo "$version_prefix")
echo "Detected version $version"
echo "PACKAGE_PREFIX=nethermind-$version-${GITHUB_SHA:0:8}" >> $GITHUB_ENV
diff --git a/.github/workflows/nethermind-tests.yml b/.github/workflows/nethermind-tests.yml
index 0a278fe8a11f..133b3f93b2f8 100644
--- a/.github/workflows/nethermind-tests.yml
+++ b/.github/workflows/nethermind-tests.yml
@@ -79,7 +79,6 @@ jobs:
- Nethermind.Network.Enr.Test
- Nethermind.Network.Test
- Nethermind.Optimism.Test
- # - Nethermind.Overseer.Test
- Nethermind.Runner.Test
- Nethermind.Serialization.Ssz.Test
- Nethermind.Shutter.Test
diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml
index a2c1838cf124..3e99e0361164 100644
--- a/.github/workflows/publish-docker.yml
+++ b/.github/workflows/publish-docker.yml
@@ -42,8 +42,8 @@ jobs:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
- username: ${{ secrets.DOCKER_USERNAME }}
- password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+ username: ${{ secrets.DOCKER_HUB_USERNAME }}
+ password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Build and push image to Docker Hub (staging)
run: |
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 57c1ca44089f..7ca760bcc63d 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -32,7 +32,7 @@ jobs:
run: |
sudo apt-get update && sudo apt-get install xmlstarlet -y --no-install-recommends
version_prefix=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionPrefix" Directory.Build.props)
- version_suffix=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionSuffix" Directory.Build.props)
+ version_suffix=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionSuffix" -n Directory.Build.props)
version=$([[ -n "$version_suffix" ]] && echo "$version_prefix-$version_suffix" || echo "$version_prefix")
package_prefix=nethermind-$version-${GITHUB_SHA:0:8}
echo "Detected version $version"
@@ -193,8 +193,8 @@ jobs:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
- username: ${{ secrets.DOCKER_USERNAME }}
- password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
+ username: ${{ secrets.DOCKER_HUB_USERNAME }}
+ password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Build and push image to Docker Hub
run: |
diff --git a/.github/workflows/run-a-single-node-from-branch.yml b/.github/workflows/run-a-single-node-from-branch.yml
index 755afe1cb827..90ed995e3901 100644
--- a/.github/workflows/run-a-single-node-from-branch.yml
+++ b/.github/workflows/run-a-single-node-from-branch.yml
@@ -13,7 +13,6 @@ on:
- gnosis
- sepolia
- chiado
- - holesky
- hoodi
- op-mainnet
- op-sepolia
diff --git a/.github/workflows/sync-supported-chains.yml b/.github/workflows/sync-supported-chains.yml
index 18cff36c31d9..724792f9daff 100644
--- a/.github/workflows/sync-supported-chains.yml
+++ b/.github/workflows/sync-supported-chains.yml
@@ -251,11 +251,6 @@ jobs:
EXECUTION_URL="${{ secrets.MAINNET_EXECUTION_URL }}"
stripped_network="mainnet"
taiko_client_version="taiko-alethia-client-v0.43.2"
- elif [[ "$network" == *hekla* ]]; then
- CONSENSUS_URL="${{ secrets.HOLESKY_CONSENSUS_URL }}"
- EXECUTION_URL="${{ secrets.HOLESKY_EXECUTION_URL }}"
- stripped_network="holesky"
- taiko_client_version="latest"
else
echo "Unknown network"
exit 1
diff --git a/.github/workflows/update-dockerfiles.yml b/.github/workflows/update-dockerfiles.yml
index 0348e9256d3e..ba11880f0fdc 100644
--- a/.github/workflows/update-dockerfiles.yml
+++ b/.github/workflows/update-dockerfiles.yml
@@ -54,10 +54,18 @@ jobs:
file_count=$(git status --porcelain | wc -l)
echo "file-count=$file_count" >> $GITHUB_OUTPUT
+ - name: Create GitHub app token
+ if: steps.update.outputs.file-count != '0'
+ id: gh-app
+ uses: actions/create-github-app-token@v2
+ with:
+ app-id: ${{ vars.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+
- name: Create a pull request
if: steps.update.outputs.file-count != '0'
env:
- GH_TOKEN: ${{ github.token }}
+ GH_TOKEN: ${{ steps.gh-app.outputs.token }}
run: |
head_branch=chore/update-dockerfiles-$GITHUB_RUN_NUMBER-$GITHUB_RUN_ATTEMPT
body=$(cat <
+
diff --git a/Dockerfile b/Dockerfile
index 8b491797c68d..fad4df001759 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited
# SPDX-License-Identifier: LGPL-3.0-only
-FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0.306-noble@sha256:953b8dd2d8e25c934579905b00d7077c5622632ff617f471a211ce9b72013205 AS build
+FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0.306-noble@sha256:d88e637d15248531967111fba05c6725ad45ea1dace3d35d8cfe2c4d4094e25d AS build
ARG BUILD_CONFIG=release
ARG CI=true
@@ -25,7 +25,7 @@ RUN arch=$([ "$TARGETARCH" = "amd64" ] && echo "x64" || echo "$TARGETARCH") && \
# A temporary symlink to support the old executable name
RUN ln -sr /publish/nethermind /publish/Nethermind.Runner
-FROM mcr.microsoft.com/dotnet/aspnet:9.0.10-noble@sha256:d3c20e8e331018eb5e7402066fde168304b7c605ecde4dbadb40872dc8bf28db
+FROM mcr.microsoft.com/dotnet/aspnet:9.0.10-noble@sha256:e183ff1306983bdb53592c3a76503c1c003461e2acd8fa7c62e04dff35819ee8
WORKDIR /nethermind
diff --git a/Dockerfile.chiseled b/Dockerfile.chiseled
index f0db4430f7a0..f5b272484348 100644
--- a/Dockerfile.chiseled
+++ b/Dockerfile.chiseled
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited
# SPDX-License-Identifier: LGPL-3.0-only
-FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0.306-noble@sha256:953b8dd2d8e25c934579905b00d7077c5622632ff617f471a211ce9b72013205 AS build
+FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0.306-noble@sha256:d88e637d15248531967111fba05c6725ad45ea1dace3d35d8cfe2c4d4094e25d AS build
ARG BUILD_CONFIG=release
ARG CI=true
diff --git a/scripts/build/Dockerfile b/scripts/build/Dockerfile
index d08a89349eca..49bbc7ab59b9 100644
--- a/scripts/build/Dockerfile
+++ b/scripts/build/Dockerfile
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2025 Demerzel Solutions Limited
# SPDX-License-Identifier: LGPL-3.0-only
-FROM mcr.microsoft.com/dotnet/sdk:9.0.306-noble@sha256:953b8dd2d8e25c934579905b00d7077c5622632ff617f471a211ce9b72013205
+FROM mcr.microsoft.com/dotnet/sdk:9.0.306-noble@sha256:d88e637d15248531967111fba05c6725ad45ea1dace3d35d8cfe2c4d4094e25d
ARG COMMIT_HASH
ARG SOURCE_DATE_EPOCH
diff --git a/scripts/build/deb/Dockerfile b/scripts/build/deb/Dockerfile
index dab95613c6e1..0c93559f4151 100644
--- a/scripts/build/deb/Dockerfile
+++ b/scripts/build/deb/Dockerfile
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2025 Demerzel Solutions Limited
# SPDX-License-Identifier: LGPL-3.0-only
-FROM ubuntu:noble@sha256:985be7c735afdf6f18aaa122c23f87d989c30bba4e9aa24c8278912aac339a8d
+FROM ubuntu:noble-20251001@sha256:d22e4fb389065efa4a61bb36416768698ef6d955fe8a7e0cdb3cd6de80fa7eec
ARG ARTIFACTS
ARG SOURCE_DATE_EPOCH
@@ -9,19 +9,20 @@ ARG SOURCE_DATE_EPOCH
WORKDIR /nethermind
COPY src/Nethermind/Directory.Build.props .
-COPY scripts/build/deb deb
+COPY --chmod=0755 scripts/build/deb deb
COPY $ARTIFACTS/linux-x64 deb/nethermind/opt/nethermind
-RUN apt-get update && apt-get install xmlstarlet -y --no-install-recommends && \
+RUN apt-get update && apt-get install xmlstarlet=1.6.1-4 -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
-RUN version=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionPrefix" Directory.Build.props) && \
+RUN version_prefix=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionPrefix" Directory.Build.props) && \
+ version_suffix=$(xmlstarlet sel -t -v "//Project/PropertyGroup/VersionSuffix" -n Directory.Build.props) && \
+ version=$([[ -n "$version_suffix" ]] && echo "$version_prefix-$version_suffix" || echo "$version_prefix") && \
sed -i "s/^Version: .*/Version: $version/" deb/nethermind/DEBIAN/control
WORKDIR /nethermind/deb
-RUN chmod 0755 nethermind/DEBIAN && \
- dpkg-deb --build --root-owner-group nethermind
+RUN dpkg-deb --build --root-owner-group nethermind
VOLUME /output
diff --git a/scripts/config/testnet-matrix.json b/scripts/config/testnet-matrix.json
index 412582e5d1a4..951afd681f57 100644
--- a/scripts/config/testnet-matrix.json
+++ b/scripts/config/testnet-matrix.json
@@ -7,14 +7,6 @@
"timeout": 180,
"agent": "g6-standard-6"
},
- {
- "network": "holesky",
- "cl": "lodestar",
- "cl_image": "chainsafe/lodestar:latest",
- "checkpoint-sync-url": "https://checkpoint-sync.holesky.ethpandaops.io/",
- "timeout": 180,
- "agent": "g6-standard-6"
- },
{
"network": "chiado",
"cl": "lodestar",
diff --git a/scripts/known-failing-hive-tests.txt b/scripts/known-failing-hive-tests.txt
index ac0c1b77ca7e..2e002d854eb4 100644
--- a/scripts/known-failing-hive-tests.txt
+++ b/scripts/known-failing-hive-tests.txt
@@ -1,42 +1,17 @@
# rpc-compat
-debug_getRawBlock/get-invalid-number (nethermind)
-debug_getRawHeader/get-invalid-number (nethermind)
-debug_getRawReceipts/get-invalid-number (nethermind)
-debug_getRawTransaction/get-invalid-hash (nethermind)
-debug_getRawTransaction/get-tx (nethermind)
-eth_getBlockReceipts/get-block-receipts-by-hash (nethermind)
-eth_getBlockReceipts/get-block-receipts-n (nethermind)
-eth_getProof/get-account-proof-with-storage (nethermind)
eth_getStorageAt/get-storage-invalid-key (nethermind)
eth_getStorageAt/get-storage-invalid-key-too-large (nethermind)
-eth_getTransactionReceipt/get-legacy-contract (nethermind)
-eth_getTransactionReceipt/get-legacy-input (nethermind)
-eth_getTransactionReceipt/get-legacy-receipt (nethermind)
eth_sendRawTransaction/send-blob-tx (nethermind)
eth_simulateV1/ethSimulate-empty-with-block-num-set-plus1 (nethermind)
eth_simulateV1/ethSimulate-eth-send-should-not-produce-logs-on-revert (nethermind)
eth_simulateV1/ethSimulate-eth-send-should-produce-no-logs-on-forward-revert (nethermind)
eth_simulateV1/ethSimulate-fee-recipient-receiving-funds (nethermind)
-eth_simulateV1/ethSimulate-gas-fees-and-value-error-38014 (nethermind)
eth_simulateV1/ethSimulate-instrict-gas-38013 (nethermind)
eth_simulateV1/ethSimulate-make-call-with-future-block (nethermind)
-eth_simulateV1/ethSimulate-move-to-address-itself-reference-38022 (nethermind)
-eth_simulateV1/ethSimulate-move-two-non-precompiles-accounts-to-same (nethermind)
-eth_simulateV1/ethSimulate-overflow-nonce (nethermind)
-eth_simulateV1/ethSimulate-overflow-nonce-validation (nethermind)
-eth_simulateV1/ethSimulate-override-address-twice (nethermind)
eth_simulateV1/ethSimulate-run-gas-spending (nethermind)
eth_simulateV1/ethSimulate-run-out-of-gas-in-block-38015 (nethermind)
-eth_simulateV1/ethSimulate-send-eth-and-delegate-call (nethermind)
-eth_simulateV1/ethSimulate-send-eth-and-delegate-call-to-eoa (nethermind)
-eth_simulateV1/ethSimulate-send-eth-and-delegate-call-to-payble-contract (nethermind)
eth_simulateV1/ethSimulate-simple-more-params-validate (nethermind)
-eth_simulateV1/ethSimulate-simple-no-funds (nethermind)
-eth_simulateV1/ethSimulate-simple-no-funds-with-balance-querying (nethermind)
-eth_simulateV1/ethSimulate-simple-send-from-contract-no-balance (nethermind)
-eth_simulateV1/ethSimulate-transaction-too-high-nonce (nethermind)
-eth_simulateV1/ethSimulate-try-to-move-non-precompile (nethermind)
eth_simulateV1/ethSimulate-two-blocks-with-complete-eth-sends (nethermind)
eth_simulateV1/ethSimulate-use-as-many-features-as-possible (nethermind)
diff --git a/scripts/sync-settings.py b/scripts/sync-settings.py
index c4320f588139..6a92eac817f9 100644
--- a/scripts/sync-settings.py
+++ b/scripts/sync-settings.py
@@ -13,7 +13,7 @@
configs = {
# fast sync section
"mainnet": {
- "url": "api.etherscan.io",
+ "url": "https://api.etherscan.io/v2/api?chainid=1",
"blockReduced": 1000,
"multiplierRequirement": 1000,
"isPoS": True
@@ -31,7 +31,7 @@
"isPoS": True
},
"sepolia": {
- "url": "api-sepolia.etherscan.io",
+ "url": "https://api.etherscan.io/v2/api?chainid=11155111",
"blockReduced": 1000,
"multiplierRequirement": 1000,
"isPoS": True
@@ -105,7 +105,7 @@ def fastBlocksSettings(configuration, apiUrl, blockReduced, multiplierRequiremen
'action': 'eth_blockNumber',
'apikey': key,
}
- response = requests.get(f'https://{apiUrl}/api', params=params)
+ response = requests.get(apiUrl, params=params)
else:
data_req = '{"id":0,"jsonrpc":"2.0","method": "eth_blockNumber","params": []}'
response = requests.post(apiUrl, headers=APPLICATION_JSON, data=data_req)
@@ -122,7 +122,7 @@ def fastBlocksSettings(configuration, apiUrl, blockReduced, multiplierRequiremen
'boolean': 'true',
'apikey': key,
}
- response = requests.get(f'https://{apiUrl}/api', params=params)
+ response = requests.get(apiUrl, params=params)
else:
data_req = f'{{"id":0,"jsonrpc":"2.0","method": "eth_getBlockByNumber","params": ["{hex(baseBlock)}", false]}}'
response = requests.post(apiUrl, headers=APPLICATION_JSON, data=data_req)
diff --git a/src/Nethermind/Chains/base-mainnet.json.zst b/src/Nethermind/Chains/base-mainnet.json.zst
index 3c4823ae55b5..6401d6a84d4d 100644
Binary files a/src/Nethermind/Chains/base-mainnet.json.zst and b/src/Nethermind/Chains/base-mainnet.json.zst differ
diff --git a/src/Nethermind/Chains/base-sepolia.json.zst b/src/Nethermind/Chains/base-sepolia.json.zst
index 4bde8d050d70..0ebb4d1fa34e 100644
Binary files a/src/Nethermind/Chains/base-sepolia.json.zst and b/src/Nethermind/Chains/base-sepolia.json.zst differ
diff --git a/src/Nethermind/Chains/boba-mainnet.json.zst b/src/Nethermind/Chains/boba-mainnet.json.zst
index da7c1824172f..71fd1372d268 100644
Binary files a/src/Nethermind/Chains/boba-mainnet.json.zst and b/src/Nethermind/Chains/boba-mainnet.json.zst differ
diff --git a/src/Nethermind/Chains/boba-sepolia.json.zst b/src/Nethermind/Chains/boba-sepolia.json.zst
index 4fae065e1580..fe40e08c362d 100644
Binary files a/src/Nethermind/Chains/boba-sepolia.json.zst and b/src/Nethermind/Chains/boba-sepolia.json.zst differ
diff --git a/src/Nethermind/Chains/chiado.json b/src/Nethermind/Chains/chiado.json
index 0ed220833d9a..60a243dbe2c5 100644
--- a/src/Nethermind/Chains/chiado.json
+++ b/src/Nethermind/Chains/chiado.json
@@ -91,14 +91,6 @@
"eip7623TransitionTimestamp": "0x67c96e4c",
"eip7702TransitionTimestamp": "0x67c96e4c",
"eip4844FeeCollectorTransitionTimestamp": "0x67c96e4c",
- "eip7594TransitionTimestamp": "0x68f74e4c",
- "eip7823TransitionTimestamp": "0x68f74e4c",
- "eip7825TransitionTimestamp": "0x68f74e4c",
- "eip7883TransitionTimestamp": "0x68f74e4c",
- "eip7918TransitionTimestamp": "0x68f74e4c",
- "eip7934TransitionTimestamp": "0x68f74e4c",
- "eip7939TransitionTimestamp": "0x68f74e4c",
- "eip7951TransitionTimestamp": "0x68f74e4c",
"depositContractAddress": "0xb97036a26259b7147018913bd58a774cf91acf25",
"blobSchedule": [
{
diff --git a/src/Nethermind/Chains/dictionary b/src/Nethermind/Chains/dictionary
index ad0ccadf414f..20e4d3d6b4c3 100644
Binary files a/src/Nethermind/Chains/dictionary and b/src/Nethermind/Chains/dictionary differ
diff --git a/src/Nethermind/Chains/lyra-mainnet.json.zst b/src/Nethermind/Chains/lyra-mainnet.json.zst
index 118816e9466f..3efc8fb54798 100644
Binary files a/src/Nethermind/Chains/lyra-mainnet.json.zst and b/src/Nethermind/Chains/lyra-mainnet.json.zst differ
diff --git a/src/Nethermind/Chains/metal-sepolia.json.zst b/src/Nethermind/Chains/metal-sepolia.json.zst
index a3675cb52591..e06f84b5277d 100644
Binary files a/src/Nethermind/Chains/metal-sepolia.json.zst and b/src/Nethermind/Chains/metal-sepolia.json.zst differ
diff --git a/src/Nethermind/Chains/mode-mainnet.json.zst b/src/Nethermind/Chains/mode-mainnet.json.zst
index df4f98be4c7d..ebbba73331d6 100644
Binary files a/src/Nethermind/Chains/mode-mainnet.json.zst and b/src/Nethermind/Chains/mode-mainnet.json.zst differ
diff --git a/src/Nethermind/Chains/mode-sepolia.json.zst b/src/Nethermind/Chains/mode-sepolia.json.zst
index a3dcaf0946d9..148ca283c3cc 100644
Binary files a/src/Nethermind/Chains/mode-sepolia.json.zst and b/src/Nethermind/Chains/mode-sepolia.json.zst differ
diff --git a/src/Nethermind/Chains/op-mainnet.json.zst b/src/Nethermind/Chains/op-mainnet.json.zst
index b3704e1520dd..82270fcad1ec 100644
Binary files a/src/Nethermind/Chains/op-mainnet.json.zst and b/src/Nethermind/Chains/op-mainnet.json.zst differ
diff --git a/src/Nethermind/Chains/op-sepolia.json.zst b/src/Nethermind/Chains/op-sepolia.json.zst
index e30576647c0b..505c7b220db6 100644
Binary files a/src/Nethermind/Chains/op-sepolia.json.zst and b/src/Nethermind/Chains/op-sepolia.json.zst differ
diff --git a/src/Nethermind/Chains/orderly-mainnet.json.zst b/src/Nethermind/Chains/orderly-mainnet.json.zst
index 2106c3170010..c9f4111f7f25 100644
Binary files a/src/Nethermind/Chains/orderly-mainnet.json.zst and b/src/Nethermind/Chains/orderly-mainnet.json.zst differ
diff --git a/src/Nethermind/Chains/swell-mainnet.json.zst b/src/Nethermind/Chains/swell-mainnet.json.zst
index ab19326a6977..0aecfd71be14 100644
Binary files a/src/Nethermind/Chains/swell-mainnet.json.zst and b/src/Nethermind/Chains/swell-mainnet.json.zst differ
diff --git a/src/Nethermind/Chains/worldchain-sepolia.json.zst b/src/Nethermind/Chains/worldchain-sepolia.json.zst
index 84ad7ec26290..cbf0f2d87b13 100644
Binary files a/src/Nethermind/Chains/worldchain-sepolia.json.zst and b/src/Nethermind/Chains/worldchain-sepolia.json.zst differ
diff --git a/src/Nethermind/Chains/zora-mainnet.json.zst b/src/Nethermind/Chains/zora-mainnet.json.zst
index 7d39faf4aa13..da176a17eaac 100644
Binary files a/src/Nethermind/Chains/zora-mainnet.json.zst and b/src/Nethermind/Chains/zora-mainnet.json.zst differ
diff --git a/src/Nethermind/Chains/zora-sepolia.json.zst b/src/Nethermind/Chains/zora-sepolia.json.zst
index 723ac1039556..f397523dd780 100644
Binary files a/src/Nethermind/Chains/zora-sepolia.json.zst and b/src/Nethermind/Chains/zora-sepolia.json.zst differ
diff --git a/src/Nethermind/Directory.Build.props b/src/Nethermind/Directory.Build.props
index 33bfcb030fdb..fa845ca36708 100644
--- a/src/Nethermind/Directory.Build.props
+++ b/src/Nethermind/Directory.Build.props
@@ -5,7 +5,7 @@
$(SOURCE_DATE_EPOCH)
$([System.DateTimeOffset]::UtcNow.ToUnixTimeSeconds())
- 1.35.0
+ 1.36.0
unstable
diff --git a/src/Nethermind/Ethereum.Blockchain.Legacy.Test/RevertTests.cs b/src/Nethermind/Ethereum.Blockchain.Legacy.Test/RevertTests.cs
index 3b69a316454a..8d62cf44b283 100644
--- a/src/Nethermind/Ethereum.Blockchain.Legacy.Test/RevertTests.cs
+++ b/src/Nethermind/Ethereum.Blockchain.Legacy.Test/RevertTests.cs
@@ -27,7 +27,7 @@ public static IEnumerable LoadTests()
"RevertPrecompiledTouch",
};
- return tests.Where(t => !ignoredTests.Any(pattern => t.Name.Contains(pattern))); ;
+ return tests.Where(t => !ignoredTests.Any(pattern => t.Name.Contains(pattern)));
}
}
}
diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTest.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTest.cs
index 19f62afb8007..6329281f660f 100644
--- a/src/Nethermind/Ethereum.Test.Base/BlockchainTest.cs
+++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTest.cs
@@ -24,7 +24,6 @@ public class BlockchainTest : EthereumTest
public Dictionary? Pre { get; set; }
public Dictionary? PostState { get; set; }
public Hash256? PostStateRoot { get; set; }
- public bool SealEngineUsed { get; set; }
public override string? ToString()
{
diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs
index 13adce157a32..202c09ade825 100644
--- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs
+++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs
@@ -30,7 +30,6 @@
using Nethermind.Specs.Forks;
using Nethermind.Specs.Test;
using Nethermind.Evm.State;
-using Nethermind.Evm.Tracing;
using Nethermind.Init.Modules;
using Nethermind.TxPool;
using NUnit.Framework;
@@ -93,10 +92,7 @@ protected async Task RunTest(BlockchainTest test, Stopwatch?
ISpecProvider specProvider = new CustomSpecProvider(test.ChainId, test.ChainId, transitions.ToArray());
- if (test.ChainId != GnosisSpecProvider.Instance.ChainId && specProvider.GenesisSpec != Frontier.Instance)
- {
- Assert.Fail("Expected genesis spec to be Frontier for blockchain tests");
- }
+ Assert.That(test.ChainId == GnosisSpecProvider.Instance.ChainId || specProvider.GenesisSpec == Frontier.Instance, "Expected genesis spec to be Frontier for blockchain tests");
if (test.Network is Cancun || test.NetworkAfterTransition is Cancun)
{
@@ -191,42 +187,40 @@ protected async Task RunTest(BlockchainTest test, Stopwatch?
// For tests with reorgs, find the actual parent header from block tree
parentHeader = blockTree.FindHeader(correctRlp[i].Block.ParentHash) ?? parentHeader;
- if (correctRlp[i].Block.Hash is null)
- {
- Assert.Fail($"null hash in {test.Name} block {i}");
- }
+ Assert.That(correctRlp[i].Block.Hash is not null, $"null hash in {test.Name} block {i}");
- try
+ bool expectsException = correctRlp[i].ExpectedException is not null;
+ // Validate block structure first (mimics SyncServer validation)
+ if (blockValidator.ValidateSuggestedBlock(correctRlp[i].Block, parentHeader, out string? validationError))
{
- // Validate block structure first (mimics SyncServer validation)
- if (blockValidator.ValidateSuggestedBlock(correctRlp[i].Block, parentHeader, out var validationError))
+ Assert.That(!expectsException, $"Expected block {correctRlp[i].Block.Hash} to fail with '{correctRlp[i].ExpectedException}', but it passed validation");
+ try
{
// All validations passed, suggest the block
blockTree.SuggestBlock(correctRlp[i].Block);
+
}
- else
+ catch (InvalidBlockException e)
{
- if (correctRlp[i].ExpectedException is not null)
- {
- Assert.Fail($"Unexpected invalid block {correctRlp[i].Block.Hash}: {validationError}");
- }
+ // Exception thrown during block processing
+ Assert.That(expectsException, $"Unexpected invalid block {correctRlp[i].Block.Hash}: {validationError}, Exception: {e}");
+ // else: Expected to fail and did fail via exception → this is correct behavior
}
- }
- catch (InvalidBlockException e)
- {
- if (correctRlp[i].ExpectedException is not null)
+ catch (Exception e)
{
- Assert.Fail($"Unexpected invalid block {correctRlp[i].Block.Hash}: {e}");
+ Assert.Fail($"Unexpected exception during processing: {e}");
+ }
+ finally
+ {
+ // Dispose AccountChanges to prevent memory leaks in tests
+ correctRlp[i].Block.DisposeAccountChanges();
}
}
- catch (Exception e)
- {
- Assert.Fail($"Unexpected exception during processing: {e}");
- }
- finally
+ else
{
- // Dispose AccountChanges to prevent memory leaks in tests
- correctRlp[i].Block.DisposeAccountChanges();
+ // Validation FAILED
+ Assert.That(expectsException, $"Unexpected invalid block {correctRlp[i].Block.Hash}: {validationError}");
+ // else: Expected to fail and did fail → this is correct behavior
}
parentHeader = correctRlp[i].Block.Header;
@@ -288,9 +282,6 @@ protected async Task RunTest(BlockchainTest test, Stopwatch?
{
RlpStream rlpContext = Bytes.FromHexString(testBlockJson.Rlp!).AsRlpStream();
Block suggestedBlock = Rlp.Decode(rlpContext);
- suggestedBlock.Header.SealEngineType =
- test.SealEngineUsed ? SealEngineType.Ethash : SealEngineType.None;
-
if (testBlockJson.BlockHeader is not null)
{
Assert.That(suggestedBlock.Header.Hash, Is.EqualTo(new Hash256(testBlockJson.BlockHeader.Hash)));
@@ -308,16 +299,10 @@ protected async Task RunTest(BlockchainTest test, Stopwatch?
if (testBlockJson.ExpectedException is null)
{
string invalidRlpMessage = $"Invalid RLP ({i}) {e}";
- if (failOnInvalidRlp)
- {
- Assert.Fail(invalidRlpMessage);
- }
- else
- {
- // ForgedTests don't have ExpectedException and at the same time have invalid rlps
- // Don't fail here. If test executed incorrectly will fail at last check
- _logger.Warn(invalidRlpMessage);
- }
+ Assert.That(!failOnInvalidRlp, invalidRlpMessage);
+ // ForgedTests don't have ExpectedException and at the same time have invalid rlps
+ // Don't fail here. If test executed incorrectly will fail at last check
+ _logger.Warn(invalidRlpMessage);
}
else
{
diff --git a/src/Nethermind/Nethermind.Api/IInitConfig.cs b/src/Nethermind/Nethermind.Api/IInitConfig.cs
index 1b87000de148..9716f609b914 100644
--- a/src/Nethermind/Nethermind.Api/IInitConfig.cs
+++ b/src/Nethermind/Nethermind.Api/IInitConfig.cs
@@ -39,10 +39,10 @@ public interface IInitConfig : IConfig
[ConfigItem(Description = "The hash of the genesis block. If not specified, the genesis block validity is not checked which is useful in the case of ad hoc test/private networks.", DefaultValue = "null")]
string? GenesisHash { get; set; }
- [ConfigItem(Description = "The path to the static nodes file.", DefaultValue = "Data/static-nodes.json")]
+ [ConfigItem(Description = "The path to the static nodes file.", DefaultValue = "static-nodes.json")]
string StaticNodesPath { get; set; }
- [ConfigItem(Description = "The path to the trusted nodes file.", DefaultValue = "Data/trusted-nodes.json")]
+ [ConfigItem(Description = "The path to the trusted nodes file.", DefaultValue = "trusted-nodes.json")]
string TrustedNodesPath { get; set; }
[ConfigItem(Description = "The name of the log file.", DefaultValue = "log.txt")]
@@ -69,6 +69,9 @@ public interface IInitConfig : IConfig
[ConfigItem(Description = "The maximum number of bad blocks observed on the network that will be stored on disk.", DefaultValue = "100")]
long? BadBlocksStored { get; set; }
+ [ConfigItem(Description = "The path to the Nethermind data directory. Defaults to Nethermind's current directory.", DefaultValue = "null", HiddenFromDocs = true)]
+ string? DataDir { get; set; }
+
[ConfigItem(Description = "[TECHNICAL] Disable garbage collector on newPayload", DefaultValue = "true", HiddenFromDocs = true)]
bool DisableGcOnNewPayload { get; set; }
diff --git a/src/Nethermind/Nethermind.Api/InitConfig.cs b/src/Nethermind/Nethermind.Api/InitConfig.cs
index d766d41342b8..db0dbfdd706f 100644
--- a/src/Nethermind/Nethermind.Api/InitConfig.cs
+++ b/src/Nethermind/Nethermind.Api/InitConfig.cs
@@ -18,8 +18,8 @@ public class InitConfig : IInitConfig
public string BaseDbPath { get; set; } = "db";
public string LogFileName { get; set; } = "log.txt";
public string? GenesisHash { get; set; }
- public string StaticNodesPath { get; set; } = "Data/static-nodes.json";
- public string TrustedNodesPath { get; set; } = "Data/trusted-nodes.json";
+ public string StaticNodesPath { get; set; } = "static-nodes.json";
+ public string TrustedNodesPath { get; set; } = "trusted-nodes.json";
public string? KzgSetupPath { get; set; } = null;
public string LogDirectory { get; set; } = "logs";
public string? LogRules { get; set; } = null;
@@ -28,7 +28,7 @@ public class InitConfig : IInitConfig
public DiagnosticMode DiagnosticMode { get; set; } = DiagnosticMode.None;
public DumpOptions AutoDump { get; set; } = DumpOptions.Default;
- public string RpcDbUrl { get; set; } = String.Empty;
+ public string RpcDbUrl { get; set; } = string.Empty;
public long? MemoryHint { get; set; }
public long? BadBlocksStored { get; set; } = 100;
public bool DisableGcOnNewPayload { get; set; } = true;
@@ -39,6 +39,7 @@ public class InitConfig : IInitConfig
public int BackgroundTaskConcurrency { get; set; } = 2;
public int BackgroundTaskMaxNumber { get; set; } = 1024;
public bool InRunnerTest { get; set; } = false;
+ public string? DataDir { get; set; }
[Obsolete("Use DiagnosticMode with MemDb instead")]
public bool UseMemDb
diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs
index 0b6513134d49..c9c17ad3c2d3 100644
--- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs
+++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs
@@ -173,7 +173,7 @@ static BlockHeader Process(BranchProcessor auRaBlockProcessor, BlockHeader paren
IWorldState stateProvider = TestWorldStateFactory.CreateForTest();
ITransactionProcessor transactionProcessor = Substitute.For();
AuRaBlockProcessor processor = new AuRaBlockProcessor(
- HoleskySpecProvider.Instance,
+ HoodiSpecProvider.Instance,
TestBlockValidator.AlwaysValid,
NoBlockRewards.Instance,
new BlockProcessor.BlockValidationTransactionsExecutor(new ExecuteTransactionProcessorAdapter(transactionProcessor), stateProvider),
@@ -190,7 +190,7 @@ static BlockHeader Process(BranchProcessor auRaBlockProcessor, BlockHeader paren
BranchProcessor branchProcessor = new BranchProcessor(
processor,
- HoleskySpecProvider.Instance,
+ HoodiSpecProvider.Instance,
stateProvider,
new BeaconBlockRootHandler(transactionProcessor, stateProvider),
LimboLogs.Instance);
diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/ContractDataStoreWithLocalDataTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/ContractDataStoreWithLocalDataTests.cs
index 9624eea6e505..d9ec5662e3b7 100644
--- a/src/Nethermind/Nethermind.AuRa.Test/Contract/ContractDataStoreWithLocalDataTests.cs
+++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/ContractDataStoreWithLocalDataTests.cs
@@ -79,18 +79,24 @@ public void combines_contract_and_local_data_correctly()
testCase.ContractDataStore.GetItemsFromContractAtBlock(blockHeader).Should().BeEquivalentTo(expected.Cast