Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
db7d3a4
version: begin v1.17.2 release cycle
fjl Mar 3, 2026
856e4d5
go.mod: bump go.opentelemetry.io/otel/sdk from 1.39.0 to 1.40.0 (#33946)
jrhea Mar 3, 2026
773f71b
miner: enable trie prefetcher in block builder (#33945)
jrhea Mar 4, 2026
4f75049
miner: avoid unnecessary work after payload resolution (#33943)
jrhea Mar 4, 2026
fe3a74e
core/vm: use amsterdam jump table in lookup (#33947)
BZO95 Mar 4, 2026
6d99759
cmd, core, eth, tests: prevent state flushing in RPC (#33931)
rjl493456442 Mar 4, 2026
814edc5
core/vm: Switch to branchless normalization and extend EXCHANGE (#33869)
jrhea Mar 4, 2026
dd202d4
core, ethdb, triedb: add batch close (#33708)
rjl493456442 Mar 4, 2026
6d0dd08
core: implement eip-7778: block gas accounting without refunds (#33593)
MariusVanDerWijden Mar 4, 2026
28dad94
cmd/geth: set default cache to 4096 (#33836)
jrhea Mar 4, 2026
402c71f
internal/telemetry: fix undersized span queue causing dropped spans (…
jrhea Mar 4, 2026
fc8c104
internal/ethapi: add MaxUsedGas field to eth_simulateV1 response (#32…
Rhovian Mar 4, 2026
ce64ab4
internal/ethapi: fix gas cap for eth_simulateV1 (#33952)
s1na Mar 5, 2026
344ce84
eth/fetcher: fix flaky test by improving event unsubscription (#33950)
healthykim Mar 5, 2026
a0fb810
trie/bintrie: fix overflow management in slot key computation (#33951)
gballet Mar 5, 2026
3f18715
trie/bintrie: cache hashes of clean nodes so as not to rehash the who…
gballet Mar 6, 2026
ecee64e
core: fix TestProcessVerkle flaky test (#33971)
gballet Mar 6, 2026
0d043d0
signer/core: prevent nil pointer panics in keystore operations (#33829)
marukai67 Mar 6, 2026
e15d4cc
core/types: reduce alloc in hot code path (#33523)
cuiweixie Mar 7, 2026
00540f9
go.mod: update go-eth-kzg (#33963)
MariusVanDerWijden Mar 8, 2026
b08aac1
eth/catalyst: allow getPayloadV2 for pre-shanghai payloads (#33932)
Muzry Mar 9, 2026
b8a3fa7
cmd/utils, eth/ethconfig: change default cache settings (#33975)
rjl493456442 Mar 9, 2026
91cec92
core, miner, tests: introduce codedb and simplify cachingDB (#33816)
rjl493456442 Mar 10, 2026
aa417b0
core/tracing: fix nonce revert edge case (#33978)
s1na Mar 10, 2026
27c4ca9
eth: resolve finalized from disk if it's not recently announced (#33150)
rjl493456442 Mar 11, 2026
f6068e3
eth/tracers: fix accessList StorageKeys return null (#33976)
georgehao Mar 11, 2026
32f05d6
core: end telemetry span for ApplyTransactionWithEVM if error is retu…
jwasinger Mar 11, 2026
88f8549
cmd/geth: correct misleading flag description in removedb command (#3…
aso20455 Mar 11, 2026
3c20e08
cmd/geth: add Prague pruning points (#33657)
s1na Mar 11, 2026
59512b1
cmd/fetchpayload: add payload-building utility (#33919)
gballet Mar 11, 2026
7d13acd
core/rawdb, triedb/pathdb: enable trienode history alongside existing…
rjl493456442 Mar 12, 2026
de0a452
eth/filters: fix race in pending tx and new heads subscriptions (#33990)
Copilot Mar 12, 2026
95b9a2e
core: Implement eip-7954 increase Maximum Contract Size (#33832)
0xjvn Mar 12, 2026
1c9ddee
trie/bintrie: use a sync.Pool when hashing binary tree nodes (#33989)
gballet Mar 12, 2026
eaa9418
core/rawdb: enforce exact key length for num->hash and td in db inspe…
legm0310 Mar 13, 2026
dba741f
console: fix autocomplete digit range to include 0 (#34003)
adblesss Mar 13, 2026
189f9d0
eth/filters: check history pruning cutoff in GetFilterLogs (#33823)
vickkkkkyy Mar 13, 2026
ede376a
internal/ethapi: encode slotNumber as hex in RPCMarshalHeader (#34005)
jwasinger Mar 13, 2026
24025c2
build: fix signify flag name in doWindowsInstaller (#34006)
vickkkkkyy Mar 14, 2026
77e7e5a
go.mod, go.sum: update karalabe/hid to fix broken FreeBSD ports build…
gballet Mar 16, 2026
a7d09cc
core: fix code database initialization in stateless mode (#34011)
rjl493456442 Mar 16, 2026
98b13f3
miner: add OpenTelemetry spans for block building path (#33773)
jrhea Mar 16, 2026
4b915af
core/state: avoid Bytes() allocation in flatReader hash computations …
CPerezz Mar 17, 2026
519a450
core/state: skip redundant trie Commit for Verkle in stateObject.comm…
CPerezz Mar 17, 2026
fc1b0c0
internal/ethapi: warn on reaching global gas cap for eth_simulateV1 (…
s1na Mar 17, 2026
9b2ce12
triedb/pathdb: enhance history index initer (#33640)
rjl493456442 Mar 17, 2026
ab35715
cmd/evm: don't strip prefixes on requests over t8n (#33997)
fselmo Mar 17, 2026
b6115e9
core: fix txLookupLock mutex leak on error returns in reorg() (#34039)
Mar 18, 2026
6138a11
trie/bintrie: parallelize InternalNode.Hash at shallow tree depths (#…
CPerezz Mar 18, 2026
6ae3f9f
core/history: refactor pruning configuration (#34036)
s1na Mar 18, 2026
b35645b
build: fix missing '!' in shebang of generated oss-fuzz scripts (#34044)
haoyu-haoyu Mar 18, 2026
3341d8a
eth/filters: rangeLogs should error on invalid block range (#33763)
vickkkkkyy Mar 18, 2026
4faadf1
rlp: add AppendList method to RawList (#34048)
healthykim Mar 19, 2026
a3083ff
cmd: add support for enumerating a single storage trie (#34051)
rjl493456442 Mar 19, 2026
fd85963
core/vm: rework gas measurement for call variants (#33648)
jwasinger Mar 19, 2026
35b9109
rlp: add Size method to EncoderBuffer (#34052)
fjl Mar 19, 2026
59ce2cb
p2p: track in-progress inbound node IDs (#33198)
0xjvn Mar 20, 2026
77779d1
core/state: bypass per-account updateTrie in IntermediateRoot for bin…
CPerezz Mar 20, 2026
305cd7b
trie/bintrie: fix NodeIterator Empty node handling and expose tree ac…
gballet Mar 20, 2026
e23b0cb
core/rawdb: fix key length check for num -- hash in db inspect (#34074)
adblesss Mar 23, 2026
a61e5cc
core, internal/ethapi: fix incorrect max-initcode RPC error mapping (…
gzliudan Mar 23, 2026
b87340a
core, core/vm: implement EIP-7708 (#33645)
zsfelfoldi Mar 23, 2026
745b0a8
cmd/utils: guard SampleRatio flag with IsSet check (#34062)
vickkkkkyy Mar 23, 2026
e951bcb
cmd/devp2p: fix discv5 PingMultiIP test session key mismatch (#34031)
cskiraly Mar 24, 2026
8f9061f
cmd/utils: optimize history import with batched insertion (#33894)
Savid Mar 24, 2026
5d0e18f
core/tracing: fix NonceChangeAuthorization comment (#34085)
aso20455 Mar 25, 2026
8a3a309
core/txpool/legacypool: remove redundant nil check in Get (#34092)
adblesss Mar 26, 2026
1b3b028
miner: fix txFitsSize comment (#34100)
gzliudan Mar 27, 2026
acdd139
miner: set slot number when building test payload (#34094)
jwasinger Mar 27, 2026
c3467dd
core, miner, trie: relocate witness stats (#34106)
rjl493456442 Mar 27, 2026
a249685
p2p/discover: resolve DNS hostnames for bootstrap nodes (#34101)
cgdusek Mar 28, 2026
bd3c843
build, cmd/keeper: add "womir" target (#34079)
gballet Mar 28, 2026
d1369b6
core/txpool/legacypool: use types.Sender instead of signer.Sender (#3…
gzliudan Mar 28, 2026
e585ad3
core/rawdb: fix freezer dir.Sync() failure on Windows (#34115)
cgdusek Mar 30, 2026
ceabc39
internal/ethapi: limit number of calls to eth_simulateV1 (#34616)
s1na Mar 30, 2026
95705e8
internal/ethapi: limit number of getProofs keys (#34617)
s1na Mar 30, 2026
be4dc0c
version: release go-ethereum v1.17.2 stable (#34618)
rjl493456442 Mar 30, 2026
09c7848
merge geth 00540f946 (v1.17.4 sync, batch 1/4 of v1.17.2)
pratikspatil024 Jul 27, 2026
0a83ed5
merge geth 77e7e5ad1 (v1.17.4 sync, batch 2/4 of v1.17.2)
pratikspatil024 Jul 27, 2026
1abb57b
merge geth e23b0cbc2 (v1.17.4 sync, batch 3/4 of v1.17.2)
pratikspatil024 Jul 27, 2026
682b4c3
merge geth be4dc0c4b (v1.17.4 sync, batch 4/4 of v1.17.2)
pratikspatil024 Jul 27, 2026
2bc495f
docs: v1.17.2 go-ethereum sync milestone chores (ledger, fork-registe…
pratikspatil024 Jul 27, 2026
d06fab0
Merge ppatil-upstream-v1.17.1 into ppatil-upstream-v1.17.2 (develop d…
pratikspatil024 Jul 31, 2026
35717ba
Merge ppatil-upstream-v1.17.1 into ppatil-upstream-v1.17.2
pratikspatil024 Aug 5, 2026
b055473
Merge ppatil-upstream-v1.17.1 into ppatil-upstream-v1.17.2
pratikspatil024 Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion accounts/abi/bind/backends/simulated.go
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ func (b *SimulatedBackend) callContract(ctx context.Context, call ethereum.CallM
// about the transaction and calling mechanisms.
evmContext := core.NewEVMBlockContext(header, b.blockchain, nil)
vmEnv := vm.NewEVM(evmContext, stateDB, b.config, vm.Config{NoBaseFee: true})
gasPool := new(core.GasPool).AddGas(gomath.MaxUint64)
gasPool := core.NewGasPool(gomath.MaxUint64)

return core.ApplyMessage(vmEnv, msg, gasPool)
}
Expand Down
22 changes: 13 additions & 9 deletions build/ci.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,17 +107,21 @@ var (
Tags: "ziren",
Env: map[string]string{"GOMIPS": "softfloat", "CGO_ENABLED": "0"},
},
{
Name: "womir",
GOOS: "wasip1",
GOARCH: "wasm",
Tags: "womir",
},
{
Name: "wasm-js",
GOOS: "js",
GOARCH: "wasm",
Tags: "example",
},
{
Name: "wasm-wasi",
GOOS: "wasip1",
GOARCH: "wasm",
Tags: "example",
},
{
Name: "example",
Expand Down Expand Up @@ -163,11 +167,11 @@ var (

// Distros for which packages are created
debDistros = []string{
"xenial", // 16.04, EOL: 04/2026
"bionic", // 18.04, EOL: 04/2028
"focal", // 20.04, EOL: 04/2030
"jammy", // 22.04, EOL: 04/2032
"noble", // 24.04, EOL: 04/2034
"xenial", // 16.04, EOL: 04/2026
"bionic", // 18.04, EOL: 04/2028
"focal", // 20.04, EOL: 04/2030
"jammy", // 22.04, EOL: 04/2032
"noble", // 24.04, EOL: 04/2034
}

// This is where the tests should be unpacked.
Expand Down Expand Up @@ -305,7 +309,7 @@ func doInstallKeeper(cmdline []string) {
args := slices.Clone(gobuild.Args)
args = append(args, "-o", executablePath(outputName))
args = append(args, ".")
build.MustRun(&exec.Cmd{Path: gobuild.Path, Args: args, Env: gobuild.Env})
build.MustRun(&exec.Cmd{Path: gobuild.Path, Args: args, Env: gobuild.Env, Dir: gobuild.Dir})
}
}

Expand Down Expand Up @@ -1203,7 +1207,7 @@ func doWindowsInstaller(cmdline []string) {
var (
arch = flag.String("arch", runtime.GOARCH, "Architecture for cross build packaging")
signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. WINDOWS_SIGNING_KEY)`)
signify = flag.String("signify key", "", `Environment variable holding the signify signing key (e.g. WINDOWS_SIGNIFY_KEY)`)
signify = flag.String("signify", "", `Environment variable holding the signify signing key (e.g. WINDOWS_SIGNIFY_KEY)`)
upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`)
workdir = flag.String("workdir", "", `Output directory for packages (uses temp dir if unset)`)
)
Expand Down
8 changes: 6 additions & 2 deletions cmd/devp2p/internal/v5test/framework.go
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,16 @@ func (tc *conn) read(c net.PacketConn) v5wire.Packet {
return &readError{err}
}

n, fromAddr, err := c.ReadFrom(buf)
n, _, err := c.ReadFrom(buf)
if err != nil {
return &readError{err}
}

_, _, p, err := tc.codec.Decode(buf[:n], fromAddr.String())
// Always use tc.remoteAddr for session lookup. The actual source address of
// the packet may differ from tc.remoteAddr when the remote node is reachable
// via multiple networks (e.g. Docker bridge vs. overlay), but the codec's
// session cache is keyed by the address used during Encode.
_, _, p, err := tc.codec.Decode(buf[:n], tc.remoteAddr.String())
if err != nil {
return &readError{err}
}
Expand Down
17 changes: 5 additions & 12 deletions cmd/evm/internal/t8ntool/execution.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,16 +154,13 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
isEIP4762 = chainConfig.IsVerkle(big.NewInt(int64(pre.Env.Number)))
statedb = MakePreState(rawdb.NewMemoryDatabase(), pre.Pre, isEIP4762)
signer = types.MakeSigner(chainConfig, new(big.Int).SetUint64(pre.Env.Number), pre.Env.Timestamp)
gaspool = new(core.GasPool)
gaspool = core.NewGasPool(pre.Env.GasLimit)
blockHash = common.Hash{0x13, 0x37}
rejectedTxs []*rejectedTx
includedTxs types.Transactions
gasUsed = uint64(0)
blobGasUsed = uint64(0)
receipts = make(types.Receipts, 0)
)

gaspool.AddGas(pre.Env.GasLimit)
vmContext := vm.BlockContext{
CanTransfer: core.CanTransfer,
Transfer: core.Transfer,
Expand Down Expand Up @@ -265,15 +262,15 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
statedb.SetTxContext(tx.Hash(), len(receipts))
var (
snapshot = statedb.Snapshot()
prevGas = gaspool.Gas()
gp = gaspool.Snapshot()
)
receipt, err := core.ApplyTransactionWithEVM(msg, gaspool, statedb, vmContext.BlockNumber, blockHash, pre.Env.Timestamp, tx, &gasUsed, evm)
receipt, err := core.ApplyTransactionWithEVM(msg, gaspool, statedb, vmContext.BlockNumber, blockHash, pre.Env.Timestamp, tx, evm)
if err != nil {
statedb.RevertToSnapshot(snapshot)
log.Info("rejected tx", "index", i, "hash", tx.Hash(), "from", msg.From, "error", err)
rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()})

gaspool.SetGas(prevGas)
gaspool.Set(gp)
continue
}
if receipt.Logs == nil {
Expand Down Expand Up @@ -364,7 +361,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
Receipts: receipts,
Rejected: rejectedTxs,
Difficulty: (*math.HexOrDecimal256)(vmContext.Difficulty),
GasUsed: (math.HexOrDecimal64)(gasUsed),
GasUsed: (math.HexOrDecimal64)(gaspool.Used()),
BaseFee: (*math.HexOrDecimal256)(vmContext.BaseFee),
}

Expand All @@ -380,10 +377,6 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
// Set requestsHash on block.
h := types.CalcRequestsHash(requests)
execRs.RequestsHash = &h
for i := range requests {
// remove prefix
requests[i] = requests[i][1:]
}
execRs.Requests = requests
}

Expand Down
8 changes: 6 additions & 2 deletions cmd/evm/internal/t8ntool/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core"

"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/tests"
Expand Down Expand Up @@ -194,8 +196,10 @@ func Transaction(ctx *cli.Context) error {
r.Error = errors.New("gas * maxFeePerGas exceeds 256 bits")
}
// Check whether the init code size has been exceeded.
if chainConfig.IsShanghai(new(big.Int)) && tx.To() == nil && len(tx.Data()) > params.MaxInitCodeSize {
r.Error = errors.New("max initcode size exceeded")
if tx.To() == nil {
if err := vm.CheckMaxInitCodeSize(&rules, uint64(len(tx.Data()))); err != nil {
r.Error = err
}
}

// Bor: EIP-7825 at Madhugiri HF block
Expand Down
177 changes: 177 additions & 0 deletions cmd/fetchpayload/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
// Copyright 2026 The go-ethereum Authors
// This file is part of go-ethereum.
//
// go-ethereum is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// go-ethereum is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.

// fetchpayload queries an Ethereum node over RPC, fetches a block and its
// execution witness, and writes the combined Payload (ChainID + Block +
// Witness) to disk in the format consumed by cmd/keeper.
package main

import (
"context"
"encoding/json"
"flag"
"fmt"
"math/big"
"os"
"path/filepath"
"strings"
"time"

"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/stateless"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc"
)

// Payload is duplicated from cmd/keeper/main.go (package main, not importable).
type Payload struct {
ChainID uint64
Block *types.Block
Witness *stateless.Witness
}

func main() {
var (
rpcURL = flag.String("rpc", "http://localhost:8545", "RPC endpoint URL")
blockArg = flag.String("block", "latest", `Block number: decimal, 0x-hex, or "latest"`)
format = flag.String("format", "rlp", "Comma-separated output formats: rlp, hex, json")
outDir = flag.String("out", "", "Output directory (default: current directory)")
)
flag.Parse()

ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

// Parse block number (nil means "latest" in ethclient).
blockNum, err := parseBlockNumber(*blockArg)
if err != nil {
fatal("invalid block number %q: %v", *blockArg, err)
}

// Connect to the node.
client, err := ethclient.DialContext(ctx, *rpcURL)
if err != nil {
fatal("failed to connect to %s: %v", *rpcURL, err)
}
defer client.Close()

chainID, err := client.ChainID(ctx)
if err != nil {
fatal("failed to get chain ID: %v", err)
}

// Fetch the block first so we have a concrete number for the witness call,
// avoiding a race where "latest" advances between the two RPCs.
block, err := client.BlockByNumber(ctx, blockNum)
if err != nil {
fatal("failed to fetch block: %v", err)
}
fmt.Printf("Fetched block %d (%#x)\n", block.NumberU64(), block.Hash())

// Fetch the execution witness via the debug namespace.
var extWitness stateless.ExtWitness
err = client.Client().CallContext(ctx, &extWitness, "debug_executionWitness", rpc.BlockNumber(block.NumberU64()))
if err != nil {
fatal("failed to fetch execution witness: %v", err)
}

witness := new(stateless.Witness)
err = witness.FromExtWitness(&extWitness)
if err != nil {
fatal("failed to convert witness: %v", err)
}

payload := Payload{
ChainID: chainID.Uint64(),
Block: block,
Witness: witness,
}

// Encode payload as RLP (shared by "rlp" and "hex" formats).
rlpBytes, err := rlp.EncodeToBytes(payload)
if err != nil {
fatal("failed to RLP-encode payload: %v", err)
}

// Write one output file per requested format.
blockHex := fmt.Sprintf("%x", block.NumberU64())
for f := range strings.SplitSeq(*format, ",") {
f = strings.TrimSpace(f)
outPath := filepath.Join(*outDir, fmt.Sprintf("%s_payload.%s", blockHex, f))

var data []byte
switch f {
case "rlp":
data = rlpBytes
case "hex":
data = []byte(hexutil.Encode(rlpBytes))
case "json":
data, err = marshalJSONPayload(chainID, block, &extWitness)
if err != nil {
fatal("failed to JSON-encode payload: %v", err)
}
default:
fatal("unknown format %q (valid: rlp, hex, json)", f)
}

if err := os.WriteFile(outPath, data, 0644); err != nil {
fatal("failed to write %s: %v", outPath, err)
}
fmt.Printf("Wrote %s (%d bytes)\n", outPath, len(data))
}
}

// parseBlockNumber converts a CLI string to *big.Int.
// Returns nil for "latest" (ethclient convention for the head block).
func parseBlockNumber(s string) (*big.Int, error) {
if strings.EqualFold(s, "latest") {
return nil, nil
}
n := new(big.Int)
if strings.HasPrefix(s, "0x") || strings.HasPrefix(s, "0X") {
if _, ok := n.SetString(s[2:], 16); !ok {
return nil, fmt.Errorf("invalid hex number")
}
return n, nil
}
if _, ok := n.SetString(s, 10); !ok {
return nil, fmt.Errorf("invalid decimal number")
}
return n, nil
}

// jsonPayload is a JSON-friendly representation of Payload. It uses ExtWitness
// instead of the internal Witness (which has no JSON marshaling).
type jsonPayload struct {
ChainID uint64 `json:"chainId"`
Block *types.Block `json:"block"`
Witness *stateless.ExtWitness `json:"witness"`
}

func marshalJSONPayload(chainID *big.Int, block *types.Block, ext *stateless.ExtWitness) ([]byte, error) {
return json.MarshalIndent(jsonPayload{
ChainID: chainID.Uint64(),
Block: block,
Witness: ext,
}, "", " ")
}

func fatal(format string, args ...any) {
fmt.Fprintf(os.Stderr, format+"\n", args...)
os.Exit(1)
}
Loading
Loading