Commit graph

17243 commits

Author SHA1 Message Date
cui
a235d28192
accounts/abi: set stringKind for contract-typed arguments (#35345)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
2026-08-05 14:58:41 +08:00
cui
2d8bc9f8c3
cmd/geth: return storage slot count from traverseStorage (#35302) 2026-08-05 14:34:28 +08:00
0xSHKWON
476ecbc571
core: surface database errors in parallel block execution (#35461) 2026-08-05 14:02:24 +08:00
0xSHKWON
9b702a9955
eth/downloader: hold pivotLock when reading pivot header in progress report (#35462) 2026-08-05 14:02:01 +08:00
Mario Vega
6d201e61c6
core: genesis slot number parsing (#35464)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
Small fix to the parsing of the `slotNumber` in the genesis file. Found
during hive testing.
2026-08-05 10:00:08 +08:00
Guillaume Ballet
e25efd2c62
common/mclock: rename symbol to remove conflicts with other languages (#35460)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
Calling a function `do` is fine in go, but when interacting with other
languages, namely C, this clashes with a known keyword, which some
compilers don't like.
2026-08-04 20:04:26 +08:00
0xSHKWON
1e0679c7e2
core, core/state: fix preimage recording in parallel block execution (#35459)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
2026-08-04 15:55:36 +08:00
0xSHKWON
c42d4e4177
core: attach the precompile cache in parallel block execution (#35443) 2026-08-04 15:35:12 +08:00
rjl493456442
6434bc91d4
core, eth: rename regular gas to execution gas (#35457)
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
2026-08-04 14:35:06 +08:00
Jonny Rhea
b483fe9e71
eth/syncer: fix nil deref when the target block is missing (#35442)
i didn't try to trigger the nil deref, but fixing it shouldn't be
controversial
2026-08-04 14:16:45 +08:00
rjl493456442
5131c031dd
cmd, consensus, core, miner: update 7997 (#35458)
https://eips.ethereum.org/EIPS/eip-7997
2026-08-04 07:54:29 +02:00
Marius van der Wijden
92a3bed7f2
core: update 2780 and 8038 parameters (#35454)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
https://github.com/ethereum/EIPs/pull/12056
https://github.com/ethereum/EIPs/pull/11997
2026-08-04 10:36:49 +08:00
0xSHKWON
83f0795a60
core: fix data race on the BLOCKHASH cache in parallel block execution (#35441) 2026-08-04 08:41:08 +08:00
spencer
7a1b11564c
core/txpool/blobpool: fall back to pool in GetCells for blob-mode cache entries (#35439)
Some checks failed
/ Linux Build (push) Has been cancelled
/ Linux Build (arm) (push) Has been cancelled
/ Keeper Build (push) Has been cancelled
/ Windows Build (push) Has been cancelled
/ Docker Image (push) Has been cancelled
## Description

Blob mode cache entries (the default until a CL advertises
`engine_getBlobsV4` via `engine_exchangeCapabilities`) carry no cells,
but `Cache.GetCells` treated any entry as a hit and served null cells
from the empty custody set instead of falling back to the pool.

Found via the EELS execute-blobs simulator (EIP-8070 `engine_getBlobsV4`
tests), which never calls `engine_exchangeCapabilities`: null cells
appeared intermittently depending on the race with the 1s top-K preload.
With the fix the suite passes 139/139 (from 87/139 on master).
2026-07-30 17:39:50 +02:00
Jonny Rhea
b988c00bf4
eth/protocols/snap: purge stale sync state when snap sync v2 is re-enabled (#35316)
Some checks failed
/ Linux Build (push) Has been cancelled
/ Linux Build (arm) (push) Has been cancelled
/ Keeper Build (push) Has been cancelled
/ Windows Build (push) Has been cancelled
/ Docker Image (push) Has been cancelled
If snap sync v2 is re-enabled after a previous sync already completed
and committed its pivot, the leftover journal is now discarded instead
of resumed.
2026-07-29 10:59:18 +08:00
rjl493456442
454ca784c5
core: implement parallel block execution with BAL (#35264)
Some checks are pending
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
/ Linux Build (push) Waiting to run
This PR implements the parallel block executor, with the execution
pre-state
derived from the block-level access list.
2026-07-28 15:17:09 +02:00
Bosul Mun
38271784c2
eth/protocols: fix Cells/GetCells RLP encoding (#35428)
Some checks are pending
/ Linux Build (arm) (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Docker Image (push) Waiting to run
/ Linux Build (push) Waiting to run
This PR aligns the `Cells` and `GetCells` message implementations with
the spec: https://github.com/ethereum/devp2p/blob/master/caps/eth.md#getcells-0x14

Previously, `GetCellsPacket` and `CellsPacket` embedded `GetCellsRequest` 
and `CellsResponse`. This caused them to be encoded as nested lists, which
does not match the wire format defined by the spec. This PR inlines their fields
to flatten the RLP layout of `Cells` and `GetCells`.
2026-07-28 13:13:32 +08:00
Jonny Rhea
d6f222a081
core, core/vm: precompile result caching (#35388)
Blocks heavy in precompile calls (e.g. Aztec's proof settlement txs)
spend most of their processing time on operations (ECMUL, pairings, KZG
point evaluation, MODEXP) that the state prefetcher has already computed
and thrown away.

This PR adds a precompile result cache shared between the prefetcher and
block processing (and the miner), following the JumpDestCache pattern.
Note that cached precompiles are keyed by address and input, with
entries partitioned by the active precompile set, so a fork that changes
the behavior behind an address can never be served results from before
it.

---------

Co-authored-by: Gary Rong <garyrong0905@gmail.com>
2026-07-28 10:47:33 +08:00
Marius van der Wijden
1bfc028d43
miner: don't seal block if a db error occurred (#35427)
A corrupted node should not create a bad block, but rather error out

---------

Co-authored-by: rjl493456442 <garyrong0905@gmail.com>
2026-07-28 10:30:40 +08:00
rjl493456442
3dad51ec5b
version: start v1.17.6 release cycle (#35425)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
2026-07-27 21:17:45 +08:00
rjl493456442
9621c6ad10
version: release v1.17.5 (#35421) 2026-07-27 16:14:16 +08:00
rjl493456442
cff7fcbb95
go.mod: update snappy dependency (#35422)
This PR updates the go-snappy dependency.
2026-07-27 09:34:59 +02:00
rjl493456442
ca1f2e4d38
core: fix tx size calculation (#35406)
Some checks failed
/ Linux Build (push) Has been cancelled
/ Linux Build (arm) (push) Has been cancelled
/ Keeper Build (push) Has been cancelled
/ Windows Build (push) Has been cancelled
/ Docker Image (push) Has been cancelled
This PR fixes the incorrect size calculation for blob sidecar. The
original formula is for legacy sidecar without the version tag. As the
legacy version has been deprecated and no longer supported by the Geth's
blobPool, the size calculation should also be flipped to sidecar v1.
2026-07-24 10:50:20 +02:00
cui
cd65ccad96
eth/downloader: hold pivotLock when marking pivot committed (#35405)
commitPivotBlock updated committed without pivotLock, while other pivot
transitions serialize through that lock. Take the lock around the store
to keep pivot commitment consistent with pivotHeader updates.
2026-07-24 16:19:35 +08:00
rjl493456442
a524f2bb17
node: check authorization header case-insensitivity (#35408) 2026-07-24 16:19:14 +08:00
cui
af03a271df
cmd/utils: skip memory-limit sanitize when total memory is unknown (#35407) 2026-07-24 15:48:40 +08:00
Jonny Rhea
ff44a796a1
core: coordinate the state prefetcher with block processing (#35404)
This PR coordinates the prefetcher with the main tx executor. Block
processing publishes the index of the transaction it is executing,
prefetch workers skip anything already reached and transactions above 1M
gas are promoted to the front of the prefetch queue while the rest keeps
block order.
2026-07-24 15:43:46 +08:00
cui
b2ee83931b
eth/catalyst: allow reorg depth equal to maxReorgDepth (#35391)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
The deep-reorg check used depth >= maxReorgDepth, rejecting reorgs at
exactly the configured limit. Use > so a depth equal to maxReorgDepth is
still accepted.
2026-07-23 22:49:48 +08:00
rjl493456442
f03b91cf28
core: optimize block validation (#35403)
This PR parallelizes the block validation alongside the IntermediateRoot, 
saving the time spent on the receiptRoot hashing, BAL hashing and so on.
2026-07-23 22:49:01 +08:00
cui
e317407d16
eth/fetcher: clear partial map when dropping last waitlist peer (#35399)
Some checks are pending
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Linux Build (push) Waiting to run
/ Docker Image (push) Waiting to run
When a peer drop removes the last waiter for a hash, waitlist and
waittime were cleaned up but partial could retain a stale entry. Delete
it too so the hash is fully forgotten.
2026-07-23 10:22:47 +02:00
rjl493456442
81ab8b594e
eth/downloader: disable snap mode after committing pivot block (#35402)
This PR improves the sync mode management, disabling the snap mode once 
the pivot block is committed. 

Originally the mode will only be flipped from snap to full once the entire sync 
cycle is completed. However, it's theoretically possible to cancel the sync cycle
after committing the pivot but before inserting the remaining blocks. It drags
the following sync cycle back to the snap mode.

The snap mode should only be used if the head state is missing and unrecoverable. 
Enabling the snap mode for multiple times should be strictly prevented.

What's more, it brings a fix to pivot block management, that once the
pivot block is committed, the pivot block marker should be no longer advanced,
preventing the situation that the real pivot state is below the pivot marker.
2026-07-23 14:30:20 +08:00
Jonny Rhea
8e8003acd3
triedb/pathdb: report nothing recoverable during state sync (#35400)
Restarting a node mid-snap-sync can crash-loop during startup chain
repair. On a restart mid-sync the pathdb is disabled (`waitSync`), so
repair rewinds the stateless head to genesis and asks `StateRecoverable`
if it can roll back there. `Recoverable` doesn't check `waitSync`, so it
reports genesis as recoverable, but `Recover` does and refuses with
`waiting for sync`, tripping a `log.Crit`. The flag is persisted, so the
node crash-loops on every restart.

CRIT Failed to recover state number=0 hash=37fcdc..6edf0b err="waiting
for sync"

The fix is to make `Recoverable` return false while a sync is running,
so it agrees with `Recover`. Repair then falls through to the existing
"wait state sync" path.
2026-07-23 14:26:01 +08:00
rjl493456442
c767f825c5
cmd: add gogc flag (#35363)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
This PR adds the CLI flag gogc for twisting the garbage collection
target. The default value is chosen as the 50, balancing the 
performance gain and potential memory peak.
2026-07-23 11:07:42 +08:00
cui
a9ca080d7f
eth/fetcher: count unique hashes in blob queueing metric (#35393)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
blobFetcherQueueingHashes used len(announces), which is the number of
peers with pending announces, not the number of queued hashes. Count
unique hashes across peers instead.

---------

Co-authored-by: Bosul Mun <bsbs8645@snu.ac.kr>
2026-07-22 13:20:43 +02:00
Marius van der Wijden
5d88c6b324
core: fix tracer panic (#35396)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
Now with 8037, there are transactions that fail AFTER intrinsic gas but
BEFORE Call or Create operation. These will currently result in a panic
in tracing, since they produce a receipt

---------

Co-authored-by: Gary Rong <garyrong0905@gmail.com>
2026-07-22 11:37:28 +08:00
rjl493456442
6e49f8e6b3
core: improve amsterdam fork test coverage (#35364)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
Improve test coverage for amsterdam EIPs
2026-07-21 11:02:02 +08:00
0xoasis
85fe272355
core/txpool/blobpool: serialize legacy data conversions (#35387)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
`conversionQueue` is meant to run billy/legacy migrations serially on a
single worker. On each `startConversion`, it currently always calls
`runNextTask()`, which overwrites `taskDone` and starts another
goroutine even when a migration is already running.

That breaks two invariants during an upgrade with legacy entries in both
the main store and limbo:

1. Migrations intended to be serial can run concurrently.
2. `close()` only waits for the most recently launched task, so shutdown
can close the stores while a forgotten migration is still using them.

Only start the next queued migration when no task is active (`taskDone
== nil`). The existing `taskDone` completion path then advances the
queue, and `close` reliably waits for the active task.
2026-07-20 19:25:57 +02:00
rjl493456442
47450f97fc
core/vm: initialize the bogota instructions from Amsterdam (#35383) 2026-07-20 09:12:35 -05:00
0xoasis
a38a90bc60
eth/protocols/eth: track announced tx hashes only after send (#35384)
Commit 1f87331fb moved the known-transaction marking in
`sendPooledTransactionHashes` to after a successful send, so hashes are
not marked known to the peer if the announcement fails to go out.

The sparse blobpool change (d91b71fb3) reintroduced the original
track-before-send ordering when adding the eth/72 packet variant,
causing failed announcements to suppress future re-announcements of the
same hashes to that peer.

This restores the send-first ordering for both eth/71 and eth/72 packet
versions, and adds a regression test covering success and failure paths
on both protocol versions.

## Checklist

- [x] Restored mark-known-after-send for ETH71 and ETH72
- [x] Added `TestSendPooledTransactionHashes` covering success and
closed-pipe failure

---------

Co-authored-by: Bosul Mun <bsbs8645@snu.ac.kr>
2026-07-20 15:40:04 +02:00
Marius van der Wijden
4363b81e6f
eth/catalyst: pass TargetGasLimit via engine api (#35372)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
Pass targetGasLimit via engine api

---------

Co-authored-by: Gary Rong <garyrong0905@gmail.com>
2026-07-20 15:08:23 +08:00
0xoasis
4911ab04fc
cmd/geth, eth/ethconfig: preserve zero engine reorg depth (#35373)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
2026-07-20 10:53:19 +08:00
Jonny Rhea
bb6401ee5f
miner, core: reuse the chain's jumpdest cache when building payloads (#35378)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
Follow-up to #34850. The miner's payload EVM previously used a private
per-EVM JUMPDEST map, so every ~2s payload rebuild re-analyzed the code
bitmap of every contract the block touches.
2026-07-18 17:38:24 -05:00
rjl493456442
dddbaa4bf3
cmd/utils: export chain with block-level accessList (#35369)
Some checks failed
/ Linux Build (arm) (push) Has been cancelled
/ Keeper Build (push) Has been cancelled
/ Linux Build (push) Has been cancelled
/ Windows Build (push) Has been cancelled
/ Docker Image (push) Has been cancelled
2026-07-17 18:54:07 +02:00
ozpool
80b58f649a
cmd/devp2p/internal/ethtest: fix header stride in reverse GetHeaders (#35362)
`Chain.GetHeaders` steps by `1 + Skip` in the forward branch but by `1 -
Skip` in the reverse branch. `Skip` is a `uint64`, so the reverse stride
is wrong for every `Skip > 0`:

| Skip | reverse step | result |
| --- | --- | --- |
| 0 | `-= 1` | correct |
| 1 | `-= 0` | block number never moves, the same header is returned
`Amount` times |
| >= 2 | `1 - Skip` underflows | walks *forward* instead of back (`Skip
= 2` on block 100 lands on 101) |

Per the `GetBlockHeadersRequest` definition, `Skip` is "Blocks to skip
between consecutive headers", so the stride is `Skip + 1` in whichever
direction the query runs. Subtracting `1 + Skip` makes the reverse
branch mirror the forward one.

The existing table test covers forward + `Skip: 1` and reverse + `Skip:
0` (which works by accident, since `1 - 0 == 1`). Added the missing
reverse + `Skip: 1` case; it fails on master:

```
--- FAIL: TestChainGetHeaders/3
    Test: TestChainGetHeaders/3
FAIL	github.com/ethereum/go-ethereum/cmd/devp2p/internal/ethtest
```

and passes with the fix (4/4).

No caller sends a reverse request with `Skip > 0` today, so nothing is
broken in the current suite. The helper computes the expected headers
that responses are checked against, though, so the moment a reverse+skip
case is added it would silently assert the wrong headers rather than
fail loudly.
2026-07-17 18:51:45 +02:00
Sina M
06b23b4293
.github: rm s1na from CODEOWNERS (#35365)
Some checks failed
/ Linux Build (push) Has been cancelled
/ Linux Build (arm) (push) Has been cancelled
/ Keeper Build (push) Has been cancelled
/ Windows Build (push) Has been cancelled
/ Docker Image (push) Has been cancelled
🫡
2026-07-15 17:48:03 +02:00
Felix Lange
bde64d702d
.mailmap: consolidate healthykim committer names (#35366) 2026-07-15 17:47:45 +02:00
Bosul Mun
d91b71fb36
core/txpool/blobpool, eth: implement sparse blobpool (#34047)
This is the implementation of EIP-8070 Sparse Blobpool. It introduces
protocol version eth/72 which relays blob transaction cells instead of
full blobs.

The blobpool now store 'incomplete' transactions, where only some of
the cells are provided. The stored cell indexes are taken from the
custody bitmap, which is provided by the consensus layer in
forkchoiceUpdatedV4. This method will be called once Glamsterdam
activates, and the default custody is full custody, so for now there
is no change in the amount of stored cells for now.

The main entities added are the BlobBuffer and BlobFetcher, which work
together to track and fetch missing cells from connected peers. The
partial transactions become available for inclusion in blocks when
they are covered by enough peers that hold all cells.

This change also introduces engine_getBlobsV4, which allows for
cell-based responses (and partial blobs with only some of the cells).
We maintain backward compatibility with getBlobsV3 which expects full
blob responses by recovering the blob from available cells. Since this
process is resource-intensive, we proactively cache the conversion so
it is ready in time for getBlobsV3 calls. This mechanism will be
removed once support for getBlobsV4 is universal across all consensus
layer implementations.

devp2p tests for eth/72 are not part of this initial change. This is
to avoid breaking test success status for execution clients that do
not have eth/72 implemented yet. The tests will be added in a
subsequent change.

---------

Co-authored-by: Felix Lange <fjl@twurst.com>
2026-07-15 14:41:04 +02:00
Sina M
c3f2851872
cmd/utils: tune GOGC for large cache values (#34851)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run
---------

Co-authored-by: jonny rhea <5555162+jrhea@users.noreply.github.com>
2026-07-14 13:00:47 -05:00
Jonny Rhea
d5d936d76c
eth/catalyst: handle bogota fork in payloadVersion (#35355)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Docker Image (push) Waiting to run
#34057 added the Bogota fork, but didn't add it to payloadVersion.
This PR fixes the CI error.
2026-07-14 17:24:07 +02:00
ozpool
3155d3ad14
core/rawdb: drop stray %d verb from freezer metadata log message (#35351) 2026-07-14 09:56:22 -05:00