-
Notifications
You must be signed in to change notification settings - Fork 21.6k
miner: add blob fees #32372
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
miner: add blob fees #32372
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
remove todo
| // TODO (MariusVanDerWijden) add blob fees | ||
|
|
||
| // Add blob fees for blob transactions (EIP-4844) | ||
| if tx.Type() == types.BlobTxType { |
Member
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The fee of blobs are burned without paying to block producer. It makes no sense to include them here.
cuiweixie
added a commit
to cuiweixie/go-ethereum
that referenced
this pull request
Aug 11, 2025
MariusVanDerWijden
pushed a commit
that referenced
this pull request
Aug 11, 2025
gballet
pushed a commit
to gballet/go-ethereum
that referenced
this pull request
Sep 11, 2025
oleg-ssvlabs
added a commit
to compose-network/op-geth
that referenced
this pull request
Dec 1, 2025
* all: incorporate state history indexing status into eth_syncing response (#32099) This pull request tracks the state indexing progress in eth_syncing RPC response, i.e. we will return non-null syncing status until indexing has finished. * version: release go-ethereum v1.16.0 stable * version: begin v1.16.1 release cycle * .gitea: trigger PPA upload on tag * .travis.yml: remove travis configuration * all: replace override.prague with osaka (#32093) replace `--override.prague` with `--override.osaka` Signed-off-by: jsvisa <[email protected]> * node: do not double-wrap KV stores (#32089) For no apparent reason, KV stores were getting wrapped in `nofreezedb` first and then in `freezerdb`. * eth: correct tracer initialization in BlockchainConfig (#32107) core.BlockChainConfig.VmConfig is not a pointer, so setting the Tracer on the `vmConfig` object after it was passed to options does *not* apply it to options.VmConfig This fixes the issue by setting the value directly inside the `options` object and removing the confusing `vmConfig` variable to prevent further mistakes. * .gitea: switch release builds to static linking (#32118) This is to avoid compatibility issues with mismatched glibc versions between the builder and deployment target. Fixes #32102 * .gitea: fix 386 upload * .gitea: disable cron schedule * triedb: reset state indexer after snap synced (#32104) Fix the issue after initial snap sync with `gcmode=archive` enabled. ``` NewPayload: inserting block failed error="history indexing is out of order, last: null, requested: 1" ``` --------- Signed-off-by: Delweng <[email protected]> Co-authored-by: Gary Rong <[email protected]> * eth/filters: add address limit to filters (#31876) The address filter was never checked against a maximum limit, which can be somewhat abusive for API nodes. This PR adds a limit similar to topics ## Description (AI generated) This pull request introduces a new validation to enforce a maximum limit on the number of addresses allowed in filter criteria for Ethereum logs. It includes updates to the `FilterAPI` and `EventSystem` logic, as well as corresponding test cases to ensure the new constraint is properly enforced. ### Core functionality changes: * **Validation for maximum addresses in filter criteria**: - Added a new constant, `maxAddresses`, set to 100, to define the maximum allowable addresses in a filter. - Introduced a new error, `errExceedMaxAddresses`, to handle cases where the number of addresses exceeds the limit. - Updated the `GetLogs` method in `FilterAPI` to validate the number of addresses against `maxAddresses`. - Modified the `UnmarshalJSON` method to return an error if the number of addresses in the input JSON exceeds `maxAddresses`. - Added similar validation to the `SubscribeLogs` method in `EventSystem`. ### Test updates: * **New test cases for address limit validation**: - Added a test in `TestUnmarshalJSONNewFilterArgs` to verify that exceeding the maximum number of addresses triggers the `errExceedMaxAddresses` error. - Updated `TestInvalidLogFilterCreation` to include a test case for an invalid filter with more than `maxAddresses` addresses. - Updated `TestInvalidGetLogsRequest` to test for invalid log requests with excessive addresses. These changes ensure that the system enforces a reasonable limit on the number of addresses in filter criteria, improving robustness and preventing potential performance issues. --------- Co-authored-by: zsfelfoldi <[email protected]> * Fix log indexer noise after debug_setHead operations (#31934) ## Summary This PR resolves Issue #31929 by reducing log noise generated by the log indexer after `debug_setHead` operations. ## Problem Description When `debug_setHead` is called to rewind the blockchain, blocks are removed from the database. However, the log indexer's `ChainView` objects may still hold references to these deleted blocks. When `extendNonCanonical()` attempts to access these missing headers, it results in: 1. **Repeated ERROR logs**: `Header not found number=X hash=0x...` 2. **Log noise** that can mask other important errors 3. **User confusion** about whether this indicates a real problem ## Root Cause Analysis The issue occurs because: - `debug_setHead` removes blocks from the blockchain database - Log indexer's `ChainView` may still reference deleted block hashes - `extendNonCanonical()` in `core/filtermaps/chain_view.go` tries to fetch these missing headers - The existing `return false` logic properly handles the error, but logs at ERROR level ## Solution This is a **logging improvement only** - no functional logic changes: ### Changes Made 1. **Log level**: Changed from `ERROR` to `DEBUG` 2. **Log message**: Enhanced with descriptive context about chain view extension 3. **Comments**: Added explanation for when this situation occurs 4. **Behavior**: Maintains existing error handling (`return false` was already present) ### Code Changes ```go // Before log.Error("Header not found", "number", number, "hash", hash) return false // After // Header not found - this can happen after debug_setHead operations // where blocks have been deleted. Return false to indicate the chain view // is no longer valid rather than logging repeated errors. log.Debug("Header not found during chain view extension", "number", number, "hash", hash) return false ``` ## Testing ### Automated Tests - ✅ All existing filtermaps tests pass: `go test ./core/filtermaps -v` - ✅ No regressions in related functionality ### Manual Verification 1. **Before fix**: Started geth in dev mode, generated blocks, called `debug_setHead(3)` → **5 repeated ERROR logs** 2. **After fix**: Same scenario → **4 DEBUG logs, no ERROR noise** ### Test Environment ```bash # Setup test environment rm -rf ./dev-test-data ./build/bin/geth --dev --datadir ./dev-test-data --http --http.api debug,eth,net,web3 --verbosity 4 # Generate test blocks and trigger issue curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"debug_setHead","params":["0x3"],"id":1}' http://localhost:8545 ``` ## Related Issues - Fixes #31929 ## Additional Context This issue was reported as spurious error messages appearing after `debug_setHead` operations. The investigation revealed that while the error handling was functionally correct, the ERROR log level was inappropriate for this expected scenario in development/debugging workflows. The fix maintains full compatibility while significantly improving the debugging experience for developers using `debug_setHead`. --------- Co-authored-by: Sun Tae, Kim <[email protected]> Co-authored-by: zsfelfoldi <[email protected]> * core/filtermaps: clean up log format of unindexing message (#32123) Sorry for not fully fixed in https://github.com/ethereum/go-ethereum/pull/31761, now the log format of unindexing message is cleaned up, to make it consistent with the indexing message. * eth/catalyst: fix the log message in newPayloadV4 (#32125) It should be `newPayloadV4 must only be called for prague payloads` for the V4 payload error * internal/ethapi: prealloc map for the txpool api (#32110) use `make(map, len(txpool))` to prealloc the map for the txpool content, to avoid the map growing in the loop. * ethapi: reduce some of the wasted effort in GetTransactionReceipt (#32021) Towards https://github.com/ethereum/go-ethereum/issues/26974 --------- Co-authored-by: Gary Rong <[email protected]> * internal: remove unused shh and swarm modules from console (#32073) Similar to https://github.com/ethereum/go-ethereum/pull/31856, remove the not availabe shh, swarm modules in the console. --------- Co-authored-by: Gary Rong <[email protected]> * core/filtermaps: define APIs for map, epoch calculation (#31659) This pull request refines the filtermap implementation, defining key APIs for map and epoch calculations to improve readability. This pull request doesn't change any logic, it's a pure cleanup. --------- Co-authored-by: zsfelfoldi <[email protected]> * core/types: blockTimestamp in logs is hex-encoded (#32129) closes #32120 * core/rawdb, triedb/pathdb: fix two inaccurate comments (#32130) * eth/catalyst: fix edge case in simulated backend (#31871) geth cmd: `geth --dev --dev.period 5` call: `debug.setHead` to rollback several blocks. If the `debug.setHead` call is delayed, it will trigger a panic with a small probability, due to using the null point of `fcResponse.PayloadID`. --------- Co-authored-by: Marius van der Wijden <[email protected]> * accounts/abi: generate TryPack* methods for abigen v2 bindings (#31692) 1. Fix the error return format. **todo**: ~~`bindtype` needs more complex logic to fix it.~~ ` if err != nil { return nil, err } if err == nil { return obj, nil } ` 2. ~~Return pointer type object to avoid copying the whole struct content.~~ 3. Give the panic decision to the user. 4. Fix empty line at the end of function. **TODO**: ~~fix some related test cases.~~ --------- Co-authored-by: Jared Wasinger <[email protected]> * version: release go-ethereum v1.16.1 stable * version: begin v1.16.2 release cycle * beacon/blsync: update logs for blsync (Fixes #31968 ) (#32046) Small update for logs when syncing with blsync. Downgrades the "latest filled block is not available" to warn. Co-authored-by: shantichanal <[email protected]> * cmd/workload: rework tracegen to run tracing at block level (#32092) This PR changes the trace test to block level, aiming for better execution performance. --------- Co-authored-by: zsfelfoldi <[email protected]> * core/state: add GetStateAndCommittedState (#31585) Improves the SSTORE gas calculation a bit. Previously we would pull up the state object twice. This is okay for existing objects, since they are cached, however non-existing objects are not cached, thus we needed to go through all 128 diff layers as well as the disk layer twice, just for the gas calculation ``` goos: linux goarch: amd64 pkg: github.com/ethereum/go-ethereum/core/vm cpu: AMD Ryzen 9 5900X 12-Core Processor │ /tmp/old.txt │ /tmp/new.txt │ │ sec/op │ sec/op vs base │ Interpreter-24 1118.0n ± 2% 602.8n ± 1% -46.09% (p=0.000 n=10) ``` --------- Co-authored-by: Gary Rong <[email protected]> * cmd/utils, internal/debug: hide the deprecated flags (#32128) Some of the flags were deprecated, so try to hide them in the help message. And move the `--vmodule` and `--logjson` flags to the DeprecatedCategory. * .gitea: add windows build (experimental) * cmd/utils: show full deprecated flags (#32141) This is a follow up PR after #32128 , Seems I've missed to add --txlookuplimit as hidden. In hte meanwhile, I also add the other deprecated flags into the output of `show-deprecated-flags` * cmd/utils: update flag description of gcmode (#32145) * .gitea: add workflow_dispatch for release build * .gitea: update PATH * .gitea: set PATH * gitea: try with cmd * gitea: set PATH in script * .gitea: fix typo in windows workflow * core/vm: move nil-check out of the interpreter loop (#32068) Moves the jumptable nil check our of the interpreter loop. Benchmarks show a 2-10% improvement. * core/vm: implement EIP-7939 - CLZ opcode (#31989) https://eips.ethereum.org/EIPS/eip-7939 --------- Co-authored-by: spencer-tb <[email protected]> Co-authored-by: Felix Lange <[email protected]> * core/txpool/blobpool: lower log level for warnings (#32142) - Change the log level to `warning`, during syncing blocks, the `final == nil` is normal. - Change to log tx hash. * .github, internal/flags: improve actions test runs (#32150) This change enables more tests to run on GitHub actions. First, it removes the `-short` flag passed to `go test`, unskipping some longer running tests. We also enable the full consensus tests to run by enabling submodules during git clone. The EF now operates org wide runners with the `self-hosted-ghr` label. These are auto-scaling runners which should ideally allow us to process any amount of testing load we throw at them. The new runners have `HOME` configured differently from the actual user home directory, so our internal test for resolving `~` had to be adapted to work in this scenario. * consensus/misc/eip4844: implement EIP-7918 (#31965) https://eips.ethereum.org/EIPS/eip-7918 --------- Co-authored-by: Felix Lange <[email protected]> * core/vm: implement EIP-7951 - precompile for secp256r1 (#31991) https://github.com/ethereum/EIPs/pull/9833 Based on #27540, #30043 --------- Co-authored-by: Ulaş Erdoğan <[email protected]> * cmd, eth/catalyst: exit geth only if exitWhenSynced is specified (#32149) This pull request modifies the behavior of `--synctarget` to terminate the node only when `--exitWhenSynced` is explicitly specified. * eth/catalyst: abort dev mode block commit if shut down is triggered (#32166) alternate approach to https://github.com/ethereum/go-ethereum/pull/31328 suggested by @MariusVanDerWijden . This prevents Geth from outputting a lot of logs when trying to commit on-demand dev mode blocks while the client is shutting down. The issue is hard to reproduce, but I've seen it myself and it is annoying when it happens. I think this is a reasonable simple solution, and we can revisit if we find that the output is still too large (i.e. there is a large delay between initiating shut down and the simulated beacon receiving the signal, while in this loop). Co-authored-by: Marius van der Wijden <[email protected]> * miner, core, core/txpool: implement EIP 7825 - TX Gas Limit Cap (#31824) Implements EIP-7825 --------- Co-authored-by: Gary Rong <[email protected]> Co-authored-by: lightclient <[email protected]> Co-authored-by: MariusVanDerWijden <[email protected]> * core/vm: update gas cost of CLZ to five (#32172) https://github.com/ethereum/EIPs/commit/a794de3fcf71bb8c71e8bafdba11f63133ce4516 * core,miner: implement EIP-7934 - RLP Execution Block Size Limit (#31990) This PR adds a block validation check for the maximum block size, as required by EIP-7934, and also applies a slightly lower size limit during block building. --------- Co-authored-by: spencer-tb <[email protected]> Co-authored-by: Felix Lange <[email protected]> Co-authored-by: Gary Rong <[email protected]> * cmd/utils: add the missing check for the HoodiFlag in blsync (#32179) Hoodi network flag should be exclusive to other network flags for both blysnc standalone and integrated mode. * cmd/clef: update Safe API documentation links in changelog (#32136) This PR updates the outdated documentation URL from docs.gnosis.io to the new official docs.safe.global domain. The change reflects the rebranding from Gnosis Safe to Safe and ensures that users are directed to the current API documentation for transaction service reference. * core/types: add block-level access list structures with encoding/decoding (#31948) This adds the SSZ types from the [EIP-7928](https://eips.ethereum.org/EIPS/eip-7928) and also adds encoder/decoder generation using https://github.com/ferranbt/fastssz. The fastssz dependency is updated because the generation will not work properly with the master branch version due to a bug in fastssz. --------- Co-authored-by: Gary Rong <[email protected]> * eth/downloader: fix ancient limit in snap sync (#32188) This pull request fixes an issue in disabling direct-ancient mode in snap sync. Specifically, if `origin >= frozen && origin != 0`, it implies a part of chain data has been written into the key-value store, all the following writes into ancient store scheduled by downloader will be rejected with error `ERROR[07-10|03:46:57.924] Error importing chain data to ancients err="can't add block 1166 hash: the append operation is out-order: have 1166 want 0"`. This issue is detected by the https://github.com/ethpandaops/kurtosis-sync-test, which initiates the first snap sync cycle without the finalized header and implicitly disables the direct-ancient mode. A few seconds later the second snap sync cycle is initiated with the finalized information and direct-ancient mode is enabled incorrectly. * .github: remove karalabe from CODEOWNERS * cmd/geth: update vcheck testdata, add docs on generating signatures (#32121) Fixed typo in security release URL by replacing: Old: https://blog.ethereum.org/2020/11/12/geth_security_release/ New: https://blog.ethereum.org/2020/11/12/geth-security-release/ --------- Co-authored-by: lightclient <[email protected]> * signer/core/apitypes: require blob txs to have tx.to set (#32197) Check the `to` address before building the blob tx. --------- Co-authored-by: jwasinger <[email protected]> * accounts/keystore: update links to documenation (#32194) --- **Description:** - Replaced outdated GitHub wiki links with the official Ethereum documentation for Web3 Secret Storage. - Updated references in `keystore.go` and `passphrase.go` for improved accuracy and reliability. --- * ethclient/gethclient: remove race condition in tests (#32206) alternative to https://github.com/ethereum/go-ethereum/pull/32200 The race condition is not happening yet, since there is only a single call to `newTestBackend`, but there might be more in the future * params: EIP-7892 - Blob Parameter Only Hardforks (#32193) This is a resubmit of https://github.com/ethereum/go-ethereum/pull/31820 against the `master` branch. --------- Co-authored-by: Marius van der Wijden <[email protected]> Co-authored-by: Gary Rong <[email protected]> * eth/fetcher: fix announcement drop logic (#32210) This PR fixes an issue in the tx_fetcher DoS prevention logic where the code keeps the overflow amount (`want - maxTxAnnounces`) instead of the allowed amount (`maxTxAnnounces - used`). The specific changes are: - Correct slice indexing in the announcement drop logic - Extend the overflow test case to cover the inversion scenario * miner: set sidecar version when recomputing proofs (#32199) - If the block number is `osaka` fork and needs to recompute some `blob proofs` to `cell proofs`, here also needs to set version to `1`. * all: fix outdated ethereum wiki json-rpc json-rpc doc links (#32209) Replace outdated wiki reference with ethereum.org documentation links * core/types: fix CellProofsAt method (#32198) * triedb/pathdb: introduce file-based state journal (#32060) Introduce file-based state journal in path database, fixing the Pebble restriction when the journal size exceeds 4GB. --------- Signed-off-by: jsvisa <[email protected]> Co-authored-by: Gary Rong <[email protected]> * core/rawdb: change the mechanism to schedule freezer sync (#32135) This pull request slightly improves the freezer fsync mechanism by scheduling the Sync operation based on the number of uncommitted items and original time interval. Originally, freezer.Sync was triggered every 30 seconds, which worked well during active chain synchronization. However, once the initial state sync is complete, the fixed interval causes Sync to be scheduled too frequently. To address this, the scheduling logic has been improved to consider both the time interval and the number of uncommitted items. This additional condition helps avoid unnecessary Sync operations when the chain is idle. * eth/protocols/snap, p2p/discover: improve zero time checks (#32214) * all: update dead wiki links (#32215) --- **Description:** - Replaced outdated GitHub wiki links with current, official documentation URLs. - Removed links that redirect or are no longer relevant. - Ensured all references point to up-to-date and reliable sources. --- * core/rawdb: reduce allocations in rawdb.ReadHeaderNumber (#31913) This is something interesting I came across during my benchmarks, we spent ~3.8% of all allocations allocating the header number on the heap. ``` (pprof) list GetHeaderByHash Total: 38197204475 ROUTINE ======================== github.com/ethereum/go-ethereum/core.(*BlockChain).GetHeaderByHash in github.com/ethereum/go-ethereum/core/blockchain_reader.go 0 5786566117 (flat, cum) 15.15% of Total . . 79:func (bc *BlockChain) GetHeaderByHash(hash common.Hash) *types.Header { . 5786566117 80: return bc.hc.GetHeaderByHash(hash) . . 81:} . . 82: . . 83:// GetHeaderByNumber retrieves a block header from the database by number, . . 84:// caching it (associated with its hash) if found. . . 85:func (bc *BlockChain) GetHeaderByNumber(number uint64) *types.Header { ROUTINE ======================== github.com/ethereum/go-ethereum/core.(*HeaderChain).GetHeaderByHash in github.com/ethereum/go-ethereum/core/headerchain.go 0 5786566117 (flat, cum) 15.15% of Total . . 404:func (hc *HeaderChain) GetHeaderByHash(hash common.Hash) *types.Header { . 1471264309 405: number := hc.GetBlockNumber(hash) . . 406: if number == nil { . . 407: return nil . . 408: } . 4315301808 409: return hc.GetHeader(hash, *number) . . 410:} . . 411: . . 412:// HasHeader checks if a block header is present in the database or not. . . 413:// In theory, if header is present in the database, all relative components . . 414:// like td and hash->number should be present too. (pprof) list GetBlockNumber Total: 38197204475 ROUTINE ======================== github.com/ethereum/go-ethereum/core.(*HeaderChain).GetBlockNumber in github.com/ethereum/go-ethereum/core/headerchain.go 94438817 1471264309 (flat, cum) 3.85% of Total . . 100:func (hc *HeaderChain) GetBlockNumber(hash common.Hash) *uint64 { 94438817 94438817 101: if cached, ok := hc.numberCache.Get(hash); ok { . . 102: return &cached . . 103: } . 1376270828 104: number := rawdb.ReadHeaderNumber(hc.chainDb, hash) . . 105: if number != nil { . 554664 106: hc.numberCache.Add(hash, *number) . . 107: } . . 108: return number . . 109:} . . 110: . . 111:type headerWriteResult struct { (pprof) list ReadHeaderNumber Total: 38197204475 ROUTINE ======================== github.com/ethereum/go-ethereum/core/rawdb.ReadHeaderNumber in github.com/ethereum/go-ethereum/core/rawdb/accessors_chain.go 204606513 1376270828 (flat, cum) 3.60% of Total . . 146:func ReadHeaderNumber(db ethdb.KeyValueReader, hash common.Hash) *uint64 { 109577863 1281242178 147: data, _ := db.Get(headerNumberKey(hash)) . . 148: if len(data) != 8 { . . 149: return nil . . 150: } 95028650 95028650 151: number := binary.BigEndian.Uint64(data) . . 152: return &number . . 153:} . . 154: . . 155:// WriteHeaderNumber stores the hash->number mapping. . . 156:func WriteHeaderNumber(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { ``` Opening this to discuss the idea, I know that rawdb.EmptyNumber is not a great name for the variable, open to suggestions * trie: avoid spawning goroutines for empty children (#32220) * eth/downloader: improve nil pointer protection (#32222) Fix #32221 --------- Co-authored-by: rjl493456442 <[email protected]> * account/abi/bind/v2: fix TestDeploymentWithOverrides (#32212) The root cause of the flaky test was a nonce conflict caused by async contract deployments. This solution defines a custom deployer with automatic nonce management. * eth/tracers: apply block header overrides correctly (#32183) Fixes #32175. This fixes the scenario where the blockhash opcode would return 0x0 during RPC simulations when using BlockOverrides with a future block number. The root cause was that BlockOverrides.Apply() only modified the vm.BlockContext, but GetHashFn() depends on the actual types.Header.Number to resolve valid historical block hashes. This caused a mismatch and resulted in incorrect behavior during trace and call simulations. --------- Co-authored-by: shantichanal <[email protected]> Co-authored-by: lightclient <[email protected]> * triedb/pathdb: avoid duplicate metadata reads (#32226) * eth/protocols/snap: fix negative eta in state progress logging (#32225) * triedb/pathdb: improve the performance of parse index block (#32219) The implementation of `parseIndexBlock` used a reverse loop with slice appends to build the restart points, which was less cache-friendly and involved unnecessary allocations and operations. In this PR we change the implementation to read and validate the restart points in one single forward loop. Here is the benchmark test: ```bash go test -benchmem -bench=BenchmarkParseIndexBlock ./triedb/pathdb/ ``` The result as below: ``` benchmark old ns/op new ns/op delta BenchmarkParseIndexBlock-8 52.9 37.5 -29.05% ``` about 29% improvements --------- Signed-off-by: jsvisa <[email protected]> * all: define constructor for BlobSidecar (#32213) The main purpose of this change is to enforce the version setting when constructing the blobSidecar, avoiding creating sidecar with wrong/default version tag. * params: update tx gas limit cap (#32230) Updates the tx gas limit cap to the new parameter (2^24) https://github.com/ethereum/EIPs/pull/9986/files * core/txpool/blobpool: remove unused `txValidationFn` from BlobPool (#32237) This PR removes the now‑unused `txValidationFn` field from BlobPool. It became obsolete after a PR https://github.com/ethereum/go-ethereum/pull/31202 was merged. Resolves https://github.com/ethereum/go-ethereum/issues/32236 * triedb/pathdb: fix incorrect address length in history searching (#32248) We should use account length to check address, else OOB maybe occured Signed-off-by: jsvisa <[email protected]> * core/vm: triple modexp cost post-cancun (#32231) https://github.com/ethereum/EIPs/pull/9969/files * core, params: add limit for max blobs in blob transaction (#32246) [EIP-7594](https://eips.ethereum.org/EIPS/eip-7594) defines a limit of max 6 blobs per transaction. We need to enforce this limit during block processing. > Additionally, a limit of 6 blobs per transaction is introduced. Clients MUST enforce this limit when validating blob transactions at submission time, when received from the network, and during block production and processing. * superchain: skip celo mainnet genesis processing (#646) * superchain: skip celo mainnet genesis processing * superchain: add GetChain tests * superchain: add clarifying comments for celo exclusion * build: update tests to fusaka-devnet-3 (#32251) * core/types: minimize this invalid intermediate state (#32241) * core/rawdb: downgrade log level in chain freezer (#32253) * triedb/pathdb: use binary.append to eliminate the tmp scratch slice (#32250) `binary.AppendUvarint` offers better performance than using append directly, because it avoids unnecessary memory allocation and copying. In our case, it can increase the performance by +35.8% for the `blockWriter.append` function: ``` benchmark old ns/op new ns/op delta BenchmarkBlockWriterAppend-8 5.97 3.83 -35.80% ``` --------- Signed-off-by: jsvisa <[email protected]> Co-authored-by: Gary Rong <[email protected]> * p2p/rlpx: optimize XOR operation using bitutil.XORBytes (#32217) Replace manual byte-by-byte XOR implementation with the optimized bitutil.XORBytes function. This improves performance by using word-sized operations on supported architectures while maintaining the same functionality. The optimized version processes data in bulk rather than one byte at a time --------- Co-authored-by: Felix Lange <[email protected]> * eth/gasestimator: fix potential overflow (#32255) Improve binary search, preventing the potential overflow in certain L2 cases * triedb/pathdb: fix an deadlock in history indexer (#32260) Seems the `signal.result` was not sent back in shorten case, this will cause a deadlock. --------- Signed-off-by: jsvisa <[email protected]> Co-authored-by: Gary Rong <[email protected]> * eth/protocols/snap: add healing and syncing metrics (#32258) Adds the heal time and snap sync time to grafana --------- Co-authored-by: Gary Rong <[email protected]> * core: replace the empty fmt.Errorf with errors.New (#32274) The `errors.new` function does not require string formatting, so its performance is better than that of `fmt.Errorf`. * eth/catalyst: fix error message in ExecuteStatelessPayloadV4 (#32269) Correct the error message in the ExecuteStatelessPayloadV4 function to reference newPayloadV4 and the Prague fork, instead of incorrectly referencing newPayloadV3 and Cancun. This improves clarity during debugging and aligns the error message with the actual function and fork being validated. No logic is changed. --------- Co-authored-by: rjl493456442 <[email protected]> * cmd, eth, internal: introduce debug_sync (#32177) Alternative implementation of https://github.com/ethereum/go-ethereum/pull/32159 * all: replace fmt.Errorf with errors.New (#32286) The errors.new function does not require string formatting, so its performance is better than that of fmt.Errorf. * downloader: fix typos, grammar and formatting (#32288) * ethclient/simulated: Fix flaky rollback test (#32280) This PR addresses a flakiness in the rollback test discussed in https://github.com/ethereum/go-ethereum/issues/32252 I found `nonce` collision caused transactions occasionally fail to send. I tried to change error message in the failed test like: ``` if err = client.SendTransaction(ctx, signedTx); err != nil { t.Fatalf("failed to send transaction: %v, nonce: %d", err, signedTx.Nonce()) } ``` and I occasionally got test failure with this message: ``` === CONT TestFlakyFunction/Run_#100 rollback_test.go:44: failed to send transaction: already known, nonce: 0 --- FAIL: TestFlakyFunction/Run_#100 (0.07s) ``` Although `nonces` are obtained via `PendingNonceAt`, we observed that, in rare cases (approximately 1 in 1000), two transactions from the same sender end up with the same nonce. This likely happens because `tx0` has not yet propagated to the transaction pool before `tx1` requests its nonce. When the test succeeds, `tx0` and `tx1` have nonces `0` and `1`, respectively. However, in rare failures, both transactions end up with nonce `0`. We modified the test to explicitly assign nonces to each transaction. By controlling the nonce values manually, we eliminated the race condition and ensured consistent behavior. After several thousand runs, the flakiness was no longer reproducible in my local environment. Reduced internal polling interval in `pendingStateHasTx()` to speed up test execution without impacting stability. It reduces test time for `TestTransactionRollbackBehavior` from about 7 seconds to 2 seconds. * core/state: preallocate capacity for logs list (#32291) Improvement: preallocate capacity for `logs` at first to avoid reallocating multi times. * core/state: improve PrettyPrint function (#32293) * core/types: expose sigHash as Hash for SetCodeAuthorization (#32298) * common/hexutil: replace customized bit sizer with bit.Uintsize (#32304) * accounts/abi: precompile regex (#32301) * cmd/devp2p/internal/v4test: add test for ENRRequest (#32303) This adds a cross-client protocol test for a recently discovered bug in Nethermind. * trie: reduce the memory allocation in trie hashing (#31902) This pull request optimizes trie hashing by reducing memory allocation overhead. Specifically: - define a fullNodeEncoder pool to reuse encoders and avoid memory allocations. - simplify the encoding logic for shortNode and fullNode by getting rid of the Go interfaces. * core/vm: add configurable jumpdest analysis cache (#32143) This adds a method on vm.EVM to set the jumpdest cache implementation. It can be used to maintain an analysis cache across VM invocations, to improve performance by skipping the analysis for already known contracts. --------- Co-authored-by: lmittmann <[email protected]> Co-authored-by: Felix Lange <[email protected]> * eth: fix typos and outdated comments (#32324) * eth/filters: fix error when blockHash is used with fromBlock/toBlock (#31877) This introduces an error when the filter has both `blockHash` and `fromBlock`/`toBlock`, since these are mutually exclusive. Seems the tests were actually returning `not found` error, which went undetected since there was no check on the actual returned error in the test. * rlp/rlpgen: implement package renaming support (#31148) This adds support for importing types from multiple identically-named packages. --------- Co-authored-by: Felix Lange <[email protected]> * beacon/params, core/filtermaps: update checkpoints (#32336) This PR updates checkpoints for blsync and filtermaps. * version: release v1.16.2 (#32343) * version: begin v1.16.3 release cycle (#32345) * core/state: introduce the TransitionState object (verkle transition part 1) (#31634) This is the first part of #31532 It maintains a series of conversion maker which are to be updated by the conversion code (in a follow-up PR, this is a breakdown of a larger PR to make things easier to review). They can be used in this way: - During the conversion, by storing the conversion markers when the block has been processed. This is meant to be written in a function that isn't currently present, hence [this TODO](https://github.com/ethereum/go-ethereum/pull/31634/files#diff-89272f61e115723833d498a0acbe59fa2286e3dc7276a676a7f7816f21e248b7R384). Part of https://github.com/ethereum/go-ethereum/issues/31583 --------- Signed-off-by: Guillaume Ballet <[email protected]> Co-authored-by: Gary Rong <[email protected]> * eth/catalyst: avoid load the same blob tx multi times (#32190) - If all the `vhashes` are in the same `sidecar`, then it will load the same blob tx many times. This PR aims to upgrade this. --------- Co-authored-by: Gary Rong <[email protected]> * eth/gasestimator: check ErrGasLimitTooHigh conditions (#32348) This PR makes 2 changes to how [EIP-7825](https://github.com/ethereum/go-ethereum/pull/31824) behaves. When `eth_estimateGas` or `eth_createAccessList` is called without any gas limit in the payload, geth will choose the block's gas limit or the `RPCGasCap`, which can be larger than the `maxTxGas`. When this happens for `estimateGas`, the gas estimation just errors out and ends, when it should continue doing binary search to find the lowest possible gas limit. This PR will: - Add a check to see if `hi` is larger than `maxTxGas` and cap it to `maxTxGas` if it's larger. And add a special case handling for gas estimation execute when it errs with `ErrGasLimitTooHigh` --------- Co-authored-by: Gary Rong <[email protected]> * core/filtermaps: remove unnecessary nil check and add cv2 lock (#32309) Co-authored-by: zsfelfoldi <[email protected]> * go.mod: upgraded github.com/golang-jwt/jwt/v4 v4.5.1 => v4.5.2 (#32356) https://pkg.go.dev/vuln/GO-2025-3553 * rpc: use reflect.TypeFor (#32316) * crypto/kzg4844: use reflect.TypeFor (#32319) * common, common/hexutil: use reflect.TypeFor (#32321) * beacon/merkle: use reflect.TypeFor (#32322) * core: use reflect.TypeFor (#32320) https://github.com/golang/go/issues/60088 * p2p/enode: use atomic.Pointer in LocalNode (#32360) * signer/core/apitypes: simplify reflect []byte creation (#32315) Co-authored-by: Felix Lange <[email protected]> * rlp: use reflect.TypeFor (#32317) Co-authored-by: Felix Lange <[email protected]> * eth/downloader: fix incomplete code comment (#32354) * metrics: use atomic.Pointer in runtimeHistogram (#32361) Co-authored-by: Felix Lange <[email protected]> * core/vm: fold EVMInterpreter into EVM (#32352) The separation serves no purpose atm, and the circular dependency that EVM and EVMInterpreter had was begging for them to be merged. * ethclient: fix flaky pending tx test (#32380) Fixes: https://github.com/ethereum/go-ethereum/issues/32252 * ethdb/leveldb: check iterator error in Database.DeleteRange (#32384) Add missing it.Error() check after iteration in Database.DeleteRange to avoid silently ignoring iterator errors before writing the batch. Aligns behavior with batch.DeleteRange, which already validates iterator errors. No other functional changes; existing tests pass (TestLevelDB). * core/vm: make types consistent in makeDup (#32378) * miner: remove todo comment (#32389) see https://github.com/ethereum/go-ethereum/pull/32372#discussion_r2265885182 * downloader: fix comment (#32382) The previous comment stated that every 3rd block has a tx and every 5th has an uncle. The implementation actually adds one transaction to every second block and does not add uncles. Updated the comment to reflect the real behavior to avoid confusion when reading tests. * accounts/abi, accounts/keystore: use reflect.TypeFor (#32323) Co-authored-by: Felix Lange <[email protected]> * eth/downloader: skip nil peer in GetHeader (#32369) The GetHeader function was incorrectly returning an error when encountering nil peers in the peers list, which contradicted the comment "keep retrying if none are yet available". Changed the logic to skip nil peers with 'continue' instead of returning an error, allowing the function to properly iterate through all available peers and attempt to retrieve the target header from each valid peer. This ensures the function behaves as intended - trying all available peers before giving up, rather than failing on the first nil peer encountered. * trie, core: rework tracer and track origin value of dirty nodes (#32306) These changes made in the PR should be highlighted here The trie tracer is split into two distinct structs: opTracer and prevalueTracer. The former is specific to MPT, while the latter is generic and applicable to all trie implementations. The original values of dirty nodes are tracked in a NodeSet. This serves as the foundation for both full archive node implementations and the state live tracer. * consensus: fix ambiguous invalid gas limit error (#32405) ## Description Correct symmetric tolerance in gas limit validation: Replace ambiguous "+-=" with standard "+/-" in the error message. Logic rejects when |header − parent| ≥ limit, so allowed range is |Δ| ≤ limit − 1. No logic or functionality has been modified. * metrics: Block Basefee (#658) * basefee metric * Handle nil basefee for before london hf * Update forkdiff * trie: refactor to use slices.Concat (#32401) * cmd: fix inconsistent function name in comment (#32411) fix inconsistent function name in comment Signed-off-by: youzichuan <[email protected]> * eth: abort `requiredBlocks` check if peer handler terminated (#32413) * node: remove unused err var (#32398) * rlp: optimize intsize (#32421) goos: darwin goarch: arm64 pkg: github.com/ethereum/go-ethereum/rlp cpu: Apple M4 │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ Intsize 2.175n ± 5% 1.050n ± 4% -51.76% (p=0.000 n=10) * eth/tracers: Adds codeHash to prestateTracer's response (#32391) **Problem:** Including full account code in prestateTracer response significantly increases response payload size. **Solution:** Add codeHash field to the response. This will allow client-side bytecode caching and is a non-breaking change. **Note:** codeHash for EoAs is excluded to save space. --------- Co-authored-by: Sina Mahmoodi <[email protected]> * eth/syncer: fix typo (#32427) avaibale -> available * p2p: refactor to use time.Now().UnixMilli() in golang std lib (#32402) * .github: upgrade workflows to Go 1.25 (#32425) * build: upgrade -dlgo version to Go 1.25.0 (#32412) * crypto/secp256k1: use ReadBits from common/math (#32430) * build: remove unused functions (#32393) * catalyst/api: centralize OPStack validation into helper functions (#592) * catalyist/api: centralize OPStack validation into helper functions located in a seperate file for a cleaner diff to upstream * add test coverage for optimism validation checks return unadorned errors from helper and allow caller to wrap * lint * use engine.InvalidPayloadAttributes.With() for all failed optimism FCU checks * typos * fix: only check optimism payload attributes if they are not nil * combine conditions * move test * combine checks * add check on withdrawals root from canyon to isthmus * lint * trie, core/state: add the transition tree (verkle transition part 2) (#32366) This add some of the changes that were missing from #31634. It introduces the `TransitionTrie`, which is a façade pattern between the current MPT trie and the overlay tree. --------- Signed-off-by: Guillaume Ballet <[email protected]> Co-authored-by: rjl493456442 <[email protected]> * cmd/evm: use PathScheme in blockrunner (#32444) This is a preparatory change for Verkle/binary trees, since they don't support the hash-based database scheme. This has no impact on the MPT. * core/vm: refactor to use bitutil.TestBytes (#32434) * crypto/bn256: refactor to use bitutil.TestBytes (#32435) * consensus/misc/eip4844: use blob parameters of current header (#32424) This changes the implementation to resolve the blob parameters according to the current header timestamp. This matters for EIP-7918, where we would previously resolve the UpdateFraction according to the parent header fork, leading to a confusing situation at the fork transition block. --------- Co-authored-by: MariusVanDerWijden <[email protected]> * rlp: remove workaround for Value.Bytes (#32433) As of Go 1.19, it is permitted to call Bytes() on a reflect.Value representing an adressable byte array. So we can remove our workaround, undoing #22924. https://go.dev/doc/go1.19#reflectpkgreflect > The method [Value.Bytes](https://go.dev/pkg/reflect/#Value.Bytes) now accepts addressable arrays in addition to slices. * core/vm: fix EIP-7823 modexp input length check (#32363) The order of the checks was wrong which would have allowed a call to modexp with `baseLen == 0 && modLen == 0` post fusaka. Also handles an edge case where base/mod/exp length >= 2**64 --------- Co-authored-by: Felix Lange <[email protected]> * metrics: add tinygo build flag for CPU time (#32454) * core/rawdb: add non-unix alternative for tablewriter (#32455) Continuation of https://github.com/ethereum/go-ethereum/issues/32022 tablewriter assumes unix or windows, which may not be the case for embedded targets. For v0.0.5 of tablewriter, it is noted in table.go: "The protocols were written in pure Go and works on windows and unix systems" --------- Co-authored-by: rjl493456442 <[email protected]> * eth/syncer: stop ticker to prevent resource leak (#32443) * core/rawdb: enhance database key construction (#32431) * rpc: add SetWebsocketReadLimit in Server (#32279) Exposing the public method to setReadLimits for Websocket RPC to prevent OOM. Current, Geth Server is using a default 32MB max read limit (message size) for websocket, which is prune to being attacked for OOM. Any one can easily launch a client to send a bunch of concurrent large request to cause the node to crash for OOM. One example of such script that can easily crash a Geth node running websocket server is like this: https://gist.githubusercontent.com/DeltaXV/b64d221e342e9c1ec6c99c1ab8201544/raw/ec830979ac9a707d98f40dfcc0ce918fc8fb9057/poc.go --------- Co-authored-by: Felix Lange <[email protected]> * CODEOWNERS: add gballet as the owner of trie package (#32466) * ethclient/gethclient: use common.Hash to debug_traceTransaction (#32404) * graphql: add query depth limit to prevent DoS attacks (#32344) ## Summary This PR addresses a DoS vulnerability in the GraphQL service by implementing a maximum query depth limit. While #26026 introduced timeout handling, it didn't fully mitigate the attack vector where deeply nested queries can still consume excessive CPU and memory resources before the timeout is reached. ## Changes - Added `maxQueryDepth` constant (set to 20) to limit the maximum nesting depth of GraphQL queries - Applied the depth limit using `graphql.MaxDepth()` option when parsing the schema - Added test case `TestGraphQLMaxDepth` to verify that queries exceeding the depth limit are properly rejected ## Security Impact Without query depth limits, malicious actors could craft deeply nested queries that: - Consume excessive CPU cycles during query parsing and execution - Allocate large amounts of memory for nested result structures - Potentially cause service degradation or outages even with timeout protection This fix complements the existing timeout mechanism by preventing resource-intensive queries from being executed in the first place. ## Testing Added `TestGraphQLMaxDepth` which verifies that queries with nesting depth > 20 are rejected with a `MaxDepthExceeded` error. ## References - Original issue: #26026 - Related security best practices: https://www.howtographql.com/advanced/4-security/ --------- Co-authored-by: Felix Lange <[email protected]> * p2p: update MaxPeers comment (#32414) * eth/catalyst: return methods by reflect (#32300) Return the exposed methods in `ConsensusAPI` by reflection. * internal/ethapi, miner: fix GetBlockReceipts for pending (#32461) * trie, core/state: introduce trie Prefetch for optimizing preload (#32134) This pull introduces a `Prefetch` operation in the trie to prefetch trie nodes in parallel. It is used by the `triePrefetcher` to accelerate state loading and improve overall chain processing performance. * beacon/engine,eth/catalyst: Fix engine API checks and exec payload creation (#662) * p2p: using math.MaxInt32 from go std lib (#32357) Co-authored-by: Felix Lange <[email protected]> * rlp: refactor to use maths.ReadBits (#32432) * fixes missing protection of nil pointer dereference in scwallet (#32186) Fixes #32181 Signed-off-by: kapil <[email protected]> * accounts/usbwallet: correct version comparison logic (#32417) ## Description This PR fixes a bug in the Ledger hardware wallet version validation logic for EIP-155 transaction signing. The original condition incorrectly allowed older versions that don't support EIP-155 such as 0.9.9 and 0.1.5 to proceed. * p2p: remove todo comment, as it's unnecessary (#32397) as metioned in https://github.com/ethereum/go-ethereum/pull/32351, I think this comment is unnecessary. * core/types: reduce allocations for transaction comparison (#31912) This PR should reduce overall allocations of a running node by ~10 percent. Since most allocations are coming from the re-heaping of the transaction pool. ``` (pprof) list EffectiveGasTipCmp Total: 38197204475 ROUTINE ======================== github.com/ethereum/go-ethereum/core/types.(*Transaction).EffectiveGasTipCmp in github.com/ethereum/go-ethereum/core/types/transaction.go 0 3766837369 (flat, cum) 9.86% of Total . . 386:func (tx *Transaction) EffectiveGasTipCmp(other *Transaction, baseFee *big.Int) int { . . 387: if baseFee == nil { . . 388: return tx.GasTipCapCmp(other) . . 389: } . . 390: // Use more efficient internal method. . . 391: txTip, otherTip := new(big.Int), new(big.Int) . 1796172553 392: tx.calcEffectiveGasTip(txTip, baseFee) . 1970664816 393: other.calcEffectiveGasTip(otherTip, baseFee) . . 394: return txTip.Cmp(otherTip) . . 395:} . . 396: . . 397:// EffectiveGasTipIntCmp compares the effective gasTipCap of a transaction to the given gasTipCap. . . 398:func (tx *Transaction) EffectiveGasTipIntCmp(other *big.Int, baseFee *big.Int) int { ``` This PR reduces the allocations for comparing two transactions from 2 to 0: ``` goos: linux goarch: amd64 pkg: github.com/ethereum/go-ethereum/core/types cpu: Intel(R) Core(TM) Ultra 7 155U │ /tmp/old.txt │ /tmp/new.txt │ │ sec/op │ sec/op vs base │ EffectiveGasTipCmp/Original-14 64.67n ± 2% 25.13n ± 9% -61.13% (p=0.000 n=10) │ /tmp/old.txt │ /tmp/new.txt │ │ B/op │ B/op vs base │ EffectiveGasTipCmp/Original-14 16.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) │ /tmp/old.txt │ /tmp/new.txt │ │ allocs/op │ allocs/op vs base │ EffectiveGasTipCmp/Original-14 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) ``` It also speeds up the process by ~60% There are two minor caveats with this PR: - We change the API for `EffectiveGasTipCmp` and `EffectiveGasTipIntCmp` (which are probably not used by much) - We slightly change the behavior of `tx.EffectiveGasTip` when it returns an error. It would previously return a negative number on error, now it does not (since uint256 does not allow for negative numbers) --------- Signed-off-by: Csaba Kiraly <[email protected]> Co-authored-by: Csaba Kiraly <[email protected]> * triedb/pathdb: improve err message in historical state reader (#32477) Fixes https://github.com/ethereum/go-ethereum/issues/32474 * core, miner, trie: add metrics tracking state trie depth (#32388) Co-authored-by: shantichanal <[email protected]> Co-authored-by: Gary Rong <[email protected]> Co-authored-by: Guillaume Ballet <[email protected]> * p2p/discover: add discv5 invalid findnodes result test cases (#32481) Supersedes #32470. ### What - snap: shorten stall watchdog in `eth/protocols/snap/sync_test.go` from 1m to 10s. - discover/v5: consolidate FINDNODE negative tests into a single table-driven test: - `TestUDPv5_findnodeCall_InvalidNodes` covers: - invalid IP (unspecified `0.0.0.0`) → ignored - low UDP port (`<=1024`) → ignored ### Why - Addresses TODOs: - “Make tests smaller” (reduce long 1m timeout). - “check invalid IPs”; also cover low port per `verifyResponseNode` rules (UDP must be >1024). ### How it’s validated - Test-only changes; no production code touched. - Local runs: - `go test ./p2p/discover -count=1 -timeout=300s` → ok - `go test ./eth/protocols/snap -count=1 -timeout=600s` → ok - Lint: - `go run build/ci.go lint` → 0 issues on modified files. ### Notes - The test harness uses `enode.ValidSchemesForTesting` (which includes the “null” scheme), so records signed with `enode.SignNull` are signature-valid; failures here are due to IP/port validation in `verifyResponseNode` and `netutil.CheckRelayAddr`. - Tests are written as a single table-driven function for clarity; no helpers or environment switching. --------- Co-authored-by: lightclient <[email protected]> * node: fix vhosts for adminAPI (#32488) * core,trie: fix typo in TransitionTrie (#32491) Change `NewTransitionTree` to the correct `NewTransitionTrie`. Signed-off-by: pxwanglu <[email protected]> * .github/workflows: naive PR format checker (#32480) Full disclosure: this has been generated by AI. The goal is to have a quick check that the PR format is correct, before we merge it. This is to avoid the periodical case when someone forgets to add a milestone or check the title matches our preferred format. * p2p: use slices.Clone (#32428) Replaces a helper method with slices.Clone * eth/protocols/eth: Handle DepositTx Receipts * eth: Catch nil chainViews in backend filter maps update * params: fix history serve window for verkle test (#32127) Fixes the history serve window parameter for the test function `getContractStoredBlockHash`. Fixes #32458. * eth/tracers: add missing teardown in TestTraceChain (#32472) The TestTraceChain function was missing a defer backend.teardown() call, which is required to properly release blockchain resources after test completion. --------- Co-authored-by: Sina Mahmoodi <[email protected]> * internal/web3ext: remove deprecated method debug_seedHash (#32495) The corresponding function was removed in #27178 * triedb/pathdb: rename history to state history (#32498) This is a internal refactoring PR, renaming the history to stateHistory. It's a pre-requisite PR for merging trienode history, avoid the name conflict. * build: add support for ubuntu 25.04 (#31666) * cmd: fix typo in comment (#32501) The function name in the comment should be `writeErrors` instead of `writeQueries`. Signed-off-by: tzchenxixi <[email protected]> * eth/tracers: fix supply tracer uncle accounting (#31882) Uncle rewards were being omitted in the supply tracer due to a bug. This PR fixes that. --------- Co-authored-by: Sina Mahmoodi <[email protected]> * triedb/pathdb: refactor state history write (#32497) This pull request refactors the internal implementation in path database a bit, specifically: - purge the state index data in batch - simplify the logic of state history construction and index, make it more readable * rpc: refactor read limit test (#32494) closes #32240 #32232 The main cause for the time out is the slow json encoding of large data. In #32240 they tried to resolve the issue by reducing the size of the test. However as Felix pointed out, the test is still kind of confusing. I've refactored the test so it is more understandable and have reduced the amount of data needed to be json encoded. I think it is still important to ensure that the default read limit is not active, so I have retained one large (~32 MB) test case, but it's at least smaller than the existing ~64 MB test case. * eth: replace hardcoded sleep with polling loop in snap sync test (#32499) Replace hardcoded 5-second sleep with polling loop that actively checks snap sync state. This approach is already used in other project tests (like account_cache_test.go) and provides better reliability by: - Reducing flaky behavior on slower systems - Finishing early when sync completes quickly - Using 1-second timeout with 100ms polling intervals --------- Co-authored-by: lightclient <[email protected]> * internal/ethapi: fix precompile override for eth_estimateGas (#31795) Fix and close https://github.com/ethereum/go-ethereum/issues/31719. --------- Co-authored-by: Sina Mahmoodi <[email protected]> * accounts/abi: fix panic when check event with log has empty or nil topics (#32503) When the log has empty or nil topics, the generated bindings code will panic when accessing `log.Topics[0]`, add a check to avoid it. * core, internal, miner, signer: convert legacy sidecar in Osaka fork (#32347) This pull request implements #32235 , constructing blob sidecar in new format (cell proof) if the Osaka has been activated. Apart from that, it introduces a pre-conversion step in the blob pool before adding the txs. This mechanism is essential for handling the remote **legacy** blob txs from the network. One thing is still missing and probably is worthy being highlighted here: the blobpool may contain several legacy blob txs before the Osaka and these txs should be converted once Osaka is activated. While the `GetBlob` API in blobpool is capable for generating cell proofs at the runtime, converting legacy txs at one time is much cheaper overall. --------- Co-authored-by: MariusVanDerWijden <[email protected]> Co-authored-by: lightclient <[email protected]> * eth/tracers: fix testcase 7702_delegate (#32349) Fixes a prestateTracer test case covering 7702 delegation. --------- Co-authored-by: Jared Wasinger <[email protected]> Co-authored-by: Sina Mahmoodi <[email protected]> * node: fix problematic function name in comment (#32510) fix problematic function name in comment Signed-off-by: slicesequal <[email protected]> * eth: stabilize tx relay peer selection (#31714) When maxPeers was just above some perfect square, and a few peers dropped for some reason, we changed the peer selection function. When new peers were acquired, we changed again. This PR improves the selection function, in two ways. First, it will always select sqrt(peers) to broadcast to. Second, the selection now uses siphash with a secret key, to guard against information leaks about tx source. --------- Signed-off-by: Csaba Kiraly <[email protected]> Co-authored-by: Felix Lange <[email protected]> * core: improve error context in state processor for Prague EIPs (#32509) Add better error context for EIP-6110, EIP-7002, and EIP-7251 processing in state processor to improve debugging capabilities. * all: fix problematic function name in comment (#32513) Fix problematic function name in comment. Do my best to correct them all with a script to avoid spamming PRs. * triedb/pathdb, core: keep root->id mappings after truncation (#32502) This pull request preserves the root->ID mappings in the path database even after the associated state histories are truncated, regardless of whether the truncation occurs at the head or the tail. The motivation is to support an additional history type, trienode history. Since the root->ID mappings are shared between two history instances, they must not be removed by either one. As a consequence, the root->ID mappings remain in the database even after the corresponding histories are pruned. While these mappings may become dangling, it is safe and cheap to keep them. Additionally, this pull request enhances validation during historical reader construction, ensuring that only canonical historical state will be served. * README: add twitter badge to documentation (#32516) * core/rawdb: inspect database in parallel (#32506) `db inspect` on the full database currently takes **30min+**, because the db iterate was run in one thread, propose to split the key-space to 256 sub range, and assign them to the worker pool to speed up. After the change, the time of running `db inspect --workers 16` reduced to **10min**(the keyspace is not evenly distributed). --------- Signed-off-by: jsvisa <[email protected]> Co-authored-by: Gary Rong <[email protected]> * all: improve ETA calculation across all progress indicators (#32521) ### Summary Fixes long-standing ETA calculation errors in progress indicators that have been present since February 2021. The current implementation produces increasingly inaccurate estimates due to integer division precision loss. ### Problem https://github.com/ethereum/go-ethereum/blob/3aeccadd04aee2d18bdb77826f86b1ca000d3b67/triedb/pathdb/history_indexer.go#L541-L553 The ETA calculation has two critical issues: 1. **Integer division precision loss**: `speed` is calculated as `uint64` 2. **Off-by-one**: `speed` uses `+ 1`(2 times) to avoid division by zero, however it makes mistake in the final calculation This results in wildly inaccurate time estimates that don't improve as progress continues. ### Example Current output during state history indexing: ``` lvl=info msg="Indexing state history" processed=16858580 left=41802252 elapsed=18h22m59.848s eta=11h36m42.252s ``` **Expected calculation:** - Speed: 16858580 ÷ 66179848ms = 0.255 blocks/ms - ETA: 41802252 ÷ 0.255 = ~45.6 hours **Current buggy calculation:** - Speed: rounds to 1 block/ms - ETA: 41802252 ÷ 1 = ~11.6 hours ❌ ### Solution - Created centralized `CalculateETA()` function in common package - Replaced all 8 duplicate code copies across the codebase ### Testing Verified accurate ETA calculations during archive node reindexing with significantly improved time estimates. * core/stateless: only report leaf depth in witness stats (#32507) Filtering for leaf nodes was missing from #32388, which means that even the root done was reported, which made little sense for the bloatnet data processing we want to do. * trie/bintrie: add eip7864 binary trees and run its tests (#32365) Implement the binary tree as specified in [eip-7864](https://eips.ethereum.org/EIPS/eip-7864). This will gradually replace verkle trees in the codebase. This is only running the tests and will not be executed in production, but will help me rebase some of my work, so that it doesn't bitrot as much. --------- Signed-off-by: Guillaume Ballet Co-authored-by: Parithosh Jayanthi <[email protected]> Co-authored-by: rjl493456442 <[email protected]> * internal/ethapi,params: add `eth_config` (#32239) ~Will probably be mostly supplanted by #32224, but this should do for now for devnet 3.~ Seems like #32224 is going to take some more time, so I have completed the implementation of eth_config here. It is quite a bit simpler to implement now that the config hashing was removed. --------- Co-authored-by: MariusVanDerWijden <[email protected]> Co-authored-by: Guillaume Ballet <[email protected]> Co-authored-by: rjl493456442 <[email protected]> * version: release v1.16.3 * feat: bump superchain registry (#669) * ci: Update forkdiff version to v0.1.1 (#670) * feat: introduce minimum base fee (#666) * add minBaseFee to superchain/types and Jovian to params/config * extend extraData header field * validate/encode eip1559 * spike add jovian 1559 tests * update calcBaseFee test and fix logic for calcBaseFee * update comment * validate params should be 9 not 10 * dont leave out version byte in extraData * 0 minbasefee is valid * dont need default minBaseFee * add test that fails for curr impl * do one check at the end to enforce minBaseFee * 9 bytes not 10 in validate err msg * extend coverage * nits * fix test * use feature naming and assume eip1559params 8bytes still * best effort decode * feature flag * nits * handle FCU and payload building args properly * have payload building test support holocene still * nits + fix api payload fcu * use option A of feature flag + nits * Switch from log2 to significand + exponent for min base fee * Clear out the higher 4 bits of the significand * Add encode/decode helpers for min base fee factors * Remove the check for a blank min base fee * bit manipulation change * eth/catalyst: fix ExtraData validation for Jovian min base fee; add tests * use u64 approach * feedback + add specs link * use more compact syntax * move expectation to end of struct * combine tests * rename feature flag * add new optimism-specific file with general validation and decoding functions * move optimism specific code to new file * remove validation and add comments validation is done in catalyst/api * remove feature flags altogether * remove validation from decoding fn * fix and use generic extradata validation fn * add comments * finish removing feature flag * fix tests * Apply suggestions from code review * add spec link * use inline fn to clean up diff to upstream * add test cases and factor into subtests with require statement * tidy up jovianConfig() helper and rename a test * Introduce Holocene/JovianExtraDataVersionByte * tweak * consistency * rename minbasefee to jovian in validation fn error msg * assert holocene params in payload_building_test.go * fix regression * use ptr for MinBaseFee in PayloadAttributes * eip1559_optimism: have Validate/DecodeOptimismExtraData take a ForkChecker interface and return a *uint64 for MinBaseFee * introduce EncodeOptimismExtraData * lint (whitespace only) * fix pointer comparison in assertion * add test for determinism of payload id * dereference pointer when computing ID This is not strictly necessary, but it is clearer. * use eip1559.DecodeOptimismExtraData in test and extend coverage to missing minbasefee * Update consensus/misc/eip1559/eip1559_optimism.go Co-authored-by: Sebastian Stammler <[email protected]> * use isOptimismHolocene in CalcBaseFee and document assumption about extraData validity * TestBuildPatload: use nil minBaseFee expectation preJovian * rework closure to reduce diff to upstream * remove empty line --------- Co-authored-by: William Law <[email protected]> Co-authored-by: Niran Babalola <[email protected]> Co-authored-by: Sebastian Stammler <[email protected]> * jovian: make isthmus gas params extraction forward-compatible (#671) * sync-superchain: Handle case where skipped genesis file doesn't exist. (#673) * feat: bump superchain registry to include are…
ClaytonNorthey92
added a commit
to hemilabs/op-geth
that referenced
this pull request
Dec 1, 2025
* cmd/workload: rework tracegen to run tracing at block level (#32092) This PR changes the trace test to block level, aiming for better execution performance. --------- Co-authored-by: zsfelfoldi <[email protected]> * core/state: add GetStateAndCommittedState (#31585) Improves the SSTORE gas calculation a bit. Previously we would pull up the state object twice. This is okay for existing objects, since they are cached, however non-existing objects are not cached, thus we needed to go through all 128 diff layers as well as the disk layer twice, just for the gas calculation ``` goos: linux goarch: amd64 pkg: github.com/ethereum/go-ethereum/core/vm cpu: AMD Ryzen 9 5900X 12-Core Processor │ /tmp/old.txt │ /tmp/new.txt │ │ sec/op │ sec/op vs base │ Interpreter-24 1118.0n ± 2% 602.8n ± 1% -46.09% (p=0.000 n=10) ``` --------- Co-authored-by: Gary Rong <[email protected]> * cmd/utils, internal/debug: hide the deprecated flags (#32128) Some of the flags were deprecated, so try to hide them in the help message. And move the `--vmodule` and `--logjson` flags to the DeprecatedCategory. * .gitea: add windows build (experimental) * cmd/utils: show full deprecated flags (#32141) This is a follow up PR after #32128 , Seems I've missed to add --txlookuplimit as hidden. In hte meanwhile, I also add the other deprecated flags into the output of `show-deprecated-flags` * cmd/utils: update flag description of gcmode (#32145) * .gitea: add workflow_dispatch for release build * .gitea: update PATH * .gitea: set PATH * gitea: try with cmd * gitea: set PATH in script * .gitea: fix typo in windows workflow * core/vm: move nil-check out of the interpreter loop (#32068) Moves the jumptable nil check our of the interpreter loop. Benchmarks show a 2-10% improvement. * core/vm: implement EIP-7939 - CLZ opcode (#31989) https://eips.ethereum.org/EIPS/eip-7939 --------- Co-authored-by: spencer-tb <[email protected]> Co-authored-by: Felix Lange <[email protected]> * core/txpool/blobpool: lower log level for warnings (#32142) - Change the log level to `warning`, during syncing blocks, the `final == nil` is normal. - Change to log tx hash. * .github, internal/flags: improve actions test runs (#32150) This change enables more tests to run on GitHub actions. First, it removes the `-short` flag passed to `go test`, unskipping some longer running tests. We also enable the full consensus tests to run by enabling submodules during git clone. The EF now operates org wide runners with the `self-hosted-ghr` label. These are auto-scaling runners which should ideally allow us to process any amount of testing load we throw at them. The new runners have `HOME` configured differently from the actual user home directory, so our internal test for resolving `~` had to be adapted to work in this scenario. * consensus/misc/eip4844: implement EIP-7918 (#31965) https://eips.ethereum.org/EIPS/eip-7918 --------- Co-authored-by: Felix Lange <[email protected]> * core/vm: implement EIP-7951 - precompile for secp256r1 (#31991) https://github.com/ethereum/EIPs/pull/9833 Based on #27540, #30043 --------- Co-authored-by: Ulaş Erdoğan <[email protected]> * cmd, eth/catalyst: exit geth only if exitWhenSynced is specified (#32149) This pull request modifies the behavior of `--synctarget` to terminate the node only when `--exitWhenSynced` is explicitly specified. * eth/catalyst: abort dev mode block commit if shut down is triggered (#32166) alternate approach to https://github.com/ethereum/go-ethereum/pull/31328 suggested by @MariusVanDerWijden . This prevents Geth from outputting a lot of logs when trying to commit on-demand dev mode blocks while the client is shutting down. The issue is hard to reproduce, but I've seen it myself and it is annoying when it happens. I think this is a reasonable simple solution, and we can revisit if we find that the output is still too large (i.e. there is a large delay between initiating shut down and the simulated beacon receiving the signal, while in this loop). Co-authored-by: Marius van der Wijden <[email protected]> * miner, core, core/txpool: implement EIP 7825 - TX Gas Limit Cap (#31824) Implements EIP-7825 --------- Co-authored-by: Gary Rong <[email protected]> Co-authored-by: lightclient <[email protected]> Co-authored-by: MariusVanDerWijden <[email protected]> * core/vm: update gas cost of CLZ to five (#32172) https://github.com/ethereum/EIPs/commit/a794de3fcf71bb8c71e8bafdba11f63133ce4516 * core,miner: implement EIP-7934 - RLP Execution Block Size Limit (#31990) This PR adds a block validation check for the maximum block size, as required by EIP-7934, and also applies a slightly lower size limit during block building. --------- Co-authored-by: spencer-tb <[email protected]> Co-authored-by: Felix Lange <[email protected]> Co-authored-by: Gary Rong <[email protected]> * Remove checkInterop from Block Building Path (#585) * cmd/utils: add the missing check for the HoodiFlag in blsync (#32179) Hoodi network flag should be exclusive to other network flags for both blysnc standalone and integrated mode. * feat: bump scr commit (#640) * cmd/clef: update Safe API documentation links in changelog (#32136) This PR updates the outdated documentation URL from docs.gnosis.io to the new official docs.safe.global domain. The change reflects the rebranding from Gnosis Safe to Safe and ensures that users are directed to the current API documentation for transaction service reference. * txpool: Move Ingress Filter Checks to addTxsLocked (#642) * txpool: introduce MaxTxGasLimit feature to enforce per-transaction gas limits (#626) Adds a new flag `--txpool.maxtxgas` which represents the maximum gas limit for individual transactions (0 = no limit) when added to the mempool. Transactions exceeding this limit will be rejected by the transaction pool. Co-authored-by: Mark Tyneway <[email protected]> * core/types: add block-level access list structures with encoding/decoding (#31948) This adds the SSZ types from the [EIP-7928](https://eips.ethereum.org/EIPS/eip-7928) and also adds encoder/decoder generation using https://github.com/ferranbt/fastssz. The fastssz dependency is updated because the generation will not work properly with the master branch version due to a bug in fastssz. --------- Co-authored-by: Gary Rong <[email protected]> * eth/downloader: fix ancient limit in snap sync (#32188) This pull request fixes an issue in disabling direct-ancient mode in snap sync. Specifically, if `origin >= frozen && origin != 0`, it implies a part of chain data has been written into the key-value store, all the following writes into ancient store scheduled by downloader will be rejected with error `ERROR[07-10|03:46:57.924] Error importing chain data to ancients err="can't add block 1166 hash: the append operation is out-order: have 1166 want 0"`. This issue is detected by the https://github.com/ethpandaops/kurtosis-sync-test, which initiates the first snap sync cycle without the finalized header and implicitly disables the direct-ancient mode. A few seconds later the second snap sync cycle is initiated with the finalized information and direct-ancient mode is enabled incorrectly. * .github: remove karalabe from CODEOWNERS * cmd/geth: update vcheck testdata, add docs on generating signatures (#32121) Fixed typo in security release URL by replacing: Old: https://blog.ethereum.org/2020/11/12/geth_security_release/ New: https://blog.ethereum.org/2020/11/12/geth-security-release/ --------- Co-authored-by: lightclient <[email protected]> * signer/core/apitypes: require blob txs to have tx.to set (#32197) Check the `to` address before building the blob tx. --------- Co-authored-by: jwasinger <[email protected]> * accounts/keystore: update links to documenation (#32194) --- **Description:** - Replaced outdated GitHub wiki links with the official Ethereum documentation for Web3 Secret Storage. - Updated references in `keystore.go` and `passphrase.go` for improved accuracy and reliability. --- * ethclient/gethclient: remove race condition in tests (#32206) alternative to https://github.com/ethereum/go-ethereum/pull/32200 The race condition is not happening yet, since there is only a single call to `newTestBackend`, but there might be more in the future * tracing: Show OptimismBaseFeeRecipient in prestate (#407) The OptimismBaseFeeRecipient should show up in prestate tracing results (both the normal prestate and the diff mode prestate results) if IsOptimism. I added one prestate diff test with Optimism turned on to show that it works correctly. This required adding the L1CostFunc to the test block context. * params: EIP-7892 - Blob Parameter Only Hardforks (#32193) This is a resubmit of https://github.com/ethereum/go-ethereum/pull/31820 against the `master` branch. --------- Co-authored-by: Marius van der Wijden <[email protected]> Co-authored-by: Gary Rong <[email protected]> * eth/fetcher: fix announcement drop logic (#32210) This PR fixes an issue in the tx_fetcher DoS prevention logic where the code keeps the overflow amount (`want - maxTxAnnounces`) instead of the allowed amount (`maxTxAnnounces - used`). The specific changes are: - Correct slice indexing in the announcement drop logic - Extend the overflow test case to cover the inversion scenario * miner: set sidecar version when recomputing proofs (#32199) - If the block number is `osaka` fork and needs to recompute some `blob proofs` to `cell proofs`, here also needs to set version to `1`. * miner, txpool: detect supervisor failsafe and reject interop transactions if enabled (#636) * miner, txpool: detect supervisor failsafe and reject interop transactions if enabled Add routine to periodically check for failsafe mode by calling supervisor RPC and checking error for sentinel value Backend caches result, miner inspects the cache. Txpool checks over RPC on ingress. Adds comprehensive tests. * move SupervisorInFailSafe method to BackendWithInterop interface * rename * use interoptypes.TxToInteropAccessList in commitTransaction * use admin_getFailsafeEnabled instead of stubbed CheckAccessList * fixes * fixes * all: fix outdated ethereum wiki json-rpc json-rpc doc links (#32209) Replace outdated wiki reference with ethereum.org documentation links * core/types: fix CellProofsAt method (#32198) * triedb/pathdb: introduce file-based state journal (#32060) Introduce file-based state journal in path database, fixing the Pebble restriction when the journal size exceeds 4GB. --------- Signed-off-by: jsvisa <[email protected]> Co-authored-by: Gary Rong <[email protected]> * core/rawdb: change the mechanism to schedule freezer sync (#32135) This pull request slightly improves the freezer fsync mechanism by scheduling the Sync operation based on the number of uncommitted items and original time interval. Originally, freezer.Sync was triggered every 30 seconds, which worked well during active chain synchronization. However, once the initial state sync is complete, the fixed interval causes Sync to be scheduled too frequently. To address this, the scheduling logic has been improved to consider both the time interval and the number of uncommitted items. This additional condition helps avoid unnecessary Sync operations when the chain is idle. * eth/protocols/snap, p2p/discover: improve zero time checks (#32214) * all: update dead wiki links (#32215) --- **Description:** - Replaced outdated GitHub wiki links with current, official documentation URLs. - Removed links that redirect or are no longer relevant. - Ensured all references point to up-to-date and reliable sources. --- * core/rawdb: reduce allocations in rawdb.ReadHeaderNumber (#31913) This is something interesting I came across during my benchmarks, we spent ~3.8% of all allocations allocating the header number on the heap. ``` (pprof) list GetHeaderByHash Total: 38197204475 ROUTINE ======================== github.com/ethereum/go-ethereum/core.(*BlockChain).GetHeaderByHash in github.com/ethereum/go-ethereum/core/blockchain_reader.go 0 5786566117 (flat, cum) 15.15% of Total . . 79:func (bc *BlockChain) GetHeaderByHash(hash common.Hash) *types.Header { . 5786566117 80: return bc.hc.GetHeaderByHash(hash) . . 81:} . . 82: . . 83:// GetHeaderByNumber retrieves a block header from the database by number, . . 84:// caching it (associated with its hash) if found. . . 85:func (bc *BlockChain) GetHeaderByNumber(number uint64) *types.Header { ROUTINE ======================== github.com/ethereum/go-ethereum/core.(*HeaderChain).GetHeaderByHash in github.com/ethereum/go-ethereum/core/headerchain.go 0 5786566117 (flat, cum) 15.15% of Total . . 404:func (hc *HeaderChain) GetHeaderByHash(hash common.Hash) *types.Header { . 1471264309 405: number := hc.GetBlockNumber(hash) . . 406: if number == nil { . . 407: return nil . . 408: } . 4315301808 409: return hc.GetHeader(hash, *number) . . 410:} . . 411: . . 412:// HasHeader checks if a block header is present in the database or not. . . 413:// In theory, if header is present in the database, all relative components . . 414:// like td and hash->number should be present too. (pprof) list GetBlockNumber Total: 38197204475 ROUTINE ======================== github.com/ethereum/go-ethereum/core.(*HeaderChain).GetBlockNumber in github.com/ethereum/go-ethereum/core/headerchain.go 94438817 1471264309 (flat, cum) 3.85% of Total . . 100:func (hc *HeaderChain) GetBlockNumber(hash common.Hash) *uint64 { 94438817 94438817 101: if cached, ok := hc.numberCache.Get(hash); ok { . . 102: return &cached . . 103: } . 1376270828 104: number := rawdb.ReadHeaderNumber(hc.chainDb, hash) . . 105: if number != nil { . 554664 106: hc.numberCache.Add(hash, *number) . . 107: } . . 108: return number . . 109:} . . 110: . . 111:type headerWriteResult struct { (pprof) list ReadHeaderNumber Total: 38197204475 ROUTINE ======================== github.com/ethereum/go-ethereum/core/rawdb.ReadHeaderNumber in github.com/ethereum/go-ethereum/core/rawdb/accessors_chain.go 204606513 1376270828 (flat, cum) 3.60% of Total . . 146:func ReadHeaderNumber(db ethdb.KeyValueReader, hash common.Hash) *uint64 { 109577863 1281242178 147: data, _ := db.Get(headerNumberKey(hash)) . . 148: if len(data) != 8 { . . 149: return nil . . 150: } 95028650 95028650 151: number := binary.BigEndian.Uint64(data) . . 152: return &number . . 153:} . . 154: . . 155:// WriteHeaderNumber stores the hash->number mapping. . . 156:func WriteHeaderNumber(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { ``` Opening this to discuss the idea, I know that rawdb.EmptyNumber is not a great name for the variable, open to suggestions * trie: avoid spawning goroutines for empty children (#32220) * eth/downloader: improve nil pointer protection (#32222) Fix #32221 --------- Co-authored-by: rjl493456442 <[email protected]> * account/abi/bind/v2: fix TestDeploymentWithOverrides (#32212) The root cause of the flaky test was a nonce conflict caused by async contract deployments. This solution defines a custom deployer with automatic nonce management. * eth/tracers: apply block header overrides correctly (#32183) Fixes #32175. This fixes the scenario where the blockhash opcode would return 0x0 during RPC simulations when using BlockOverrides with a future block number. The root cause was that BlockOverrides.Apply() only modified the vm.BlockContext, but GetHashFn() depends on the actual types.Header.Number to resolve valid historical block hashes. This caused a mismatch and resulted in incorrect behavior during trace and call simulations. --------- Co-authored-by: shantichanal <[email protected]> Co-authored-by: lightclient <[email protected]> * triedb/pathdb: avoid duplicate metadata reads (#32226) * eth/protocols/snap: fix negative eta in state progress logging (#32225) * triedb/pathdb: improve the performance of parse index block (#32219) The implementation of `parseIndexBlock` used a reverse loop with slice appends to build the restart points, which was less cache-friendly and involved unnecessary allocations and operations. In this PR we change the implementation to read and validate the restart points in one single forward loop. Here is the benchmark test: ```bash go test -benchmem -bench=BenchmarkParseIndexBlock ./triedb/pathdb/ ``` The result as below: ``` benchmark old ns/op new ns/op delta BenchmarkParseIndexBlock-8 52.9 37.5 -29.05% ``` about 29% improvements --------- Signed-off-by: jsvisa <[email protected]> * all: define constructor for BlobSidecar (#32213) The main purpose of this change is to enforce the version setting when constructing the blobSidecar, avoiding creating sidecar with wrong/default version tag. * params: update tx gas limit cap (#32230) Updates the tx gas limit cap to the new parameter (2^24) https://github.com/ethereum/EIPs/pull/9986/files * core/txpool/blobpool: remove unused `txValidationFn` from BlobPool (#32237) This PR removes the now‑unused `txValidationFn` field from BlobPool. It became obsolete after a PR https://github.com/ethereum/go-ethereum/pull/31202 was merged. Resolves https://github.com/ethereum/go-ethereum/issues/32236 * triedb/pathdb: fix incorrect address length in history searching (#32248) We should use account length to check address, else OOB maybe occured Signed-off-by: jsvisa <[email protected]> * core/vm: triple modexp cost post-cancun (#32231) https://github.com/ethereum/EIPs/pull/9969/files * core, params: add limit for max blobs in blob transaction (#32246) [EIP-7594](https://eips.ethereum.org/EIPS/eip-7594) defines a limit of max 6 blobs per transaction. We need to enforce this limit during block processing. > Additionally, a limit of 6 blobs per transaction is introduced. Clients MUST enforce this limit when validating blob transactions at submission time, when received from the network, and during block production and processing. * superchain: skip celo mainnet genesis processing (#646) * superchain: skip celo mainnet genesis processing * superchain: add GetChain tests * superchain: add clarifying comments for celo exclusion * build: update tests to fusaka-devnet-3 (#32251) * core/types: minimize this invalid intermediate state (#32241) * core/rawdb: downgrade log level in chain freezer (#32253) * triedb/pathdb: use binary.append to eliminate the tmp scratch slice (#32250) `binary.AppendUvarint` offers better performance than using append directly, because it avoids unnecessary memory allocation and copying. In our case, it can increase the performance by +35.8% for the `blockWriter.append` function: ``` benchmark old ns/op new ns/op delta BenchmarkBlockWriterAppend-8 5.97 3.83 -35.80% ``` --------- Signed-off-by: jsvisa <[email protected]> Co-authored-by: Gary Rong <[email protected]> * p2p/rlpx: optimize XOR operation using bitutil.XORBytes (#32217) Replace manual byte-by-byte XOR implementation with the optimized bitutil.XORBytes function. This improves performance by using word-sized operations on supported architectures while maintaining the same functionality. The optimized version processes data in bulk rather than one byte at a time --------- Co-authored-by: Felix Lange <[email protected]> * eth/gasestimator: fix potential overflow (#32255) Improve binary search, preventing the potential overflow in certain L2 cases * triedb/pathdb: fix an deadlock in history indexer (#32260) Seems the `signal.result` was not sent back in shorten case, this will cause a deadlock. --------- Signed-off-by: jsvisa <[email protected]> Co-authored-by: Gary Rong <[email protected]> * eth/protocols/snap: add healing and syncing metrics (#32258) Adds the heal time and snap sync time to grafana --------- Co-authored-by: Gary Rong <[email protected]> * core: replace the empty fmt.Errorf with errors.New (#32274) The `errors.new` function does not require string formatting, so its performance is better than that of `fmt.Errorf`. * eth/catalyst: fix error message in ExecuteStatelessPayloadV4 (#32269) Correct the error message in the ExecuteStatelessPayloadV4 function to reference newPayloadV4 and the Prague fork, instead of incorrectly referencing newPayloadV3 and Cancun. This improves clarity during debugging and aligns the error message with the actual function and fork being validated. No logic is changed. --------- Co-authored-by: rjl493456442 <[email protected]> * cmd, eth, internal: introduce debug_sync (#32177) Alternative implementation of https://github.com/ethereum/go-ethereum/pull/32159 * all: replace fmt.Errorf with errors.New (#32286) The errors.new function does not require string formatting, so its performance is better than that of fmt.Errorf. * downloader: fix typos, grammar and formatting (#32288) * ethclient/simulated: Fix flaky rollback test (#32280) This PR addresses a flakiness in the rollback test discussed in https://github.com/ethereum/go-ethereum/issues/32252 I found `nonce` collision caused transactions occasionally fail to send. I tried to change error message in the failed test like: ``` if err = client.SendTransaction(ctx, signedTx); err != nil { t.Fatalf("failed to send transaction: %v, nonce: %d", err, signedTx.Nonce()) } ``` and I occasionally got test failure with this message: ``` === CONT TestFlakyFunction/Run_#100 rollback_test.go:44: failed to send transaction: already known, nonce: 0 --- FAIL: TestFlakyFunction/Run_#100 (0.07s) ``` Although `nonces` are obtained via `PendingNonceAt`, we observed that, in rare cases (approximately 1 in 1000), two transactions from the same sender end up with the same nonce. This likely happens because `tx0` has not yet propagated to the transaction pool before `tx1` requests its nonce. When the test succeeds, `tx0` and `tx1` have nonces `0` and `1`, respectively. However, in rare failures, both transactions end up with nonce `0`. We modified the test to explicitly assign nonces to each transaction. By controlling the nonce values manually, we eliminated the race condition and ensured consistent behavior. After several thousand runs, the flakiness was no longer reproducible in my local environment. Reduced internal polling interval in `pendingStateHasTx()` to speed up test execution without impacting stability. It reduces test time for `TestTransactionRollbackBehavior` from about 7 seconds to 2 seconds. * core/state: preallocate capacity for logs list (#32291) Improvement: preallocate capacity for `logs` at first to avoid reallocating multi times. * core/state: improve PrettyPrint function (#32293) * core/types: expose sigHash as Hash for SetCodeAuthorization (#32298) * common/hexutil: replace customized bit sizer with bit.Uintsize (#32304) * accounts/abi: precompile regex (#32301) * cmd/devp2p/internal/v4test: add test for ENRRequest (#32303) This adds a cross-client protocol test for a recently discovered bug in Nethermind. * trie: reduce the memory allocation in trie hashing (#31902) This pull request optimizes trie hashing by reducing memory allocation overhead. Specifically: - define a fullNodeEncoder pool to reuse encoders and avoid memory allocations. - simplify the encoding logic for shortNode and fullNode by getting rid of the Go interfaces. * core/vm: add configurable jumpdest analysis cache (#32143) This adds a method on vm.EVM to set the jumpdest cache implementation. It can be used to maintain an analysis cache across VM invocations, to improve performance by skipping the analysis for already known contracts. --------- Co-authored-by: lmittmann <[email protected]> Co-authored-by: Felix Lange <[email protected]> * eth: fix typos and outdated comments (#32324) * eth/filters: fix error when blockHash is used with fromBlock/toBlock (#31877) This introduces an error when the filter has both `blockHash` and `fromBlock`/`toBlock`, since these are mutually exclusive. Seems the tests were actually returning `not found` error, which went undetected since there was no check on the actual returned error in the test. * rlp/rlpgen: implement package renaming support (#31148) This adds support for importing types from multiple identically-named packages. --------- Co-authored-by: Felix Lange <[email protected]> * beacon/params, core/filtermaps: update checkpoints (#32336) This PR updates checkpoints for blsync and filtermaps. * version: release v1.16.2 (#32343) * version: begin v1.16.3 release cycle (#32345) * core/state: introduce the TransitionState object (verkle transition part 1) (#31634) This is the first part of #31532 It maintains a series of conversion maker which are to be updated by the conversion code (in a follow-up PR, this is a breakdown of a larger PR to make things easier to review). They can be used in this way: - During the conversion, by storing the conversion markers when the block has been processed. This is meant to be written in a function that isn't currently present, hence [this TODO](https://github.com/ethereum/go-ethereum/pull/31634/files#diff-89272f61e115723833d498a0acbe59fa2286e3dc7276a676a7f7816f21e248b7R384). Part of https://github.com/ethereum/go-ethereum/issues/31583 --------- Signed-off-by: Guillaume Ballet <[email protected]> Co-authored-by: Gary Rong <[email protected]> * eth/catalyst: avoid load the same blob tx multi times (#32190) - If all the `vhashes` are in the same `sidecar`, then it will load the same blob tx many times. This PR aims to upgrade this. --------- Co-authored-by: Gary Rong <[email protected]> * eth/gasestimator: check ErrGasLimitTooHigh conditions (#32348) This PR makes 2 changes to how [EIP-7825](https://github.com/ethereum/go-ethereum/pull/31824) behaves. When `eth_estimateGas` or `eth_createAccessList` is called without any gas limit in the payload, geth will choose the block's gas limit or the `RPCGasCap`, which can be larger than the `maxTxGas`. When this happens for `estimateGas`, the gas estimation just errors out and ends, when it should continue doing binary search to find the lowest possible gas limit. This PR will: - Add a check to see if `hi` is larger than `maxTxGas` and cap it to `maxTxGas` if it's larger. And add a special case handling for gas estimation execute when it errs with `ErrGasLimitTooHigh` --------- Co-authored-by: Gary Rong <[email protected]> * core/filtermaps: remove unnecessary nil check and add cv2 lock (#32309) Co-authored-by: zsfelfoldi <[email protected]> * go.mod: upgraded github.com/golang-jwt/jwt/v4 v4.5.1 => v4.5.2 (#32356) https://pkg.go.dev/vuln/GO-2025-3553 * rpc: use reflect.TypeFor (#32316) * crypto/kzg4844: use reflect.TypeFor (#32319) * common, common/hexutil: use reflect.TypeFor (#32321) * beacon/merkle: use reflect.TypeFor (#32322) * core: use reflect.TypeFor (#32320) https://github.com/golang/go/issues/60088 * p2p/enode: use atomic.Pointer in LocalNode (#32360) * signer/core/apitypes: simplify reflect []byte creation (#32315) Co-authored-by: Felix Lange <[email protected]> * rlp: use reflect.TypeFor (#32317) Co-authored-by: Felix Lange <[email protected]> * eth/downloader: fix incomplete code comment (#32354) * metrics: use atomic.Pointer in runtimeHistogram (#32361) Co-authored-by: Felix Lange <[email protected]> * core/vm: fold EVMInterpreter into EVM (#32352) The separation serves no purpose atm, and the circular dependency that EVM and EVMInterpreter had was begging for them to be merged. * ethclient: fix flaky pending tx test (#32380) Fixes: https://github.com/ethereum/go-ethereum/issues/32252 * ethdb/leveldb: check iterator error in Database.DeleteRange (#32384) Add missing it.Error() check after iteration in Database.DeleteRange to avoid silently ignoring iterator errors before writing the batch. Aligns behavior with batch.DeleteRange, which already validates iterator errors. No other functional changes; existing tests pass (TestLevelDB). * core/vm: make types consistent in makeDup (#32378) * miner: remove todo comment (#32389) see https://github.com/ethereum/go-ethereum/pull/32372#discussion_r2265885182 * downloader: fix comment (#32382) The previous comment stated that every 3rd block has a tx and every 5th has an uncle. The implementation actually adds one transaction to every second block and does not add uncles. Updated the comment to reflect the real behavior to avoid confusion when reading tests. * accounts/abi, accounts/keystore: use reflect.TypeFor (#32323) Co-authored-by: Felix Lange <[email protected]> * eth/downloader: skip nil peer in GetHeader (#32369) The GetHeader function was incorrectly returning an error when encountering nil peers in the peers list, which contradicted the comment "keep retrying if none are yet available". Changed the logic to skip nil peers with 'continue' instead of returning an error, allowing the function to properly iterate through all available peers and attempt to retrieve the target header from each valid peer. This ensures the function behaves as intended - trying all available peers before giving up, rather than failing on the first nil peer encountered. * trie, core: rework tracer and track origin value of dirty nodes (#32306) These changes made in the PR should be highlighted here The trie tracer is split into two distinct structs: opTracer and prevalueTracer. The former is specific to MPT, while the latter is generic and applicable to all trie implementations. The original values of dirty nodes are tracked in a NodeSet. This serves as the foundation for both full archive node implementations and the state live tracer. * consensus: fix ambiguous invalid gas limit error (#32405) ## Description Correct symmetric tolerance in gas limit validation: Replace ambiguous "+-=" with standard "+/-" in the error message. Logic rejects when |header − parent| ≥ limit, so allowed range is |Δ| ≤ limit − 1. No logic or functionality has been modified. * metrics: Block Basefee (#658) * basefee metric * Handle nil basefee for before london hf * Update forkdiff * trie: refactor to use slices.Concat (#32401) * cmd: fix inconsistent function name in comment (#32411) fix inconsistent function name in comment Signed-off-by: youzichuan <[email protected]> * eth: abort `requiredBlocks` check if peer handler terminated (#32413) * node: remove unused err var (#32398) * rlp: optimize intsize (#32421) goos: darwin goarch: arm64 pkg: github.com/ethereum/go-ethereum/rlp cpu: Apple M4 │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ Intsize 2.175n ± 5% 1.050n ± 4% -51.76% (p=0.000 n=10) * eth/tracers: Adds codeHash to prestateTracer's response (#32391) **Problem:** Including full account code in prestateTracer response significantly increases response payload size. **Solution:** Add codeHash field to the response. This will allow client-side bytecode caching and is a non-breaking change. **Note:** codeHash for EoAs is excluded to save space. --------- Co-authored-by: Sina Mahmoodi <[email protected]> * eth/syncer: fix typo (#32427) avaibale -> available * p2p: refactor to use time.Now().UnixMilli() in golang std lib (#32402) * .github: upgrade workflows to Go 1.25 (#32425) * build: upgrade -dlgo version to Go 1.25.0 (#32412) * crypto/secp256k1: use ReadBits from common/math (#32430) * build: remove unused functions (#32393) * catalyst/api: centralize OPStack validation into helper functions (#592) * catalyist/api: centralize OPStack validation into helper functions located in a seperate file for a cleaner diff to upstream * add test coverage for optimism validation checks return unadorned errors from helper and allow caller to wrap * lint * use engine.InvalidPayloadAttributes.With() for all failed optimism FCU checks * typos * fix: only check optimism payload attributes if they are not nil * combine conditions * move test * combine checks * add check on withdrawals root from canyon to isthmus * lint * trie, core/state: add the transition tree (verkle transition part 2) (#32366) This add some of the changes that were missing from #31634. It introduces the `TransitionTrie`, which is a façade pattern between the current MPT trie and the overlay tree. --------- Signed-off-by: Guillaume Ballet <[email protected]> Co-authored-by: rjl493456442 <[email protected]> * cmd/evm: use PathScheme in blockrunner (#32444) This is a preparatory change for Verkle/binary trees, since they don't support the hash-based database scheme. This has no impact on the MPT. * core/vm: refactor to use bitutil.TestBytes (#32434) * crypto/bn256: refactor to use bitutil.TestBytes (#32435) * consensus/misc/eip4844: use blob parameters of current header (#32424) This changes the implementation to resolve the blob parameters according to the current header timestamp. This matters for EIP-7918, where we would previously resolve the UpdateFraction according to the parent header fork, leading to a confusing situation at the fork transition block. --------- Co-authored-by: MariusVanDerWijden <[email protected]> * rlp: remove workaround for Value.Bytes (#32433) As of Go 1.19, it is permitted to call Bytes() on a reflect.Value representing an adressable byte array. So we can remove our workaround, undoing #22924. https://go.dev/doc/go1.19#reflectpkgreflect > The method [Value.Bytes](https://go.dev/pkg/reflect/#Value.Bytes) now accepts addressable arrays in addition to slices. * core/vm: fix EIP-7823 modexp input length check (#32363) The order of the checks was wrong which would have allowed a call to modexp with `baseLen == 0 && modLen == 0` post fusaka. Also handles an edge case where base/mod/exp length >= 2**64 --------- Co-authored-by: Felix Lange <[email protected]> * metrics: add tinygo build flag for CPU time (#32454) * core/rawdb: add non-unix alternative for tablewriter (#32455) Continuation of https://github.com/ethereum/go-ethereum/issues/32022 tablewriter assumes unix or windows, which may not be the case for embedded targets. For v0.0.5 of tablewriter, it is noted in table.go: "The protocols were written in pure Go and works on windows and unix systems" --------- Co-authored-by: rjl493456442 <[email protected]> * eth/syncer: stop ticker to prevent resource leak (#32443) * core/rawdb: enhance database key construction (#32431) * rpc: add SetWebsocketReadLimit in Server (#32279) Exposing the public method to setReadLimits for Websocket RPC to prevent OOM. Current, Geth Server is using a default 32MB max read limit (message size) for websocket, which is prune to being attacked for OOM. Any one can easily launch a client to send a bunch of concurrent large request to cause the node to crash for OOM. One example of such script that can easily crash a Geth node running websocket server is like this: https://gist.githubusercontent.com/DeltaXV/b64d221e342e9c1ec6c99c1ab8201544/raw/ec830979ac9a707d98f40dfcc0ce918fc8fb9057/poc.go --------- Co-authored-by: Felix Lange <[email protected]> * CODEOWNERS: add gballet as the owner of trie package (#32466) * ethclient/gethclient: use common.Hash to debug_traceTransaction (#32404) * graphql: add query depth limit to prevent DoS attacks (#32344) ## Summary This PR addresses a DoS vulnerability in the GraphQL service by implementing a maximum query depth limit. While #26026 introduced timeout handling, it didn't fully mitigate the attack vector where deeply nested queries can still consume excessive CPU and memory resources before the timeout is reached. ## Changes - Added `maxQueryDepth` constant (set to 20) to limit the maximum nesting depth of GraphQL queries - Applied the depth limit using `graphql.MaxDepth()` option when parsing the schema - Added test case `TestGraphQLMaxDepth` to verify that queries exceeding the depth limit are properly rejected ## Security Impact Without query depth limits, malicious actors could craft deeply nested queries that: - Consume excessive CPU cycles during query parsing and execution - Allocate large amounts of memory for nested result structures - Potentially cause service degradation or outages even with timeout protection This fix complements the existing timeout mechanism by preventing resource-intensive queries from being executed in the first place. ## Testing Added `TestGraphQLMaxDepth` which verifies that queries with nesting depth > 20 are rejected with a `MaxDepthExceeded` error. ## References - Original issue: #26026 - Related security best practices: https://www.howtographql.com/advanced/4-security/ --------- Co-authored-by: Felix Lange <[email protected]> * p2p: update MaxPeers comment (#32414) * eth/catalyst: return methods by reflect (#32300) Return the exposed methods in `ConsensusAPI` by reflection. * internal/ethapi, miner: fix GetBlockReceipts for pending (#32461) * trie, core/state: introduce trie Prefetch for optimizing preload (#32134) This pull introduces a `Prefetch` operation in the trie to prefetch trie nodes in parallel. It is used by the `triePrefetcher` to accelerate state loading and improve overall chain processing performance. * beacon/engine,eth/catalyst: Fix engine API checks and exec payload creation (#662) * p2p: using math.MaxInt32 from go std lib (#32357) Co-authored-by: Felix Lange <[email protected]> * rlp: refactor to use maths.ReadBits (#32432) * fixes missing protection of nil pointer dereference in scwallet (#32186) Fixes #32181 Signed-off-by: kapil <[email protected]> * accounts/usbwallet: correct version comparison logic (#32417) ## Description This PR fixes a bug in the Ledger hardware wallet version validation logic for EIP-155 transaction signing. The original condition incorrectly allowed older versions that don't support EIP-155 such as 0.9.9 and 0.1.5 to proceed. * p2p: remove todo comment, as it's unnecessary (#32397) as metioned in https://github.com/ethereum/go-ethereum/pull/32351, I think this comment is unnecessary. * core/types: reduce allocations for transaction comparison (#31912) This PR should reduce overall allocations of a running node by ~10 percent. Since most allocations are coming from the re-heaping of the transaction pool. ``` (pprof) list EffectiveGasTipCmp Total: 38197204475 ROUTINE ======================== github.com/ethereum/go-ethereum/core/types.(*Transaction).EffectiveGasTipCmp in github.com/ethereum/go-ethereum/core/types/transaction.go 0 3766837369 (flat, cum) 9.86% of Total . . 386:func (tx *Transaction) EffectiveGasTipCmp(other *Transaction, baseFee *big.Int) int { . . 387: if baseFee == nil { . . 388: return tx.GasTipCapCmp(other) . . 389: } . . 390: // Use more efficient internal method. . . 391: txTip, otherTip := new(big.Int), new(big.Int) . 1796172553 392: tx.calcEffectiveGasTip(txTip, baseFee) . 1970664816 393: other.calcEffectiveGasTip(otherTip, baseFee) . . 394: return txTip.Cmp(otherTip) . . 395:} . . 396: . . 397:// EffectiveGasTipIntCmp compares the effective gasTipCap of a transaction to the given gasTipCap. . . 398:func (tx *Transaction) EffectiveGasTipIntCmp(other *big.Int, baseFee *big.Int) int { ``` This PR reduces the allocations for comparing two transactions from 2 to 0: ``` goos: linux goarch: amd64 pkg: github.com/ethereum/go-ethereum/core/types cpu: Intel(R) Core(TM) Ultra 7 155U │ /tmp/old.txt │ /tmp/new.txt │ │ sec/op │ sec/op vs base │ EffectiveGasTipCmp/Original-14 64.67n ± 2% 25.13n ± 9% -61.13% (p=0.000 n=10) │ /tmp/old.txt │ /tmp/new.txt │ │ B/op │ B/op vs base │ EffectiveGasTipCmp/Original-14 16.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) │ /tmp/old.txt │ /tmp/new.txt │ │ allocs/op │ allocs/op vs base │ EffectiveGasTipCmp/Original-14 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) ``` It also speeds up the process by ~60% There are two minor caveats with this PR: - We change the API for `EffectiveGasTipCmp` and `EffectiveGasTipIntCmp` (which are probably not used by much) - We slightly change the behavior of `tx.EffectiveGasTip` when it returns an error. It would previously return a negative number on error, now it does not (since uint256 does not allow for negative numbers) --------- Signed-off-by: Csaba Kiraly <[email protected]> Co-authored-by: Csaba Kiraly <[email protected]> * triedb/pathdb: improve err message in historical state reader (#32477) Fixes https://github.com/ethereum/go-ethereum/issues/32474 * core, miner, trie: add metrics tracking state trie depth (#32388) Co-authored-by: shantichanal <[email protected]> Co-authored-by: Gary Rong <[email protected]> Co-authored-by: Guillaume Ballet <[email protected]> * p2p/discover: add discv5 invalid findnodes result test cases (#32481) Supersedes #32470. ### What - snap: shorten stall watchdog in `eth/protocols/snap/sync_test.go` from 1m to 10s. - discover/v5: consolidate FINDNODE negative tests into a single table-driven test: - `TestUDPv5_findnodeCall_InvalidNodes` covers: - invalid IP (unspecified `0.0.0.0`) → ignored - low UDP port (`<=1024`) → ignored ### Why - Addresses TODOs: - “Make tests smaller” (reduce long 1m timeout). - “check invalid IPs”; also cover low port per `verifyResponseNode` rules (UDP must be >1024). ### How it’s validated - Test-only changes; no production code touched. - Local runs: - `go test ./p2p/discover -count=1 -timeout=300s` → ok - `go test ./eth/protocols/snap -count=1 -timeout=600s` → ok - Lint: - `go run build/ci.go lint` → 0 issues on modified files. ### Notes - The test harness uses `enode.ValidSchemesForTesting` (which includes the “null” scheme), so records signed with `enode.SignNull` are signature-valid; failures here are due to IP/port validation in `verifyResponseNode` and `netutil.CheckRelayAddr`. - Tests are written as a single table-driven function for clarity; no helpers or environment switching. --------- Co-authored-by: lightclient <[email protected]> * node: fix vhosts for adminAPI (#32488) * core,trie: fix typo in TransitionTrie (#32491) Change `NewTransitionTree` to the correct `NewTransitionTrie`. Signed-off-by: pxwanglu <[email protected]> * .github/workflows: naive PR format checker (#32480) Full disclosure: this has been generated by AI. The goal is to have a quick check that the PR format is correct, before we merge it. This is to avoid the periodical case when someone forgets to add a milestone or check the title matches our preferred format. * p2p: use slices.Clone (#32428) Replaces a helper method with slices.Clone * eth/protocols/eth: Handle DepositTx Receipts * eth: Catch nil chainViews in backend filter maps update * params: fix history serve window for verkle test (#32127) Fixes the history serve window parameter for the test function `getContractStoredBlockHash`. Fixes #32458. * eth/tracers: add missing teardown in TestTraceChain (#32472) The TestTraceChain function was missing a defer backend.teardown() call, which is required to properly release blockchain resources after test completion. --------- Co-authored-by: Sina Mahmoodi <[email protected]> * internal/web3ext: remove deprecated method debug_seedHash (#32495) The corresponding function was removed in #27178 * triedb/pathdb: rename history to state history (#32498) This is a internal refactoring PR, renaming the history to stateHistory. It's a pre-requisite PR for merging trienode history, avoid the name conflict. * build: add support for ubuntu 25.04 (#31666) * cmd: fix typo in comment (#32501) The function name in the comment should be `writeErrors` instead of `writeQueries`. Signed-off-by: tzchenxixi <[email protected]> * eth/tracers: fix supply tracer uncle accounting (#31882) Uncle rewards were being omitted in the supply tracer due to a bug. This PR fixes that. --------- Co-authored-by: Sina Mahmoodi <[email protected]> * triedb/pathdb: refactor state history write (#32497) This pull request refactors the internal implementation in path database a bit, specifically: - purge the state index data in batch - simplify the logic of state history construction and index, make it more readable * rpc: refactor read limit test (#32494) closes #32240 #32232 The main cause for the time out is the slow json encoding of large data. In #32240 they tried to resolve the issue by reducing the size of the test. However as Felix pointed out, the test is still kind of confusing. I've refactored the test so it is more understandable and have reduced the amount of data needed to be json encoded. I think it is still important to ensure that the default read limit is not active, so I have retained one large (~32 MB) test case, but it's at least smaller than the existing ~64 MB test case. * eth: replace hardcoded sleep with polling loop in snap sync test (#32499) Replace hardcoded 5-second sleep with polling loop that actively checks snap sync state. This approach is already used in other project tests (like account_cache_test.go) and provides better reliability by: - Reducing flaky behavior on slower systems - Finishing early when sync completes quickly - Using 1-second timeout with 100ms polling intervals --------- Co-authored-by: lightclient <[email protected]> * internal/ethapi: fix precompile override for eth_estimateGas (#31795) Fix and close https://github.com/ethereum/go-ethereum/issues/31719. --------- Co-authored-by: Sina Mahmoodi <[email protected]> * accounts/abi: fix panic when check event with log has empty or nil topics (#32503) When the log has empty or nil topics, the generated bindings code will panic when accessing `log.Topics[0]`, add a check to avoid it. * core, internal, miner, signer: convert legacy sidecar in Osaka fork (#32347) This pull request implements #32235 , constructing blob sidecar in new format (cell proof) if the Osaka has been activated. Apart from that, it introduces a pre-conversion step in the blob pool before adding the txs. This mechanism is essential for handling the remote **legacy** blob txs from the network. One thing is still missing and probably is worthy being highlighted here: the blobpool may contain several legacy blob txs before the Osaka and these txs should be converted once Osaka is activated. While the `GetBlob` API in blobpool is capable for generating cell proofs at the runtime, converting legacy txs at one time is much cheaper overall. --------- Co-authored-by: MariusVanDerWijden <[email protected]> Co-authored-by: lightclient <[email protected]> * eth/tracers: fix testcase 7702_delegate (#32349) Fixes a prestateTracer test case covering 7702 delegation. --------- Co-authored-by: Jared Wasinger <[email protected]> Co-authored-by: Sina Mahmoodi <[email protected]> * node: fix problematic function name in comment (#32510) fix problematic function name in comment Signed-off-by: slicesequal <[email protected]> * eth: stabilize tx relay peer selection (#31714) When maxPeers was just above some perfect square, and a few peers dropped for some reason, we changed the peer selection function. When new peers were acquired, we changed again. This PR improves the selection function, in two ways. First, it will always select sqrt(peers) to broadcast to. Second, the selection now uses siphash with a secret key, to guard against information leaks about tx source. --------- Signed-off-by: Csaba Kiraly <[email protected]> Co-authored-by: Felix Lange <[email protected]> * core: improve error context in state processor for Prague EIPs (#32509) Add better error context for EIP-6110, EIP-7002, and EIP-7251 processing in state processor to improve debugging capabilities. * all: fix problematic function name in comment (#32513) Fix problematic function name in comment. Do my best to correct them all with a script to avoid spamming PRs. * triedb/pathdb, core: keep root->id mappings after truncation (#32502) This pull request preserves the root->ID mappings in the path database even after the associated state histories are truncated, regardless of whether the truncation occurs at the head or the tail. The motivation is to support an additional history type, trienode history. Since the root->ID mappings are shared between two history instances, they must not be removed by either one. As a consequence, the root->ID mappings remain in the database even after the corresponding histories are pruned. While these mappings may become dangling, it is safe and cheap to keep them. Additionally, this pull request enhances validation during historical reader construction, ensuring that only canonical historical state will be served. * README: add twitter badge to documentation (#32516) * core/rawdb: inspect database in parallel (#32506) `db inspect` on the full database currently takes **30min+**, because the db iterate was run in one thread, propose to split the key-space to 256 sub range, and assign them to the worker pool to speed up. After the change, the time of running `db inspect --workers 16` reduced to **10min**(the keyspace is not evenly distributed). --------- Signed-off-by: jsvisa <[email protected]> Co-authored-by: Gary Rong <[email protected]> * all: improve ETA calculation across all progress indicators (#32521) ### Summary Fixes long-standing ETA calculation errors in progress indicators that have been present since February 2021. The current implementation produces increasingly inaccurate estimates due to integer division precision loss. ### Problem https://github.com/ethereum/go-ethereum/blob/3aeccadd04aee2d18bdb77826f86b1ca000d3b67/triedb/pathdb/history_indexer.go#L541-L553 The ETA calculation has two critical issues: 1. **Integer division precision loss**: `speed` is calculated as `uint64` 2. **Off-by-one**: `speed` uses `+ 1`(2 times) to avoid division by zero, however it makes mistake in the final calculation This results in wildly inaccurate time estimates that don't improve as progress continues. ### Example Current output during state history indexing: ``` lvl=info msg="Indexing state history" processed=16858580 left=41802252 elapsed=18h22m59.848s eta=11h36m42.252s ``` **Expected calculation:** - Speed: 16858580 ÷ 66179848ms = 0.255 blocks/ms - ETA: 41802252 ÷ 0.255 = ~45.6 hours **Current buggy calculation:** - Speed: rounds to 1 block/ms - ETA: 41802252 ÷ 1 = ~11.6 hours ❌ ### Solution - Created centralized `CalculateETA()` function in common package - Replaced all 8 duplicate code copies across the codebase ### Testing Verified accurate ETA calculations during archive node reindexing with significantly improved time estimates. * core/stateless: only report leaf depth in witness stats (#32507) Filtering for leaf nodes was missing from #32388, which means that even the root done was reported, which made little sense for the bloatnet data processing we want to do. * trie/bintrie: add eip7864 binary trees and run its tests (#32365) Implement the binary tree as specified in [eip-7864](https://eips.ethereum.org/EIPS/eip-7864). This will gradually replace verkle trees in the codebase. This is only running the tests and will not be executed in production, but will help me rebase some of my work, so that it doesn't bitrot as much. --------- Signed-off-by: Guillaume Ballet Co-authored-by: Parithosh Jayanthi <[email protected]> Co-authored-by: rjl493456442 <[email protected]> * internal/ethapi,params: add `eth_config` (#32239) ~Will probably be mostly supplanted by #32224, but this should do for now for devnet 3.~ Seems like #32224 is going to take some more time, so I have completed the implementation of eth_config here. It is quite a bit simpler to implement now that the config hashing was removed. --------- Co-authored-by: MariusVanDerWijden <[email protected]> Co-authored-by: Guillaume Ballet <[email protected]> Co-authored-by: rjl493456442 <[email protected]> * version: release v1.16.3 * feat: bump superchain registry (#669) * ci: Update forkdiff version to v0.1.1 (#670) * feat: introduce minimum base fee (#666) * add minBaseFee to superchain/types and Jovian to params/config * extend extraData header field * validate/encode eip1559 * spike add jovian 1559 tests * update calcBaseFee test and fix logic for calcBaseFee * update comment * validate params should be 9 not 10 * dont leave out version byte in extraData * 0 minbasefee is valid * dont need default minBaseFee * add test that fails for curr impl * do one check at the end to enforce minBaseFee * 9 bytes not 10 in validate err msg * extend coverage * nits * fix test * use feature naming and assume eip1559params 8bytes still * best effort decode * feature flag * nits * handle FCU and payload building args properly * have payload building test support holocene still * nits + fix api payload fcu * use option A of feature flag + nits * Switch from log2 to significand + exponent for min base fee * Clear out the higher 4 bits of the significand * Add encode/decode helpers for min base fee factors * Remove the check for a blank min base fee * bit manipulation change * eth/catalyst: fix ExtraData validation for Jovian min base fee; add tests * use u64 approach * feedback + add specs link * use more compact syntax * move expectation to end of struct * combine tests * rename feature flag * add new optimism-specific file with general validation and decoding functions * move optimism specific code to new file * remove validation and add comments validation is done in catalyst/api * remove feature flags altogether * remove validation from decoding fn * fix and use generic extradata validation fn * add comments * finish removing feature flag * fix tests * Apply suggestions from code review * add spec link * use inline fn to clean up diff to upstream * add test cases and factor into subtests with require statement * tidy up jovianConfig() helper and rename a test * Introduce Holocene/JovianExtraDataVersionByte * tweak * consistency * rename minbasefee to jovian in validation fn error msg * assert holocene params in payload_building_test.go * fix regression * use ptr for MinBaseFee in PayloadAttributes * eip1559_optimism: have Validate/DecodeOptimismExtraData take a ForkChecker interface and return a *uint64 for MinBaseFee * introduce EncodeOptimismExtraData * lint (whitespace only) * fix pointer comparison in assertion * add test for determinism of payload id * dereference pointer when computing ID This is not strictly necessary, but it is clearer. * use eip1559.DecodeOptimismExtraData in test and extend coverage to missing minbasefee * Update consensus/misc/eip1559/eip1559_optimism.go Co-authored-by: Sebastian Stammler <[email protected]> * use isOptimismHolocene in CalcBaseFee and document assumption about extraData validity * TestBuildPatload: use nil minBaseFee expectation preJovian * rework closure to reduce diff to upstream * remove empty line --------- Co-authored-by: William Law <[email protected]> Co-authored-by: Niran Babalola <[email protected]> Co-authored-by: Sebastian Stammler <[email protected]> * jovian: make isthmus gas params extraction forward-compatible (#671) * sync-superchain: Handle case where skipped genesis file doesn't exist. (#673) * feat: bump superchain registry to include arena-z sepolia isthmus hardfork (#678) * chore(superchain-registry): bump version for addresses cleanup (#672) * eth/downloader: Fix deposit receipt correction (#680) * all: Introduce feature toggles for Jovian (#677) * introduce IsMinBaseFee feature toggle Allows feature to be easily removed from Jovian hardfork. When the hardfork scope is locked, this commit can be reverted. * decouple features * add isOperatorFeeFix toggle * Remove approval hold job from release workflow (#683) Removed approval hold job from release process in CircleCI config. * params: add bpo forks to eth_config (#32579) BPO forks should also be included in eth_config response. * params: schedule Osaka/BPO1/BPO2 for testnets (#32735) Timestamps taken from: - Holesky: https://github.com/eth-clients/holesky/blob/main/metadata/genesis.json - Sepolia: https://github.com/eth-clients/sepolia/blob/main/metadata/genesis.json - Hoodi: https://github.com/eth-clients/hoodi/blob/main/metadata/genesis.json * core,miner,parms: DA footprint block limit (constant gas scalar) (#655) * all: Make DA footprint gas scalar configurable (#675) Co-authored-by: Sebastian Stammler <[email protected]> * core/types: implement operator fee fix (Jovian) (#696) * fix!: multiply operatorFeeScalar by 100 instead of dividing by 1e6 * apply comments * apply comments * remove dup IsOperatorFeeFix --------- Co-authored-by: fakedev9999 <[email protected]> * consensus/beacon: Fix OP Legacy header verification dispatch (#697) * all: Store DA footprint in blob gas used header field (#694) * all: update c-kzg-4844 to 2.1.5 (#702) * superchain: update scr import to include worldchain-sepolia isthmus time (#704) * core: add gauge metrics + histograms for block gas used and blob gas used (#705) * core: add gauge metric for block gas used and blob gas used This can be used to track the DA footprint per block * encapsulate OPStack additions into new file and function * add histogram metrics for (blob)GasUsed * update fork.yaml * typos * superchain: update scr import to include jovian activation timestamp (#707) * Add new precompile limits for Jovian (#709) This introduces more realistic limits on accelerated precompiles for the Jovian hard fork. * superchain: Update for new Jovian timestamps (#712) * core/types: Populate Jovian receipt fields (#710) * core/types: Move receipt tests OP diff to separate file * core/types: Populate Jovian receipt fields * core/txpool/blobpool: migrate billy to new slot size (#31966) Implements a migration path for the blobpool slotter --------- Co-authored-by: lightclient <[email protected]> Co-authored-by: lightclient <[email protected]> Co-authored-by: Gary Rong <[email protected]> * params: set osaka and BPO1 & BPO2 mainnet dates (#33063) Sets the fusaka, bpo1, bpo2 timestamps for mainnet see: https://notes.ethereum.org/@bbusa/fusaka-bpo-timeline * superchain: update for new Jovian timestamps (#716) * triedb/pathdb: sync ancient store before journal (#32557) (#718) This pull request addresses the corrupted path database with log indicating: `history head truncation out of range, tail: 122557, head: 212208, target: 212557` This is a rare edge case where the in-memory layers, including the write buffer in the disk layer, are fully persisted (e.g., written to file), but the state history freezer is not properly closed (e.g., Geth is terminated after journaling but before freezer.Close). In this situation, the recent state history writes will be truncated on the next startup, while the in-memory layers resolve correctly. As a result, the state history falls behind the disk layer (including the write buffer). In this pull request, the state history freezer is always synced before journal, ensuring the state history writes are always persisted before the others. Edit: It's confirmed that devops team has 10s container termination setting. It explains why Geth didn't finish the entire termination without state history being closed. https://github.com/ethpandaops/fusaka-devnets/pull/63/files Co-authored-by: rjl493456442 <[email protected]> * finalize merge of v1.101603.4 * checkpoint * fixed tests besides one * remove pr validation, I don't think it's used by us * fix test broken with upstream pull merge * added forgotten options * Additional Logging * Additional Logging * Go generate * logging around time overrides * add overrides to new struct * revert gen receipts go file * don't modify map * correct comparison * Logging * More logging * Short-circuit modern signer's tx.From extraction for PoP / BTC Attr Dep * Short-circuit modern signer's tx.From extraction for PoP / BTC Attr Dep * Short-circuit modern signer's tx.From extraction for PoP / BTC Attr Dep * Logging * Do not pre-populate precompiles for gas calculation, remove some logging * Remove precompile prepare logging * Remove gas param logging --------- Signed-off-by: jsvisa <[email protected]> Signed-off-by: Guillaume Ballet <[email protected]> Signed-off-by: youzichuan <[email protected]> Signed-off-by: kapil <[email protected]> Signed-off-by: Csaba Kiraly <[email protected]> Signed-off-by: pxwanglu <[email protected]> Signed-off-by: tzchenxixi <[email protected]> Signed-off-by: slicesequal <[email protected]> Signed-off-by: Guillaume Ballet Co-authored-by: rjl493456442 <[email protected]> Co-authored-by: zsfelfoldi <[email protected]> Co-authored-by: Marius van der Wijden <[email protected]> Co-authored-by: Zhou <[email protected]> Co-authored-by: Felix Lange <[email protected]> Co-authored-by: Ömer Faruk Irmak <[email protected]> Co-authored-by: Giulio rebuffo <[email protected]> Co-authored-by: spencer-tb <[email protected]> Co-authored-by: maskpp <[email protected]> Co-authored-by: Sina M <[email protected]> Co-authored-by: Ulaş Erdoğan <[email protected]> Co-authored-by: jwasinger <[email protected]> Co-authored-by: lightclient <[email protected]> Co-authored-by: Axel Kingsley <[email protected]> Co-authored-by: Jacob Elias <[email protected]> Co-authored-by: CrazyFrog <[email protected]> Co-authored-by: Niran Babalola <[email protected]> Co-authored-by: Mark Tyneway <[email protected]> Co-authored-by: PixelPilot <[email protected]> Co-authored-by: kilavvy <[email protected]> Co-authored-by: Karl Bartel <[email protected]> Co-authored-by: Bosul Mun <[email protected]> Co-authored-by: George Knee <[email protected]> Co-authored-by: FT <[email protected]> Co-authored-by: Delweng <[email protected]> Co-authored-by: asamuj <[email protected]> Co-authored-by: Maxim Evtush <[email protected]> Co-authored-by: CertiK-Geth <[email protected]> Co-authored-by: steven <[email protected]> Co-authored-by: shazam8253 <[email protected]> Co-authored-by: shantichanal <[email protected]> Co-authored-by: kourin <[email protected]> Co-authored-by: Sam Stokes <[email protected]> Co-authored-by: Micke <[email protected]> Co-authored-by: gzeon <[email protected]> Co-authored-by: nthumann <[email protected]> Co-authored-by: Galoretka <[email protected]> Co-authored-by: ericxtheodore <[email protected]> Co-authored-by: Tomás Andróil <[email protected]> Co-authored-by: kashitaka <[email protected]> Co-authored-by: Daniel Katzan <[email protected]> Co-authored-by: cui <[email protected]> Co-authored-by: lmittmann <[email protected]> Co-authored-by: lmittmann <lm…
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
remove todo