From ffb657b09c17d421d24e9db0de2464ba74fd6190 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Sat, 2 May 2026 17:59:36 +0300 Subject: [PATCH 01/30] Bump ethereum/go-ethereum dependency to v1.16.9 --- go.mod | 2 +- go.sum | 4 ++-- insecure/go.mod | 2 +- insecure/go.sum | 4 ++-- integration/go.mod | 2 +- integration/go.sum | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index eaeb5c05cc5..6e27f43fb92 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/dgraph-io/badger/v2 v2.2007.4 github.com/ef-ds/deque v1.0.4 - github.com/ethereum/go-ethereum v1.16.8 + github.com/ethereum/go-ethereum v1.16.9 github.com/fxamacker/cbor/v2 v2.9.2-0.20260331174317-a78e92ec038e github.com/gammazero/workerpool v1.1.3 github.com/gogo/protobuf v1.3.2 diff --git a/go.sum b/go.sum index cfb8df9ec3b..554d0fefb02 100644 --- a/go.sum +++ b/go.sum @@ -357,8 +357,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3 github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.16.8 h1:LLLfkZWijhR5m6yrAXbdlTeXoqontH+Ga2f9igY7law= -github.com/ethereum/go-ethereum v1.16.8/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= +github.com/ethereum/go-ethereum v1.16.9 h1:UTJ93yoXD7BEMWg+9lSZ8/Zvf0oZfy2ZUmv0Gn0ZclE= +github.com/ethereum/go-ethereum v1.16.9/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= diff --git a/insecure/go.mod b/insecure/go.mod index 666e1f6c9e2..3fd7d6b9373 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -96,7 +96,7 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect - github.com/ethereum/go-ethereum v1.16.8 // indirect + github.com/ethereum/go-ethereum v1.16.9 // indirect github.com/ethereum/go-verkle v0.2.2 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index 9dbe84f8391..135855de198 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -328,8 +328,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3 github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.16.8 h1:LLLfkZWijhR5m6yrAXbdlTeXoqontH+Ga2f9igY7law= -github.com/ethereum/go-ethereum v1.16.8/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= +github.com/ethereum/go-ethereum v1.16.9 h1:UTJ93yoXD7BEMWg+9lSZ8/Zvf0oZfy2ZUmv0Gn0ZclE= +github.com/ethereum/go-ethereum v1.16.9/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= diff --git a/integration/go.mod b/integration/go.mod index 802f8bebdbb..2d8824b91f2 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -11,7 +11,7 @@ require ( github.com/coreos/go-semver v0.3.0 github.com/docker/docker v28.5.2+incompatible github.com/docker/go-connections v0.5.0 - github.com/ethereum/go-ethereum v1.16.8 + github.com/ethereum/go-ethereum v1.16.9 github.com/go-git/go-git/v5 v5.11.0 github.com/go-yaml/yaml v2.1.0+incompatible github.com/gorilla/websocket v1.5.3 diff --git a/integration/go.sum b/integration/go.sum index 0fbc76cbb98..9b49a78fb5a 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -296,8 +296,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3 github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.16.8 h1:LLLfkZWijhR5m6yrAXbdlTeXoqontH+Ga2f9igY7law= -github.com/ethereum/go-ethereum v1.16.8/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= +github.com/ethereum/go-ethereum v1.16.9 h1:UTJ93yoXD7BEMWg+9lSZ8/Zvf0oZfy2ZUmv0Gn0ZclE= +github.com/ethereum/go-ethereum v1.16.9/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= From 2211adf958f72d407aa9c9bd32a8206f311bfd68 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Sat, 2 May 2026 18:36:21 +0300 Subject: [PATCH 02/30] Bump ethereum/go-ethereum dependency to v1.17.0 --- fvm/evm/emulator/config.go | 6 ++--- fvm/evm/emulator/state/stateDB.go | 33 +++++++------------------- fvm/evm/emulator/state/stateDB_test.go | 10 ++++---- go.mod | 6 +---- go.sum | 12 ++-------- insecure/go.mod | 6 +---- insecure/go.sum | 12 ++-------- integration/go.mod | 7 +----- integration/go.sum | 12 ++-------- 9 files changed, 25 insertions(+), 79 deletions(-) diff --git a/fvm/evm/emulator/config.go b/fvm/evm/emulator/config.go index ec6cc38bf76..49e8b1960ae 100644 --- a/fvm/evm/emulator/config.go +++ b/fvm/evm/emulator/config.go @@ -8,6 +8,7 @@ import ( gethVM "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/eth/tracers" gethParams "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" "github.com/onflow/flow-go/fvm/evm/types" ) @@ -135,8 +136,7 @@ func defaultConfig() *Config { NoBaseFee: true, }, TxContext: &gethVM.TxContext{ - GasPrice: new(big.Int), - BlobFeeCap: new(big.Int), + GasPrice: new(uint256.Int), }, BlockContext: &gethVM.BlockContext{ CanTransfer: gethCore.CanTransfer, @@ -188,7 +188,7 @@ func WithOrigin(origin gethCommon.Address) Option { // WithGasPrice sets the gas price for the transaction (usually the one sets by the sender) func WithGasPrice(gasPrice *big.Int) Option { return func(c *Config) *Config { - c.TxContext.GasPrice = gasPrice + c.TxContext.GasPrice = new(uint256.Int).SetBytes(gasPrice.Bytes()) return c } } diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index 08a60146751..70e94296277 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -12,7 +12,6 @@ import ( gethTracing "github.com/ethereum/go-ethereum/core/tracing" gethTypes "github.com/ethereum/go-ethereum/core/types" gethParams "github.com/ethereum/go-ethereum/params" - gethUtils "github.com/ethereum/go-ethereum/trie/utils" "github.com/holiman/uint256" "github.com/onflow/atree" "github.com/onflow/crypto/hash" @@ -98,34 +97,25 @@ func (db *StateDB) CreateContract(addr gethCommon.Address) { db.latestView().CreateContract(addr) } -// IsCreated returns true if address is a new contract +// IsNewContract returns true if address is a new contract func (db *StateDB) IsNewContract(addr gethCommon.Address) bool { return db.latestView().IsNewContract(addr) } -// SelfDestruct flags the address for deletion and returns the previous balance. +// SelfDestruct flags the address for deletion. // // While this address exists for the rest of the transaction, // the balance of this account is cleared after the SelfDestruct call. -func (db *StateDB) SelfDestruct(addr gethCommon.Address) uint256.Int { - db.handleError(fmt.Errorf("legacy self destruct is not supported")) - return uint256.Int{} -} - -// SelfDestruct6780 would only follow the self destruct steps if account is a new contract -// either just created, or address had balance before but got a contract deployed to it (in this tx). -// Returns the previous balance and a boolean value denoting whether the address was self destructed. -func (db *StateDB) SelfDestruct6780(addr gethCommon.Address) (uint256.Int, bool) { - balance, err := db.latestView().GetBalance(addr) - db.handleError(err) - +func (db *StateDB) SelfDestruct(addr gethCommon.Address) { + // Flow EVM went live with the Cancun hard-fork, we we only support + // EIP-6780 SELFDESTRUCT, only in same transaction. + // EIP-6780 would only follow the self destruct steps if account is a new + // contract either just created, or address had balance before but got a + // contract deployed to it (in this tx). if db.IsNewContract(addr) { err := db.latestView().SelfDestruct(addr) db.handleError(err) - return *balance, true } - - return *balance, false } // HasSelfDestructed returns true if address is flagged with self destruct. @@ -621,13 +611,6 @@ func (s *StateDB) Error() error { return wrapError(s.cachedError) } -// PointCache is not supported and only needed -// when EIP-4762 is enabled in the future versions -// (currently planned for after Verkle fork). -func (s *StateDB) PointCache() *gethUtils.PointCache { - return nil -} - // Witness is not supported and only needed // when if witness collection is enabled (EnableWitnessCollection flag). // By definition it should returns a set containing all trie nodes that have been accessed. diff --git a/fvm/evm/emulator/state/stateDB_test.go b/fvm/evm/emulator/state/stateDB_test.go index c869979ede9..b77616881f8 100644 --- a/fvm/evm/emulator/state/stateDB_test.go +++ b/fvm/evm/emulator/state/stateDB_test.go @@ -370,7 +370,7 @@ func TestStateDB(t *testing.T) { require.NotEqual(t, gethTypes.EmptyRootHash, root) }) - t.Run("test Selfdestruct6780 functionality", func(t *testing.T) { + t.Run("test SelfDestruct functionality", func(t *testing.T) { ledger := testutils.GetSimpleValueStore() db, err := state.NewStateDB(ledger, rootAddr) require.NoError(t, err) @@ -391,7 +391,7 @@ func TestStateDB(t *testing.T) { db, err = state.NewStateDB(ledger, rootAddr) require.NoError(t, err) // call self destruct - db.SelfDestruct6780(addr1) + db.SelfDestruct(addr1) require.NoError(t, db.Error()) // noop is expected require.Equal(t, balance1, db.GetBalance(addr1)) @@ -412,7 +412,7 @@ func TestStateDB(t *testing.T) { db, err = state.NewStateDB(ledger, rootAddr) require.NoError(t, err) // call self destruct should not work - db.SelfDestruct6780(addr2) + db.SelfDestruct(addr2) require.NoError(t, db.Error()) // still no impact require.Equal(t, balance2, db.GetBalance(addr2)) @@ -429,7 +429,7 @@ func TestStateDB(t *testing.T) { db.CreateContract(addr2) require.Equal(t, code1, db.GetCode(addr2)) // now calling selfdestruct should do the job - db.SelfDestruct6780(addr2) + db.SelfDestruct(addr2) require.NoError(t, db.Error()) commit, err = db.Commit(true) require.NoError(t, err) @@ -456,7 +456,7 @@ func TestStateDB(t *testing.T) { db.AddBalance(addr3, balance3, gethTracing.BalanceChangeTransfer) require.NoError(t, db.Error()) // call self destruct - db.SelfDestruct6780(addr3) + db.SelfDestruct(addr3) require.NoError(t, db.Error()) // commit changes commit, err = db.Commit(true) diff --git a/go.mod b/go.mod index 6e27f43fb92..47f407de9ac 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/dgraph-io/badger/v2 v2.2007.4 github.com/ef-ds/deque v1.0.4 - github.com/ethereum/go-ethereum v1.16.9 + github.com/ethereum/go-ethereum v1.17.0 github.com/fxamacker/cbor/v2 v2.9.2-0.20260331174317-a78e92ec038e github.com/gammazero/workerpool v1.1.3 github.com/gogo/protobuf v1.3.2 @@ -178,7 +178,6 @@ require ( github.com/consensys/gnark-crypto v0.18.1 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect github.com/cskr/pubsub v1.0.2 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect @@ -189,7 +188,6 @@ require ( github.com/elastic/gosigar v0.14.3 // indirect github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect - github.com/ethereum/go-verkle v0.2.2 // indirect github.com/felixge/fgprof v0.9.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect @@ -259,7 +257,6 @@ require ( github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.62 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect @@ -274,7 +271,6 @@ require ( github.com/multiformats/go-multistream v0.6.0 // indirect github.com/multiformats/go-varint v0.0.7 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onflow/fixed-point v0.1.1 // indirect github.com/onflow/flow-ft/lib/go/contracts v1.1.1 // indirect github.com/onflow/flow-ft/lib/go/templates v1.1.1 // indirect diff --git a/go.sum b/go.sum index 554d0fefb02..b5ec5efb551 100644 --- a/go.sum +++ b/go.sum @@ -287,8 +287,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= @@ -357,10 +355,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3 github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.16.9 h1:UTJ93yoXD7BEMWg+9lSZ8/Zvf0oZfy2ZUmv0Gn0ZclE= -github.com/ethereum/go-ethereum v1.16.9/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= -github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= -github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= +github.com/ethereum/go-ethereum v1.17.0 h1:2D+1Fe23CwZ5tQoAS5DfwKFNI1HGcTwi65/kRlAVxes= +github.com/ethereum/go-ethereum v1.17.0/go.mod h1:2W3msvdosS/MCWytpqTcqgFiRYbTH59FxDJzqah120o= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= @@ -839,7 +835,6 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -936,8 +931,6 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onflow/atree v0.16.0 h1:b+f/suzcnnr1Lx1KdJEjpn2CX+AKSAz1yIB30NQDutU= github.com/onflow/atree v0.16.0/go.mod h1:hiOT/vKK/Zyw34Ru9OFbfEemC5NnQ7SHFB43bN9/4qI= github.com/onflow/boxo v0.0.0-20240201202436-f2477b92f483 h1:LpiQhTAfM9CAmNVEs0n//cBBgCg+vJSiIxTHYUklZ84= @@ -1135,7 +1128,6 @@ github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= diff --git a/insecure/go.mod b/insecure/go.mod index 3fd7d6b9373..63718e9552b 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -77,7 +77,6 @@ require ( github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect github.com/cskr/pubsub v1.0.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect @@ -96,8 +95,7 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect - github.com/ethereum/go-ethereum v1.16.9 // indirect - github.com/ethereum/go-verkle v0.2.2 // indirect + github.com/ethereum/go-ethereum v1.17.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect @@ -196,7 +194,6 @@ require ( github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.62 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect @@ -214,7 +211,6 @@ require ( github.com/multiformats/go-multistream v0.6.0 // indirect github.com/multiformats/go-varint v0.0.7 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onflow/atree v0.16.0 // indirect github.com/onflow/cadence v1.10.3 // indirect github.com/onflow/fixed-point v0.1.1 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index 135855de198..9dfff1c47a2 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -262,8 +262,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= @@ -328,10 +326,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3 github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.16.9 h1:UTJ93yoXD7BEMWg+9lSZ8/Zvf0oZfy2ZUmv0Gn0ZclE= -github.com/ethereum/go-ethereum v1.16.9/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= -github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= -github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= +github.com/ethereum/go-ethereum v1.17.0 h1:2D+1Fe23CwZ5tQoAS5DfwKFNI1HGcTwi65/kRlAVxes= +github.com/ethereum/go-ethereum v1.17.0/go.mod h1:2W3msvdosS/MCWytpqTcqgFiRYbTH59FxDJzqah120o= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -791,7 +787,6 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -886,8 +881,6 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onflow/atree v0.16.0 h1:b+f/suzcnnr1Lx1KdJEjpn2CX+AKSAz1yIB30NQDutU= github.com/onflow/atree v0.16.0/go.mod h1:hiOT/vKK/Zyw34Ru9OFbfEemC5NnQ7SHFB43bN9/4qI= github.com/onflow/boxo v0.0.0-20240201202436-f2477b92f483 h1:LpiQhTAfM9CAmNVEs0n//cBBgCg+vJSiIxTHYUklZ84= @@ -1081,7 +1074,6 @@ github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= diff --git a/integration/go.mod b/integration/go.mod index 2d8824b91f2..1971f7d086b 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -11,7 +11,7 @@ require ( github.com/coreos/go-semver v0.3.0 github.com/docker/docker v28.5.2+incompatible github.com/docker/go-connections v0.5.0 - github.com/ethereum/go-ethereum v1.16.9 + github.com/ethereum/go-ethereum v1.17.0 github.com/go-git/go-git/v5 v5.11.0 github.com/go-yaml/yaml v2.1.0+incompatible github.com/gorilla/websocket v1.5.3 @@ -93,7 +93,6 @@ require ( github.com/bits-and-blooms/bitset v1.24.4 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect @@ -113,7 +112,6 @@ require ( github.com/containerd/log v0.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect github.com/cskr/pubsub v1.0.2 // indirect github.com/cyphar/filepath-securejoin v0.5.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -137,7 +135,6 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect - github.com/ethereum/go-verkle v0.2.2 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect @@ -241,7 +238,6 @@ require ( github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.62 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect @@ -266,7 +262,6 @@ require ( github.com/multiformats/go-multistream v0.6.0 // indirect github.com/multiformats/go-varint v0.0.7 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onflow/atree v0.16.0 // indirect github.com/onflow/fixed-point v0.1.1 // indirect github.com/onflow/flow-evm-bridge v0.2.1 // indirect diff --git a/integration/go.sum b/integration/go.sum index 9b49a78fb5a..4017eae0117 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -220,8 +220,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -296,10 +294,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3 github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.16.9 h1:UTJ93yoXD7BEMWg+9lSZ8/Zvf0oZfy2ZUmv0Gn0ZclE= -github.com/ethereum/go-ethereum v1.16.9/go.mod h1:Fs6QebQbavneQTYcA39PEKv2+zIjX7rPUZ14DER46wk= -github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= -github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= +github.com/ethereum/go-ethereum v1.17.0 h1:2D+1Fe23CwZ5tQoAS5DfwKFNI1HGcTwi65/kRlAVxes= +github.com/ethereum/go-ethereum v1.17.0/go.mod h1:2W3msvdosS/MCWytpqTcqgFiRYbTH59FxDJzqah120o= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY= @@ -662,7 +658,6 @@ github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -746,8 +741,6 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onflow/atree v0.16.0 h1:b+f/suzcnnr1Lx1KdJEjpn2CX+AKSAz1yIB30NQDutU= github.com/onflow/atree v0.16.0/go.mod h1:hiOT/vKK/Zyw34Ru9OFbfEemC5NnQ7SHFB43bN9/4qI= github.com/onflow/boxo v0.0.0-20240201202436-f2477b92f483 h1:LpiQhTAfM9CAmNVEs0n//cBBgCg+vJSiIxTHYUklZ84= @@ -922,7 +915,6 @@ github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 h1:4WFk6 github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h1:Vp72IJajgeOL6ddqrAhmp7IM9zbTcgkQxD/YdxrVwMw= github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= From e632f268327552a679c7d622568ba968abe6b656 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Sat, 2 May 2026 18:40:36 +0300 Subject: [PATCH 03/30] Bump ethereum/go-ethereum dependency to v1.17.1 --- go.mod | 6 +++--- go.sum | 12 ++++++------ insecure/go.mod | 6 +++--- insecure/go.sum | 12 ++++++------ integration/go.mod | 6 +++--- integration/go.sum | 12 ++++++------ 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 47f407de9ac..9bec1c80e0d 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/dgraph-io/badger/v2 v2.2007.4 github.com/ef-ds/deque v1.0.4 - github.com/ethereum/go-ethereum v1.17.0 + github.com/ethereum/go-ethereum v1.17.1 github.com/fxamacker/cbor/v2 v2.9.2-0.20260331174317-a78e92ec038e github.com/gammazero/workerpool v1.1.3 github.com/gogo/protobuf v1.3.2 @@ -124,7 +124,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/signin v1.0.5 // indirect github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect + github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect github.com/ferranbt/fastssz v0.1.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect @@ -321,7 +321,7 @@ require ( github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect + github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect diff --git a/go.sum b/go.sum index b5ec5efb551..0e85e5ce034 100644 --- a/go.sum +++ b/go.sum @@ -351,12 +351,12 @@ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJP github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= -github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3aXiHh5s= -github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= +github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn27fRjSls= +github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.0 h1:2D+1Fe23CwZ5tQoAS5DfwKFNI1HGcTwi65/kRlAVxes= -github.com/ethereum/go-ethereum v1.17.0/go.mod h1:2W3msvdosS/MCWytpqTcqgFiRYbTH59FxDJzqah120o= +github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho= +github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= @@ -1252,8 +1252,8 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= +github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= diff --git a/insecure/go.mod b/insecure/go.mod index 63718e9552b..2204d9e6e38 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -93,9 +93,9 @@ require ( github.com/emicklei/dot v1.6.2 // indirect github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect - github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect + github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect - github.com/ethereum/go-ethereum v1.17.0 // indirect + github.com/ethereum/go-ethereum v1.17.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect @@ -283,7 +283,7 @@ require ( github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect + github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index 9dfff1c47a2..392847b6b7c 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -322,12 +322,12 @@ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJP github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= -github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3aXiHh5s= -github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= +github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn27fRjSls= +github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.0 h1:2D+1Fe23CwZ5tQoAS5DfwKFNI1HGcTwi65/kRlAVxes= -github.com/ethereum/go-ethereum v1.17.0/go.mod h1:2W3msvdosS/MCWytpqTcqgFiRYbTH59FxDJzqah120o= +github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho= +github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -1196,8 +1196,8 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= +github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= diff --git a/integration/go.mod b/integration/go.mod index 1971f7d086b..f5c69b4c5e0 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -11,7 +11,7 @@ require ( github.com/coreos/go-semver v0.3.0 github.com/docker/docker v28.5.2+incompatible github.com/docker/go-connections v0.5.0 - github.com/ethereum/go-ethereum v1.17.0 + github.com/ethereum/go-ethereum v1.17.1 github.com/go-git/go-git/v5 v5.11.0 github.com/go-yaml/yaml v2.1.0+incompatible github.com/gorilla/websocket v1.5.3 @@ -133,7 +133,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect - github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect + github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect @@ -331,7 +331,7 @@ require ( github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect + github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect diff --git a/integration/go.sum b/integration/go.sum index 4017eae0117..19125a563b4 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -290,12 +290,12 @@ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJP github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= -github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3aXiHh5s= -github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= +github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn27fRjSls= +github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.0 h1:2D+1Fe23CwZ5tQoAS5DfwKFNI1HGcTwi65/kRlAVxes= -github.com/ethereum/go-ethereum v1.17.0/go.mod h1:2W3msvdosS/MCWytpqTcqgFiRYbTH59FxDJzqah120o= +github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho= +github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY= @@ -1028,8 +1028,8 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= +github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= From 922adfff1c30174f27fa322c68563126efac42dc Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Sat, 2 May 2026 19:35:21 +0300 Subject: [PATCH 04/30] Bump ethereum/go-ethereum dependency to v1.17.2 --- fvm/evm/emulator/emulator.go | 4 ++- fvm/evm/emulator/state/stateDB.go | 50 +++++++++++++++++++++++++++++++ fvm/evm/types/codeFinder.go | 4 --- go.mod | 14 ++++----- go.sum | 28 ++++++++--------- insecure/go.mod | 14 ++++----- insecure/go.sum | 28 ++++++++--------- integration/go.mod | 4 +-- integration/go.sum | 8 ++--- 9 files changed, 101 insertions(+), 53 deletions(-) diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index 2a7f4409d2e..a5fa33ae942 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -555,12 +555,14 @@ func (proc *procedure) deployAt( // setup account proc.state.CreateAccount(addr) proc.state.SetNonce(addr, 1, gethTracing.NonceChangeNewContract) // (EIP-158) + rules := proc.config.ChainRules() if call.Value.Sign() > 0 { proc.evm.Context.Transfer( // transfer value proc.state, callerCommon, addr, uint256.MustFromBig(call.Value), + &rules, ) } @@ -676,7 +678,7 @@ func (proc *procedure) run( // Set gas pool based on block gas limit // if the block gas limit is set to anything than max // we need to update this code. - gasPool := (*gethCore.GasPool)(&proc.config.BlockContext.GasLimit) + gasPool := gethCore.NewGasPool(proc.config.BlockContext.GasLimit) // transit the state execResult, err := gethCore.ApplyMessage( diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index 70e94296277..c28894da757 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -20,6 +20,11 @@ import ( "github.com/onflow/flow-go/model/flow" ) +type removedAccountWithBalance struct { + address gethCommon.Address + balance *uint256.Int +} + // StateDB implements a types.StateDB interface // // stateDB interface defined by the Geth doesn't support returning errors @@ -560,6 +565,51 @@ func (db *StateDB) Commit(finalize bool) (hash.Hash, error) { return updateCommit, nil } +// EmitLogsForBurnAccounts emits the eth burn logs for accounts scheduled for +// removal which still have positive balance. The purpose of this function is +// to handle a corner case of EIP-7708 where a self-destructed account might +// still receive funds between sending/burning its previous balance and actual +// removal. In this case the burning of these remaining balances still need to +// be logged. +// Specification EIP-7708: https://eips.ethereum.org/EIPS/eip-7708 +// +// This function should only be invoked at the transaction boundary, specifically +// before the Finalise. +func (db *StateDB) EmitLogsForBurnAccounts() { + // iterate views and collect dirty addresses + addresses := make(map[gethCommon.Address]struct{}) + for _, view := range db.views { + for key := range view.DirtyAddresses() { + addresses[key] = struct{}{} + } + } + + // sort addresses + sortedAddresses := make([]gethCommon.Address, 0, len(addresses)) + for addr := range addresses { + sortedAddresses = append(sortedAddresses, addr) + } + + var list []removedAccountWithBalance + for _, addr := range sortedAddresses { + balance := db.GetBalance(addr) + if db.HasSelfDestructed(addr) && !balance.IsZero() { + list = append(list, removedAccountWithBalance{ + address: addr, + balance: balance, + }) + } + } + if list != nil { + sort.Slice(list, func(i, j int) bool { + return list[i].address.Cmp(list[j].address) < 0 + }) + } + for _, acct := range list { + db.AddLog(gethTypes.EthBurnLog(acct.address, acct.balance)) + } +} + // This is a no-op for our custom implementation of the StateDB interface, // since Commit() already handles finalization and deletion of empty // objects. diff --git a/fvm/evm/types/codeFinder.go b/fvm/evm/types/codeFinder.go index 8f987f3ecb3..f8fa0714234 100644 --- a/fvm/evm/types/codeFinder.go +++ b/fvm/evm/types/codeFinder.go @@ -28,8 +28,6 @@ func ValidationErrorCode(err error) ErrorCode { return ValidationErrCodeGasLimitReached case gethCore.ErrInsufficientFundsForTransfer: return ValidationErrCodeInsufficientFundsForTransfer - case gethCore.ErrMaxInitCodeSizeExceeded: - return ValidationErrCodeMaxInitCodeSizeExceeded case gethCore.ErrInsufficientFunds: return ValidationErrCodeInsufficientFunds case gethCore.ErrIntrinsicGas: @@ -103,8 +101,6 @@ func ErrorFromCode(errorCode ErrorCode) error { return gethCore.ErrGasLimitReached case ValidationErrCodeInsufficientFundsForTransfer: return gethCore.ErrInsufficientFundsForTransfer - case ValidationErrCodeMaxInitCodeSizeExceeded: - return gethCore.ErrMaxInitCodeSizeExceeded case ValidationErrCodeInsufficientFunds: return gethCore.ErrInsufficientFunds case ValidationErrCodeIntrinsicGas: diff --git a/go.mod b/go.mod index 9bec1c80e0d..2efb6e3c3c2 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/dgraph-io/badger/v2 v2.2007.4 github.com/ef-ds/deque v1.0.4 - github.com/ethereum/go-ethereum v1.17.1 + github.com/ethereum/go-ethereum v1.17.2 github.com/fxamacker/cbor/v2 v2.9.2-0.20260331174317-a78e92ec038e github.com/gammazero/workerpool v1.1.3 github.com/gogo/protobuf v1.3.2 @@ -68,10 +68,10 @@ require ( github.com/spf13/viper v1.15.0 github.com/stretchr/testify v1.11.1 github.com/vmihailenco/msgpack/v4 v4.3.11 - go.opentelemetry.io/otel v1.39.0 + go.opentelemetry.io/otel v1.40.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 - go.opentelemetry.io/otel/sdk v1.39.0 - go.opentelemetry.io/otel/trace v1.39.0 + go.opentelemetry.io/otel/sdk v1.40.0 + go.opentelemetry.io/otel/trace v1.40.0 go.uber.org/atomic v1.11.0 go.uber.org/multierr v1.11.0 golang.org/x/crypto v0.47.0 @@ -122,7 +122,7 @@ require ( require ( github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.5 // indirect - github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect + github.com/crate-crypto/go-eth-kzg v1.5.0 // indirect github.com/emicklei/dot v1.6.2 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect @@ -339,8 +339,8 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect - go.opentelemetry.io/otel/metric v1.39.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect + go.opentelemetry.io/otel/metric v1.40.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect diff --git a/go.sum b/go.sum index 0e85e5ce034..0ea9cc17fed 100644 --- a/go.sum +++ b/go.sum @@ -285,8 +285,8 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= -github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= +github.com/crate-crypto/go-eth-kzg v1.5.0 h1:FYRiJMJG2iv+2Dy3fi14SVGjcPteZ5HAAUe4YWlJygc= +github.com/crate-crypto/go-eth-kzg v1.5.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= @@ -355,8 +355,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho= -github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I= +github.com/ethereum/go-ethereum v1.17.2 h1:ag6geu0kn8Hv5FLKTpH+Hm2DHD+iuFtuqKxEuwUsDOI= +github.com/ethereum/go-ethereum v1.17.2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= @@ -1339,8 +1339,8 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= @@ -1349,14 +1349,14 @@ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1x go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0/go.mod h1:kB3ufRbfU+CQ4MlUcqtW8Z7YEOBeK2DJ6CmR5rYYF3E= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= +go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= +go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= +go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= diff --git a/insecure/go.mod b/insecure/go.mod index 2204d9e6e38..de10e1b1cee 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -76,7 +76,7 @@ require ( github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect + github.com/crate-crypto/go-eth-kzg v1.5.0 // indirect github.com/cskr/pubsub v1.0.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect @@ -95,7 +95,7 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect - github.com/ethereum/go-ethereum v1.17.1 // indirect + github.com/ethereum/go-ethereum v1.17.2 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect @@ -301,13 +301,13 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel v1.39.0 // indirect + go.opentelemetry.io/otel v1.40.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect - go.opentelemetry.io/otel/metric v1.39.0 // indirect - go.opentelemetry.io/otel/sdk v1.39.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect - go.opentelemetry.io/otel/trace v1.39.0 // indirect + go.opentelemetry.io/otel/metric v1.40.0 // indirect + go.opentelemetry.io/otel/sdk v1.40.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect + go.opentelemetry.io/otel/trace v1.40.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index 392847b6b7c..cdd6a80caff 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -260,8 +260,8 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= -github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= +github.com/crate-crypto/go-eth-kzg v1.5.0 h1:FYRiJMJG2iv+2Dy3fi14SVGjcPteZ5HAAUe4YWlJygc= +github.com/crate-crypto/go-eth-kzg v1.5.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= @@ -326,8 +326,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho= -github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I= +github.com/ethereum/go-ethereum v1.17.2 h1:ag6geu0kn8Hv5FLKTpH+Hm2DHD+iuFtuqKxEuwUsDOI= +github.com/ethereum/go-ethereum v1.17.2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -1282,22 +1282,22 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= +go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= +go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= +go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= diff --git a/integration/go.mod b/integration/go.mod index f5c69b4c5e0..7e5652c82a7 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -11,7 +11,7 @@ require ( github.com/coreos/go-semver v0.3.0 github.com/docker/docker v28.5.2+incompatible github.com/docker/go-connections v0.5.0 - github.com/ethereum/go-ethereum v1.17.1 + github.com/ethereum/go-ethereum v1.17.2 github.com/go-git/go-git/v5 v5.11.0 github.com/go-yaml/yaml v2.1.0+incompatible github.com/gorilla/websocket v1.5.3 @@ -111,7 +111,7 @@ require ( github.com/containerd/fifo v1.1.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect + github.com/crate-crypto/go-eth-kzg v1.5.0 // indirect github.com/cskr/pubsub v1.0.2 // indirect github.com/cyphar/filepath-securejoin v0.5.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/integration/go.sum b/integration/go.sum index 19125a563b4..18eaabb8f1e 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -218,8 +218,8 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= -github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= +github.com/crate-crypto/go-eth-kzg v1.5.0 h1:FYRiJMJG2iv+2Dy3fi14SVGjcPteZ5HAAUe4YWlJygc= +github.com/crate-crypto/go-eth-kzg v1.5.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -294,8 +294,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho= -github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I= +github.com/ethereum/go-ethereum v1.17.2 h1:ag6geu0kn8Hv5FLKTpH+Hm2DHD+iuFtuqKxEuwUsDOI= +github.com/ethereum/go-ethereum v1.17.2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY= From 9abd95a5a88d9a0af306909c81af068a38c854a5 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Sun, 3 May 2026 13:34:51 +0300 Subject: [PATCH 05/30] Add activation timestamps for Glamsterdam hard-fork --- fvm/evm/emulator/config.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/fvm/evm/emulator/config.go b/fvm/evm/emulator/config.go index 49e8b1960ae..ff638bd39e5 100644 --- a/fvm/evm/emulator/config.go +++ b/fvm/evm/emulator/config.go @@ -26,6 +26,10 @@ var ( PreviewnetOsakaActivation = uint64(0) // already on Osaka for PreviewNet TestnetOsakaActivation = uint64(1763575200) // Wednesday, November 19, 2025 18:00:00 GMT+0000 MainnetOsakaActivation = uint64(1764784800) // Wednesday, December 03, 2025 18:00:00 GMT+0000 + + PreviewnetAmsterdamActivation = uint64(0) // already on Amsterdam for PreviewNet + TestnetAmsterdamActivation = uint64(1782842400) // Tuesday, June 30, 2026 at 18:00:00 GMT+0000 + MainnetAmsterdamActivation = uint64(1782842400) // Tuesday, June 30, 2026 at 18:00:00 GMT+0000 ) // Config aggregates all the configuration (chain, evm, block, tx, ...) @@ -103,22 +107,26 @@ func MakeChainConfig(chainID *big.Int) *gethParams.ChainConfig { MuirGlacierBlock: bigZero, // already on MuirGlacier // Fork scheduling based on timestamps - ShanghaiTime: &zero, // already on Shanghai - CancunTime: &zero, // already on Cancun - PragueTime: nil, // this is conditionally set below - OsakaTime: nil, // this is conditionally set below - VerkleTime: nil, // not on Verkle + ShanghaiTime: &zero, // already on Shanghai + CancunTime: &zero, // already on Cancun + PragueTime: nil, // this is conditionally set below + OsakaTime: nil, // this is conditionally set below + AmsterdamTime: nil, // this is conditionally set below + VerkleTime: nil, // not on Verkle } if chainID.Cmp(types.FlowEVMPreviewNetChainID) == 0 { chainConfig.PragueTime = &PreviewnetPragueActivation chainConfig.OsakaTime = &PreviewnetOsakaActivation + chainConfig.AmsterdamTime = &PreviewnetAmsterdamActivation } else if chainID.Cmp(types.FlowEVMTestNetChainID) == 0 { chainConfig.PragueTime = &TestnetPragueActivation chainConfig.OsakaTime = &TestnetOsakaActivation + chainConfig.AmsterdamTime = &TestnetAmsterdamActivation } else if chainID.Cmp(types.FlowEVMMainNetChainID) == 0 { chainConfig.PragueTime = &MainnetPragueActivation chainConfig.OsakaTime = &MainnetOsakaActivation + chainConfig.AmsterdamTime = &MainnetAmsterdamActivation } return chainConfig From d8c57baaf07fd35de62bb6536b3d286a89339077 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Tue, 5 May 2026 13:14:05 +0300 Subject: [PATCH 06/30] Add E2E tests to verify correctness of EIP-7708 (log emission for ETH transfers & burns) --- fvm/evm/evm_test.go | 561 +++++++++++++++--- fvm/evm/testutils/contract.go | 2 +- fvm/evm/testutils/contracts/factory.sol | 12 + fvm/evm/testutils/contracts/factory_abi.json | 23 + fvm/evm/testutils/contracts/factory_bytes.hex | 2 +- 5 files changed, 508 insertions(+), 92 deletions(-) diff --git a/fvm/evm/evm_test.go b/fvm/evm/evm_test.go index f7f89778bdd..1e975f6583e 100644 --- a/fvm/evm/evm_test.go +++ b/fvm/evm/evm_test.go @@ -28,6 +28,7 @@ import ( envMock "github.com/onflow/flow-go/fvm/environment/mock" "github.com/onflow/flow-go/fvm/evm" "github.com/onflow/flow-go/fvm/evm/events" + "github.com/onflow/flow-go/fvm/evm/handler" "github.com/onflow/flow-go/fvm/evm/impl" "github.com/onflow/flow-go/fvm/evm/stdlib" . "github.com/onflow/flow-go/fvm/evm/testutils" @@ -2072,10 +2073,11 @@ func TestEVMBlockData(t *testing.T) { } func TestEVMAddressDeposit(t *testing.T) { - t.Parallel() + chain := flow.Emulator.Chain() sc := systemcontracts.SystemContractsForChain(chain.ChainID()) + RunWithNewEnvironment(t, chain, func( ctx fvm.Context, @@ -2108,6 +2110,8 @@ func TestEVMAddressDeposit(t *testing.T) { sc.FlowToken.Address.HexWithPrefix(), )) + addressAllocator := handler.NewAddressAllocator() + bridgeAddress := addressAllocator.NativeTokenBridgeAddress() addr := RandomAddress(t) txBody, err := flow.NewTransactionBodyBuilder(). @@ -2138,6 +2142,20 @@ func TestEVMAddressDeposit(t *testing.T) { // tx executed event txEvent := output.Events[2] txEventPayload := TxEventToPayload(t, txEvent, sc.EVMContract.Address) + require.Greater(t, len(txEventPayload.Logs), 0) + + gethLogs := []*gethTypes.Log{} + err = rlp.Decode(bytes.NewReader(txEventPayload.Logs), &gethLogs) + require.NoError(t, err) + require.Len(t, gethLogs, 1) + + ethTransferLog := gethLogs[0] + require.Equal(t, gethParams.SystemAddress, ethTransferLog.Address) + require.Len(t, ethTransferLog.Topics, 3) + require.Equal(t, gethParams.EthTransferLogEvent, ethTransferLog.Topics[0]) + require.Equal(t, common.BytesToHash(bridgeAddress.Bytes()), ethTransferLog.Topics[1]) + require.Equal(t, common.BytesToHash(addr.Bytes()), ethTransferLog.Topics[2]) + require.Equal(t, big.NewInt(1_000_000_000_000_000_000), new(big.Int).SetBytes(ethTransferLog.Data)) // deposit event depositEvent := output.Events[3] @@ -2163,7 +2181,8 @@ func TestEVMAddressDeposit(t *testing.T) { txHashes.RootHash(), blockEventPayload.TransactionHashRoot, ) - }) + }, + ) } func TestCOAAddressDeposit(t *testing.T) { @@ -2704,61 +2723,83 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { ) { code := []byte(fmt.Sprintf( ` - import EVM from %s - import FlowToken from %s + import EVM from %s + import FlowToken from %s - access(all) - fun main(address: [UInt8; 20]): UFix64 { - let admin = getAuthAccount(%s) - .storage.borrow<&FlowToken.Administrator>(from: /storage/flowTokenAdmin)! + transaction(address: [UInt8; 20]) { + prepare(account: auth(BorrowValue) &Account) { + let admin = account.storage.borrow<&FlowToken.Administrator>( + from: /storage/flowTokenAdmin + )! - let minter <- admin.createNewMinter(allowedAmount: 2.34) - let vault <- minter.mintTokens(amount: 2.34) - destroy minter + let minter <- admin.createNewMinter(allowedAmount: 2.34) + let vault <- minter.mintTokens(amount: 2.34) + destroy minter - let cadenceOwnedAccount <- EVM.createCadenceOwnedAccount() - cadenceOwnedAccount.deposit(from: <-vault) + let cadenceOwnedAccount <- EVM.createCadenceOwnedAccount() + cadenceOwnedAccount.deposit(from: <-vault) - let bal = EVM.Balance(attoflow: 0) - bal.setFLOW(flow: 1.23) + let bal = EVM.Balance(attoflow: 0) + bal.setFLOW(flow: 1.23) - let recipientEVMAddress = EVM.EVMAddress(bytes: address) + let recipientEVMAddress = EVM.EVMAddress(bytes: address) - let res = cadenceOwnedAccount.call( - to: recipientEVMAddress, - data: [], - gasLimit: 100_000, - value: bal, - ) + let res = cadenceOwnedAccount.call( + to: recipientEVMAddress, + data: [], + gasLimit: 100_000, + value: bal, + ) - assert(res.status == EVM.Status.successful, message: "transfer call was not successful") + assert(res.status == EVM.Status.successful, message: "transfer call was not successful") - destroy cadenceOwnedAccount - return recipientEVMAddress.balance().inFLOW() - } - `, + destroy cadenceOwnedAccount + } + } + `, sc.EVMContract.Address.HexWithPrefix(), sc.FlowToken.Address.HexWithPrefix(), - sc.FlowServiceAccount.Address.HexWithPrefix(), )) - addr := cadence.NewArray( - unittest.BytesToCdcUInt8(RandomAddress(t).Bytes()), + addr := RandomAddress(t) + addrBytes := cadence.NewArray( + unittest.BytesToCdcUInt8(addr.Bytes()), ).WithType(stdlib.EVMAddressBytesCadenceType) - script := fvm.Script(code).WithArguments( - json.MustEncode(addr), - ) + txBody, err := flow.NewTransactionBodyBuilder(). + SetScript(code). + SetPayer(sc.FlowServiceAccount.Address). + AddAuthorizer(sc.FlowServiceAccount.Address). + AddArgument(json.MustEncode(addrBytes)). + Build() + require.NoError(t, err) + tx := fvm.Transaction(txBody, 0) - _, output, err := vm.Run( - ctx, - script, - snapshot) + _, output, err := vm.Run(ctx, tx, snapshot) require.NoError(t, err) require.NoError(t, output.Err) - require.Equal(t, uint64(123000000), uint64(output.Value.(cadence.UFix64))) - }) + // tx executed events + coaAddress, err := types.COAAddressFromFlowCOACreatedEvent(sc.EVMContract.Address, output.Events[3]) + require.NoError(t, err) + + coaDepositEvent := TxEventToPayload(t, output.Events[6], sc.EVMContract.Address) + require.Greater(t, len(coaDepositEvent.Logs), 0) + + gethLogs := []*gethTypes.Log{} + err = rlp.Decode(bytes.NewReader(coaDepositEvent.Logs), &gethLogs) + require.NoError(t, err) + require.Len(t, gethLogs, 1) + + ethTransferLog := gethLogs[0] + require.Equal(t, gethParams.SystemAddress, ethTransferLog.Address) + require.Len(t, ethTransferLog.Topics, 3) + require.Equal(t, gethParams.EthTransferLogEvent, ethTransferLog.Topics[0]) + require.Equal(t, common.BytesToHash(coaAddress.Bytes()), ethTransferLog.Topics[1]) + require.Equal(t, common.BytesToHash(addr.Bytes()), ethTransferLog.Topics[2]) + require.Equal(t, big.NewInt(1_230_000_000_000_000_000), new(big.Int).SetBytes(ethTransferLog.Data)) + }, + ) }) t.Run("test coa deposit and withdraw in a single transaction", func(t *testing.T) { @@ -2772,31 +2813,31 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { ) { code := []byte(fmt.Sprintf( ` - import EVM from %s - import FlowToken from %s + import EVM from %s + import FlowToken from %s - access(all) - fun main(): UFix64 { - let admin = getAuthAccount(%s) - .storage.borrow<&FlowToken.Administrator>(from: /storage/flowTokenAdmin)! + access(all) + fun main(): UFix64 { + let admin = getAuthAccount(%s) + .storage.borrow<&FlowToken.Administrator>(from: /storage/flowTokenAdmin)! - let minter <- admin.createNewMinter(allowedAmount: 2.34) - let vault <- minter.mintTokens(amount: 2.34) - destroy minter + let minter <- admin.createNewMinter(allowedAmount: 2.34) + let vault <- minter.mintTokens(amount: 2.34) + destroy minter - let cadenceOwnedAccount <- EVM.createCadenceOwnedAccount() - cadenceOwnedAccount.deposit(from: <-vault) + let cadenceOwnedAccount <- EVM.createCadenceOwnedAccount() + cadenceOwnedAccount.deposit(from: <-vault) - let bal = EVM.Balance(attoflow: 0) - bal.setFLOW(flow: 1.23) - let vault2 <- cadenceOwnedAccount.withdraw(balance: bal) - let balance = vault2.balance - destroy cadenceOwnedAccount - destroy vault2 + let bal = EVM.Balance(attoflow: 0) + bal.setFLOW(flow: 1.23) + let vault2 <- cadenceOwnedAccount.withdraw(balance: bal) + let balance = vault2.balance + destroy cadenceOwnedAccount + destroy vault2 - return balance - } - `, + return balance + } + `, sc.EVMContract.Address.HexWithPrefix(), sc.FlowToken.Address.HexWithPrefix(), sc.FlowServiceAccount.Address.HexWithPrefix(), @@ -2814,6 +2855,8 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { }) t.Run("test coa deploy", func(t *testing.T) { + t.Parallel() + RunWithNewEnvironment(t, chain, func( ctx fvm.Context, @@ -2827,54 +2870,173 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { import EVM from %s import FlowToken from %s - access(all) - fun main(code: [UInt8]): EVM.Result { - let admin = getAuthAccount(%s) - .storage.borrow<&FlowToken.Administrator>(from: /storage/flowTokenAdmin)! - let minter <- admin.createNewMinter(allowedAmount: 2.34) - let vault <- minter.mintTokens(amount: 2.34) - destroy minter + transaction() { + prepare(account: auth(BorrowValue) &Account) { + let admin = account.storage.borrow<&FlowToken.Administrator>( + from: /storage/flowTokenAdmin + )! - let cadenceOwnedAccount <- EVM.createCadenceOwnedAccount() - cadenceOwnedAccount.deposit(from: <-vault) + let minter <- admin.createNewMinter(allowedAmount: 2.34) + let vault <- minter.mintTokens(amount: 2.34) + destroy minter - let res = cadenceOwnedAccount.deploy( - code: code, - gasLimit: 2_000_000, - value: EVM.Balance(attoflow: 1230000000000000000) - ) - destroy cadenceOwnedAccount - return res + let cadenceOwnedAccount <- EVM.createCadenceOwnedAccount() + cadenceOwnedAccount.deposit(from: <-vault) + + let bal = EVM.Balance(attoflow: 0) + bal.setFLOW(flow: 1.23) + let vault2 <- cadenceOwnedAccount.withdraw(balance: bal) + let balance = vault2.balance + destroy cadenceOwnedAccount + destroy vault2 + } } `, sc.EVMContract.Address.HexWithPrefix(), sc.FlowToken.Address.HexWithPrefix(), - sc.FlowServiceAccount.Address.HexWithPrefix(), )) - script := fvm.Script(code). - WithArguments(json.MustEncode( + txBody, err := flow.NewTransactionBodyBuilder(). + SetScript(code). + SetPayer(sc.FlowServiceAccount.Address). + AddAuthorizer(sc.FlowServiceAccount.Address). + Build() + require.NoError(t, err) + tx := fvm.Transaction(txBody, 0) + + _, output, err := vm.Run(ctx, tx, snapshot) + require.NoError(t, err) + require.NoError(t, output.Err) + + addressAllocator := handler.NewAddressAllocator() + bridgeAddress := addressAllocator.NativeTokenBridgeAddress() + + // tx executed events + coaAddress, err := types.COAAddressFromFlowCOACreatedEvent(sc.EVMContract.Address, output.Events[3]) + require.NoError(t, err) + + coaDepositEvent := TxEventToPayload(t, output.Events[4], sc.EVMContract.Address) + require.Greater(t, len(coaDepositEvent.Logs), 0) + + gethLogs := []*gethTypes.Log{} + err = rlp.Decode(bytes.NewReader(coaDepositEvent.Logs), &gethLogs) + require.NoError(t, err) + require.Len(t, gethLogs, 1) + + ethTransferLog := gethLogs[0] + require.Equal(t, gethParams.SystemAddress, ethTransferLog.Address) + require.Len(t, ethTransferLog.Topics, 3) + require.Equal(t, gethParams.EthTransferLogEvent, ethTransferLog.Topics[0]) + require.Equal(t, common.BytesToHash(bridgeAddress.Bytes()), ethTransferLog.Topics[1]) + require.Equal(t, common.BytesToHash(coaAddress.Bytes()), ethTransferLog.Topics[2]) + require.Equal(t, big.NewInt(2_340_000_000_000_000_000), new(big.Int).SetBytes(ethTransferLog.Data)) + + coaWithdrawEvent := TxEventToPayload(t, output.Events[6], sc.EVMContract.Address) + require.Greater(t, len(coaWithdrawEvent.Logs), 0) + + gethLogs = []*gethTypes.Log{} + err = rlp.Decode(bytes.NewReader(coaWithdrawEvent.Logs), &gethLogs) + require.NoError(t, err) + require.Len(t, gethLogs, 1) + + ethTransferLog = gethLogs[0] + require.Equal(t, gethParams.SystemAddress, ethTransferLog.Address) + require.Len(t, ethTransferLog.Topics, 3) + require.Equal(t, gethParams.EthTransferLogEvent, ethTransferLog.Topics[0]) + require.Equal(t, common.BytesToHash(coaAddress.Bytes()), ethTransferLog.Topics[1]) + require.Equal(t, common.BytesToHash(bridgeAddress.Bytes()), ethTransferLog.Topics[2]) + require.Equal(t, big.NewInt(1_230_000_000_000_000_000), new(big.Int).SetBytes(ethTransferLog.Data)) + }, + ) + }) + + t.Run("test coa deploy", func(t *testing.T) { + t.Parallel() + + RunWithNewEnvironment(t, + chain, func( + ctx fvm.Context, + vm fvm.VM, + snapshot snapshot.SnapshotTree, + testContract *TestContract, + testAccount *EOATestAccount, + ) { + code := []byte(fmt.Sprintf( + ` + import EVM from %s + import FlowToken from %s + + transaction(code: [UInt8]) { + prepare(account: auth(BorrowValue) &Account) { + let admin = account.storage.borrow<&FlowToken.Administrator>( + from: /storage/flowTokenAdmin + )! + + let minter <- admin.createNewMinter(allowedAmount: 2.34) + let vault <- minter.mintTokens(amount: 2.34) + destroy minter + + let cadenceOwnedAccount <- EVM.createCadenceOwnedAccount() + cadenceOwnedAccount.deposit(from: <-vault) + + let res = cadenceOwnedAccount.deploy( + code: code, + gasLimit: 2_000_000, + value: EVM.Balance(attoflow: 1230000000000000000) + ) + destroy cadenceOwnedAccount + } + } + `, + sc.EVMContract.Address.HexWithPrefix(), + sc.FlowToken.Address.HexWithPrefix(), + )) + + txBody, err := flow.NewTransactionBodyBuilder(). + SetScript(code). + SetPayer(sc.FlowServiceAccount.Address). + AddAuthorizer(sc.FlowServiceAccount.Address). + AddArgument(json.MustEncode( cadence.NewArray( unittest.BytesToCdcUInt8(testContract.ByteCode), ).WithType(cadence.NewVariableSizedArrayType(cadence.UInt8Type)), - )) + )). + Build() + require.NoError(t, err) + tx := fvm.Transaction(txBody, 0) - _, output, err := vm.Run( - ctx, - script, - snapshot) + _, output, err := vm.Run(ctx, tx, snapshot) require.NoError(t, err) require.NoError(t, output.Err) - res, err := impl.ResultSummaryFromEVMResultValue(output.Value) + // tx executed events + coaAddress, err := types.COAAddressFromFlowCOACreatedEvent(sc.EVMContract.Address, output.Events[3]) require.NoError(t, err) - require.Equal(t, types.StatusSuccessful, res.Status) - require.Equal(t, types.ErrCodeNoError, res.ErrorCode) - require.Empty(t, res.ErrorMessage) - require.NotNil(t, res.DeployedContractAddress) + + coaDeployEvent := TxEventToPayload(t, output.Events[6], sc.EVMContract.Address) + require.Greater(t, len(coaDeployEvent.Logs), 0) + require.Equal(t, uint16(0), coaDeployEvent.ErrorCode) + require.Empty(t, coaDeployEvent.ErrorMessage) + require.NotNil(t, coaDeployEvent.ContractAddress) // we strip away first few bytes because they contain deploy code - require.Equal(t, testContract.ByteCode[17:], []byte(res.ReturnedData)) - }) + require.Equal(t, testContract.ByteCode[17:], []byte(coaDeployEvent.ReturnedData)) + + contractAddress := common.HexToAddress(coaDeployEvent.ContractAddress) + + gethLogs := []*gethTypes.Log{} + err = rlp.Decode(bytes.NewReader(coaDeployEvent.Logs), &gethLogs) + require.NoError(t, err) + require.Len(t, gethLogs, 1) + + ethTransferLog := gethLogs[0] + require.Equal(t, gethParams.SystemAddress, ethTransferLog.Address) + require.Len(t, ethTransferLog.Topics, 3) + require.Equal(t, gethParams.EthTransferLogEvent, ethTransferLog.Topics[0]) + require.Equal(t, common.BytesToHash(coaAddress.Bytes()), ethTransferLog.Topics[1]) + require.Equal(t, common.BytesToHash(contractAddress.Bytes()), ethTransferLog.Topics[2]) + require.Equal(t, big.NewInt(1_230_000_000_000_000_000), new(big.Int).SetBytes(ethTransferLog.Data)) + }, + ) }) t.Run("test coa dryCall", func(t *testing.T) { @@ -6892,6 +7054,225 @@ func TestEVMPauseFunctionality(t *testing.T) { ) } +func TestEthLogEmissionWithSelfDestruct(t *testing.T) { + t.Parallel() + + chain := flow.Emulator.Chain() + + t.Run("test SelfDestruct with self beneficiary emits EthBurnLog", func(t *testing.T) { + t.Parallel() + + RunContractWithNewEnvironment( + t, + chain, + GetFactoryTestContract(t), + func( + ctx fvm.Context, + vm fvm.VM, + snapshot snapshot.SnapshotTree, + testContract *TestContract, + testAccount *EOATestAccount, + ) { + sc := systemcontracts.SystemContractsForChain(chain.ChainID()) + code := []byte(fmt.Sprintf( + ` + import EVM from %s + + transaction(tx: [UInt8], coinbaseBytes: [UInt8; 20]){ + prepare(account: &Account) { + let coinbase = EVM.EVMAddress(bytes: coinbaseBytes) + let res = EVM.run(tx: tx, coinbase: coinbase) + + assert(res.status == EVM.Status.successful, message: "unexpected status") + assert(res.errorCode == 0, message: "unexpected error code") + assert(res.deployedContract == nil, message: "unexpected deployed contract") + } + } + `, + sc.EVMContract.Address.HexWithPrefix(), + )) + + coinbaseAddr := types.Address{1, 2, 3} + coinbaseBalance := getEVMAccountBalance(t, ctx, vm, snapshot, coinbaseAddr) + require.Zero(t, types.BalanceToBigInt(coinbaseBalance).Uint64()) + + salt := [32]byte{1} + storedValue := big.NewInt(100) + amount := big.NewInt(1_000_000) + innerTxBytes := testAccount.PrepareSignAndEncodeTx(t, + testContract.DeployedAt.ToCommon(), + testContract.MakeCallData(t, "depositDeployAndDestroyWithBurn", salt, amount, storedValue), + big.NewInt(0), + uint64(1_000_000), + big.NewInt(1), + ) + + innerTx := cadence.NewArray( + unittest.BytesToCdcUInt8(innerTxBytes), + ).WithType(stdlib.EVMTransactionBytesCadenceType) + + coinbase := cadence.NewArray( + unittest.BytesToCdcUInt8(coinbaseAddr.Bytes()), + ).WithType(stdlib.EVMAddressBytesCadenceType) + + txBody, err := flow.NewTransactionBodyBuilder(). + SetScript(code). + SetPayer(sc.FlowServiceAccount.Address). + AddAuthorizer(sc.FlowServiceAccount.Address). + AddArgument(json.MustEncode(innerTx)). + AddArgument(json.MustEncode(coinbase)). + Build() + require.NoError(t, err) + + tx := fvm.Transaction(txBody, 0) + state, output, err := vm.Run(ctx, tx, snapshot) + require.NoError(t, err) + require.NoError(t, output.Err) + require.NotEmpty(t, state.WriteSet) + + // assert event fields are correct + require.Len(t, output.Events, 2) + txEvent := output.Events[0] + txEventPayload := TxEventToPayload(t, txEvent, sc.EVMContract.Address) + require.NoError(t, err) + require.Equal(t, uint16(types.ErrCodeNoError), txEventPayload.ErrorCode) + require.Equal(t, uint16(0), txEventPayload.Index) + require.Equal(t, uint64(239_774), txEventPayload.GasConsumed) + require.Greater(t, len(txEventPayload.Logs), 0) + + gethLogs := []*gethTypes.Log{} + err = rlp.Decode(bytes.NewReader(txEventPayload.Logs), &gethLogs) + require.NoError(t, err) + require.Len(t, gethLogs, 2) + + ethTransferLog := gethLogs[0] + selfDestructContract := ethTransferLog.Topics[2] + require.Equal(t, gethParams.SystemAddress, ethTransferLog.Address) + require.Len(t, ethTransferLog.Topics, 3) + require.Equal(t, gethParams.EthTransferLogEvent, ethTransferLog.Topics[0]) + require.Equal(t, common.BytesToHash(testContract.DeployedAt.Bytes()), ethTransferLog.Topics[1]) + require.Equal(t, amount, new(big.Int).SetBytes(ethTransferLog.Data)) + + ethBurnLog := gethLogs[1] + // Since the beneficiary is the contract being self-destructed, + // its ETH balance is burned + require.Equal(t, gethParams.SystemAddress, ethBurnLog.Address) + require.Len(t, ethBurnLog.Topics, 2) + require.Equal(t, gethParams.EthBurnLogEvent, ethBurnLog.Topics[0]) + require.Equal(t, amount, new(big.Int).SetBytes(ethBurnLog.Data)) + require.Equal(t, selfDestructContract, ethBurnLog.Topics[1]) + }, + ) + }) + + t.Run("test SelfDestruct with non-self beneficiary does not emit EthBurnLog", func(t *testing.T) { + t.Parallel() + + RunContractWithNewEnvironment( + t, + chain, + GetFactoryTestContract(t), + func( + ctx fvm.Context, + vm fvm.VM, + snapshot snapshot.SnapshotTree, + testContract *TestContract, + testAccount *EOATestAccount, + ) { + sc := systemcontracts.SystemContractsForChain(chain.ChainID()) + code := []byte(fmt.Sprintf( + ` + import EVM from %s + + transaction(tx: [UInt8], coinbaseBytes: [UInt8; 20]){ + prepare(account: &Account) { + let coinbase = EVM.EVMAddress(bytes: coinbaseBytes) + let res = EVM.run(tx: tx, coinbase: coinbase) + + assert(res.status == EVM.Status.successful, message: "unexpected status") + assert(res.errorCode == 0, message: "unexpected error code") + assert(res.deployedContract == nil, message: "unexpected deployed contract") + } + } + `, + sc.EVMContract.Address.HexWithPrefix(), + )) + + coinbaseAddr := types.Address{1, 2, 3} + coinbaseBalance := getEVMAccountBalance(t, ctx, vm, snapshot, coinbaseAddr) + require.Zero(t, types.BalanceToBigInt(coinbaseBalance).Uint64()) + + salt := [32]byte{1} + storedValue := big.NewInt(100) + amount := big.NewInt(1_000_000) + innerTxBytes := testAccount.PrepareSignAndEncodeTx(t, + testContract.DeployedAt.ToCommon(), + testContract.MakeCallData(t, "depositDeployAndDestroy", salt, amount, storedValue), + big.NewInt(0), + uint64(1_000_000), + big.NewInt(1), + ) + + innerTx := cadence.NewArray( + unittest.BytesToCdcUInt8(innerTxBytes), + ).WithType(stdlib.EVMTransactionBytesCadenceType) + + coinbase := cadence.NewArray( + unittest.BytesToCdcUInt8(coinbaseAddr.Bytes()), + ).WithType(stdlib.EVMAddressBytesCadenceType) + + txBody, err := flow.NewTransactionBodyBuilder(). + SetScript(code). + SetPayer(sc.FlowServiceAccount.Address). + AddAuthorizer(sc.FlowServiceAccount.Address). + AddArgument(json.MustEncode(innerTx)). + AddArgument(json.MustEncode(coinbase)). + Build() + require.NoError(t, err) + + tx := fvm.Transaction(txBody, 0) + state, output, err := vm.Run(ctx, tx, snapshot) + require.NoError(t, err) + require.NoError(t, output.Err) + require.NotEmpty(t, state.WriteSet) + + // assert event fields are correct + require.Len(t, output.Events, 2) + txEvent := output.Events[0] + txEventPayload := TxEventToPayload(t, txEvent, sc.EVMContract.Address) + require.NoError(t, err) + require.Equal(t, uint16(types.ErrCodeNoError), txEventPayload.ErrorCode) + require.Equal(t, uint16(0), txEventPayload.Index) + require.Equal(t, uint64(239_795), txEventPayload.GasConsumed) + require.Greater(t, len(txEventPayload.Logs), 0) + + gethLogs := []*gethTypes.Log{} + err = rlp.Decode(bytes.NewReader(txEventPayload.Logs), &gethLogs) + require.NoError(t, err) + require.Len(t, gethLogs, 2) + + ethTransferLog := gethLogs[0] + selfDestructContract := ethTransferLog.Topics[2] + require.Equal(t, gethParams.SystemAddress, ethTransferLog.Address) + require.Len(t, ethTransferLog.Topics, 3) + require.Equal(t, gethParams.EthTransferLogEvent, ethTransferLog.Topics[0]) + require.Equal(t, common.BytesToHash(testContract.DeployedAt.Bytes()), ethTransferLog.Topics[1]) + require.Equal(t, amount, new(big.Int).SetBytes(ethTransferLog.Data)) + + ethTransferLog = gethLogs[1] + // Since the beneficiary is NOT the contract being self-destructed, + // its ETH balance is simply transferred, not burned + require.Equal(t, gethParams.SystemAddress, ethTransferLog.Address) + require.Len(t, ethTransferLog.Topics, 3) + require.Equal(t, gethParams.EthTransferLogEvent, ethTransferLog.Topics[0]) + require.Equal(t, selfDestructContract, ethTransferLog.Topics[1]) + require.Equal(t, common.BytesToHash(testContract.DeployedAt.Bytes()), ethTransferLog.Topics[2]) + require.Equal(t, amount, new(big.Int).SetBytes(ethTransferLog.Data)) + }, + ) + }) +} + func createAndFundFlowAccount( t *testing.T, ctx fvm.Context, diff --git a/fvm/evm/testutils/contract.go b/fvm/evm/testutils/contract.go index b73e5463417..504a3360272 100644 --- a/fvm/evm/testutils/contract.go +++ b/fvm/evm/testutils/contract.go @@ -111,7 +111,7 @@ func DeployContract(t testing.TB, caller types.Address, tc *TestContract, led at caller, tc.ByteCode, gethParams.MaxTxGas, - big.NewInt(0), + big.NewInt(1_000_000_000), nonce+1, ), ) diff --git a/fvm/evm/testutils/contracts/factory.sol b/fvm/evm/testutils/contracts/factory.sol index 39ffea4e7be..c1f011d1761 100644 --- a/fvm/evm/testutils/contracts/factory.sol +++ b/fvm/evm/testutils/contracts/factory.sol @@ -40,6 +40,18 @@ contract Factory { dep.destroy(address(this)); } + function depositDeployAndDestroyWithBurn(bytes32 salt, uint256 amount, uint256 stored) public { + address addr = _getCreate2Address(salt, keccak256(abi.encodePacked(type(Deployable).creationCode))); + bool success; + assembly { + success := call(gas(), addr, amount, 0, 0, 0, 0) + } + require(success); + Deployable dep = new Deployable{salt: salt}(); + dep.set(stored); + dep.destroy(addr); + } + function _getCreate2Address(bytes32 salt, bytes32 codeHash) internal view returns (address) { return address(uint160(uint256(keccak256(abi.encodePacked(bytes1(0xff), address(this), salt, codeHash))))); } diff --git a/fvm/evm/testutils/contracts/factory_abi.json b/fvm/evm/testutils/contracts/factory_abi.json index 924407ab38a..4b86dcc1140 100644 --- a/fvm/evm/testutils/contracts/factory_abi.json +++ b/fvm/evm/testutils/contracts/factory_abi.json @@ -92,5 +92,28 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stored", + "type": "uint256" + } + ], + "name": "depositDeployAndDestroyWithBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ] \ No newline at end of file diff --git a/fvm/evm/testutils/contracts/factory_bytes.hex b/fvm/evm/testutils/contracts/factory_bytes.hex index ebe208d2232..bd9133ca5d7 100644 --- a/fvm/evm/testutils/contracts/factory_bytes.hex +++ b/fvm/evm/testutils/contracts/factory_bytes.hex @@ -1 +1 @@ -6080604052610af6806100115f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80632b85ba381461004e578063624ff5c41461007e5780639e3bb99e1461009a578063cf4fe092146100b6575b5f80fd5b610068600480360381019061006391906105b4565b6100e6565b604051610075919061061e565b60405180910390f35b6100986004803603810190610093919061066a565b61016d565b005b6100b460048036038101906100af91906106ba565b6102d8565b005b6100d060048036038101906100cb919061066a565b6103d6565b6040516100dd919061061e565b60405180910390f35b5f816040516100f490610570565b8190604051809103905ff5905080158015610111573d5f803e3d5ffd5b5050610166826040518060200161012790610570565b6020820181038252601f19601f8201166040525060405160200161014b919061074a565b60405160208183030381529060405280519060200120610534565b9050919050565b5f6101c1846040518060200161018290610570565b6020820181038252601f19601f820116604052506040516020016101a6919061074a565b60405160208183030381529060405280519060200120610534565b90505f805f805f87865af19050806101d7575f80fd5b5f856040516101e590610570565b8190604051809103905ff5905080158015610202573d5f803e3d5ffd5b5090508073ffffffffffffffffffffffffffffffffffffffff166360fe47b1856040518263ffffffff1660e01b815260040161023e919061076f565b5f604051808303815f87803b158015610255575f80fd5b505af1158015610267573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff1662f55d9d306040518263ffffffff1660e01b81526004016102a3919061061e565b5f604051808303815f87803b1580156102ba575f80fd5b505af11580156102cc573d5f803e3d5ffd5b50505050505050505050565b5f826040516102e690610570565b8190604051809103905ff5905080158015610303573d5f803e3d5ffd5b5090508073ffffffffffffffffffffffffffffffffffffffff166360fe47b1836040518263ffffffff1660e01b815260040161033f919061076f565b5f604051808303815f87803b158015610356575f80fd5b505af1158015610368573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff1662f55d9d306040518263ffffffff1660e01b81526004016103a4919061061e565b5f604051808303815f87803b1580156103bb575f80fd5b505af11580156103cd573d5f803e3d5ffd5b50505050505050565b5f8061042b85604051806020016103ec90610570565b6020820181038252601f19601f82011660405250604051602001610410919061074a565b60405160208183030381529060405280519060200120610534565b90505f805f805f88865af1905080610441575f80fd5b5f8660405161044f90610570565b8190604051809103905ff590508015801561046c573d5f803e3d5ffd5b5090508073ffffffffffffffffffffffffffffffffffffffff166360fe47b1866040518263ffffffff1660e01b81526004016104a8919061076f565b5f604051808303815f87803b1580156104bf575f80fd5b505af11580156104d1573d5f803e3d5ffd5b5050505061052887604051806020016104e990610570565b6020820181038252601f19601f8201166040525060405160200161050d919061074a565b60405160208183030381529060405280519060200120610534565b93505050509392505050565b5f60ff60f81b3084846040516020016105509493929190610838565b604051602081830303815290604052805190602001205f1c905092915050565b61023b8061088683390190565b5f80fd5b5f819050919050565b61059381610581565b811461059d575f80fd5b50565b5f813590506105ae8161058a565b92915050565b5f602082840312156105c9576105c861057d565b5b5f6105d6848285016105a0565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610608826105df565b9050919050565b610618816105fe565b82525050565b5f6020820190506106315f83018461060f565b92915050565b5f819050919050565b61064981610637565b8114610653575f80fd5b50565b5f8135905061066481610640565b92915050565b5f805f606084860312156106815761068061057d565b5b5f61068e868287016105a0565b935050602061069f86828701610656565b92505060406106b086828701610656565b9150509250925092565b5f80604083850312156106d0576106cf61057d565b5b5f6106dd858286016105a0565b92505060206106ee85828601610656565b9150509250929050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f610724826106f8565b61072e8185610702565b935061073e81856020860161070c565b80840191505092915050565b5f610755828461071a565b915081905092915050565b61076981610637565b82525050565b5f6020820190506107825f830184610760565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b6107cd6107c882610788565b6107b3565b82525050565b5f8160601b9050919050565b5f6107e9826107d3565b9050919050565b5f6107fa826107df565b9050919050565b61081261080d826105fe565b6107f0565b82525050565b5f819050919050565b61083261082d82610581565b610818565b82525050565b5f61084382876107bc565b6001820191506108538286610801565b6014820191506108638285610821565b6020820191506108738284610821565b6020820191508190509594505050505056fe608060405261022a806100115f395ff3fe608060405260043610610036575f3560e01c8062f55d9d1461004157806360fe47b1146100695780636d4ce63c146100915761003d565b3661003d57005b5f80fd5b34801561004c575f80fd5b5061006760048036038101906100629190610143565b6100bb565b005b348015610074575f80fd5b5061008f600480360381019061008a91906101a1565b6100d4565b005b34801561009c575f80fd5b506100a56100dd565b6040516100b291906101db565b60405180910390f35b8073ffffffffffffffffffffffffffffffffffffffff16ff5b805f8190555050565b5f8054905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610112826100e9565b9050919050565b61012281610108565b811461012c575f80fd5b50565b5f8135905061013d81610119565b92915050565b5f60208284031215610158576101576100e5565b5b5f6101658482850161012f565b91505092915050565b5f819050919050565b6101808161016e565b811461018a575f80fd5b50565b5f8135905061019b81610177565b92915050565b5f602082840312156101b6576101b56100e5565b5b5f6101c38482850161018d565b91505092915050565b6101d58161016e565b82525050565b5f6020820190506101ee5f8301846101cc565b9291505056fea2646970667358221220cbb07f58eed2fb91caf5b496fe4f528d45cf25085898c4f2735c5dcf5bd2fc9f64736f6c634300081a0033a2646970667358221220d1e0a588152bd25c8a5276df79dde8e504c854e590f1dbb00ec9808aee242b4164736f6c634300081a0033 \ No newline at end of file +6080604052610cee806100115f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80632b85ba381461005957806336b6aef414610089578063624ff5c4146100a55780639e3bb99e146100c1578063cf4fe092146100dd575b5f80fd5b610073600480360381019061006e9190610746565b61010d565b60405161008091906107b0565b60405180910390f35b6100a3600480360381019061009e91906107fc565b610194565b005b6100bf60048036038101906100ba91906107fc565b6102ff565b005b6100db60048036038101906100d6919061084c565b61046a565b005b6100f760048036038101906100f291906107fc565b610568565b60405161010491906107b0565b60405180910390f35b5f8160405161011b90610702565b8190604051809103905ff5905080158015610138573d5f803e3d5ffd5b505061018d826040518060200161014e90610702565b6020820181038252601f19601f8201166040525060405160200161017291906108f6565b604051602081830303815290604052805190602001206106c6565b9050919050565b5f6101e884604051806020016101a990610702565b6020820181038252601f19601f820116604052506040516020016101cd91906108f6565b604051602081830303815290604052805190602001206106c6565b90505f805f805f87865af19050806101fe575f80fd5b5f8560405161020c90610702565b8190604051809103905ff5905080158015610229573d5f803e3d5ffd5b5090508073ffffffffffffffffffffffffffffffffffffffff166360fe47b1856040518263ffffffff1660e01b8152600401610265919061091b565b5f604051808303815f87803b15801561027c575f80fd5b505af115801561028e573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff1662f55d9d846040518263ffffffff1660e01b81526004016102ca91906107b0565b5f604051808303815f87803b1580156102e1575f80fd5b505af11580156102f3573d5f803e3d5ffd5b50505050505050505050565b5f610353846040518060200161031490610702565b6020820181038252601f19601f8201166040525060405160200161033891906108f6565b604051602081830303815290604052805190602001206106c6565b90505f805f805f87865af1905080610369575f80fd5b5f8560405161037790610702565b8190604051809103905ff5905080158015610394573d5f803e3d5ffd5b5090508073ffffffffffffffffffffffffffffffffffffffff166360fe47b1856040518263ffffffff1660e01b81526004016103d0919061091b565b5f604051808303815f87803b1580156103e7575f80fd5b505af11580156103f9573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff1662f55d9d306040518263ffffffff1660e01b815260040161043591906107b0565b5f604051808303815f87803b15801561044c575f80fd5b505af115801561045e573d5f803e3d5ffd5b50505050505050505050565b5f8260405161047890610702565b8190604051809103905ff5905080158015610495573d5f803e3d5ffd5b5090508073ffffffffffffffffffffffffffffffffffffffff166360fe47b1836040518263ffffffff1660e01b81526004016104d1919061091b565b5f604051808303815f87803b1580156104e8575f80fd5b505af11580156104fa573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff1662f55d9d306040518263ffffffff1660e01b815260040161053691906107b0565b5f604051808303815f87803b15801561054d575f80fd5b505af115801561055f573d5f803e3d5ffd5b50505050505050565b5f806105bd856040518060200161057e90610702565b6020820181038252601f19601f820116604052506040516020016105a291906108f6565b604051602081830303815290604052805190602001206106c6565b90505f805f805f88865af19050806105d3575f80fd5b5f866040516105e190610702565b8190604051809103905ff59050801580156105fe573d5f803e3d5ffd5b5090508073ffffffffffffffffffffffffffffffffffffffff166360fe47b1866040518263ffffffff1660e01b815260040161063a919061091b565b5f604051808303815f87803b158015610651575f80fd5b505af1158015610663573d5f803e3d5ffd5b505050506106ba876040518060200161067b90610702565b6020820181038252601f19601f8201166040525060405160200161069f91906108f6565b604051602081830303815290604052805190602001206106c6565b93505050509392505050565b5f60ff60f81b3084846040516020016106e294939291906109e4565b604051602081830303815290604052805190602001205f1c905092915050565b61026180610a3283390190565b5f80fd5b5f819050919050565b61072581610713565b811461072f575f80fd5b50565b5f813590506107408161071c565b92915050565b5f6020828403121561075b5761075a61070f565b5b5f61076884828501610732565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61079a82610771565b9050919050565b6107aa81610790565b82525050565b5f6020820190506107c35f8301846107a1565b92915050565b5f819050919050565b6107db816107c9565b81146107e5575f80fd5b50565b5f813590506107f6816107d2565b92915050565b5f805f606084860312156108135761081261070f565b5b5f61082086828701610732565b9350506020610831868287016107e8565b9250506040610842868287016107e8565b9150509250925092565b5f80604083850312156108625761086161070f565b5b5f61086f85828601610732565b9250506020610880858286016107e8565b9150509250929050565b5f81519050919050565b5f81905092915050565b5f5b838110156108bb5780820151818401526020810190506108a0565b5f8484015250505050565b5f6108d08261088a565b6108da8185610894565b93506108ea81856020860161089e565b80840191505092915050565b5f61090182846108c6565b915081905092915050565b610915816107c9565b82525050565b5f60208201905061092e5f83018461090c565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b61097961097482610934565b61095f565b82525050565b5f8160601b9050919050565b5f6109958261097f565b9050919050565b5f6109a68261098b565b9050919050565b6109be6109b982610790565b61099c565b82525050565b5f819050919050565b6109de6109d982610713565b6109c4565b82525050565b5f6109ef8287610968565b6001820191506109ff82866109ad565b601482019150610a0f82856109cd565b602082019150610a1f82846109cd565b6020820191508190509594505050505056fe6080604052610250806100115f395ff3fe608060405260043610610036575f3560e01c8062f55d9d1461004157806360fe47b1146100695780636d4ce63c146100915761003d565b3661003d57005b5f80fd5b34801561004c575f80fd5b5061006760048036038101906100629190610143565b6100bb565b005b348015610074575f80fd5b5061008f600480360381019061008a91906101a1565b6100d4565b005b34801561009c575f80fd5b506100a56100dd565b6040516100b291906101db565b60405180910390f35b8073ffffffffffffffffffffffffffffffffffffffff16ff5b805f8190555050565b5f8054905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610112826100e9565b9050919050565b61012281610108565b811461012c575f80fd5b50565b5f8135905061013d81610119565b92915050565b5f60208284031215610158576101576100e5565b5b5f6101658482850161012f565b91505092915050565b5f819050919050565b6101808161016e565b811461018a575f80fd5b50565b5f8135905061019b81610177565b92915050565b5f602082840312156101b6576101b56100e5565b5b5f6101c38482850161018d565b91505092915050565b6101d58161016e565b82525050565b5f6020820190506101ee5f8301846101cc565b9291505056fea2646970667358221220276125ddd5ed72c9b59ad463a191db4b1a9c223045384c9464219b8928073f5c64736f6c637828302e382e32352d646576656c6f702e323032342e322e32342b636f6d6d69742e64626137353465630059a2646970667358221220c97763d4984d0d585e7a99df547fdfe0bdc0ee10710a8814e75e709ea8e604a564736f6c637828302e382e32352d646576656c6f702e323032342e322e32342b636f6d6d69742e64626137353465630059 \ No newline at end of file From b45e523690413549daa2300aec38c66566f388c0 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Thu, 7 May 2026 15:55:25 +0300 Subject: [PATCH 07/30] Populate EVM BlockContext with information regarding SLOTNUM opcode --- fvm/evm/emulator/config.go | 8 ++++++++ fvm/evm/emulator/emulator.go | 1 + fvm/evm/handler/handler.go | 1 + fvm/evm/types/block.go | 7 +++++++ fvm/evm/types/block_test.go | 8 +++++++- fvm/evm/types/emulator.go | 1 + 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/fvm/evm/emulator/config.go b/fvm/evm/emulator/config.go index ff638bd39e5..a3e8c51fbbc 100644 --- a/fvm/evm/emulator/config.go +++ b/fvm/evm/emulator/config.go @@ -272,6 +272,14 @@ func WithRandom(rand *gethCommon.Hash) Option { } } +// WithSlotNum sets the block time in the block context +func WithSlotNum(slotNum uint64) Option { + return func(c *Config) *Config { + c.BlockContext.SlotNum = slotNum + return c + } +} + // WithTransactionTracer sets a transaction tracer func WithTransactionTracer(tracer *tracers.Tracer) Option { return func(c *Config) *Config { diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index a5fa33ae942..34294055ca0 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -51,6 +51,7 @@ func newConfig(ctx types.BlockContext) *Config { WithExtraPrecompiledContracts(ctx.ExtraPrecompiledContracts), WithGetBlockHashFunction(ctx.GetHashFunc), WithRandom(&ctx.Random), + WithSlotNum(ctx.SlotNum), WithTransactionTracer(ctx.Tracer), WithBlockTotalGasUsedSoFar(ctx.TotalGasUsedSoFar), WithBlockTxCountSoFar(ctx.TxCountSoFar), diff --git a/fvm/evm/handler/handler.go b/fvm/evm/handler/handler.go index 3f935bc87a1..a1cb322597b 100644 --- a/fvm/evm/handler/handler.go +++ b/fvm/evm/handler/handler.go @@ -743,6 +743,7 @@ func (h *ContractHandler) getBlockContext(bp *types.BlockProposal) ( }, ExtraPrecompiledContracts: h.precompiledContracts, Random: bp.PrevRandao, + SlotNum: bp.SlotNumber(h.flowChainID), TxCountSoFar: uint(len(bp.TxHashes)), TotalGasUsedSoFar: bp.TotalGasUsed, GasFeeCollector: types.CoinbaseAddress, diff --git a/fvm/evm/types/block.go b/fvm/evm/types/block.go index a9f48f581c9..cff0b4b5148 100644 --- a/fvm/evm/types/block.go +++ b/fvm/evm/types/block.go @@ -97,6 +97,8 @@ func NewBlockFromBytes(encoded []byte) (*Block, error) { // GenesisTimestamp returns the block time stamp for EVM genesis block func GenesisTimestamp(flowChainID flow.ChainID) uint64 { switch flowChainID { + case flow.Emulator, flow.Previewnet: + return uint64(time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC).Unix()) case flow.Testnet: return uint64(time.Date(2024, time.August, 1, 0, 0, 0, 0, time.UTC).Unix()) case flow.Mainnet: @@ -207,6 +209,11 @@ func (b *BlockProposal) ToBytes() ([]byte, error) { return gethRLP.EncodeToBytes(b) } +func (b *BlockProposal) SlotNumber(chainID flow.ChainID) uint64 { + genesisTime := GenesisBlock(chainID).Timestamp + return (b.Timestamp - genesisTime) / 12 +} + // NewBlockProposalFromBytes constructs a new block proposal from encoded data func NewBlockProposalFromBytes(encoded []byte) (*BlockProposal, error) { res := &BlockProposal{} diff --git a/fvm/evm/types/block_test.go b/fvm/evm/types/block_test.go index 03e6ca530f7..547ce9ee317 100644 --- a/fvm/evm/types/block_test.go +++ b/fvm/evm/types/block_test.go @@ -3,6 +3,7 @@ package types import ( "math/big" "testing" + "time" gethCommon "github.com/ethereum/go-ethereum/common" gethTypes "github.com/ethereum/go-ethereum/core/types" @@ -52,7 +53,8 @@ func Test_BlockHash(t *testing.T) { } func Test_BlockProposal(t *testing.T) { - bp := NewBlockProposal(gethCommon.Hash{1}, 1, 0, nil, gethCommon.Hash{1, 2, 3}) + timestamp := uint64(time.Date(2026, time.January, 1, 0, 0, 0, 0, time.UTC).Unix()) + bp := NewBlockProposal(gethCommon.Hash{1}, 1, timestamp, nil, gethCommon.Hash{1, 2, 3}) bp.AppendTransaction(nil) require.Empty(t, bp.TxHashes) @@ -74,6 +76,10 @@ func Test_BlockProposal(t *testing.T) { bp.PopulateRoots() require.NotEqual(t, gethTypes.EmptyReceiptsHash, bp.ReceiptRoot) + + require.Equal(t, uint64(5_263_200), bp.SlotNumber(flow.Emulator)) + require.Equal(t, uint64(3_729_600), bp.SlotNumber(flow.Testnet)) + require.Equal(t, uint64(3_506_400), bp.SlotNumber(flow.Mainnet)) } func Test_DecodeHistoricBlocks(t *testing.T) { diff --git a/fvm/evm/types/emulator.go b/fvm/evm/types/emulator.go index 5d6b32f3a68..2461dc675cf 100644 --- a/fvm/evm/types/emulator.go +++ b/fvm/evm/types/emulator.go @@ -46,6 +46,7 @@ type BlockContext struct { GasFeeCollector Address GetHashFunc func(n uint64) gethCommon.Hash Random gethCommon.Hash + SlotNum uint64 Tracer *tracers.Tracer // a set of extra precompiled contracts to be injected From 2b94740819b23ba4ec2dc08b7be532668b7442ef Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Mon, 11 May 2026 13:44:46 +0300 Subject: [PATCH 08/30] Update COA deployment logic to match EVM internals --- fvm/evm/emulator/emulator.go | 76 +++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 28 deletions(-) diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index 34294055ca0..b770cae964f 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -163,6 +163,9 @@ func (bl *BlockView) DirectCall(call *types.DirectCall) (res *types.Result, err case types.WithdrawCallSubType: return proc.withdrawFrom(call) case types.DeployCallSubType: + // this is effectively deploying only COAs, with the `to` field + // being generated by the COA address allocator and set as the + // deployment address if !call.EmptyToField() { return proc.deployAt(call) } @@ -525,14 +528,30 @@ func (proc *procedure) deployAt( }() } - addr := call.To.ToCommon() + caller := call.From.ToCommon() // pre check 1 - check balance of the source if call.Value.Sign() != 0 && - !proc.evm.Context.CanTransfer(proc.state, call.From.ToCommon(), castedValue) { + !proc.evm.Context.CanTransfer(proc.state, caller, castedValue) { res.SetValidationError(gethCore.ErrInsufficientFundsForTransfer) return res, nil } + // increment the nonce for the caller + nonce := proc.state.GetNonce(caller) + if nonce+1 < nonce { + res.SetValidationError(gethVM.ErrNonceUintOverflow) + return res, nil + } + proc.state.SetNonce( + caller, + nonce+1, + gethTracing.NonceChangeContractCreator, + ) + + addr := call.To.ToCommon() + // update access list (Berlin) + proc.state.AddAddressToAccessList(addr) + // pre check 2 - ensure there's no existing eoa or contract is deployed at the address contractHash := proc.state.GetCodeHash(addr) if proc.state.GetNonce(addr) != 0 || @@ -541,50 +560,48 @@ func (proc *procedure) deployAt( return res, nil } - callerCommon := call.From.ToCommon() - // setup caller if doesn't exist - if !proc.state.Exist(callerCommon) { - proc.state.CreateAccount(callerCommon) + // create a new account on the state only if the object was not present. + // it might be possible the contract code is deployed to a pre-existent + // account with non-zero balance. + if !proc.state.Exist(addr) { + proc.state.CreateAccount(addr) } - // increment the nonce for the caller - proc.state.SetNonce( - callerCommon, - proc.state.GetNonce(callerCommon)+1, - gethTracing.NonceChangeContractCreator, - ) - // setup account - proc.state.CreateAccount(addr) + // CreateContract means that regardless of whether the account previously existed + // in the state trie or not, it _now_ becomes created as a _contract_ account. + // This is performed _prior_ to executing the initcode, since the initcode + // acts inside that account. + proc.state.CreateContract(addr) proc.state.SetNonce(addr, 1, gethTracing.NonceChangeNewContract) // (EIP-158) rules := proc.config.ChainRules() if call.Value.Sign() > 0 { proc.evm.Context.Transfer( // transfer value proc.state, - callerCommon, + caller, addr, uint256.MustFromBig(call.Value), &rules, ) } - // run code through interpreter - // this would check for errors and computes the final bytes to be stored under account - var err error + // initialise a new contract and set the code that is to be used by the EVM. + // the contract is a scoped environment for this execution context only. contract := gethVM.NewContract( - callerCommon, + caller, addr, castedValue, call.GasLimit, nil, ) - contract.SetCallCode(gethCrypto.Keccak256Hash(call.Data), call.Data) - // update access list (Berlin) - proc.state.AddAddressToAccessList(addr) + // explicitly set the code to a null hash to prevent caching of jump analysis + // for the initialization code. + contract.SetCallCode(gethCommon.Hash{}, call.Data) + contract.IsDeployment = true ret, err := proc.evm.Run(contract, nil, false) - gasCost := uint64(len(ret)) * gethParams.CreateDataGas - res.GasConsumed = gasCost + createDataGas := uint64(len(ret)) * gethParams.CreateDataGas + res.GasConsumed = createDataGas // handle errors if err != nil { @@ -597,15 +614,15 @@ func (proc *procedure) deployAt( } // update gas usage - if gasCost > call.GasLimit { + if createDataGas > call.GasLimit { // consume all the remaining gas (Homestead) res.GasConsumed = call.GasLimit res.VMError = gethVM.ErrCodeStoreOutOfGas return res, nil } - // check max code size (EIP-158) - if len(ret) > gethParams.MaxCodeSize { + // check whether the max code size has been exceeded + if err := gethVM.CheckMaxCodeSize(&rules, uint64(len(ret))); err != nil { // consume all the remaining gas (Homestead) res.GasConsumed = call.GasLimit res.VMError = gethVM.ErrMaxCodeSizeExceeded @@ -623,7 +640,10 @@ func (proc *procedure) deployAt( res.DeployedContractAddress = &call.To res.CumulativeGasUsed = proc.config.BlockTotalGasUsedSoFar + res.GasConsumed - proc.state.SetCode(addr, ret, gethTracing.CodeChangeContractCreation) + if len(ret) > 0 { + proc.state.SetCode(addr, ret, gethTracing.CodeChangeContractCreation) + } + res.StateChangeCommitment, err = proc.commit(true) return res, err } From c308dec0cfc72060ba835f28804ade2f911c3789 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Mon, 11 May 2026 18:22:54 +0300 Subject: [PATCH 09/30] Add more descriptive comments --- fvm/evm/emulator/config.go | 4 ++-- fvm/evm/emulator/emulator.go | 8 ++------ fvm/evm/emulator/state/stateDB.go | 4 ++-- fvm/evm/evm_test.go | 4 ++-- fvm/evm/testutils/contract.go | 2 +- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/fvm/evm/emulator/config.go b/fvm/evm/emulator/config.go index a3e8c51fbbc..e723365e1dc 100644 --- a/fvm/evm/emulator/config.go +++ b/fvm/evm/emulator/config.go @@ -196,7 +196,7 @@ func WithOrigin(origin gethCommon.Address) Option { // WithGasPrice sets the gas price for the transaction (usually the one sets by the sender) func WithGasPrice(gasPrice *big.Int) Option { return func(c *Config) *Config { - c.TxContext.GasPrice = new(uint256.Int).SetBytes(gasPrice.Bytes()) + c.TxContext.GasPrice = uint256.MustFromBig(gasPrice) return c } } @@ -272,7 +272,7 @@ func WithRandom(rand *gethCommon.Hash) Option { } } -// WithSlotNum sets the block time in the block context +// WithSlotNum sets the slot number in the block context func WithSlotNum(slotNum uint64) Option { return func(c *Config) *Config { c.BlockContext.SlotNum = slotNum diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index b770cae964f..e2d481233d8 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -165,7 +165,7 @@ func (bl *BlockView) DirectCall(call *types.DirectCall) (res *types.Result, err case types.DeployCallSubType: // this is effectively deploying only COAs, with the `to` field // being generated by the COA address allocator and set as the - // deployment address + // deployment target address if !call.EmptyToField() { return proc.deployAt(call) } @@ -702,11 +702,7 @@ func (proc *procedure) run( gasPool := gethCore.NewGasPool(proc.config.BlockContext.GasLimit) // transit the state - execResult, err := gethCore.ApplyMessage( - proc.evm, - msg, - gasPool, - ) + execResult, err := gethCore.ApplyMessage(proc.evm, msg, gasPool) if err != nil { // if the error is a fatal error or a non-fatal state error or a backend err return it // this condition should never happen given all StateDB errors are withheld for the commit time. diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index c28894da757..737654577f5 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -112,8 +112,8 @@ func (db *StateDB) IsNewContract(addr gethCommon.Address) bool { // While this address exists for the rest of the transaction, // the balance of this account is cleared after the SelfDestruct call. func (db *StateDB) SelfDestruct(addr gethCommon.Address) { - // Flow EVM went live with the Cancun hard-fork, we we only support - // EIP-6780 SELFDESTRUCT, only in same transaction. + // Flow EVM went live with the Cancun hard-fork, so we only support the + // EIP-6780 SELFDESTRUCT variation, which works only in same transaction. // EIP-6780 would only follow the self destruct steps if account is a new // contract either just created, or address had balance before but got a // contract deployed to it (in this tx). diff --git a/fvm/evm/evm_test.go b/fvm/evm/evm_test.go index 1e975f6583e..0e6daa424a1 100644 --- a/fvm/evm/evm_test.go +++ b/fvm/evm/evm_test.go @@ -7059,7 +7059,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { chain := flow.Emulator.Chain() - t.Run("test SelfDestruct with self beneficiary emits EthBurnLog", func(t *testing.T) { + t.Run("test SelfDestruct with self as beneficiary emits EthBurnLog", func(t *testing.T) { t.Parallel() RunContractWithNewEnvironment( @@ -7165,7 +7165,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { ) }) - t.Run("test SelfDestruct with non-self beneficiary does not emit EthBurnLog", func(t *testing.T) { + t.Run("test SelfDestruct with non-self as beneficiary does not emit EthBurnLog", func(t *testing.T) { t.Parallel() RunContractWithNewEnvironment( diff --git a/fvm/evm/testutils/contract.go b/fvm/evm/testutils/contract.go index 504a3360272..c14ea095c4b 100644 --- a/fvm/evm/testutils/contract.go +++ b/fvm/evm/testutils/contract.go @@ -111,7 +111,7 @@ func DeployContract(t testing.TB, caller types.Address, tc *TestContract, led at caller, tc.ByteCode, gethParams.MaxTxGas, - big.NewInt(1_000_000_000), + big.NewInt(1_000_000_000), // fund the newly-deployed contract nonce+1, ), ) From 336a2589a388f0e10ee85c5f5c708966c6ea1f8b Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Tue, 12 May 2026 12:27:31 +0300 Subject: [PATCH 10/30] Set the Amsterdam hard-fork activation date to end of 2026 --- fvm/evm/emulator/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fvm/evm/emulator/config.go b/fvm/evm/emulator/config.go index e723365e1dc..92f586a60c8 100644 --- a/fvm/evm/emulator/config.go +++ b/fvm/evm/emulator/config.go @@ -28,8 +28,8 @@ var ( MainnetOsakaActivation = uint64(1764784800) // Wednesday, December 03, 2025 18:00:00 GMT+0000 PreviewnetAmsterdamActivation = uint64(0) // already on Amsterdam for PreviewNet - TestnetAmsterdamActivation = uint64(1782842400) // Tuesday, June 30, 2026 at 18:00:00 GMT+0000 - MainnetAmsterdamActivation = uint64(1782842400) // Tuesday, June 30, 2026 at 18:00:00 GMT+0000 + TestnetAmsterdamActivation = uint64(1798740000) // Thursday, December 31, 2026 at 18:00:00 GMT+0000 + MainnetAmsterdamActivation = uint64(1798740000) // Thursday, December 31, 2026 at 18:00:00 GMT+0000 ) // Config aggregates all the configuration (chain, evm, block, tx, ...) From e7423fc6fcdb38f25215eae0ebf25695d17e73d9 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Tue, 12 May 2026 12:28:20 +0300 Subject: [PATCH 11/30] Update calculation of SlotNumber in EVM BlockProposal --- fvm/evm/types/block.go | 15 +++++++++++++-- fvm/evm/types/block_test.go | 6 +++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/fvm/evm/types/block.go b/fvm/evm/types/block.go index cff0b4b5148..256b9e83253 100644 --- a/fvm/evm/types/block.go +++ b/fvm/evm/types/block.go @@ -209,9 +209,20 @@ func (b *BlockProposal) ToBytes() ([]byte, error) { return gethRLP.EncodeToBytes(b) } +// SlotNumber returns the corresponding slot number for the current block. +// In Ethereum, a slot is a 12-second time period where a validator is assigned +// to propose a new block, functioning as the network's "heartbeat" in PoS. +// Slots occur automatically every 12 seconds, and 32 slots are grouped together +// into a 6.4-minute period known as an epoch. func (b *BlockProposal) SlotNumber(chainID flow.ChainID) uint64 { - genesisTime := GenesisBlock(chainID).Timestamp - return (b.Timestamp - genesisTime) / 12 + // to calculate the Ethereum slot number from a block timestamp, + // subtract the Genesis timestamp from the block timestamp and + // divide by the slot duration (12 seconds on Ethereum). + // The formula is: slot = (block timestamp - genesis timestamp) / slot duration + // as slot duration we can use the block production rate, which is about 0.8 + // seconds on mainnet. + genesisTimestamp := GenesisBlock(chainID).Timestamp + return ((b.Timestamp - genesisTimestamp) * 5) / 4 } // NewBlockProposalFromBytes constructs a new block proposal from encoded data diff --git a/fvm/evm/types/block_test.go b/fvm/evm/types/block_test.go index 547ce9ee317..e203cb53885 100644 --- a/fvm/evm/types/block_test.go +++ b/fvm/evm/types/block_test.go @@ -77,9 +77,9 @@ func Test_BlockProposal(t *testing.T) { bp.PopulateRoots() require.NotEqual(t, gethTypes.EmptyReceiptsHash, bp.ReceiptRoot) - require.Equal(t, uint64(5_263_200), bp.SlotNumber(flow.Emulator)) - require.Equal(t, uint64(3_729_600), bp.SlotNumber(flow.Testnet)) - require.Equal(t, uint64(3_506_400), bp.SlotNumber(flow.Mainnet)) + require.Equal(t, uint64(78_948_000), bp.SlotNumber(flow.Emulator)) + require.Equal(t, uint64(55_944_000), bp.SlotNumber(flow.Testnet)) + require.Equal(t, uint64(52_596_000), bp.SlotNumber(flow.Mainnet)) } func Test_DecodeHistoricBlocks(t *testing.T) { From 368fe197f328f08617cb94240402a9703b0ff397 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Tue, 12 May 2026 18:28:41 +0300 Subject: [PATCH 12/30] Update ethereum/go-ethereum dependency to v1.17.3 and fix breaking API changes --- fvm/evm/emulator/config.go | 2 +- fvm/evm/emulator/emulator.go | 72 +++++++++++++++++++++++-------- fvm/evm/emulator/emulator_test.go | 9 ++-- fvm/evm/emulator/state/stateDB.go | 45 +++++++++++++------ fvm/evm/evm_test.go | 22 +++++----- fvm/evm/types/call.go | 9 ++-- go.mod | 9 ++-- go.sum | 18 ++++---- insecure/go.mod | 9 ++-- insecure/go.sum | 18 ++++---- integration/go.mod | 10 ++--- integration/go.sum | 18 ++++---- 12 files changed, 150 insertions(+), 91 deletions(-) diff --git a/fvm/evm/emulator/config.go b/fvm/evm/emulator/config.go index 92f586a60c8..f88e383dfe7 100644 --- a/fvm/evm/emulator/config.go +++ b/fvm/evm/emulator/config.go @@ -112,7 +112,7 @@ func MakeChainConfig(chainID *big.Int) *gethParams.ChainConfig { PragueTime: nil, // this is conditionally set below OsakaTime: nil, // this is conditionally set below AmsterdamTime: nil, // this is conditionally set below - VerkleTime: nil, // not on Verkle + UBTTime: nil, // not on Verkle (a.k.a UBT) } if chainID.Cmp(types.FlowEVMPreviewNetChainID) == 0 { diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index e2d481233d8..224ea8cd85d 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -311,23 +311,60 @@ func (bl *BlockView) DryRunTransaction( return nil, err } - // convert tx into message - msg, err := gethCore.TransactionToMessage( - tx, - GetSigner(bl.config), - proc.config.BlockContext.BaseFee, - ) - - // we can ignore invalid signature errors since we don't expect signed transactions - if !errors.Is(err, gethTypes.ErrInvalidSig) { - return nil, err + gasPrice, overflow := uint256.FromBig(tx.GasPrice()) + if overflow { + return nil, fmt.Errorf("%w: address %v, maxFeePerGas bit length: %d", gethCore.ErrFeeCapVeryHigh, + from.Hex(), tx.GasPrice().BitLen()) + } + txGasFeeCap := tx.GasFeeCap() + gasFeeCap, overflow := uint256.FromBig(txGasFeeCap) + if overflow { + return nil, fmt.Errorf("%w: address %v, maxFeePerGas bit length: %d", gethCore.ErrFeeCapVeryHigh, + from.Hex(), tx.GasFeeCap().BitLen()) + } + txGasTipCap := tx.GasTipCap() + gasTipCap, overflow := uint256.FromBig(txGasTipCap) + if overflow { + return nil, fmt.Errorf("%w: address %v, maxPriorityFeePerGas bit length: %d", gethCore.ErrTipVeryHigh, + from.Hex(), tx.GasTipCap().BitLen()) + } + value, overflow := uint256.FromBig(tx.Value()) + if overflow { + return nil, fmt.Errorf("value exceeds 256 bits: address %v", from.Hex()) + } + blobGasFeeCap, overflow := uint256.FromBig(tx.BlobGasFeeCap()) + if overflow { + return nil, fmt.Errorf("blobGasFeeCap exceeds 256 bits: address %v", from.Hex()) + } + + msg := &gethCore.Message{ + From: from, + Nonce: tx.Nonce(), + GasLimit: tx.Gas(), + GasPrice: gasPrice, + GasFeeCap: gasFeeCap, + GasTipCap: gasTipCap, + To: tx.To(), + Value: value, + Data: tx.Data(), + AccessList: tx.AccessList(), + SetCodeAuthorizations: tx.SetCodeAuthorizations(), + SkipNonceChecks: true, + SkipTransactionChecks: true, + BlobHashes: tx.BlobHashes(), + BlobGasFeeCap: blobGasFeeCap, + } + // If baseFee provided, set gasPrice to effectiveGasPrice. + baseFee := proc.config.BlockContext.BaseFee + if baseFee != nil { + effectiveGasPrice := new(big.Int).Add(baseFee, txGasTipCap) + if effectiveGasPrice.Cmp(txGasFeeCap) > 0 { + effectiveGasPrice = txGasFeeCap + } + // EffectiveGasPrice is already capped by txGasFeeCap, therefore + // the overflow check is not required. + msg.GasPrice = uint256.MustFromBig(effectiveGasPrice) } - - // use the from as the signer - msg.From = from - // we need to skip nonce/transaction checks for dry run - msg.SkipNonceChecks = true - msg.SkipTransactionChecks = true // run and return without committing the state changes return proc.run(msg, tx.Hash(), tx.Type()) @@ -586,11 +623,12 @@ func (proc *procedure) deployAt( // initialise a new contract and set the code that is to be used by the EVM. // the contract is a scoped environment for this execution context only. + gasBudget := gethVM.NewGasBudget(call.GasLimit) contract := gethVM.NewContract( caller, addr, castedValue, - call.GasLimit, + gasBudget, nil, ) diff --git a/fvm/evm/emulator/emulator_test.go b/fvm/evm/emulator/emulator_test.go index 78f3d73c65e..cc287a0db3a 100644 --- a/fvm/evm/emulator/emulator_test.go +++ b/fvm/evm/emulator/emulator_test.go @@ -7,6 +7,7 @@ import ( "strings" "testing" + gethABI "github.com/ethereum/go-ethereum/accounts/abi" gethCommon "github.com/ethereum/go-ethereum/common" gethTypes "github.com/ethereum/go-ethereum/core/types" gethVM "github.com/ethereum/go-ethereum/core/vm" @@ -191,8 +192,7 @@ func TestNativeTokenBridging(t *testing.T) { RunWithNewEmulator(t, backend, rootAddr, func(env *emulator.Emulator) { RunWithNewBlockView(t, env, func(blk types.BlockView) { // Test withdraw amounts that overflow the UInt256 range - amount := big.NewInt(1) - amount.Lsh(amount, 256) + amount := gethABI.MaxUint256 call := types.NewWithdrawCall(bridgeAccount, testAccount, amount, testAccountNonce) res, err := blk.DirectCall(call) @@ -207,9 +207,8 @@ func TestNativeTokenBridging(t *testing.T) { }) RunWithNewEmulator(t, backend, rootAddr, func(env *emulator.Emulator) { RunWithNewBlockView(t, env, func(blk types.BlockView) { - // Test withdraw amounts within the max range of UInt256 - amount := big.NewInt(1) - amount.Lsh(amount, 255) + // Test withdraw amounts within the max range of Int256 + amount := gethABI.MaxInt256 call := types.NewWithdrawCall(bridgeAccount, testAccount, amount, testAccountNonce) res, err := blk.DirectCall(call) diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index 737654577f5..a1a2ccad000 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -11,6 +11,7 @@ import ( gethStateless "github.com/ethereum/go-ethereum/core/stateless" gethTracing "github.com/ethereum/go-ethereum/core/tracing" gethTypes "github.com/ethereum/go-ethereum/core/types" + gethBAL "github.com/ethereum/go-ethereum/core/types/bal" gethParams "github.com/ethereum/go-ethereum/params" "github.com/holiman/uint256" "github.com/onflow/atree" @@ -36,11 +37,13 @@ type removedAccountWithBalance struct { // thread safe. yet the current design supports addition of concurrency in the // future if needed type StateDB struct { - ledger atree.Ledger - root flow.Address - baseView types.BaseView - views []*DeltaView - cachedError error + ledger atree.Ledger + root flow.Address + baseView types.BaseView + views []*DeltaView + // Per-transaction state access footprint for EIP-7928 + stateReadList *gethBAL.StateAccessList + cachedError error } var _ types.StateDB = &StateDB{} @@ -81,6 +84,11 @@ func (db *StateDB) Empty(addr gethCommon.Address) bool { bytes.Equal(db.GetCodeHash(addr).Bytes(), gethTypes.EmptyCodeHash.Bytes()) } +// Touch accesses the specific account without returning anything. +func (s *StateDB) Touch(addr gethCommon.Address) { + // TODO(m-Peter): Investigate Geth logic on this +} + // CreateAccount creates a new account for the given address // it sets the nonce to zero func (db *StateDB) CreateAccount(addr gethCommon.Address) { @@ -565,7 +573,7 @@ func (db *StateDB) Commit(finalize bool) (hash.Hash, error) { return updateCommit, nil } -// EmitLogsForBurnAccounts emits the eth burn logs for accounts scheduled for +// LogsForBurnAccounts returns the eth burn logs for accounts scheduled for // removal which still have positive balance. The purpose of this function is // to handle a corner case of EIP-7708 where a self-destructed account might // still receive funds between sending/burning its previous balance and actual @@ -575,7 +583,7 @@ func (db *StateDB) Commit(finalize bool) (hash.Hash, error) { // // This function should only be invoked at the transaction boundary, specifically // before the Finalise. -func (db *StateDB) EmitLogsForBurnAccounts() { +func (db *StateDB) LogsForBurnAccounts() []*gethTypes.Log { // iterate views and collect dirty addresses addresses := make(map[gethCommon.Address]struct{}) for _, view := range db.views { @@ -600,20 +608,25 @@ func (db *StateDB) EmitLogsForBurnAccounts() { }) } } - if list != nil { - sort.Slice(list, func(i, j int) bool { - return list[i].address.Cmp(list[j].address) < 0 - }) + if list == nil { + return nil } - for _, acct := range list { - db.AddLog(gethTypes.EthBurnLog(acct.address, acct.balance)) + sort.Slice(list, func(i, j int) bool { + return list[i].address.Cmp(list[j].address) < 0 + }) + logs := make([]*gethTypes.Log, len(list)) + for i, acct := range list { + logs[i] = gethTypes.EthBurnLog(acct.address, acct.balance) } + return logs } // This is a no-op for our custom implementation of the StateDB interface, // since Commit() already handles finalization and deletion of empty // objects. -func (db *StateDB) Finalise(deleteEmptyObjects bool) {} +func (db *StateDB) Finalise(deleteEmptyObjects bool) *gethBAL.StateAccessList { + return db.stateReadList +} // Finalize flushes all the changes // to the permanent storage @@ -646,6 +659,10 @@ func (db *StateDB) Prepare(rules gethParams.Rules, sender, coinbase gethCommon.A db.AddAddressToAccessList(coinbase) } } + + if rules.IsAmsterdam { + db.stateReadList = gethBAL.NewStateAccessList() + } } // Reset resets uncommitted changes and transient artifacts such as error, logs, diff --git a/fvm/evm/evm_test.go b/fvm/evm/evm_test.go index 0e6daa424a1..4f7d98e9f5f 100644 --- a/fvm/evm/evm_test.go +++ b/fvm/evm/evm_test.go @@ -1275,9 +1275,8 @@ func TestEVMRun(t *testing.T) { prepare(account: &Account) { let coinbase = EVM.EVMAddress(bytes: coinbaseBytes) let res = EVM.run(tx: tx, coinbase: coinbase) - assert(res.status == EVM.Status.invalid, message: "unexpected status") - assert(res.errorCode == 100, message: "unexpected error code: \(res.errorCode)") - assert(res.errorMessage == "transaction gas limit too high (cap: 16777216, tx: 16777220)") + assert(res.status == EVM.Status.successful, message: "unexpected status") + assert(res.errorCode == 0, message: "unexpected error code: \(res.errorCode)") } } `, @@ -1325,8 +1324,7 @@ func TestEVMRun(t *testing.T) { require.NoError(t, output.Err) require.NotEmpty(t, state.WriteSet) - // assert no events were produced from an invalid EVM transaction - require.Len(t, output.Events, 0) + require.Len(t, output.Events, 2) }) }) @@ -1806,11 +1804,11 @@ func TestEVMBatchRun(t *testing.T) { for i, res in batchResults { if i %% 2 != 0 { - assert(res.status == EVM.Status.successful, message: "unexpected success status") + assert(res.status == EVM.Status.successful, message: "\(res.errorMessage)") assert(res.errorCode == 0, message: "unexpected error code") assert(res.errorMessage == "", message: "unexpected error msg") } else { - assert(res.status == EVM.Status.failed, message: "unexpected failed status") + assert(res.status == EVM.Status.failed, message: "\(res.errorMessage)") assert(res.errorCode == 400, message: "unexpected error code") } } @@ -1827,7 +1825,7 @@ func TestEVMBatchRun(t *testing.T) { gas := uint64(100_000) if i%2 == 0 { // fail with too low gas limit - gas = 22_000 + gas = 23_500 } else { // update number with only valid transactions num = int64(i) @@ -6141,10 +6139,12 @@ func TestEVMFileSystemContract(t *testing.T) { ` import EVM from %s - transaction(tx: [UInt8], coinbaseBytes: [UInt8; 20]){ + transaction(tx: [UInt8], coinbaseBytes: [UInt8; 20]) { prepare(account: &Account) { let coinbase = EVM.EVMAddress(bytes: coinbaseBytes) let res = EVM.run(tx: tx, coinbase: coinbase) + assert(res.status == EVM.Status.successful, message: "\(res.errorMessage)") + assert(res.errorCode == 0, message: "unexpected error code: \(res.errorCode)") } } `, @@ -6174,7 +6174,7 @@ func TestEVMFileSystemContract(t *testing.T) { buffer.String(), ), big.NewInt(0), - uint64(2_132_171), + uint64(3_375_890), big.NewInt(1), ) @@ -6243,7 +6243,7 @@ func TestEVMFileSystemContract(t *testing.T) { ) // require.NotEmpty(t, blockEventPayload.Hash) - require.Equal(t, uint64(2_132_170), blockEventPayload.TotalGasUsed) + require.Equal(t, uint64(3_396_880), blockEventPayload.TotalGasUsed) txHashes := types.TransactionHashes{txEventPayload.Hash, feeTranferEventPayload.Hash} require.Equal(t, diff --git a/fvm/evm/types/call.go b/fvm/evm/types/call.go index 3df8f136e0d..e12f5ef14c1 100644 --- a/fvm/evm/types/call.go +++ b/fvm/evm/types/call.go @@ -9,6 +9,7 @@ import ( gethTypes "github.com/ethereum/go-ethereum/core/types" gethParams "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" + "github.com/holiman/uint256" ) const ( @@ -94,13 +95,13 @@ func (dc *DirectCall) Message() *gethCore.Message { return &gethCore.Message{ From: dc.From.ToCommon(), To: dc.to(), - Value: dc.Value, + Value: uint256.MustFromBig(dc.Value), Data: dc.Data, Nonce: dc.Nonce, GasLimit: dc.GasLimit, - GasPrice: big.NewInt(0), // price is set to zero fo direct calls - GasTipCap: big.NewInt(0), // also known as maxPriorityFeePerGas (in GWei) - GasFeeCap: big.NewInt(0), // also known as maxFeePerGas (in GWei) + GasPrice: uint256.NewInt(0), // price is set to zero fo direct calls + GasTipCap: uint256.NewInt(0), // also known as maxPriorityFeePerGas (in GWei) + GasFeeCap: uint256.NewInt(0), // also known as maxFeePerGas (in GWei) SetCodeAuthorizations: dc.setCodeAuthorizations, // introduced in EIP-7702 tx type // TODO: maybe revisit setting the access list // AccessList: tx.AccessList(), diff --git a/go.mod b/go.mod index 2efb6e3c3c2..42d81f58251 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/dgraph-io/badger/v2 v2.2007.4 github.com/ef-ds/deque v1.0.4 - github.com/ethereum/go-ethereum v1.17.2 + github.com/ethereum/go-ethereum v1.17.3 github.com/fxamacker/cbor/v2 v2.9.2-0.20260331174317-a78e92ec038e github.com/gammazero/workerpool v1.1.3 github.com/gogo/protobuf v1.3.2 @@ -27,7 +27,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 github.com/hashicorp/go-multierror v1.1.1 github.com/improbable-eng/grpc-web v0.15.0 github.com/ipfs/go-block-format v0.2.0 @@ -69,7 +69,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/vmihailenco/msgpack/v4 v4.3.11 go.opentelemetry.io/otel v1.40.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 go.opentelemetry.io/otel/sdk v1.40.0 go.opentelemetry.io/otel/trace v1.40.0 go.uber.org/atomic v1.11.0 @@ -122,6 +122,7 @@ require ( require ( github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.5 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/crate-crypto/go-eth-kzg v1.5.0 // indirect github.com/emicklei/dot v1.6.2 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect @@ -338,7 +339,7 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect go.opentelemetry.io/otel/metric v1.40.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect diff --git a/go.sum b/go.sum index 0ea9cc17fed..ac1bec8ca39 100644 --- a/go.sum +++ b/go.sum @@ -208,6 +208,8 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -355,8 +357,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.2 h1:ag6geu0kn8Hv5FLKTpH+Hm2DHD+iuFtuqKxEuwUsDOI= -github.com/ethereum/go-ethereum v1.17.2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= +github.com/ethereum/go-ethereum v1.17.3 h1:Ev/sQHH+UdKZHWjuVzhu2pxhi/sXaPZl23Q+Q5LDd4Q= +github.com/ethereum/go-ethereum v1.17.3/go.mod h1:f2EhRwqewIZkGoQekywI2Y2RZAMTSavLNkD9qItFy1A= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= @@ -616,8 +618,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpg github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1341,10 +1343,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6h go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= diff --git a/insecure/go.mod b/insecure/go.mod index de10e1b1cee..b282b652323 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -61,6 +61,7 @@ require ( github.com/bits-and-blooms/bitset v1.24.4 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect @@ -95,7 +96,7 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect - github.com/ethereum/go-ethereum v1.17.2 // indirect + github.com/ethereum/go-ethereum v1.17.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect @@ -135,7 +136,7 @@ require ( github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect @@ -302,8 +303,8 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect go.opentelemetry.io/otel v1.40.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect go.opentelemetry.io/otel/metric v1.40.0 // indirect go.opentelemetry.io/otel/sdk v1.40.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index cdd6a80caff..e1c15c9c425 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -189,6 +189,8 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -326,8 +328,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.2 h1:ag6geu0kn8Hv5FLKTpH+Hm2DHD+iuFtuqKxEuwUsDOI= -github.com/ethereum/go-ethereum v1.17.2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= +github.com/ethereum/go-ethereum v1.17.3 h1:Ev/sQHH+UdKZHWjuVzhu2pxhi/sXaPZl23Q+Q5LDd4Q= +github.com/ethereum/go-ethereum v1.17.3/go.mod h1:f2EhRwqewIZkGoQekywI2Y2RZAMTSavLNkD9qItFy1A= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -569,8 +571,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1284,10 +1286,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6h go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= diff --git a/integration/go.mod b/integration/go.mod index 7e5652c82a7..2938193f7fb 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -11,7 +11,7 @@ require ( github.com/coreos/go-semver v0.3.0 github.com/docker/docker v28.5.2+incompatible github.com/docker/go-connections v0.5.0 - github.com/ethereum/go-ethereum v1.17.2 + github.com/ethereum/go-ethereum v1.17.3 github.com/go-git/go-git/v5 v5.11.0 github.com/go-yaml/yaml v2.1.0+incompatible github.com/gorilla/websocket v1.5.3 @@ -92,7 +92,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.24.4 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect - github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect @@ -179,7 +179,7 @@ require ( github.com/gorilla/mux v1.8.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect @@ -352,8 +352,8 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect go.opentelemetry.io/otel v1.40.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect go.opentelemetry.io/otel/metric v1.40.0 // indirect go.opentelemetry.io/otel/sdk v1.40.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect diff --git a/integration/go.sum b/integration/go.sum index 18eaabb8f1e..24c40039001 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -147,8 +147,6 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9 github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= -github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -294,8 +292,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.2 h1:ag6geu0kn8Hv5FLKTpH+Hm2DHD+iuFtuqKxEuwUsDOI= -github.com/ethereum/go-ethereum v1.17.2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= +github.com/ethereum/go-ethereum v1.17.3 h1:Ev/sQHH+UdKZHWjuVzhu2pxhi/sXaPZl23Q+Q5LDd4Q= +github.com/ethereum/go-ethereum v1.17.3/go.mod h1:f2EhRwqewIZkGoQekywI2Y2RZAMTSavLNkD9qItFy1A= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY= @@ -483,8 +481,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1099,10 +1097,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= From 68af970816fee661663b92f9d5354dbc96a372ea Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Wed, 13 May 2026 12:31:42 +0300 Subject: [PATCH 13/30] Remove MaxTxGas limit cap under the Amsterdam hard-fork --- fvm/evm/evm_test.go | 52 ++++++++++++++++++++++++++++++++++--------- fvm/evm/types/call.go | 12 ++++------ 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/fvm/evm/evm_test.go b/fvm/evm/evm_test.go index 4f7d98e9f5f..6307fbb5a75 100644 --- a/fvm/evm/evm_test.go +++ b/fvm/evm/evm_test.go @@ -1256,7 +1256,7 @@ func TestEVMRun(t *testing.T) { ) }) - t.Run("testing EVM.run failed with gas limit validation error", func(t *testing.T) { + t.Run("testing EVM.run with higher gas limit cap under Amsterdam", func(t *testing.T) { t.Parallel() RunWithNewEnvironment(t, @@ -1323,8 +1323,42 @@ func TestEVMRun(t *testing.T) { require.NoError(t, err) require.NoError(t, output.Err) require.NotEmpty(t, state.WriteSet) + snapshot = snapshot.Append(state) + // assert event fields are correct require.Len(t, output.Events, 2) + txEvent := output.Events[0] + txEventPayload := TxEventToPayload(t, txEvent, sc.EVMContract.Address) + require.NoError(t, err) + + // fee transfer event + feeTransferEvent := output.Events[1] + feeTranferEventPayload := TxEventToPayload(t, feeTransferEvent, sc.EVMContract.Address) + require.NoError(t, err) + require.Equal(t, uint16(types.ErrCodeNoError), feeTranferEventPayload.ErrorCode) + require.Equal(t, uint16(1), feeTranferEventPayload.Index) + require.Equal(t, uint64(21000), feeTranferEventPayload.GasConsumed) + + // commit block + blockEventPayload, _ := callEVMHeartBeat(t, ctx, vm, snapshot) + + require.NotEmpty(t, blockEventPayload.Hash) + require.Equal(t, uint64(64785), blockEventPayload.TotalGasUsed) + require.NotEmpty(t, blockEventPayload.Hash) + + txHashes := types.TransactionHashes{txEventPayload.Hash, feeTranferEventPayload.Hash} + require.Equal(t, + txHashes.RootHash(), + blockEventPayload.TransactionHashRoot, + ) + require.NotEmpty(t, blockEventPayload.ReceiptRoot) + + require.Equal(t, innerTxBytes, txEventPayload.Payload) + require.Equal(t, uint16(types.ErrCodeNoError), txEventPayload.ErrorCode) + require.Equal(t, uint16(0), txEventPayload.Index) + require.Equal(t, blockEventPayload.Height, txEventPayload.BlockHeight) + require.Equal(t, blockEventPayload.TotalGasUsed-feeTranferEventPayload.GasConsumed, txEventPayload.GasConsumed) + require.Empty(t, txEventPayload.ContractAddress) }) }) @@ -3398,7 +3432,7 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { }) }) - t.Run("test coa deploy with bigger than max gas limit cap", func(t *testing.T) { + t.Run("test coa deploy with bigger than max gas limit cap under Amsterdam", func(t *testing.T) { RunWithNewEnvironment(t, chain, func( ctx fvm.Context, @@ -3451,16 +3485,12 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { res, err := impl.ResultSummaryFromEVMResultValue(output.Value) require.NoError(t, err) - require.Equal(t, types.StatusInvalid, res.Status) - require.Equal(t, types.ValidationErrCodeMisc, res.ErrorCode) - require.Equal( - t, - "transaction gas limit too high (cap: 16777216, tx: 16777226)", - res.ErrorMessage, - ) - require.Nil(t, res.DeployedContractAddress) + require.Equal(t, types.StatusSuccessful, res.Status) + require.Equal(t, types.ErrCodeNoError, res.ErrorCode) + require.Empty(t, res.ErrorMessage) + require.NotNil(t, res.DeployedContractAddress) // we strip away first few bytes because they contain deploy code - require.Empty(t, []byte(res.ReturnedData)) + require.Equal(t, testContract.ByteCode[17:], []byte(res.ReturnedData)) }) }) } diff --git a/fvm/evm/types/call.go b/fvm/evm/types/call.go index e12f5ef14c1..43bcf1e55c0 100644 --- a/fvm/evm/types/call.go +++ b/fvm/evm/types/call.go @@ -168,15 +168,11 @@ func (dc *DirectCall) ValidEIP7825GasLimit(rules gethParams.Rules) bool { return true } - // If the `Osaka` hard-fork is not activated, then there's no need to - // check for EIP-7825 gas limit validity. - if !rules.IsOsaka { - return true - } - - // After the `Osaka` hard-fork, direct calls have the same gas limit + // Under the `Osaka` hard-fork, direct calls have the same gas limit // cap as native EVM transactions. - if dc.GasLimit > gethParams.MaxTxGas { + // Under the `Amsterdam`` hard-fork, the gas limit cap was removed + // in favor of EIP-8037. + if dc.GasLimit > gethParams.MaxTxGas && rules.IsOsaka && !rules.IsAmsterdam { return false } From d4ae5788e0ae386fbd68bbb85db7ca47fa650e30 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Wed, 13 May 2026 17:22:48 +0300 Subject: [PATCH 14/30] Record state access read in StateDB's public API --- fvm/evm/emulator/state/stateDB.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index a1a2ccad000..8c2d3900f31 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -67,6 +67,7 @@ func NewStateDB(ledger atree.Ledger, root flow.Address) (*StateDB, error) { // // this should also return true for self destructed accounts during the transaction execution. func (db *StateDB) Exist(addr gethCommon.Address) bool { + db.recordStateAccess(addr) exist, err := db.latestView().Exist(addr) db.handleError(err) return exist @@ -76,6 +77,7 @@ func (db *StateDB) Exist(addr gethCommon.Address) bool { // // Empty is defined according to EIP161 (balance = nonce = code = 0). func (db *StateDB) Empty(addr gethCommon.Address) bool { + db.recordStateAccess(addr) if !db.Exist(addr) { return true } @@ -85,8 +87,8 @@ func (db *StateDB) Empty(addr gethCommon.Address) bool { } // Touch accesses the specific account without returning anything. -func (s *StateDB) Touch(addr gethCommon.Address) { - // TODO(m-Peter): Investigate Geth logic on this +func (db *StateDB) Touch(addr gethCommon.Address) { + db.recordStateAccess(addr) } // CreateAccount creates a new account for the given address @@ -107,11 +109,13 @@ func (db *StateDB) IsCreated(addr gethCommon.Address) bool { // This operation sets the 'newContract'-flag, which is required in order to // correctly handle EIP-6780 'delete-in-same-transaction' logic. func (db *StateDB) CreateContract(addr gethCommon.Address) { + db.recordStateAccess(addr) db.latestView().CreateContract(addr) } // IsNewContract returns true if address is a new contract func (db *StateDB) IsNewContract(addr gethCommon.Address) bool { + db.recordStateAccess(addr) return db.latestView().IsNewContract(addr) } @@ -125,6 +129,7 @@ func (db *StateDB) SelfDestruct(addr gethCommon.Address) { // EIP-6780 would only follow the self destruct steps if account is a new // contract either just created, or address had balance before but got a // contract deployed to it (in this tx). + db.recordStateAccess(addr) if db.IsNewContract(addr) { err := db.latestView().SelfDestruct(addr) db.handleError(err) @@ -133,6 +138,7 @@ func (db *StateDB) SelfDestruct(addr gethCommon.Address) { // HasSelfDestructed returns true if address is flagged with self destruct. func (db *StateDB) HasSelfDestructed(addr gethCommon.Address) bool { + db.recordStateAccess(addr) destructed, _ := db.latestView().HasSelfDestructed(addr) return destructed } @@ -144,6 +150,7 @@ func (db *StateDB) SubBalance( amount *uint256.Int, reason gethTracing.BalanceChangeReason, ) uint256.Int { + db.recordStateAccess(addr) // negative amounts are not accepted. if amount.Sign() < 0 { db.handleError(types.ErrInvalidBalance) @@ -165,6 +172,7 @@ func (db *StateDB) AddBalance( amount *uint256.Int, reason gethTracing.BalanceChangeReason, ) uint256.Int { + db.recordStateAccess(addr) // negative amounts are not accepted. if amount.Sign() < 0 { db.handleError(types.ErrInvalidBalance) @@ -181,6 +189,7 @@ func (db *StateDB) AddBalance( // GetBalance returns the balance of the given address func (db *StateDB) GetBalance(addr gethCommon.Address) *uint256.Int { + db.recordStateAccess(addr) bal, err := db.latestView().GetBalance(addr) db.handleError(err) return bal @@ -188,6 +197,7 @@ func (db *StateDB) GetBalance(addr gethCommon.Address) *uint256.Int { // GetNonce returns the nonce of the given address func (db *StateDB) GetNonce(addr gethCommon.Address) uint64 { + db.recordStateAccess(addr) nonce, err := db.latestView().GetNonce(addr) db.handleError(err) return nonce @@ -199,12 +209,14 @@ func (db *StateDB) SetNonce( nonce uint64, reason gethTracing.NonceChangeReason, ) { + db.recordStateAccess(addr) err := db.latestView().SetNonce(addr, nonce) db.handleError(err) } // GetCodeHash returns the code hash of the given address func (db *StateDB) GetCodeHash(addr gethCommon.Address) gethCommon.Hash { + db.recordStateAccess(addr) hash, err := db.latestView().GetCodeHash(addr) db.handleError(err) return hash @@ -212,6 +224,7 @@ func (db *StateDB) GetCodeHash(addr gethCommon.Address) gethCommon.Hash { // GetCode returns the code for the given address func (db *StateDB) GetCode(addr gethCommon.Address) []byte { + db.recordStateAccess(addr) code, err := db.latestView().GetCode(addr) db.handleError(err) return code @@ -219,6 +232,7 @@ func (db *StateDB) GetCode(addr gethCommon.Address) []byte { // GetCodeSize returns the size of the code for the given address func (db *StateDB) GetCodeSize(addr gethCommon.Address) int { + db.recordStateAccess(addr) codeSize, err := db.latestView().GetCodeSize(addr) db.handleError(err) return codeSize @@ -231,6 +245,7 @@ func (db *StateDB) SetCode( code []byte, reason gethTracing.CodeChangeReason, ) (prev []byte) { + db.recordStateAccess(addr) prev = db.GetCode(addr) err := db.latestView().SetCode(addr, code) db.handleError(err) @@ -258,6 +273,7 @@ func (db *StateDB) GetRefund() uint64 { // GetCommittedState returns the value for the given storage slot considering only the committed state and not // changes in the scope of current transaction. func (db *StateDB) GetCommittedState(addr gethCommon.Address, key gethCommon.Hash) gethCommon.Hash { + db.recordStateAccess(addr) value, err := db.baseView.GetState(types.SlotAddress{Address: addr, Key: key}) db.handleError(err) return value @@ -268,6 +284,7 @@ func (db *StateDB) GetStateAndCommittedState( addr gethCommon.Address, key gethCommon.Hash, ) (gethCommon.Hash, gethCommon.Hash) { + db.recordStateAccess(addr) origin := db.GetCommittedState(addr, key) value := db.GetState(addr, key) @@ -276,6 +293,7 @@ func (db *StateDB) GetStateAndCommittedState( // GetState returns the value for the given storage slot func (db *StateDB) GetState(addr gethCommon.Address, key gethCommon.Hash) gethCommon.Hash { + db.recordStateAccess(addr) state, err := db.latestView().GetState(types.SlotAddress{Address: addr, Key: key}) db.handleError(err) return state @@ -296,6 +314,7 @@ func (db *StateDB) GetState(addr gethCommon.Address, key gethCommon.Hash) gethCo // This endpoint is added mostly to prevent the case that an smart contract is self-destructed // and a later transaction tries to deploy a contract to the same address. func (db *StateDB) GetStorageRoot(addr gethCommon.Address) gethCommon.Hash { + db.recordStateAccess(addr) root, err := db.latestView().GetStorageRoot(addr) db.handleError(err) return root @@ -308,6 +327,7 @@ func (db *StateDB) SetState( key gethCommon.Hash, value gethCommon.Hash, ) gethCommon.Hash { + db.recordStateAccess(addr) prevState, err := db.latestView().SetState(types.SlotAddress{Address: addr, Key: key}, value) db.handleError(err) @@ -694,6 +714,11 @@ func (s *StateDB) AccessEvents() *gethState.AccessEvents { return nil } +// recordStateAccess records state access regardless of whether the account exists. +func (db *StateDB) recordStateAccess(addr gethCommon.Address) { + db.stateReadList.AddAccount(addr) +} + func (db *StateDB) latestView() *DeltaView { return db.views[len(db.views)-1] } From 52a7ae69e8015c8e0dacd74860618a31e86902cd Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Thu, 14 May 2026 12:42:55 +0300 Subject: [PATCH 15/30] Bump OpenTelemetry packages to latest patched version --- go.mod | 12 ++++++------ go.sum | 24 ++++++++++++------------ insecure/go.mod | 12 ++++++------ insecure/go.sum | 24 ++++++++++++------------ integration/go.mod | 12 ++++++------ integration/go.sum | 24 ++++++++++++------------ 6 files changed, 54 insertions(+), 54 deletions(-) diff --git a/go.mod b/go.mod index 42d81f58251..6e5b04d7ddc 100644 --- a/go.mod +++ b/go.mod @@ -68,16 +68,16 @@ require ( github.com/spf13/viper v1.15.0 github.com/stretchr/testify v1.11.1 github.com/vmihailenco/msgpack/v4 v4.3.11 - go.opentelemetry.io/otel v1.40.0 + go.opentelemetry.io/otel v1.43.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 - go.opentelemetry.io/otel/sdk v1.40.0 - go.opentelemetry.io/otel/trace v1.40.0 + go.opentelemetry.io/otel/sdk v1.43.0 + go.opentelemetry.io/otel/trace v1.43.0 go.uber.org/atomic v1.11.0 go.uber.org/multierr v1.11.0 golang.org/x/crypto v0.47.0 golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 golang.org/x/sync v0.19.0 - golang.org/x/sys v0.40.0 + golang.org/x/sys v0.42.0 golang.org/x/text v0.33.0 golang.org/x/time v0.14.0 golang.org/x/tools v0.40.0 @@ -340,8 +340,8 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect - go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect diff --git a/go.sum b/go.sum index ac1bec8ca39..09514cdc8ec 100644 --- a/go.sum +++ b/go.sum @@ -1341,8 +1341,8 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= @@ -1351,14 +1351,14 @@ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1x go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0/go.mod h1:kB3ufRbfU+CQ4MlUcqtW8Z7YEOBeK2DJ6CmR5rYYF3E= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= -go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= -go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= -go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= -go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= @@ -1673,8 +1673,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc h1:bH6xUXay0AIFMElXG2rQ4uiE+7ncwtiOdPfYK1NK2XA= golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/insecure/go.mod b/insecure/go.mod index b282b652323..cb76df92ca5 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -302,13 +302,13 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel v1.40.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect - go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/otel/sdk v1.40.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect - go.opentelemetry.io/otel/trace v1.40.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect @@ -322,7 +322,7 @@ require ( golang.org/x/net v0.49.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.40.0 // indirect + golang.org/x/sys v0.42.0 // indirect golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc // indirect golang.org/x/term v0.39.0 // indirect golang.org/x/text v0.33.0 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index e1c15c9c425..5f8eb7b8581 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -1284,22 +1284,22 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= -go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= -go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= -go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= -go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1575,8 +1575,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc h1:bH6xUXay0AIFMElXG2rQ4uiE+7ncwtiOdPfYK1NK2XA= golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/integration/go.mod b/integration/go.mod index 2938193f7fb..44377ba8104 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -351,13 +351,13 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect - go.opentelemetry.io/otel v1.40.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect - go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/otel/sdk v1.40.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect - go.opentelemetry.io/otel/trace v1.40.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect @@ -368,7 +368,7 @@ require ( golang.org/x/mod v0.31.0 // indirect golang.org/x/net v0.49.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect - golang.org/x/sys v0.40.0 // indirect + golang.org/x/sys v0.42.0 // indirect golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc // indirect golang.org/x/term v0.39.0 // indirect golang.org/x/text v0.33.0 // indirect diff --git a/integration/go.sum b/integration/go.sum index 24c40039001..bac39333783 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -1095,8 +1095,8 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= @@ -1105,14 +1105,14 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXI go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= -go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= -go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= -go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= -go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1287,8 +1287,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc h1:bH6xUXay0AIFMElXG2rQ4uiE+7ncwtiOdPfYK1NK2XA= golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= From f6eeb74415d59ac588612d0c091a18d33976df9e Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Thu, 14 May 2026 16:30:47 +0300 Subject: [PATCH 16/30] Test improvements and code simplifications --- fvm/evm/emulator/emulator.go | 25 ++++++++++-------------- fvm/evm/emulator/state/stateDB.go | 8 ++++++-- fvm/evm/emulator/state/stateDB_test.go | 27 ++++++++++++++++++++++++++ fvm/evm/types/block_test.go | 1 + fvm/evm/types/codeFinder.go | 4 ++++ 5 files changed, 48 insertions(+), 17 deletions(-) diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index 224ea8cd85d..e796ba49619 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -311,6 +311,10 @@ func (bl *BlockView) DryRunTransaction( return nil, err } + value, overflow := uint256.FromBig(tx.Value()) + if overflow { + return nil, fmt.Errorf("value exceeds 256 bits: address %v", from.Hex()) + } gasPrice, overflow := uint256.FromBig(tx.GasPrice()) if overflow { return nil, fmt.Errorf("%w: address %v, maxFeePerGas bit length: %d", gethCore.ErrFeeCapVeryHigh, @@ -328,32 +332,23 @@ func (bl *BlockView) DryRunTransaction( return nil, fmt.Errorf("%w: address %v, maxPriorityFeePerGas bit length: %d", gethCore.ErrTipVeryHigh, from.Hex(), tx.GasTipCap().BitLen()) } - value, overflow := uint256.FromBig(tx.Value()) - if overflow { - return nil, fmt.Errorf("value exceeds 256 bits: address %v", from.Hex()) - } - blobGasFeeCap, overflow := uint256.FromBig(tx.BlobGasFeeCap()) - if overflow { - return nil, fmt.Errorf("blobGasFeeCap exceeds 256 bits: address %v", from.Hex()) - } msg := &gethCore.Message{ From: from, + To: tx.To(), + Value: value, + Data: tx.Data(), Nonce: tx.Nonce(), GasLimit: tx.Gas(), GasPrice: gasPrice, - GasFeeCap: gasFeeCap, GasTipCap: gasTipCap, - To: tx.To(), - Value: value, - Data: tx.Data(), - AccessList: tx.AccessList(), + GasFeeCap: gasFeeCap, SetCodeAuthorizations: tx.SetCodeAuthorizations(), + AccessList: tx.AccessList(), SkipNonceChecks: true, SkipTransactionChecks: true, - BlobHashes: tx.BlobHashes(), - BlobGasFeeCap: blobGasFeeCap, } + // If baseFee provided, set gasPrice to effectiveGasPrice. baseFee := proc.config.BlockContext.BaseFee if baseFee != nil { diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index 8c2d3900f31..d26f5910db1 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -620,8 +620,8 @@ func (db *StateDB) LogsForBurnAccounts() []*gethTypes.Log { var list []removedAccountWithBalance for _, addr := range sortedAddresses { - balance := db.GetBalance(addr) - if db.HasSelfDestructed(addr) && !balance.IsZero() { + hasSelfDestructed, balance := db.latestView().HasSelfDestructed(addr) + if hasSelfDestructed && !balance.IsZero() { list = append(list, removedAccountWithBalance{ address: addr, balance: balance, @@ -716,6 +716,10 @@ func (s *StateDB) AccessEvents() *gethState.AccessEvents { // recordStateAccess records state access regardless of whether the account exists. func (db *StateDB) recordStateAccess(addr gethCommon.Address) { + // Amsterdam hard-fork not activated + if db.stateReadList == nil { + return + } db.stateReadList.AddAccount(addr) } diff --git a/fvm/evm/emulator/state/stateDB_test.go b/fvm/evm/emulator/state/stateDB_test.go index b77616881f8..2231457e536 100644 --- a/fvm/evm/emulator/state/stateDB_test.go +++ b/fvm/evm/emulator/state/stateDB_test.go @@ -255,6 +255,7 @@ func TestStateDB(t *testing.T) { require.True(t, db.AddressInAccessList(sender)) require.True(t, db.AddressInAccessList(coinbase)) require.True(t, db.AddressInAccessList(dest)) + require.Nil(t, db.Finalise(true)) // no BAL unless Amsterdam is activated for _, add := range precompiles { require.True(t, db.AddressInAccessList(add)) @@ -267,6 +268,19 @@ func TestStateDB(t *testing.T) { require.True(t, slotFound) } } + + rules = gethParams.Rules{ + IsBerlin: true, + IsShanghai: true, + IsPrague: true, + IsOsaka: true, + IsAmsterdam: true, + } + + require.NoError(t, err) + db.Prepare(rules, sender, coinbase, &dest, precompiles, txAccesses) + + require.NotNil(t, db.Finalise(true)) // BAL should be present when Amsterdam is activated }) t.Run("test non-fatal error handling", func(t *testing.T) { @@ -397,6 +411,7 @@ func TestStateDB(t *testing.T) { require.Equal(t, balance1, db.GetBalance(addr1)) require.Equal(t, code1, db.GetCode(addr1)) require.NoError(t, db.Error()) + require.Len(t, db.LogsForBurnAccounts(), 0) // test 2 - account exist before with some balance // but not a contract - selfdestruct should work @@ -431,6 +446,12 @@ func TestStateDB(t *testing.T) { // now calling selfdestruct should do the job db.SelfDestruct(addr2) require.NoError(t, db.Error()) + burnLogs := db.LogsForBurnAccounts() + require.Len(t, burnLogs, 1) + ethBurnLog := burnLogs[0] + require.Equal(t, gethParams.EthBurnLogEvent, ethBurnLog.Topics[0]) + require.Equal(t, gethCommon.BytesToHash(addr2.Bytes()), ethBurnLog.Topics[1]) + commit, err = db.Commit(true) require.NoError(t, err) require.NotEmpty(t, commit) @@ -458,6 +479,12 @@ func TestStateDB(t *testing.T) { // call self destruct db.SelfDestruct(addr3) require.NoError(t, db.Error()) + burnLogs = db.LogsForBurnAccounts() + require.Len(t, burnLogs, 1) + ethBurnLog = burnLogs[0] + require.Equal(t, gethParams.EthBurnLogEvent, ethBurnLog.Topics[0]) + require.Equal(t, gethCommon.BytesToHash(addr3.Bytes()), ethBurnLog.Topics[1]) + // commit changes commit, err = db.Commit(true) require.NoError(t, err) diff --git a/fvm/evm/types/block_test.go b/fvm/evm/types/block_test.go index e203cb53885..aaf6f99281f 100644 --- a/fvm/evm/types/block_test.go +++ b/fvm/evm/types/block_test.go @@ -78,6 +78,7 @@ func Test_BlockProposal(t *testing.T) { require.NotEqual(t, gethTypes.EmptyReceiptsHash, bp.ReceiptRoot) require.Equal(t, uint64(78_948_000), bp.SlotNumber(flow.Emulator)) + require.Equal(t, uint64(78_948_000), bp.SlotNumber(flow.Previewnet)) require.Equal(t, uint64(55_944_000), bp.SlotNumber(flow.Testnet)) require.Equal(t, uint64(52_596_000), bp.SlotNumber(flow.Mainnet)) } diff --git a/fvm/evm/types/codeFinder.go b/fvm/evm/types/codeFinder.go index f8fa0714234..cc44e7100df 100644 --- a/fvm/evm/types/codeFinder.go +++ b/fvm/evm/types/codeFinder.go @@ -28,6 +28,8 @@ func ValidationErrorCode(err error) ErrorCode { return ValidationErrCodeGasLimitReached case gethCore.ErrInsufficientFundsForTransfer: return ValidationErrCodeInsufficientFundsForTransfer + case gethVM.ErrMaxInitCodeSizeExceeded: + return ValidationErrCodeMaxInitCodeSizeExceeded case gethCore.ErrInsufficientFunds: return ValidationErrCodeInsufficientFunds case gethCore.ErrIntrinsicGas: @@ -101,6 +103,8 @@ func ErrorFromCode(errorCode ErrorCode) error { return gethCore.ErrGasLimitReached case ValidationErrCodeInsufficientFundsForTransfer: return gethCore.ErrInsufficientFundsForTransfer + case ValidationErrCodeMaxInitCodeSizeExceeded: + return gethVM.ErrMaxInitCodeSizeExceeded case ValidationErrCodeInsufficientFunds: return gethCore.ErrInsufficientFunds case ValidationErrCodeIntrinsicGas: From 805f19ab5331dcb65bde14dcde53c3230c26f4de Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Fri, 15 May 2026 13:37:37 +0300 Subject: [PATCH 17/30] Address review comments --- fvm/evm/emulator/emulator.go | 16 ++++++++-------- fvm/evm/emulator/emulator_test.go | 2 +- fvm/evm/emulator/state/stateDB.go | 6 ++++++ fvm/evm/types/block.go | 4 ++++ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index e796ba49619..d0a74e893c0 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -646,14 +646,6 @@ func (proc *procedure) deployAt( return res, nil } - // update gas usage - if createDataGas > call.GasLimit { - // consume all the remaining gas (Homestead) - res.GasConsumed = call.GasLimit - res.VMError = gethVM.ErrCodeStoreOutOfGas - return res, nil - } - // check whether the max code size has been exceeded if err := gethVM.CheckMaxCodeSize(&rules, uint64(len(ret))); err != nil { // consume all the remaining gas (Homestead) @@ -670,6 +662,14 @@ func (proc *procedure) deployAt( return res, nil } + // update gas usage + if !contract.UseGas(gethVM.GasCosts{RegularGas: createDataGas}, proc.evm.Config.Tracer, gethTracing.GasChangeCallCodeStorage) { + // consume all the remaining gas (Homestead) + res.GasConsumed = call.GasLimit + res.VMError = gethVM.ErrCodeStoreOutOfGas + return res, nil + } + res.DeployedContractAddress = &call.To res.CumulativeGasUsed = proc.config.BlockTotalGasUsedSoFar + res.GasConsumed diff --git a/fvm/evm/emulator/emulator_test.go b/fvm/evm/emulator/emulator_test.go index cc287a0db3a..5e1693464e3 100644 --- a/fvm/evm/emulator/emulator_test.go +++ b/fvm/evm/emulator/emulator_test.go @@ -192,7 +192,7 @@ func TestNativeTokenBridging(t *testing.T) { RunWithNewEmulator(t, backend, rootAddr, func(env *emulator.Emulator) { RunWithNewBlockView(t, env, func(blk types.BlockView) { // Test withdraw amounts that overflow the UInt256 range - amount := gethABI.MaxUint256 + amount := new(big.Int).Lsh(big.NewInt(1), 256) call := types.NewWithdrawCall(bridgeAccount, testAccount, amount, testAccountNonce) res, err := blk.DirectCall(call) diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index d26f5910db1..93ff2902f57 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -691,6 +691,12 @@ func (db *StateDB) Prepare(rules gethParams.Rules, sender, coinbase gethCommon.A func (db *StateDB) Reset() { db.views = []*DeltaView{NewDeltaView(db.baseView)} db.cachedError = nil + // If Amsterdam is activated, we need to create a new state read list. + // This method is mainly used to reset the state between EVM.batchRun + // transactions. + if db.stateReadList != nil { + db.stateReadList = gethBAL.NewStateAccessList() + } } // Error returns the memorized database failure occurred earlier. diff --git a/fvm/evm/types/block.go b/fvm/evm/types/block.go index 256b9e83253..ea1172d9c28 100644 --- a/fvm/evm/types/block.go +++ b/fvm/evm/types/block.go @@ -222,6 +222,10 @@ func (b *BlockProposal) SlotNumber(chainID flow.ChainID) uint64 { // as slot duration we can use the block production rate, which is about 0.8 // seconds on mainnet. genesisTimestamp := GenesisBlock(chainID).Timestamp + // prevent uint64 underflow + if b.Timestamp <= genesisTimestamp { + return 0 + } return ((b.Timestamp - genesisTimestamp) * 5) / 4 } From 8b481e5ec8b72c0d4527508eff97fe60517b4f55 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Mon, 18 May 2026 21:47:42 +0300 Subject: [PATCH 18/30] Remove redundant sortedAddresses array allocation in LogsForBurnAccounts() --- fvm/evm/emulator/state/stateDB.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index 93ff2902f57..2391ac883e1 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -605,21 +605,15 @@ func (db *StateDB) Commit(finalize bool) (hash.Hash, error) { // before the Finalise. func (db *StateDB) LogsForBurnAccounts() []*gethTypes.Log { // iterate views and collect dirty addresses - addresses := make(map[gethCommon.Address]struct{}) + dirtyAddresses := make(map[gethCommon.Address]struct{}) for _, view := range db.views { for key := range view.DirtyAddresses() { - addresses[key] = struct{}{} + dirtyAddresses[key] = struct{}{} } } - // sort addresses - sortedAddresses := make([]gethCommon.Address, 0, len(addresses)) - for addr := range addresses { - sortedAddresses = append(sortedAddresses, addr) - } - var list []removedAccountWithBalance - for _, addr := range sortedAddresses { + for addr := range dirtyAddresses { hasSelfDestructed, balance := db.latestView().HasSelfDestructed(addr) if hasSelfDestructed && !balance.IsZero() { list = append(list, removedAccountWithBalance{ From 27e77cb78f530e7e35caa1a0eaab13cb9eeeb888 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Wed, 20 May 2026 12:43:07 +0300 Subject: [PATCH 19/30] Add comments in all places where we track per-tx EIP-7928 state access --- fvm/evm/emulator/state/stateDB.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index 2391ac883e1..a8577e053b5 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -67,6 +67,7 @@ func NewStateDB(ledger atree.Ledger, root flow.Address) (*StateDB, error) { // // this should also return true for self destructed accounts during the transaction execution. func (db *StateDB) Exist(addr gethCommon.Address) bool { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) exist, err := db.latestView().Exist(addr) db.handleError(err) @@ -77,6 +78,7 @@ func (db *StateDB) Exist(addr gethCommon.Address) bool { // // Empty is defined according to EIP161 (balance = nonce = code = 0). func (db *StateDB) Empty(addr gethCommon.Address) bool { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) if !db.Exist(addr) { return true @@ -88,6 +90,7 @@ func (db *StateDB) Empty(addr gethCommon.Address) bool { // Touch accesses the specific account without returning anything. func (db *StateDB) Touch(addr gethCommon.Address) { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) } @@ -109,12 +112,14 @@ func (db *StateDB) IsCreated(addr gethCommon.Address) bool { // This operation sets the 'newContract'-flag, which is required in order to // correctly handle EIP-6780 'delete-in-same-transaction' logic. func (db *StateDB) CreateContract(addr gethCommon.Address) { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) db.latestView().CreateContract(addr) } // IsNewContract returns true if address is a new contract func (db *StateDB) IsNewContract(addr gethCommon.Address) bool { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) return db.latestView().IsNewContract(addr) } @@ -124,12 +129,14 @@ func (db *StateDB) IsNewContract(addr gethCommon.Address) bool { // While this address exists for the rest of the transaction, // the balance of this account is cleared after the SelfDestruct call. func (db *StateDB) SelfDestruct(addr gethCommon.Address) { + // EIP-7928: per-transaction state access tracking + db.recordStateAccess(addr) + // Flow EVM went live with the Cancun hard-fork, so we only support the // EIP-6780 SELFDESTRUCT variation, which works only in same transaction. // EIP-6780 would only follow the self destruct steps if account is a new // contract either just created, or address had balance before but got a // contract deployed to it (in this tx). - db.recordStateAccess(addr) if db.IsNewContract(addr) { err := db.latestView().SelfDestruct(addr) db.handleError(err) @@ -138,6 +145,7 @@ func (db *StateDB) SelfDestruct(addr gethCommon.Address) { // HasSelfDestructed returns true if address is flagged with self destruct. func (db *StateDB) HasSelfDestructed(addr gethCommon.Address) bool { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) destructed, _ := db.latestView().HasSelfDestructed(addr) return destructed @@ -150,6 +158,7 @@ func (db *StateDB) SubBalance( amount *uint256.Int, reason gethTracing.BalanceChangeReason, ) uint256.Int { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) // negative amounts are not accepted. if amount.Sign() < 0 { @@ -172,6 +181,7 @@ func (db *StateDB) AddBalance( amount *uint256.Int, reason gethTracing.BalanceChangeReason, ) uint256.Int { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) // negative amounts are not accepted. if amount.Sign() < 0 { @@ -189,6 +199,7 @@ func (db *StateDB) AddBalance( // GetBalance returns the balance of the given address func (db *StateDB) GetBalance(addr gethCommon.Address) *uint256.Int { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) bal, err := db.latestView().GetBalance(addr) db.handleError(err) @@ -197,6 +208,7 @@ func (db *StateDB) GetBalance(addr gethCommon.Address) *uint256.Int { // GetNonce returns the nonce of the given address func (db *StateDB) GetNonce(addr gethCommon.Address) uint64 { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) nonce, err := db.latestView().GetNonce(addr) db.handleError(err) @@ -209,6 +221,7 @@ func (db *StateDB) SetNonce( nonce uint64, reason gethTracing.NonceChangeReason, ) { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) err := db.latestView().SetNonce(addr, nonce) db.handleError(err) @@ -216,6 +229,7 @@ func (db *StateDB) SetNonce( // GetCodeHash returns the code hash of the given address func (db *StateDB) GetCodeHash(addr gethCommon.Address) gethCommon.Hash { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) hash, err := db.latestView().GetCodeHash(addr) db.handleError(err) @@ -224,6 +238,7 @@ func (db *StateDB) GetCodeHash(addr gethCommon.Address) gethCommon.Hash { // GetCode returns the code for the given address func (db *StateDB) GetCode(addr gethCommon.Address) []byte { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) code, err := db.latestView().GetCode(addr) db.handleError(err) @@ -232,6 +247,7 @@ func (db *StateDB) GetCode(addr gethCommon.Address) []byte { // GetCodeSize returns the size of the code for the given address func (db *StateDB) GetCodeSize(addr gethCommon.Address) int { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) codeSize, err := db.latestView().GetCodeSize(addr) db.handleError(err) @@ -245,6 +261,7 @@ func (db *StateDB) SetCode( code []byte, reason gethTracing.CodeChangeReason, ) (prev []byte) { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) prev = db.GetCode(addr) err := db.latestView().SetCode(addr, code) @@ -273,6 +290,7 @@ func (db *StateDB) GetRefund() uint64 { // GetCommittedState returns the value for the given storage slot considering only the committed state and not // changes in the scope of current transaction. func (db *StateDB) GetCommittedState(addr gethCommon.Address, key gethCommon.Hash) gethCommon.Hash { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) value, err := db.baseView.GetState(types.SlotAddress{Address: addr, Key: key}) db.handleError(err) @@ -284,6 +302,7 @@ func (db *StateDB) GetStateAndCommittedState( addr gethCommon.Address, key gethCommon.Hash, ) (gethCommon.Hash, gethCommon.Hash) { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) origin := db.GetCommittedState(addr, key) value := db.GetState(addr, key) @@ -293,6 +312,7 @@ func (db *StateDB) GetStateAndCommittedState( // GetState returns the value for the given storage slot func (db *StateDB) GetState(addr gethCommon.Address, key gethCommon.Hash) gethCommon.Hash { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) state, err := db.latestView().GetState(types.SlotAddress{Address: addr, Key: key}) db.handleError(err) @@ -314,6 +334,7 @@ func (db *StateDB) GetState(addr gethCommon.Address, key gethCommon.Hash) gethCo // This endpoint is added mostly to prevent the case that an smart contract is self-destructed // and a later transaction tries to deploy a contract to the same address. func (db *StateDB) GetStorageRoot(addr gethCommon.Address) gethCommon.Hash { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) root, err := db.latestView().GetStorageRoot(addr) db.handleError(err) @@ -327,6 +348,7 @@ func (db *StateDB) SetState( key gethCommon.Hash, value gethCommon.Hash, ) gethCommon.Hash { + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) prevState, err := db.latestView().SetState(types.SlotAddress{Address: addr, Key: key}, value) db.handleError(err) From cd044d0a179c97bf11f1f0e94e1c2c27d21bb56b Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Wed, 20 May 2026 13:01:45 +0300 Subject: [PATCH 20/30] Adjust SlotNumber() calculation for each network --- fvm/evm/types/block.go | 19 +++++++++++++++---- fvm/evm/types/block_test.go | 6 +++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/fvm/evm/types/block.go b/fvm/evm/types/block.go index ea1172d9c28..cdc99364ec9 100644 --- a/fvm/evm/types/block.go +++ b/fvm/evm/types/block.go @@ -215,18 +215,29 @@ func (b *BlockProposal) ToBytes() ([]byte, error) { // Slots occur automatically every 12 seconds, and 32 slots are grouped together // into a 6.4-minute period known as an epoch. func (b *BlockProposal) SlotNumber(chainID flow.ChainID) uint64 { - // to calculate the Ethereum slot number from a block timestamp, + // To calculate the Ethereum slot number from a block timestamp, // subtract the Genesis timestamp from the block timestamp and // divide by the slot duration (12 seconds on Ethereum). // The formula is: slot = (block timestamp - genesis timestamp) / slot duration - // as slot duration we can use the block production rate, which is about 0.8 - // seconds on mainnet. + // as slot duration we can use the block production rate, on each network. + // testnet is running at 2 block / sec. + // mainnet is running at 1.25 block / sec. genesisTimestamp := GenesisBlock(chainID).Timestamp // prevent uint64 underflow if b.Timestamp <= genesisTimestamp { return 0 } - return ((b.Timestamp - genesisTimestamp) * 5) / 4 + + switch chainID { + case flow.Mainnet: + return ((b.Timestamp - genesisTimestamp) * 5) / 4 + case flow.Testnet: + return ((b.Timestamp - genesisTimestamp) * 2) + default: + // for all other networks (emulator/previewnet etc), + // default to a slot duration of 1 second + return b.Timestamp - genesisTimestamp + } } // NewBlockProposalFromBytes constructs a new block proposal from encoded data diff --git a/fvm/evm/types/block_test.go b/fvm/evm/types/block_test.go index aaf6f99281f..70dc705450f 100644 --- a/fvm/evm/types/block_test.go +++ b/fvm/evm/types/block_test.go @@ -77,9 +77,9 @@ func Test_BlockProposal(t *testing.T) { bp.PopulateRoots() require.NotEqual(t, gethTypes.EmptyReceiptsHash, bp.ReceiptRoot) - require.Equal(t, uint64(78_948_000), bp.SlotNumber(flow.Emulator)) - require.Equal(t, uint64(78_948_000), bp.SlotNumber(flow.Previewnet)) - require.Equal(t, uint64(55_944_000), bp.SlotNumber(flow.Testnet)) + require.Equal(t, uint64(63_158_400), bp.SlotNumber(flow.Emulator)) + require.Equal(t, uint64(63_158_400), bp.SlotNumber(flow.Previewnet)) + require.Equal(t, uint64(89_510_400), bp.SlotNumber(flow.Testnet)) require.Equal(t, uint64(52_596_000), bp.SlotNumber(flow.Mainnet)) } From 26223a833a0d69d43f10bf7fd34b8e374c6efee6 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Thu, 21 May 2026 14:35:27 +0300 Subject: [PATCH 21/30] Move SlotNumber() function to Block type from BlockProposal --- fvm/evm/types/block.go | 62 ++++++++++++++++++------------------- fvm/evm/types/block_test.go | 26 +++++++++++----- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/fvm/evm/types/block.go b/fvm/evm/types/block.go index cdc99364ec9..2e7f0f1e153 100644 --- a/fvm/evm/types/block.go +++ b/fvm/evm/types/block.go @@ -62,6 +62,37 @@ func (b *Block) Hash() (gethCommon.Hash, error) { return gethCrypto.Keccak256Hash(data), err } +// SlotNumber returns the corresponding slot number for the current block. +// In Ethereum, a slot is a 12-second time period where a validator is assigned +// to propose a new block, functioning as the network's "heartbeat" in PoS. +// Slots occur automatically every 12 seconds, and 32 slots are grouped together +// into a 6.4-minute period known as an epoch. +func (b *Block) SlotNumber(chainID flow.ChainID) uint64 { + // To calculate the Ethereum slot number from a block timestamp, + // subtract the Genesis timestamp from the block timestamp and + // divide by the slot duration (12 seconds on Ethereum). + // The formula is: slot = (block timestamp - genesis timestamp) / slot duration + // as slot duration we can use the block production rate, on each network. + // testnet is running at 2 block / sec. + // mainnet is running at 1.25 block / sec. + genesisTimestamp := GenesisTimestamp(chainID) + // prevent uint64 underflow + if b.Timestamp <= genesisTimestamp { + return 0 + } + + switch chainID { + case flow.Mainnet: + return ((b.Timestamp - genesisTimestamp) * 5) / 4 + case flow.Testnet: + return ((b.Timestamp - genesisTimestamp) * 2) + default: + // for all other networks (emulator/previewnet etc), + // default to a slot duration of 1 second + return b.Timestamp - genesisTimestamp + } +} + // NewBlock constructs a new block func NewBlock( parentBlockHash gethCommon.Hash, @@ -209,37 +240,6 @@ func (b *BlockProposal) ToBytes() ([]byte, error) { return gethRLP.EncodeToBytes(b) } -// SlotNumber returns the corresponding slot number for the current block. -// In Ethereum, a slot is a 12-second time period where a validator is assigned -// to propose a new block, functioning as the network's "heartbeat" in PoS. -// Slots occur automatically every 12 seconds, and 32 slots are grouped together -// into a 6.4-minute period known as an epoch. -func (b *BlockProposal) SlotNumber(chainID flow.ChainID) uint64 { - // To calculate the Ethereum slot number from a block timestamp, - // subtract the Genesis timestamp from the block timestamp and - // divide by the slot duration (12 seconds on Ethereum). - // The formula is: slot = (block timestamp - genesis timestamp) / slot duration - // as slot duration we can use the block production rate, on each network. - // testnet is running at 2 block / sec. - // mainnet is running at 1.25 block / sec. - genesisTimestamp := GenesisBlock(chainID).Timestamp - // prevent uint64 underflow - if b.Timestamp <= genesisTimestamp { - return 0 - } - - switch chainID { - case flow.Mainnet: - return ((b.Timestamp - genesisTimestamp) * 5) / 4 - case flow.Testnet: - return ((b.Timestamp - genesisTimestamp) * 2) - default: - // for all other networks (emulator/previewnet etc), - // default to a slot duration of 1 second - return b.Timestamp - genesisTimestamp - } -} - // NewBlockProposalFromBytes constructs a new block proposal from encoded data func NewBlockProposalFromBytes(encoded []byte) (*BlockProposal, error) { res := &BlockProposal{} diff --git a/fvm/evm/types/block_test.go b/fvm/evm/types/block_test.go index 70dc705450f..126677e3a36 100644 --- a/fvm/evm/types/block_test.go +++ b/fvm/evm/types/block_test.go @@ -52,9 +52,26 @@ func Test_BlockHash(t *testing.T) { assert.NotEqual(t, h1, h2) } -func Test_BlockProposal(t *testing.T) { +func Test_SlotNumber(t *testing.T) { timestamp := uint64(time.Date(2026, time.January, 1, 0, 0, 0, 0, time.UTC).Unix()) - bp := NewBlockProposal(gethCommon.Hash{1}, 1, timestamp, nil, gethCommon.Hash{1, 2, 3}) + b := Block{ + ParentBlockHash: gethCommon.HexToHash("0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), + Height: 1, + TotalSupply: big.NewInt(1000), + ReceiptRoot: gethCommon.Hash{0x2, 0x3, 0x4}, + TotalGasUsed: 135, + TransactionHashRoot: gethCommon.Hash{0x5, 0x6, 0x7}, + Timestamp: timestamp, + } + + require.Equal(t, uint64(63_158_400), b.SlotNumber(flow.Emulator)) + require.Equal(t, uint64(63_158_400), b.SlotNumber(flow.Previewnet)) + require.Equal(t, uint64(89_510_400), b.SlotNumber(flow.Testnet)) + require.Equal(t, uint64(52_596_000), b.SlotNumber(flow.Mainnet)) +} + +func Test_BlockProposal(t *testing.T) { + bp := NewBlockProposal(gethCommon.Hash{1}, 1, 0, nil, gethCommon.Hash{1, 2, 3}) bp.AppendTransaction(nil) require.Empty(t, bp.TxHashes) @@ -76,11 +93,6 @@ func Test_BlockProposal(t *testing.T) { bp.PopulateRoots() require.NotEqual(t, gethTypes.EmptyReceiptsHash, bp.ReceiptRoot) - - require.Equal(t, uint64(63_158_400), bp.SlotNumber(flow.Emulator)) - require.Equal(t, uint64(63_158_400), bp.SlotNumber(flow.Previewnet)) - require.Equal(t, uint64(89_510_400), bp.SlotNumber(flow.Testnet)) - require.Equal(t, uint64(52_596_000), bp.SlotNumber(flow.Mainnet)) } func Test_DecodeHistoricBlocks(t *testing.T) { From 80e48fe845e8cf40bef619d5830f6841190c982a Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Thu, 21 May 2026 15:49:40 +0300 Subject: [PATCH 22/30] Address review comments --- fvm/evm/emulator/emulator.go | 50 ++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index d0a74e893c0..95be37dfc7c 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -311,26 +311,58 @@ func (bl *BlockView) DryRunTransaction( return nil, err } + res := types.Result{ + TxType: tx.Type(), + TxHash: tx.Hash(), + } + value, overflow := uint256.FromBig(tx.Value()) if overflow { - return nil, fmt.Errorf("value exceeds 256 bits: address %v", from.Hex()) + res.SetValidationError( + fmt.Errorf("value exceeds 256 bits: address %v", from.Hex()), + ) + return &res, nil } + gasPrice, overflow := uint256.FromBig(tx.GasPrice()) if overflow { - return nil, fmt.Errorf("%w: address %v, maxFeePerGas bit length: %d", gethCore.ErrFeeCapVeryHigh, - from.Hex(), tx.GasPrice().BitLen()) + res.SetValidationError( + fmt.Errorf( + "%w: address %v, maxFeePerGas bit length: %d", + gethCore.ErrFeeCapVeryHigh, + from.Hex(), + tx.GasPrice().BitLen(), + ), + ) + return &res, nil } + txGasFeeCap := tx.GasFeeCap() gasFeeCap, overflow := uint256.FromBig(txGasFeeCap) if overflow { - return nil, fmt.Errorf("%w: address %v, maxFeePerGas bit length: %d", gethCore.ErrFeeCapVeryHigh, - from.Hex(), tx.GasFeeCap().BitLen()) + res.SetValidationError( + fmt.Errorf( + "%w: address %v, maxFeePerGas bit length: %d", + gethCore.ErrFeeCapVeryHigh, + from.Hex(), + tx.GasFeeCap().BitLen(), + ), + ) + return &res, nil } + txGasTipCap := tx.GasTipCap() gasTipCap, overflow := uint256.FromBig(txGasTipCap) if overflow { - return nil, fmt.Errorf("%w: address %v, maxPriorityFeePerGas bit length: %d", gethCore.ErrTipVeryHigh, - from.Hex(), tx.GasTipCap().BitLen()) + res.SetValidationError( + fmt.Errorf( + "%w: address %v, maxPriorityFeePerGas bit length: %d", + gethCore.ErrTipVeryHigh, + from.Hex(), + tx.GasTipCap().BitLen(), + ), + ) + return &res, nil } msg := &gethCore.Message{ @@ -732,7 +764,9 @@ func (proc *procedure) run( // Set gas pool based on block gas limit // if the block gas limit is set to anything than max // we need to update this code. - gasPool := gethCore.NewGasPool(proc.config.BlockContext.GasLimit) + gasPool := gethCore.NewGasPool( + proc.config.BlockContext.GasLimit - proc.config.BlockTotalGasUsedSoFar, + ) // transit the state execResult, err := gethCore.ApplyMessage(proc.evm, msg, gasPool) From 48f911a433656eccd265c9f3144038f9d4566188 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Fri, 22 May 2026 10:02:05 +0300 Subject: [PATCH 23/30] Proper EmptyCodeHash for special EVM system addresses --- fvm/evm/emulator/state/base.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fvm/evm/emulator/state/base.go b/fvm/evm/emulator/state/base.go index 3ae602e9c00..7871764b977 100644 --- a/fvm/evm/emulator/state/base.go +++ b/fvm/evm/emulator/state/base.go @@ -250,6 +250,14 @@ func (v *BaseView) CreateAccount( if err != nil { return err } + } else { + // all codeless accounts should have the following `EmptyCodeHash` + // edge case for special system addresses, such as: + // - 0x0000000000000000000000020000000000000000 + // - 0x0000000000000000000000030000000000000000 + // which are used for COA deployments and gas fees collection. + // This is particularly useful for certain built-in tracers. + codeHash = gethTypes.EmptyCodeHash } // create a new account and store it From f4130e529b40fe778f9f8623339bd4feeeeb27b5 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Mon, 22 Jun 2026 14:04:18 +0300 Subject: [PATCH 24/30] Bump ethereum/go-ethereum dependency to v1.17.4 --- go.mod | 33 ++++++++++++---------- go.sum | 65 ++++++++++++++++++++++++------------------- insecure/go.mod | 33 ++++++++++++---------- insecure/go.sum | 65 ++++++++++++++++++++++++------------------- integration/go.mod | 33 ++++++++++++---------- integration/go.sum | 69 +++++++++++++++++++++++++--------------------- 6 files changed, 164 insertions(+), 134 deletions(-) diff --git a/go.mod b/go.mod index 6e5b04d7ddc..29894372028 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/dgraph-io/badger/v2 v2.2007.4 github.com/ef-ds/deque v1.0.4 - github.com/ethereum/go-ethereum v1.17.3 + github.com/ethereum/go-ethereum v1.17.4 github.com/fxamacker/cbor/v2 v2.9.2-0.20260331174317-a78e92ec038e github.com/gammazero/workerpool v1.1.3 github.com/gogo/protobuf v1.3.2 @@ -27,7 +27,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 github.com/hashicorp/go-multierror v1.1.1 github.com/improbable-eng/grpc-web v0.15.0 github.com/ipfs/go-block-format v0.2.0 @@ -69,18 +69,18 @@ require ( github.com/stretchr/testify v1.11.1 github.com/vmihailenco/msgpack/v4 v4.3.11 go.opentelemetry.io/otel v1.43.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 go.opentelemetry.io/otel/sdk v1.43.0 go.opentelemetry.io/otel/trace v1.43.0 go.uber.org/atomic v1.11.0 go.uber.org/multierr v1.11.0 - golang.org/x/crypto v0.47.0 + golang.org/x/crypto v0.48.0 golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 golang.org/x/sync v0.19.0 golang.org/x/sys v0.42.0 - golang.org/x/text v0.33.0 + golang.org/x/text v0.34.0 golang.org/x/time v0.14.0 - golang.org/x/tools v0.40.0 + golang.org/x/tools v0.41.0 google.golang.org/api v0.267.0 google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 google.golang.org/grpc v1.79.3 @@ -114,7 +114,7 @@ require ( github.com/sony/gobreaker v0.5.0 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da - google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 + google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 google.golang.org/genproto/googleapis/bytestream v0.0.0-20260203192932-546029d2fa20 gopkg.in/yaml.v2 v2.4.0 ) @@ -128,8 +128,12 @@ require ( github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect github.com/ferranbt/fastssz v0.1.4 // indirect + github.com/fjl/jsonw v0.1.0 // indirect + github.com/pion/dtls/v3 v3.1.2 // indirect + github.com/pion/stun/v3 v3.1.2 // indirect + github.com/pion/transport/v4 v4.0.1 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc // indirect + golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect ) require ( @@ -286,7 +290,7 @@ require ( github.com/pion/dtls/v2 v2.2.12 // indirect github.com/pion/ice/v2 v2.3.37 // indirect github.com/pion/interceptor v0.1.37 // indirect - github.com/pion/logging v0.2.2 // indirect + github.com/pion/logging v0.2.4 // indirect github.com/pion/mdns v0.0.12 // indirect github.com/pion/randutil v0.1.0 // indirect github.com/pion/rtcp v1.2.15 // indirect @@ -295,7 +299,6 @@ require ( github.com/pion/sdp/v3 v3.0.9 // indirect github.com/pion/srtp/v2 v2.0.20 // indirect github.com/pion/stun v0.6.1 // indirect - github.com/pion/stun/v2 v2.0.0 // indirect github.com/pion/transport/v2 v2.2.10 // indirect github.com/pion/transport/v3 v3.0.7 // indirect github.com/pion/turn/v2 v2.1.6 // indirect @@ -339,7 +342,7 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect @@ -347,13 +350,13 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/mock v0.5.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/mod v0.31.0 // indirect - golang.org/x/net v0.49.0 // indirect + golang.org/x/mod v0.32.0 // indirect + golang.org/x/net v0.50.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect - golang.org/x/term v0.39.0 // indirect + golang.org/x/term v0.40.0 // indirect gonum.org/v1/gonum v0.16.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.4.1 // indirect diff --git a/go.sum b/go.sum index 09514cdc8ec..2c62fbf9667 100644 --- a/go.sum +++ b/go.sum @@ -357,8 +357,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.3 h1:Ev/sQHH+UdKZHWjuVzhu2pxhi/sXaPZl23Q+Q5LDd4Q= -github.com/ethereum/go-ethereum v1.17.3/go.mod h1:f2EhRwqewIZkGoQekywI2Y2RZAMTSavLNkD9qItFy1A= +github.com/ethereum/go-ethereum v1.17.4 h1:uA4q+qiLp7QImBsjdRbINu8iX6OEVmj4DPc5/E5Fsxc= +github.com/ethereum/go-ethereum v1.17.4/go.mod h1:qMdgwqqRAen+aT8P7KKQKi0Qt6RzG4cfejVAbCpJgqA= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= @@ -368,6 +368,8 @@ github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeD github.com/ferranbt/fastssz v0.1.4/go.mod h1:Ea3+oeoRGGLGm5shYAeDgu6PGUlcvQhE2fILyD9+tGg= github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9gd6MPfXbKVU= github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= +github.com/fjl/jsonw v0.1.0 h1:V3MyR79fjLpn/+bMgvegdGUIhoJOzjmqWcKDgcOmY1I= +github.com/fjl/jsonw v0.1.0/go.mod h1:2KMLevM6FXEJnfhtk7naXu9vZdVfOma1GlnGdPRlumU= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= @@ -618,8 +620,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpg github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1021,12 +1023,15 @@ github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oL github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= +github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= github.com/pion/ice/v2 v2.3.37 h1:ObIdaNDu1rCo7hObhs34YSBcO7fjslJMZV0ux+uZWh0= github.com/pion/ice/v2 v2.3.37/go.mod h1:mBF7lnigdqgtB+YHkaY/Y6s6tsyRyo4u4rPGRuOjUBQ= github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVorwI= github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= +github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8= github.com/pion/mdns v0.0.12/go.mod h1:VExJjv8to/6Wqm1FXK+Ii/Z9tsVk/F5sD/N70cnYFbk= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= @@ -1045,8 +1050,8 @@ github.com/pion/srtp/v2 v2.0.20 h1:HNNny4s+OUmG280ETrCdgFndp4ufx3/uy85EawYEhTk= github.com/pion/srtp/v2 v2.0.20/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= -github.com/pion/stun/v2 v2.0.0 h1:A5+wXKLAypxQri59+tmQKVs7+l6mMM+3d+eER9ifRU0= -github.com/pion/stun/v2 v2.0.0/go.mod h1:22qRSh08fSEttYUmJZGlriq9+03jtVmXNODgLccj8GQ= +github.com/pion/stun/v3 v3.1.2 h1:86IhD8wFn6IDW4b1/0QzoQS+f5PeA8OHHRn8UZW5ErY= +github.com/pion/stun/v3 v3.1.2/go.mod h1:H7gDic7nNwlUL05pbs6T1dtaBehh/KjupxfWw3ZI7cA= github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= github.com/pion/transport/v2 v2.2.3/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= @@ -1055,6 +1060,8 @@ github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= +github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= +github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= github.com/pion/turn/v2 v2.1.6 h1:Xr2niVsiPTB0FPtt+yAWKFUkU1eotQbGgpTIld4x1Gc= github.com/pion/turn/v2 v2.1.6/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= @@ -1343,10 +1350,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6h go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7jlYTzQKE+pnx/iNywFvTbuuI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= @@ -1417,8 +1424,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1460,8 +1467,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1527,8 +1534,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1675,8 +1682,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc h1:bH6xUXay0AIFMElXG2rQ4uiE+7ncwtiOdPfYK1NK2XA= -golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= +golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= +golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -1684,8 +1691,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1700,8 +1707,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1772,8 +1779,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= -golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= +golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= +golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1923,12 +1930,12 @@ google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= google.golang.org/genproto/googleapis/bytestream v0.0.0-20260203192932-546029d2fa20 h1:zQTtWukWCqGTV6Pt60SqvPGnEi2CE3PeeIRlu4SYgAc= google.golang.org/genproto/googleapis/bytestream v0.0.0-20260203192932-546029d2fa20/go.mod h1:Tej9lWiwVvQJP+b43pjJIsr/3mZycXWCIyoiXmbFf40= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 h1:Jr5R2J6F6qWyzINc+4AM8t5pfUz6beZpHp678GNrMbE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 h1:mWPCjDEyshlQYzBpMNHaEof6UX1PmHcaUODUywQ0uac= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= diff --git a/insecure/go.mod b/insecure/go.mod index cb76df92ca5..09d6f09501d 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -96,10 +96,11 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect - github.com/ethereum/go-ethereum v1.17.3 // indirect + github.com/ethereum/go-ethereum v1.17.4 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect + github.com/fjl/jsonw v0.1.0 // indirect github.com/flynn/noise v1.1.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect @@ -136,7 +137,7 @@ require ( github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect @@ -236,9 +237,10 @@ require ( github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pion/datachannel v1.5.10 // indirect github.com/pion/dtls/v2 v2.2.12 // indirect + github.com/pion/dtls/v3 v3.1.2 // indirect github.com/pion/ice/v2 v2.3.37 // indirect github.com/pion/interceptor v0.1.37 // indirect - github.com/pion/logging v0.2.2 // indirect + github.com/pion/logging v0.2.4 // indirect github.com/pion/mdns v0.0.12 // indirect github.com/pion/randutil v0.1.0 // indirect github.com/pion/rtcp v1.2.15 // indirect @@ -247,9 +249,10 @@ require ( github.com/pion/sdp/v3 v3.0.9 // indirect github.com/pion/srtp/v2 v2.0.20 // indirect github.com/pion/stun v0.6.1 // indirect - github.com/pion/stun/v2 v2.0.0 // indirect + github.com/pion/stun/v3 v3.1.2 // indirect github.com/pion/transport/v2 v2.2.10 // indirect github.com/pion/transport/v3 v3.0.7 // indirect + github.com/pion/transport/v4 v4.0.1 // indirect github.com/pion/turn/v2 v2.1.6 // indirect github.com/pion/webrtc/v3 v3.3.5 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -303,8 +306,8 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect @@ -316,25 +319,25 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.47.0 // indirect + golang.org/x/crypto v0.48.0 // indirect golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect - golang.org/x/mod v0.31.0 // indirect - golang.org/x/net v0.49.0 // indirect + golang.org/x/mod v0.32.0 // indirect + golang.org/x/net v0.50.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.42.0 // indirect - golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc // indirect - golang.org/x/term v0.39.0 // indirect - golang.org/x/text v0.33.0 // indirect + golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect + golang.org/x/term v0.40.0 // indirect + golang.org/x/text v0.34.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.40.0 // indirect + golang.org/x/tools v0.41.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gonum.org/v1/gonum v0.16.0 // indirect google.golang.org/api v0.267.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index 5f8eb7b8581..bfee733c3ca 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -328,8 +328,8 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.3 h1:Ev/sQHH+UdKZHWjuVzhu2pxhi/sXaPZl23Q+Q5LDd4Q= -github.com/ethereum/go-ethereum v1.17.3/go.mod h1:f2EhRwqewIZkGoQekywI2Y2RZAMTSavLNkD9qItFy1A= +github.com/ethereum/go-ethereum v1.17.4 h1:uA4q+qiLp7QImBsjdRbINu8iX6OEVmj4DPc5/E5Fsxc= +github.com/ethereum/go-ethereum v1.17.4/go.mod h1:qMdgwqqRAen+aT8P7KKQKi0Qt6RzG4cfejVAbCpJgqA= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -337,6 +337,8 @@ github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeD github.com/ferranbt/fastssz v0.1.4/go.mod h1:Ea3+oeoRGGLGm5shYAeDgu6PGUlcvQhE2fILyD9+tGg= github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9gd6MPfXbKVU= github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= +github.com/fjl/jsonw v0.1.0 h1:V3MyR79fjLpn/+bMgvegdGUIhoJOzjmqWcKDgcOmY1I= +github.com/fjl/jsonw v0.1.0/go.mod h1:2KMLevM6FXEJnfhtk7naXu9vZdVfOma1GlnGdPRlumU= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= @@ -571,8 +573,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -969,12 +971,15 @@ github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oL github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= +github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= github.com/pion/ice/v2 v2.3.37 h1:ObIdaNDu1rCo7hObhs34YSBcO7fjslJMZV0ux+uZWh0= github.com/pion/ice/v2 v2.3.37/go.mod h1:mBF7lnigdqgtB+YHkaY/Y6s6tsyRyo4u4rPGRuOjUBQ= github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVorwI= github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= +github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8= github.com/pion/mdns v0.0.12/go.mod h1:VExJjv8to/6Wqm1FXK+Ii/Z9tsVk/F5sD/N70cnYFbk= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= @@ -993,8 +998,8 @@ github.com/pion/srtp/v2 v2.0.20 h1:HNNny4s+OUmG280ETrCdgFndp4ufx3/uy85EawYEhTk= github.com/pion/srtp/v2 v2.0.20/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= -github.com/pion/stun/v2 v2.0.0 h1:A5+wXKLAypxQri59+tmQKVs7+l6mMM+3d+eER9ifRU0= -github.com/pion/stun/v2 v2.0.0/go.mod h1:22qRSh08fSEttYUmJZGlriq9+03jtVmXNODgLccj8GQ= +github.com/pion/stun/v3 v3.1.2 h1:86IhD8wFn6IDW4b1/0QzoQS+f5PeA8OHHRn8UZW5ErY= +github.com/pion/stun/v3 v3.1.2/go.mod h1:H7gDic7nNwlUL05pbs6T1dtaBehh/KjupxfWw3ZI7cA= github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= github.com/pion/transport/v2 v2.2.3/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= @@ -1003,6 +1008,8 @@ github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= +github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= +github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= github.com/pion/turn/v2 v2.1.6 h1:Xr2niVsiPTB0FPtt+yAWKFUkU1eotQbGgpTIld4x1Gc= github.com/pion/turn/v2 v2.1.6/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= @@ -1286,10 +1293,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6h go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7jlYTzQKE+pnx/iNywFvTbuuI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= @@ -1357,8 +1364,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1399,8 +1406,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1459,8 +1466,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1577,8 +1584,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc h1:bH6xUXay0AIFMElXG2rQ4uiE+7ncwtiOdPfYK1NK2XA= -golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= +golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= +golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -1586,8 +1593,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1601,8 +1608,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1669,8 +1676,8 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= -golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= +golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= +golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1760,12 +1767,12 @@ google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= google.golang.org/genproto/googleapis/bytestream v0.0.0-20260203192932-546029d2fa20 h1:zQTtWukWCqGTV6Pt60SqvPGnEi2CE3PeeIRlu4SYgAc= google.golang.org/genproto/googleapis/bytestream v0.0.0-20260203192932-546029d2fa20/go.mod h1:Tej9lWiwVvQJP+b43pjJIsr/3mZycXWCIyoiXmbFf40= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 h1:Jr5R2J6F6qWyzINc+4AM8t5pfUz6beZpHp678GNrMbE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 h1:mWPCjDEyshlQYzBpMNHaEof6UX1PmHcaUODUywQ0uac= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= diff --git a/integration/go.mod b/integration/go.mod index 44377ba8104..04044a18b55 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -11,7 +11,7 @@ require ( github.com/coreos/go-semver v0.3.0 github.com/docker/docker v28.5.2+incompatible github.com/docker/go-connections v0.5.0 - github.com/ethereum/go-ethereum v1.17.3 + github.com/ethereum/go-ethereum v1.17.4 github.com/go-git/go-git/v5 v5.11.0 github.com/go-yaml/yaml v2.1.0+incompatible github.com/gorilla/websocket v1.5.3 @@ -138,6 +138,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect + github.com/fjl/jsonw v0.1.0 // indirect github.com/flynn/noise v1.1.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect @@ -179,7 +180,7 @@ require ( github.com/gorilla/mux v1.8.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect @@ -281,9 +282,10 @@ require ( github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pion/datachannel v1.5.10 // indirect github.com/pion/dtls/v2 v2.2.12 // indirect + github.com/pion/dtls/v3 v3.1.2 // indirect github.com/pion/ice/v2 v2.3.37 // indirect github.com/pion/interceptor v0.1.37 // indirect - github.com/pion/logging v0.2.2 // indirect + github.com/pion/logging v0.2.4 // indirect github.com/pion/mdns v0.0.12 // indirect github.com/pion/randutil v0.1.0 // indirect github.com/pion/rtcp v1.2.15 // indirect @@ -292,9 +294,10 @@ require ( github.com/pion/sdp/v3 v3.0.9 // indirect github.com/pion/srtp/v2 v2.0.20 // indirect github.com/pion/stun v0.6.1 // indirect - github.com/pion/stun/v2 v2.0.0 // indirect + github.com/pion/stun/v3 v3.1.2 // indirect github.com/pion/transport/v2 v2.2.10 // indirect github.com/pion/transport/v3 v3.0.7 // indirect + github.com/pion/transport/v4 v4.0.1 // indirect github.com/pion/turn/v2 v2.1.6 // indirect github.com/pion/webrtc/v3 v3.3.5 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect @@ -352,8 +355,8 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect @@ -364,23 +367,23 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.47.0 // indirect - golang.org/x/mod v0.31.0 // indirect - golang.org/x/net v0.49.0 // indirect + golang.org/x/crypto v0.48.0 // indirect + golang.org/x/mod v0.32.0 // indirect + golang.org/x/net v0.50.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sys v0.42.0 // indirect - golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc // indirect - golang.org/x/term v0.39.0 // indirect - golang.org/x/text v0.33.0 // indirect + golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect + golang.org/x/term v0.40.0 // indirect + golang.org/x/text v0.34.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.40.0 // indirect + golang.org/x/tools v0.41.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gonum.org/v1/gonum v0.16.0 // indirect google.golang.org/api v0.267.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff --git a/integration/go.sum b/integration/go.sum index bac39333783..388986a3dee 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -292,14 +292,16 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.3 h1:Ev/sQHH+UdKZHWjuVzhu2pxhi/sXaPZl23Q+Q5LDd4Q= -github.com/ethereum/go-ethereum v1.17.3/go.mod h1:f2EhRwqewIZkGoQekywI2Y2RZAMTSavLNkD9qItFy1A= +github.com/ethereum/go-ethereum v1.17.4 h1:uA4q+qiLp7QImBsjdRbINu8iX6OEVmj4DPc5/E5Fsxc= +github.com/ethereum/go-ethereum v1.17.4/go.mod h1:qMdgwqqRAen+aT8P7KKQKi0Qt6RzG4cfejVAbCpJgqA= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY= github.com/ferranbt/fastssz v0.1.4/go.mod h1:Ea3+oeoRGGLGm5shYAeDgu6PGUlcvQhE2fILyD9+tGg= github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9gd6MPfXbKVU= github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= +github.com/fjl/jsonw v0.1.0 h1:V3MyR79fjLpn/+bMgvegdGUIhoJOzjmqWcKDgcOmY1I= +github.com/fjl/jsonw v0.1.0/go.mod h1:2KMLevM6FXEJnfhtk7naXu9vZdVfOma1GlnGdPRlumU= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= @@ -481,8 +483,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -817,12 +819,15 @@ github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oL github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= +github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= github.com/pion/ice/v2 v2.3.37 h1:ObIdaNDu1rCo7hObhs34YSBcO7fjslJMZV0ux+uZWh0= github.com/pion/ice/v2 v2.3.37/go.mod h1:mBF7lnigdqgtB+YHkaY/Y6s6tsyRyo4u4rPGRuOjUBQ= github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVorwI= github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= +github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8= github.com/pion/mdns v0.0.12/go.mod h1:VExJjv8to/6Wqm1FXK+Ii/Z9tsVk/F5sD/N70cnYFbk= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= @@ -841,8 +846,8 @@ github.com/pion/srtp/v2 v2.0.20 h1:HNNny4s+OUmG280ETrCdgFndp4ufx3/uy85EawYEhTk= github.com/pion/srtp/v2 v2.0.20/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= -github.com/pion/stun/v2 v2.0.0 h1:A5+wXKLAypxQri59+tmQKVs7+l6mMM+3d+eER9ifRU0= -github.com/pion/stun/v2 v2.0.0/go.mod h1:22qRSh08fSEttYUmJZGlriq9+03jtVmXNODgLccj8GQ= +github.com/pion/stun/v3 v3.1.2 h1:86IhD8wFn6IDW4b1/0QzoQS+f5PeA8OHHRn8UZW5ErY= +github.com/pion/stun/v3 v3.1.2/go.mod h1:H7gDic7nNwlUL05pbs6T1dtaBehh/KjupxfWw3ZI7cA= github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= github.com/pion/transport/v2 v2.2.3/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= @@ -851,6 +856,8 @@ github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= +github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= +github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= github.com/pion/turn/v2 v2.1.6 h1:Xr2niVsiPTB0FPtt+yAWKFUkU1eotQbGgpTIld4x1Gc= github.com/pion/turn/v2 v2.1.6/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= @@ -1097,12 +1104,12 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7jlYTzQKE+pnx/iNywFvTbuuI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.41.0 h1:inYW9ZhgqiDqh6BioM7DVHHzEGVq76Db5897WLGZ5Go= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.41.0/go.mod h1:Izur+Wt8gClgMJqO/cZ8wdeeMryJ/xxiOVgFSSfpDTY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= @@ -1162,8 +1169,8 @@ golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo= golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= @@ -1180,8 +1187,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1217,8 +1224,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1289,8 +1296,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc h1:bH6xUXay0AIFMElXG2rQ4uiE+7ncwtiOdPfYK1NK2XA= -golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= +golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= +golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -1300,8 +1307,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -1315,8 +1322,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1343,8 +1350,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= -golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= +golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= +golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1374,12 +1381,12 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= google.golang.org/genproto/googleapis/bytestream v0.0.0-20260203192932-546029d2fa20 h1:zQTtWukWCqGTV6Pt60SqvPGnEi2CE3PeeIRlu4SYgAc= google.golang.org/genproto/googleapis/bytestream v0.0.0-20260203192932-546029d2fa20/go.mod h1:Tej9lWiwVvQJP+b43pjJIsr/3mZycXWCIyoiXmbFf40= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 h1:Jr5R2J6F6qWyzINc+4AM8t5pfUz6beZpHp678GNrMbE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 h1:mWPCjDEyshlQYzBpMNHaEof6UX1PmHcaUODUywQ0uac= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= From b3fb1f9144c2e3b2e401bac8bd5b903216db2485 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Mon, 22 Jun 2026 14:09:48 +0300 Subject: [PATCH 25/30] Implement EIP-8037 for state creation gas cost increase --- fvm/bootstrap.go | 2 +- fvm/evm/emulator/config.go | 1 + fvm/evm/emulator/emulator.go | 172 +++++++++++++---- fvm/evm/emulator/emulator_test.go | 18 +- fvm/evm/evm_test.go | 247 ++++++++++++++++++++----- fvm/evm/handler/coa/coa.go | 2 +- fvm/evm/handler/handler_test.go | 2 +- fvm/evm/offchain/sync/replayer_test.go | 4 +- fvm/evm/testutils/contract.go | 10 +- fvm/evm/types/call.go | 8 +- 10 files changed, 364 insertions(+), 102 deletions(-) diff --git a/fvm/bootstrap.go b/fvm/bootstrap.go index 76b12a02797..a31984ec87a 100644 --- a/fvm/bootstrap.go +++ b/fvm/bootstrap.go @@ -1123,7 +1123,7 @@ func (b *bootstrapExecutor) setupVMBridge(serviceAddress flow.Address, env *temp // Arbitrary high gas limit that can be used for all the // EVM transactions to ensure none of them run out of gas - gasLimit := 15000000 + gasLimit := 16_777_216 deploymentValue := 0.0 // Retrieve the factory bytecode from the JSON args diff --git a/fvm/evm/emulator/config.go b/fvm/evm/emulator/config.go index f88e383dfe7..b8aeecfcb2b 100644 --- a/fvm/evm/emulator/config.go +++ b/fvm/evm/emulator/config.go @@ -154,6 +154,7 @@ func defaultConfig() *Config { GetHash: func(n uint64) gethCommon.Hash { return gethCommon.Hash{} }, + CostPerStateByte: gethParams.CostPerStateByte, }, PCTracker: NewCallTracker(), } diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index 95be37dfc7c..d7d37916beb 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -3,6 +3,7 @@ package emulator import ( "errors" "fmt" + "math" "math/big" gethCommon "github.com/ethereum/go-ethereum/common" @@ -600,7 +601,7 @@ func (proc *procedure) deployAt( return res, nil } - // increment the nonce for the caller + // increment the caller's nonce after passing all validations nonce := proc.state.GetNonce(caller) if nonce+1 < nonce { res.SetValidationError(gethVM.ErrNonceUintOverflow) @@ -612,6 +613,15 @@ func (proc *procedure) deployAt( gethTracing.NonceChangeContractCreator, ) + // After Amsterdam we limit the regular gas to 16M, the data gas to the transaction limit + limit := call.GasLimit + if proc.config.ChainRules().IsAmsterdam { + limit = min(call.GasLimit, gethParams.MaxTxGas) + } + gasBudget := gethVM.NewGasBudget(limit, call.GasLimit-limit) + + reservoir := gasBudget.StateGas + addr := call.To.ToCommon() // update access list (Berlin) proc.state.AddAddressToAccessList(addr) @@ -621,12 +631,21 @@ func (proc *procedure) deployAt( if proc.state.GetNonce(addr) != 0 || (contractHash != (gethCommon.Hash{}) && contractHash != gethTypes.EmptyCodeHash) { res.VMError = gethVM.ErrContractAddressCollision + halt := gasBudget.ExitHalt(reservoir) + if proc.evm.Config.Tracer.HasGasHook() { + proc.evm.Config.Tracer.EmitGasChange( + gasBudget.AsTracing(), + halt.AsTracing(), + gethTracing.GasChangeCallFailedExecution, + ) + } return res, nil } // create a new account on the state only if the object was not present. // it might be possible the contract code is deployed to a pre-existent // account with non-zero balance. + snapshot := proc.evm.StateDB.Snapshot() if !proc.state.Exist(addr) { proc.state.CreateAccount(addr) } @@ -650,7 +669,6 @@ func (proc *procedure) deployAt( // initialise a new contract and set the code that is to be used by the EVM. // the contract is a scoped environment for this execution context only. - gasBudget := gethVM.NewGasBudget(call.GasLimit) contract := gethVM.NewContract( caller, addr, @@ -664,51 +682,31 @@ func (proc *procedure) deployAt( contract.SetCallCode(gethCommon.Hash{}, call.Data) contract.IsDeployment = true - ret, err := proc.evm.Run(contract, nil, false) - createDataGas := uint64(len(ret)) * gethParams.CreateDataGas - res.GasConsumed = createDataGas - + gasConsumed, err := proc.initNewContract(contract, addr, call) // handle errors if err != nil { + proc.evm.StateDB.RevertToSnapshot(snapshot) + // for all errors except this one consume all the remaining gas (Homestead) + exit := contract.Gas.Exit(err, reservoir) if err != gethVM.ErrExecutionReverted { - res.GasConsumed = call.GasLimit + res.GasConsumed = gasConsumed + if proc.evm.Config.Tracer.HasGasHook() { + proc.evm.Config.Tracer.EmitGasChange( + contract.Gas.AsTracing(), + exit.AsTracing(), + gethTracing.GasChangeCallFailedExecution, + ) + } } res.VMError = err return res, nil } - // check whether the max code size has been exceeded - if err := gethVM.CheckMaxCodeSize(&rules, uint64(len(ret))); err != nil { - // consume all the remaining gas (Homestead) - res.GasConsumed = call.GasLimit - res.VMError = gethVM.ErrMaxCodeSizeExceeded - return res, nil - } - - // reject code starting with 0xEF (EIP-3541) - if len(ret) >= 1 && ret[0] == 0xEF { - // consume all the remaining gas (Homestead) - res.GasConsumed = call.GasLimit - res.VMError = gethVM.ErrInvalidCode - return res, nil - } - - // update gas usage - if !contract.UseGas(gethVM.GasCosts{RegularGas: createDataGas}, proc.evm.Config.Tracer, gethTracing.GasChangeCallCodeStorage) { - // consume all the remaining gas (Homestead) - res.GasConsumed = call.GasLimit - res.VMError = gethVM.ErrCodeStoreOutOfGas - return res, nil - } - + res.GasConsumed = gasConsumed res.DeployedContractAddress = &call.To res.CumulativeGasUsed = proc.config.BlockTotalGasUsedSoFar + res.GasConsumed - if len(ret) > 0 { - proc.state.SetCode(addr, ret, gethTracing.CodeChangeContractCreation) - } - res.StateChangeCommitment, err = proc.commit(true) return res, err } @@ -769,6 +767,9 @@ func (proc *procedure) run( ) // transit the state + txIndex := proc.config.BlockTxCountSoFar + // `blockAccessIndex` should be 0 for pre-execution, 1..n for transactions, n+1 for post-execution + proc.state.SetTxContext(txHash, int(txIndex), uint32(txIndex+1)) execResult, err := gethCore.ApplyMessage(proc.evm, msg, gasPool) if err != nil { // if the error is a fatal error or a non-fatal state error or a backend err return it @@ -782,7 +783,6 @@ func (proc *procedure) run( return &res, nil } - txIndex := proc.config.BlockTxCountSoFar // if pre-checks are passed, the exec result won't be nil if execResult != nil { res.GasConsumed = execResult.UsedGas @@ -823,6 +823,62 @@ func (proc *procedure) run( return &res, nil } +func (proc *procedure) initNewContract( + contract *gethVM.Contract, + addr gethCommon.Address, + call *types.DirectCall, +) (uint64, error) { + ret, err := proc.evm.Run(contract, nil, false) + if err != nil { + return call.GasLimit, err + } + + // check prefix before gas calculation. + // reject code starting with 0xEF (EIP-3541) + if len(ret) >= 1 && ret[0] == 0xEF { + return call.GasLimit, gethVM.ErrInvalidCode + } + + var gasConsumed uint64 + + rules := proc.config.ChainRules() + if rules.IsAmsterdam { + // check max code size BEFORE charging gas so over-max code + // does not consume state gas (which would inflate tx_state). + // check whether the max code size has been exceeded + if err := gethVM.CheckMaxCodeSize(&rules, uint64(len(ret))); err != nil { + return call.GasLimit, gethVM.ErrMaxCodeSizeExceeded + } + // charge regular gas (hash cost) before state gas. + regularCost := toWordSize(uint64(len(ret))) * gethParams.Keccak256WordGas + if !chargeRegular(contract, regularCost, proc.evm.Config.Tracer, gethTracing.GasChangeCallCodeStorage) { + return call.GasLimit, gethVM.ErrCodeStoreOutOfGas + } + // charge state gas (code-deposit) afterwards. + stateCost := uint64(len(ret)) * proc.evm.Context.CostPerStateByte + if !chargeState(contract, stateCost, proc.evm.Config.Tracer, gethTracing.GasChangeCallCodeStorage) { + return call.GasLimit, gethVM.ErrCodeStoreOutOfGas + } + gasConsumed = regularCost + stateCost + } else { + // update gas usage + createDataCost := uint64(len(ret)) * gethParams.CreateDataGas + if !chargeRegular(contract, createDataCost, proc.evm.Config.Tracer, gethTracing.GasChangeCallCodeStorage) { + return call.GasLimit, gethVM.ErrCodeStoreOutOfGas + } + if err := gethVM.CheckMaxCodeSize(&rules, uint64(len(ret))); err != nil { + return call.GasLimit, gethVM.ErrMaxCodeSizeExceeded + } + gasConsumed = createDataCost + } + + if len(ret) > 0 { + proc.state.SetCode(addr, ret, gethTracing.CodeChangeContractCreation) + } + + return gasConsumed, nil +} + func checkAndConvertValue(input *big.Int) (converted *uint256.Int, isValid bool) { // check for negative input if input.Sign() < 0 { @@ -835,3 +891,47 @@ func checkAndConvertValue(input *big.Int) (converted *uint256.Int, isValid bool) } return value, true } + +// chargeRegular deducts regular gas only, with tracer integration. +// Returns false on OOG. Delegates the arithmetic to GasBudget.ChargeRegular. +func chargeRegular( + c *gethVM.Contract, + r uint64, + logger *gethTracing.Hooks, + reason gethTracing.GasChangeReason, +) bool { + prior, ok := c.Gas.ChargeRegular(r) + if !ok { + return false + } + if logger.HasGasHook() && reason != gethTracing.GasChangeIgnored { + logger.EmitGasChange(prior.AsTracing(), c.Gas.AsTracing(), reason) + } + return true +} + +// chargeState deducts state gas (spilling into regular when the reservoir is +// exhausted), with tracer integration. Returns false on OOG. +func chargeState( + c *gethVM.Contract, + s uint64, + logger *gethTracing.Hooks, + reason gethTracing.GasChangeReason, +) bool { + prior, ok := c.Gas.ChargeState(s) + if !ok { + return false + } + if logger.HasGasHook() && reason != gethTracing.GasChangeIgnored { + logger.EmitGasChange(prior.AsTracing(), c.Gas.AsTracing(), reason) + } + return true +} + +// toWordSize returns the ceiled word size required for memory expansion. +func toWordSize(size uint64) uint64 { + if size > math.MaxUint64-31 { + return math.MaxUint64/32 + 1 + } + return (size + 31) / 32 +} diff --git a/fvm/evm/emulator/emulator_test.go b/fvm/evm/emulator/emulator_test.go index 5e1693464e3..00b77e0851f 100644 --- a/fvm/evm/emulator/emulator_test.go +++ b/fvm/evm/emulator/emulator_test.go @@ -64,7 +64,7 @@ func TestNativeTokenBridging(t *testing.T) { call := types.NewDepositCall(bridgeAccount, testAccount, originalBalance, 0) res, err := blk.DirectCall(call) requireSuccessfulExecution(t, err, res) - require.Equal(t, defaultCtx.DirectCallBaseGasUsage, res.GasConsumed) + require.Equal(t, uint64(204_600), res.GasConsumed) require.Equal(t, call.Hash(), res.TxHash) }) }) @@ -91,7 +91,7 @@ func TestNativeTokenBridging(t *testing.T) { call := types.NewDeployCall( bridgeAccount, emptyContractByteCode, - 100_000, + 350_000, big.NewInt(0), 1) res, err := blk.DirectCall(call) @@ -565,7 +565,7 @@ func TestContractInteraction(t *testing.T) { Nonce: account.Nonce(), GasTipCap: big.NewInt(2), GasFeeCap: big.NewInt(3), - Gas: gethParams.TxGas, + Gas: 204_600, To: &gethCommon.Address{}, Value: big.NewInt(1), }), @@ -850,7 +850,7 @@ func TestFactoryPatterns(t *testing.T) { factoryDeployer, factoryAddress, factoryContract.MakeCallData(t, "deploy", salt), - 250_000, + 1_500_000, big.NewInt(0), 0, ), @@ -889,7 +889,7 @@ func TestFactoryPatterns(t *testing.T) { contracts.FactoryDeployableContractABIJSON, "set", storedValue), - 120_000, + 225_000, big.NewInt(0), 0, ), @@ -908,7 +908,7 @@ func TestFactoryPatterns(t *testing.T) { contracts.FactoryDeployableContractABIJSON, "destroy", refundAddress), - 120_000, + 225_000, big.NewInt(0), 0, ), @@ -967,7 +967,7 @@ func TestFactoryPatterns(t *testing.T) { "deployAndDestroy", salt, storedValue), - 400_000, + 1_500_000, big.NewInt(0), 0, ), @@ -994,7 +994,7 @@ func TestFactoryPatterns(t *testing.T) { factoryDeployer, factoryAddress, factoryContract.MakeCallData(t, "depositAndDeploy", salt, balance, storedValue), - 250_000, + 1_550_000, big.NewInt(0), 1, ), @@ -1046,7 +1046,7 @@ func TestFactoryPatterns(t *testing.T) { factoryDeployer, factoryAddress, factoryContract.MakeCallData(t, "depositDeployAndDestroy", salt, big.NewInt(100), big.NewInt(10)), - 250_000, + 1_550_000, big.NewInt(0), 1, ), diff --git a/fvm/evm/evm_test.go b/fvm/evm/evm_test.go index 6307fbb5a75..fe9bb31e721 100644 --- a/fvm/evm/evm_test.go +++ b/fvm/evm/evm_test.go @@ -83,7 +83,7 @@ func TestEVMRun(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(num)), big.NewInt(0), - uint64(100_000), + uint64(125_000), big.NewInt(1), ) @@ -127,7 +127,7 @@ func TestEVMRun(t *testing.T) { require.NoError(t, err) require.Equal(t, uint16(types.ErrCodeNoError), feeTranferEventPayload.ErrorCode) require.Equal(t, uint16(1), feeTranferEventPayload.Index) - require.Equal(t, uint64(21000), feeTranferEventPayload.GasConsumed) + require.Equal(t, uint64(204_600), feeTranferEventPayload.GasConsumed) // commit block blockEventPayload, snapshot := callEVMHeartBeat(t, @@ -136,7 +136,7 @@ func TestEVMRun(t *testing.T) { snapshot) require.NotEmpty(t, blockEventPayload.Hash) - require.Equal(t, uint64(64785), blockEventPayload.TotalGasUsed) + require.Equal(t, uint64(329_205), blockEventPayload.TotalGasUsed) require.NotEmpty(t, blockEventPayload.Hash) txHashes := types.TransactionHashes{txEventPayload.Hash, feeTranferEventPayload.Hash} @@ -236,7 +236,7 @@ func TestEVMRun(t *testing.T) { from: EVM.addressFromString(from), to: EVM.addressFromString(to), data: data, - gasLimit: 100_000, + gasLimit: 125_000, value: EVM.Balance(attoflow: 0) ) @@ -297,7 +297,7 @@ func TestEVMRun(t *testing.T) { ) require.NotEmpty(t, blockEventPayload.Hash) - require.Equal(t, uint64(43785), blockEventPayload.TotalGasUsed) + require.Equal(t, uint64(124_605), blockEventPayload.TotalGasUsed) require.NotEmpty(t, blockEventPayload.Hash) require.Equal(t, uint16(types.ErrCodeNoError), txEventPayload.ErrorCode) @@ -310,7 +310,7 @@ func TestEVMRun(t *testing.T) { require.Equal(t, fromAddress, directCall.From.String()) require.Equal(t, testContract.DeployedAt.String(), directCall.To.String()) - require.Equal(t, uint64(100_000), directCall.GasLimit) + require.Equal(t, uint64(125_000), directCall.GasLimit) }, fvm.WithEVMTestHelpersEnabled(true), ) @@ -924,7 +924,7 @@ func TestEVMRun(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "storeButRevert", big.NewInt(num)), big.NewInt(0), - uint64(100_000), + uint64(125_000), big.NewInt(0), ) @@ -1036,7 +1036,7 @@ func TestEVMRun(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "storeWithLog", big.NewInt(num)), big.NewInt(0), - uint64(100_000), + uint64(155_000), big.NewInt(0), ) @@ -1337,13 +1337,13 @@ func TestEVMRun(t *testing.T) { require.NoError(t, err) require.Equal(t, uint16(types.ErrCodeNoError), feeTranferEventPayload.ErrorCode) require.Equal(t, uint16(1), feeTranferEventPayload.Index) - require.Equal(t, uint64(21000), feeTranferEventPayload.GasConsumed) + require.Equal(t, uint64(204_600), feeTranferEventPayload.GasConsumed) // commit block blockEventPayload, _ := callEVMHeartBeat(t, ctx, vm, snapshot) require.NotEmpty(t, blockEventPayload.Hash) - require.Equal(t, uint64(64785), blockEventPayload.TotalGasUsed) + require.Equal(t, uint64(329_205), blockEventPayload.TotalGasUsed) require.NotEmpty(t, blockEventPayload.Hash) txHashes := types.TransactionHashes{txEventPayload.Hash, feeTranferEventPayload.Hash} @@ -1443,7 +1443,7 @@ func TestEVMRun(t *testing.T) { require.NoError(t, err) require.Equal(t, uint16(types.ErrCodeNoError), feeTranferEventPayload.ErrorCode) require.Equal(t, uint16(1), feeTranferEventPayload.Index) - require.Equal(t, uint64(21000), feeTranferEventPayload.GasConsumed) + require.Equal(t, uint64(204_600), feeTranferEventPayload.GasConsumed) // commit block blockEventPayload, _ := callEVMHeartBeat(t, @@ -1453,7 +1453,7 @@ func TestEVMRun(t *testing.T) { ) require.NotEmpty(t, blockEventPayload.Hash) - require.Equal(t, uint64(64785), blockEventPayload.TotalGasUsed) + require.Equal(t, uint64(329_205), blockEventPayload.TotalGasUsed) require.NotEmpty(t, blockEventPayload.Hash) txHashes := types.TransactionHashes{txEventPayload.Hash, feeTranferEventPayload.Hash} @@ -1525,7 +1525,7 @@ func TestEVMBatchRun(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "storeWithLog", big.NewInt(num)), big.NewInt(0), - uint64(100_000), + uint64(135_000), big.NewInt(1), ) @@ -1598,7 +1598,7 @@ func TestEVMBatchRun(t *testing.T) { require.NoError(t, err) require.Equal(t, uint16(types.ErrCodeNoError), feeTranferEventPayload.ErrorCode) require.Equal(t, uint16(batchCount), feeTranferEventPayload.Index) - require.Equal(t, uint64(21000), feeTranferEventPayload.GasConsumed) + require.Equal(t, uint64(204_600), feeTranferEventPayload.GasConsumed) txHashes = append(txHashes, feeTranferEventPayload.Hash) // check coinbase balance (note the gas price is 1) @@ -1612,7 +1612,7 @@ func TestEVMBatchRun(t *testing.T) { snapshot) require.NotEmpty(t, blockEventPayload.Hash) - require.Equal(t, uint64(176_513), blockEventPayload.TotalGasUsed) + require.Equal(t, uint64(440_933), blockEventPayload.TotalGasUsed) require.Equal(t, txHashes.RootHash(), blockEventPayload.TransactionHashRoot, @@ -1723,7 +1723,7 @@ func TestEVMBatchRun(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(num)), big.NewInt(0), - uint64(100_000), + uint64(125_000), big.NewInt(0), ) @@ -1855,8 +1855,8 @@ func TestEVMBatchRun(t *testing.T) { batchCount := 6 var num int64 txBytes := make([]cadence.Value, batchCount) - for i := 0; i < batchCount; i++ { - gas := uint64(100_000) + for i := range batchCount { + gas := uint64(125_000) if i%2 == 0 { // fail with too low gas limit gas = 23_500 @@ -1903,7 +1903,7 @@ func TestEVMBatchRun(t *testing.T) { require.NoError(t, err) require.NoError(t, output.Err) - //require.NotEmpty(t, state.WriteSet) + require.NotEmpty(t, state.WriteSet) // append the state snapshot = snapshot.Append(state) @@ -2206,7 +2206,7 @@ func TestEVMAddressDeposit(t *testing.T) { snapshot) require.NotEmpty(t, blockEventPayload.Hash) - require.Equal(t, uint64(21000), blockEventPayload.TotalGasUsed) + require.Equal(t, uint64(204_600), blockEventPayload.TotalGasUsed) txHashes := types.TransactionHashes{txEventPayload.Hash} require.Equal(t, @@ -2217,6 +2217,91 @@ func TestEVMAddressDeposit(t *testing.T) { ) } +func TestEOAStateAccountCreationCost(t *testing.T) { + t.Parallel() + + chain := flow.Emulator.Chain() + sc := systemcontracts.SystemContractsForChain(chain.ChainID()) + + RunWithNewEnvironment(t, + chain, func( + ctx fvm.Context, + vm fvm.VM, + snapshot snapshot.SnapshotTree, + testContract *TestContract, + testAccount *EOATestAccount, + ) { + code := []byte(fmt.Sprintf( + ` + import EVM from %s + import FlowToken from %s + + transaction(addr: [UInt8; 20]) { + prepare(account: auth(BorrowValue) &Account) { + let admin = account.storage + .borrow<&FlowToken.Administrator>(from: /storage/flowTokenAdmin)! + + let minter <- admin.createNewMinter(allowedAmount: 1.0) + let vault1 <- minter.mintTokens(amount: 0.5) + + let address = EVM.EVMAddress(bytes: addr) + address.deposit(from: <-vault1) + + let vault2 <- minter.mintTokens(amount: 0.5) + address.deposit(from: <-vault2) + + destroy minter + } + } + `, + sc.EVMContract.Address.HexWithPrefix(), + sc.FlowToken.Address.HexWithPrefix(), + )) + + addr := RandomAddress(t) + + txBody, err := flow.NewTransactionBodyBuilder(). + SetScript(code). + SetPayer(sc.FlowServiceAccount.Address). + AddAuthorizer(sc.FlowServiceAccount.Address). + AddArgument(json.MustEncode(cadence.NewArray( + unittest.BytesToCdcUInt8(addr.Bytes()), + ).WithType(stdlib.EVMAddressBytesCadenceType))). + Build() + require.NoError(t, err) + + tx := fvm.Transaction(txBody, 0) + + execSnap, output, err := vm.Run( + ctx, + tx, + snapshot) + require.NoError(t, err) + require.NoError(t, output.Err) + + snapshot = snapshot.Append(execSnap) + + expectedBalance := types.OneFlowBalance() + bal := getEVMAccountBalance(t, ctx, vm, snapshot, addr) + require.Equal(t, expectedBalance, bal) + + // 1st deposit + txEvent := output.Events[2] + txEventPayload := TxEventToPayload(t, txEvent, sc.EVMContract.Address) + // The 1st deposit also creates the fresh EOA, so the gas consumed + // reflects that. + require.Equal(t, uint64(204_600), txEventPayload.GasConsumed) + + // 2nd deposit + txEvent = output.Events[5] + txEventPayload = TxEventToPayload(t, txEvent, sc.EVMContract.Address) + // The 2nd deposit only operates on an existing EOA, so the gas + // consumed reflects a plain value transfer. + require.Equal(t, uint64(21_000), txEventPayload.GasConsumed) + }, + ) +} + func TestCOAAddressDeposit(t *testing.T) { t.Parallel() @@ -2265,6 +2350,76 @@ func TestCOAAddressDeposit(t *testing.T) { }) } +func TestCOAStateAccountCreationCost(t *testing.T) { + t.Parallel() + + chain := flow.Emulator.Chain() + sc := systemcontracts.SystemContractsForChain(chain.ChainID()) + RunWithNewEnvironment(t, + chain, func( + ctx fvm.Context, + vm fvm.VM, + snapshot snapshot.SnapshotTree, + testContract *TestContract, + testAccount *EOATestAccount, + ) { + code := []byte(fmt.Sprintf( + ` + import EVM from %s + import FlowToken from %s + + transaction(addr: [UInt8; 20]) { + prepare(account: auth(BorrowValue) &Account) { + let admin = account.storage + .borrow<&FlowToken.Administrator>(from: /storage/flowTokenAdmin)! + + let minter <- admin.createNewMinter(allowedAmount: 1.0) + let vault <- minter.mintTokens(amount: 1.0) + + let coa <- EVM.createCadenceOwnedAccount() + coa.deposit(from: <-vault) + + destroy minter + destroy coa + } + } + `, + sc.EVMContract.Address.HexWithPrefix(), + sc.FlowToken.Address.HexWithPrefix(), + )) + + addr := RandomAddress(t) + + txBody, err := flow.NewTransactionBodyBuilder(). + SetScript(code). + SetPayer(sc.FlowServiceAccount.Address). + AddAuthorizer(sc.FlowServiceAccount.Address). + AddArgument(json.MustEncode(cadence.NewArray( + unittest.BytesToCdcUInt8(addr.Bytes()), + ).WithType(stdlib.EVMAddressBytesCadenceType))). + Build() + require.NoError(t, err) + + tx := fvm.Transaction(txBody, 0) + + _, output, err := vm.Run(ctx, tx, snapshot) + require.NoError(t, err) + require.NoError(t, output.Err) + + txEvent := output.Events[2] + txEventPayload := TxEventToPayload(t, txEvent, sc.EVMContract.Address) + // The 1st tx creates a fresh COA, so the gas consumed reflects the + // contract deployment. + require.Equal(t, uint64(5_375_550), txEventPayload.GasConsumed) + + txEvent = output.Events[4] + txEventPayload = TxEventToPayload(t, txEvent, sc.EVMContract.Address) + // The deposit only operates on an existing COA, so the gas + // consumed reflects a plain value transfer. + require.Equal(t, uint64(21_055), txEventPayload.GasConsumed) + }) +} + func TestCadenceOwnedAccountFunctionalities(t *testing.T) { t.Parallel() chain := flow.Emulator.Chain() @@ -2779,7 +2934,7 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { let res = cadenceOwnedAccount.call( to: recipientEVMAddress, data: [], - gasLimit: 100_000, + gasLimit: 204_600, value: bal, ) @@ -3013,7 +3168,7 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { let res = cadenceOwnedAccount.deploy( code: code, - gasLimit: 2_000_000, + gasLimit: 10_500_000, value: EVM.Balance(attoflow: 1230000000000000000) ) destroy cadenceOwnedAccount @@ -3106,7 +3261,7 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(num)), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), ) @@ -3254,7 +3409,7 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(num)), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), ) @@ -3695,7 +3850,7 @@ func TestDryRun(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(num)), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), ) @@ -3731,7 +3886,7 @@ func TestDryRun(t *testing.T) { 0, testContract.DeployedAt.ToCommon(), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), data, ) @@ -3824,7 +3979,7 @@ func TestDryRun(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(num)), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), ) @@ -4152,7 +4307,7 @@ func TestDryRun(t *testing.T) { 0, testContract.DeployedAt.ToCommon(), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), testContract.MakeCallData(t, "store", big.NewInt(num)), ) @@ -4185,7 +4340,7 @@ func TestDryRun(t *testing.T) { require.NoError(t, err) require.NoError(t, output.Err) - assert.Equal(t, uint64(28), output.ComputationUsed) + assert.Equal(t, uint64(47), output.ComputationUsed) // Increase call count of EVM.dryRun to 15 iterations = cadence.NewUInt(15) @@ -4205,7 +4360,7 @@ func TestDryRun(t *testing.T) { require.NoError(t, err) require.NoError(t, output.Err) - assert.Equal(t, uint64(81), output.ComputationUsed) + assert.Equal(t, uint64(137), output.ComputationUsed) }, ) }) @@ -4231,7 +4386,7 @@ func TestDryRun(t *testing.T) { testAccount.Nonce(), testContract.DeployedAt.ToCommon(), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), data, ) @@ -4243,7 +4398,7 @@ func TestDryRun(t *testing.T) { testContract.DeployedAt.ToCommon(), data, big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), ) @@ -4290,7 +4445,7 @@ func TestDryRun(t *testing.T) { _, output, err := vm.Run(ctx, tx, snapshot) require.NoError(t, err) require.NoError(t, output.Err) - assert.Equal(t, uint64(15), output.ComputationUsed) + assert.Equal(t, uint64(22), output.ComputationUsed) }, ) }) @@ -4367,7 +4522,7 @@ func TestDryCall(t *testing.T) { ) { data := testContract.MakeCallData(t, "store", big.NewInt(1337)) - limit := uint64(50_000) + limit := uint64(125_000) tx := gethTypes.NewTransaction( 0, testContract.DeployedAt.ToCommon(), @@ -4447,7 +4602,7 @@ func TestDryCall(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(num)), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), ) @@ -4781,7 +4936,7 @@ func TestDryCall(t *testing.T) { 0, testContract.DeployedAt.ToCommon(), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), testContract.MakeCallData(t, "store", big.NewInt(num)), ) @@ -4813,7 +4968,7 @@ func TestDryCall(t *testing.T) { require.NoError(t, err) require.NoError(t, output.Err) - assert.Equal(t, uint64(36), output.ComputationUsed) + assert.Equal(t, uint64(54), output.ComputationUsed) // Increase call count of EVM.dryCall to 15 iterations = cadence.NewUInt(15) @@ -4835,7 +4990,7 @@ func TestDryCall(t *testing.T) { require.NoError(t, err) require.NoError(t, output.Err) - assert.Equal(t, uint64(105), output.ComputationUsed) + assert.Equal(t, uint64(160), output.ComputationUsed) }, ) }) @@ -5056,7 +5211,7 @@ func TestDryCallWithSigAndArgs(t *testing.T) { cadence.NewUInt256(1337), } - limit := uint64(50_000) + limit := uint64(125_000) result, _ := dryCallWithSigAndArgs( t, @@ -5148,7 +5303,7 @@ func TestDryCallWithSigAndArgs(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(num)), big.NewInt(0), - uint64(50_000), + uint64(125_000), big.NewInt(0), ) @@ -6263,7 +6418,7 @@ func TestEVMFileSystemContract(t *testing.T) { feeTranferEventPayload := TxEventToPayload(t, feeTransferEvent, sc.EVMContract.Address) require.Equal(t, uint16(types.ErrCodeNoError), feeTranferEventPayload.ErrorCode) require.Equal(t, uint16(1), feeTranferEventPayload.Index) - require.Equal(t, uint64(21000), feeTranferEventPayload.GasConsumed) + require.Equal(t, uint64(204_600), feeTranferEventPayload.GasConsumed) // //// commit block blockEventPayload, _ := callEVMHeartBeat(t, @@ -6273,7 +6428,7 @@ func TestEVMFileSystemContract(t *testing.T) { ) // require.NotEmpty(t, blockEventPayload.Hash) - require.Equal(t, uint64(3_396_880), blockEventPayload.TotalGasUsed) + require.Equal(t, uint64(3_580_480), blockEventPayload.TotalGasUsed) txHashes := types.TransactionHashes{txEventPayload.Hash, feeTranferEventPayload.Hash} require.Equal(t, @@ -7133,7 +7288,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "depositDeployAndDestroyWithBurn", salt, amount, storedValue), big.NewInt(0), - uint64(1_000_000), + uint64(1_500_000), big.NewInt(1), ) @@ -7167,7 +7322,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { require.NoError(t, err) require.Equal(t, uint16(types.ErrCodeNoError), txEventPayload.ErrorCode) require.Equal(t, uint16(0), txEventPayload.Index) - require.Equal(t, uint64(239_774), txEventPayload.GasConsumed) + require.Equal(t, uint64(1_268_668), txEventPayload.GasConsumed) require.Greater(t, len(txEventPayload.Logs), 0) gethLogs := []*gethTypes.Log{} @@ -7239,7 +7394,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "depositDeployAndDestroy", salt, amount, storedValue), big.NewInt(0), - uint64(1_000_000), + uint64(1_500_000), big.NewInt(1), ) @@ -7273,7 +7428,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { require.NoError(t, err) require.Equal(t, uint16(types.ErrCodeNoError), txEventPayload.ErrorCode) require.Equal(t, uint16(0), txEventPayload.Index) - require.Equal(t, uint64(239_795), txEventPayload.GasConsumed) + require.Equal(t, uint64(1_268_689), txEventPayload.GasConsumed) require.Greater(t, len(txEventPayload.Logs), 0) gethLogs := []*gethTypes.Log{} diff --git a/fvm/evm/handler/coa/coa.go b/fvm/evm/handler/coa/coa.go index 8be5394cff5..29022119629 100644 --- a/fvm/evm/handler/coa/coa.go +++ b/fvm/evm/handler/coa/coa.go @@ -5,7 +5,7 @@ import ( "encoding/hex" ) -var ContractDeploymentRequiredGas = uint64(723_000) +const ContractDeploymentRequiredGas = uint64(5_385_000) //go:embed coa_bytes.hex var contractBytesInHex string diff --git a/fvm/evm/handler/handler_test.go b/fvm/evm/handler/handler_test.go index 49435a2d9f7..833db988de5 100644 --- a/fvm/evm/handler/handler_test.go +++ b/fvm/evm/handler/handler_test.go @@ -396,7 +396,7 @@ func TestHandler_COA(t *testing.T) { // check gas usage computationUsed, err := backend.ComputationUsed() require.NoError(t, err) - require.Greater(t, computationUsed, types.DefaultDirectCallBaseGasUsage*3) + require.Equal(t, uint64(5_417_605), computationUsed) // Withdraw with invalid balance assertPanic(t, types.IsAWithdrawBalanceRoundingError, func() { diff --git a/fvm/evm/offchain/sync/replayer_test.go b/fvm/evm/offchain/sync/replayer_test.go index d92a12bb644..92e0bc08817 100644 --- a/fvm/evm/offchain/sync/replayer_test.go +++ b/fvm/evm/offchain/sync/replayer_test.go @@ -42,7 +42,7 @@ func TestChainReplay(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "checkThenStore", big.NewInt(int64(i)), big.NewInt(int64(i+1))), big.NewInt(0), - uint64(100_000), + uint64(125_000), big.NewInt(1), ) rs := handler.Run(tx, gasFeeCollector) @@ -58,7 +58,7 @@ func TestChainReplay(t *testing.T) { testContract.DeployedAt.ToCommon(), testContract.MakeCallData(t, "store", big.NewInt(int64(i))), big.NewInt(0), - uint64(100_000), + uint64(125_000), big.NewInt(1), ) } diff --git a/fvm/evm/testutils/contract.go b/fvm/evm/testutils/contract.go index c14ea095c4b..9ca2fab3a0a 100644 --- a/fvm/evm/testutils/contract.go +++ b/fvm/evm/testutils/contract.go @@ -93,29 +93,31 @@ func DeployContract(t testing.TB, caller types.Address, tc *TestContract, led at blk, err := e.NewBlockView(ctx) require.NoError(t, err) - _, err = blk.DirectCall( + res, err := blk.DirectCall( types.NewDepositCall( RandomAddress(t), // any random non-empty address works here caller, - new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1000)), + new(big.Int).Mul(big.NewInt(5e18), big.NewInt(1000)), nonce, ), ) require.NoError(t, err) + require.True(t, res.Successful()) blk2, err := e.NewBlockView(types.NewDefaultBlockContext(3)) require.NoError(t, err) - res, err := blk2.DirectCall( + res, err = blk2.DirectCall( types.NewDeployCall( caller, tc.ByteCode, gethParams.MaxTxGas, - big.NewInt(1_000_000_000), // fund the newly-deployed contract + big.NewInt(1_000_000_000_000_000_000), // fund the newly-deployed contract nonce+1, ), ) require.NoError(t, err) + require.True(t, res.Successful()) require.NotNil(t, res.DeployedContractAddress) tc.SetDeployedAt(*res.DeployedContractAddress) } diff --git a/fvm/evm/types/call.go b/fvm/evm/types/call.go index 43bcf1e55c0..026dec3e43b 100644 --- a/fvm/evm/types/call.go +++ b/fvm/evm/types/call.go @@ -36,6 +36,10 @@ const ( // to smart contract addresses. DepositCallGasLimit = DefaultGasLimitForTokenTransfer WithdrawCallGasLimit = DefaultGasLimitForTokenTransfer + + // With EIP-8037, each state-creation transaction (such as funding a fresh EOA), + // needs an extra gas limit, as calculated below. + StateCreationGasLimit = gethParams.AccountCreationSize * gethParams.CostPerStateByte ) // DirectCall captures all the data related to a direct call to evm @@ -201,7 +205,7 @@ func NewDepositCall( To: address, Data: nil, Value: amount, - GasLimit: DepositCallGasLimit, + GasLimit: DepositCallGasLimit + StateCreationGasLimit, Nonce: nonce, } } @@ -238,7 +242,7 @@ func NewTransferCall( To: to, Data: nil, Value: amount, - GasLimit: DefaultGasLimitForTokenTransfer, + GasLimit: DefaultGasLimitForTokenTransfer + StateCreationGasLimit, Nonce: nonce, } } From 39df26592615b7b0b4fe2bfa72d6fde432ac36ed Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Tue, 23 Jun 2026 15:59:45 +0300 Subject: [PATCH 26/30] Implement EIP-7928 for Block-Level Access Lists --- fvm/evm/emulator/emulator.go | 23 ++-- fvm/evm/emulator/state/delta.go | 8 +- fvm/evm/emulator/state/stateDB.go | 154 +++++++++++++++++++-- fvm/evm/emulator/state/stateDB_test.go | 179 +++++++++++++++++++++++++ fvm/evm/types/result.go | 3 + 5 files changed, 336 insertions(+), 31 deletions(-) diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index d7d37916beb..66cf63edc9e 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -10,6 +10,7 @@ import ( gethCore "github.com/ethereum/go-ethereum/core" gethTracing "github.com/ethereum/go-ethereum/core/tracing" gethTypes "github.com/ethereum/go-ethereum/core/types" + gethBAL "github.com/ethereum/go-ethereum/core/types/bal" gethVM "github.com/ethereum/go-ethereum/core/vm" gethCrypto "github.com/ethereum/go-ethereum/crypto" gethParams "github.com/ethereum/go-ethereum/params" @@ -209,7 +210,7 @@ func (bl *BlockView) RunTransaction( } // all commit errors (StateDB errors) has to be returned - res.StateChangeCommitment, err = proc.commit(true) + res.StateChangeCommitment, res.StateAccessList, err = proc.commit(true) if err != nil { return nil, err } @@ -265,7 +266,7 @@ func (bl *BlockView) BatchRunTransactions(txs []*gethTypes.Transaction) ([]*type } // all commit errors (StateDB errors) has to be returned - res.StateChangeCommitment, err = proc.commit(false) + res.StateChangeCommitment, res.StateAccessList, err = proc.commit(false) if err != nil { return nil, err } @@ -430,21 +431,21 @@ type procedure struct { } // commit commits the changes to the state (with optional finalization) -func (proc *procedure) commit(finalize bool) (hash.Hash, error) { +func (proc *procedure) commit(finalize bool) (hash.Hash, *gethBAL.ConstructionBlockAccessList, error) { // Calling `StateDB.Finalise(true)` is currently a no-op, but // we add it here to be more in line with how its envisioned. - proc.state.Finalise(true) + bal := proc.state.Finalise(true) stateUpdateCommitment, err := proc.state.Commit(finalize) if err != nil { // if known types (state errors) don't do anything and return if types.IsAFatalError(err) || types.IsAStateError(err) || types.IsABackendError(err) { - return stateUpdateCommitment, err + return stateUpdateCommitment, bal, err } // else is a new fatal error - return stateUpdateCommitment, types.NewFatalError(err) + return stateUpdateCommitment, bal, types.NewFatalError(err) } - return stateUpdateCommitment, nil + return stateUpdateCommitment, bal, nil } func (proc *procedure) mintTo( @@ -489,7 +490,7 @@ func (proc *procedure) mintTo( } // commit and finalize the state and return any stateDB error - res.StateChangeCommitment, err = proc.commit(true) + res.StateChangeCommitment, res.StateAccessList, err = proc.commit(true) return res, err } @@ -540,7 +541,7 @@ func (proc *procedure) withdrawFrom( proc.state.SubBalance(bridge, value, gethTracing.BalanceIncreaseWithdrawal) // commit and finalize the state and return any stateDB error - res.StateChangeCommitment, err = proc.commit(true) + res.StateChangeCommitment, res.StateAccessList, err = proc.commit(true) return res, err } @@ -707,7 +708,7 @@ func (proc *procedure) deployAt( res.DeployedContractAddress = &call.To res.CumulativeGasUsed = proc.config.BlockTotalGasUsedSoFar + res.GasConsumed - res.StateChangeCommitment, err = proc.commit(true) + res.StateChangeCommitment, res.StateAccessList, err = proc.commit(true) return res, err } @@ -724,7 +725,7 @@ func (proc *procedure) runDirect( return nil, err } // commit and finalize the state and return any stateDB error - res.StateChangeCommitment, err = proc.commit(true) + res.StateChangeCommitment, res.StateAccessList, err = proc.commit(true) return res, err } diff --git a/fvm/evm/emulator/state/delta.go b/fvm/evm/emulator/state/delta.go index 6f3838dc7f9..9b08fec992e 100644 --- a/fvm/evm/emulator/state/delta.go +++ b/fvm/evm/emulator/state/delta.go @@ -577,10 +577,6 @@ func (d *DeltaView) DirtyAddresses() map[gethCommon.Address]struct{} { } // DirtySlots returns a set of slots that has been updated in this view -func (d *DeltaView) DirtySlots() map[types.SlotAddress]struct{} { - dirtySlots := make(map[types.SlotAddress]struct{}) - for sk := range d.slots { - dirtySlots[sk] = struct{}{} - } - return dirtySlots +func (d *DeltaView) DirtySlots() map[types.SlotAddress]gethCommon.Hash { + return d.slots } diff --git a/fvm/evm/emulator/state/stateDB.go b/fvm/evm/emulator/state/stateDB.go index a8577e053b5..1c6c23572a2 100644 --- a/fvm/evm/emulator/state/stateDB.go +++ b/fvm/evm/emulator/state/stateDB.go @@ -37,13 +37,17 @@ type removedAccountWithBalance struct { // thread safe. yet the current design supports addition of concurrency in the // future if needed type StateDB struct { - ledger atree.Ledger - root flow.Address - baseView types.BaseView - views []*DeltaView + ledger atree.Ledger + root flow.Address + baseView types.BaseView + views []*DeltaView + cachedError error + // Per-transaction state access footprint for EIP-7928 - stateReadList *gethBAL.StateAccessList - cachedError error + stateAccessList *gethBAL.ConstructionBlockAccessList + + // Block access index (0 for pre-execution, 1..n for transactions, n+1 for post-execution) + blockAccessIndex uint32 } var _ types.StateDB = &StateDB{} @@ -290,6 +294,10 @@ func (db *StateDB) GetRefund() uint64 { // GetCommittedState returns the value for the given storage slot considering only the committed state and not // changes in the scope of current transaction. func (db *StateDB) GetCommittedState(addr gethCommon.Address, key gethCommon.Hash) gethCommon.Hash { + // Record slot access regardless of whether the storage slot exists. + if db.stateAccessList != nil { + db.stateAccessList.StorageRead(addr, key) + } // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) value, err := db.baseView.GetState(types.SlotAddress{Address: addr, Key: key}) @@ -312,9 +320,27 @@ func (db *StateDB) GetStateAndCommittedState( // GetState returns the value for the given storage slot func (db *StateDB) GetState(addr gethCommon.Address, key gethCommon.Hash) gethCommon.Hash { + sk := types.SlotAddress{Address: addr, Key: key} + + // Record slot access only for non-dirty slots, essentially only + // when falling back to committed state access. + if db.stateAccessList != nil { + dirty := false + for _, view := range db.views { + _, dirty = view.DirtySlots()[sk] + if dirty { + break + } + } + if !dirty { + db.stateAccessList.StorageRead(addr, key) + } + } + // EIP-7928: per-transaction state access tracking db.recordStateAccess(addr) - state, err := db.latestView().GetState(types.SlotAddress{Address: addr, Key: key}) + + state, err := db.latestView().GetState(sk) db.handleError(err) return state } @@ -660,8 +686,74 @@ func (db *StateDB) LogsForBurnAccounts() []*gethTypes.Log { // This is a no-op for our custom implementation of the StateDB interface, // since Commit() already handles finalization and deletion of empty // objects. -func (db *StateDB) Finalise(deleteEmptyObjects bool) *gethBAL.StateAccessList { - return db.stateReadList +func (db *StateDB) Finalise(deleteEmptyObjects bool) *gethBAL.ConstructionBlockAccessList { + // iterate views and collect dirty addresses and slots + dirtyAddresses := make(map[gethCommon.Address]struct{}) + dirtySlots := make(map[types.SlotAddress]gethCommon.Hash) + for _, view := range db.views { + for key := range view.DirtyAddresses() { + dirtyAddresses[key] = struct{}{} + } + for key, val := range view.DirtySlots() { + dirtySlots[key] = val + } + } + + for slot, value := range dirtySlots { + address := slot.Address + if db.HasSelfDestructed(address) || (deleteEmptyObjects && db.Empty(address)) { + continue + } + // Aggregate storage writes into the block-level access list. + // All slots in the dirtyStorage set must have post-transaction + // values that differ from their pre-transaction values. + if db.stateAccessList != nil { + db.stateAccessList.StorageWrite(db.blockAccessIndex, address, slot.Key, value) + } + } + + for addr := range dirtyAddresses { + if db.HasSelfDestructed(addr) || (deleteEmptyObjects && db.Empty(addr)) { + // Aggregate the account mutation into the block-level accessList + // if Amsterdam has been activated. + if db.stateAccessList != nil { + // Notably, if the account is deleted during the transaction, + // its pre-transaction nonce, code, and storage must be empty. + // + // EIP-6780 restricts self-destruct to contracts deployed within + // the same transaction, while EIP-7610 rejects deployments to + // destinations with non-empty storage, non-zero nonce and non-empty + // code. + // + // Therefore, when an account is deleted, its pre-transaction nonce + // code and storage is guaranteed to be empty, leaving nothing to + // clean up here. + balance := uint256.NewInt(0) + if db.balanceChange(addr, balance) { + db.stateAccessList.BalanceChange(db.blockAccessIndex, addr, balance) + } + } + } else { + // Aggregate the account mutation into the block-level accessList + // if Amsterdam has been activated. + if db.stateAccessList != nil { + balance := db.GetBalance(addr) + if db.balanceChange(addr, balance) { + db.stateAccessList.BalanceChange(db.blockAccessIndex, addr, balance) + } + nonce := db.GetNonce(addr) + if db.nonceChange(addr, nonce) { + db.stateAccessList.NonceChange(addr, db.blockAccessIndex, nonce) + } + code := db.GetCode(addr) + if db.codeChange(addr, code) { + db.stateAccessList.CodeChange(addr, db.blockAccessIndex, code) + } + } + } + } + + return db.stateAccessList } // Finalize flushes all the changes @@ -697,7 +789,7 @@ func (db *StateDB) Prepare(rules gethParams.Rules, sender, coinbase gethCommon.A } if rules.IsAmsterdam { - db.stateReadList = gethBAL.NewStateAccessList() + db.stateAccessList = gethBAL.NewConstructionBlockAccessList() } } @@ -710,11 +802,24 @@ func (db *StateDB) Reset() { // If Amsterdam is activated, we need to create a new state read list. // This method is mainly used to reset the state between EVM.batchRun // transactions. - if db.stateReadList != nil { - db.stateReadList = gethBAL.NewStateAccessList() + if db.stateAccessList != nil { + db.stateAccessList = gethBAL.NewConstructionBlockAccessList() } } +// SetTxContext sets the current transaction hash and index which are +// used when the EVM emits new state logs. It should be invoked before +// transaction execution. +func (s *StateDB) SetTxContext( + txHash gethCommon.Hash, + txIndex int, + blockAccessIndex uint32, +) { + // We are only interested in keeping `blockAccessIndex`, as logs are filled + // with tx info from the `StateDB.Logs(blockNumber, txHash, txIndex)` method. + s.blockAccessIndex = blockAccessIndex +} + // Error returns the memorized database failure occurred earlier. func (s *StateDB) Error() error { return wrapError(s.cachedError) @@ -739,16 +844,37 @@ func (s *StateDB) AccessEvents() *gethState.AccessEvents { // recordStateAccess records state access regardless of whether the account exists. func (db *StateDB) recordStateAccess(addr gethCommon.Address) { // Amsterdam hard-fork not activated - if db.stateReadList == nil { + if db.stateAccessList == nil { return } - db.stateReadList.AddAccount(addr) + db.stateAccessList.AccountRead(addr) } func (db *StateDB) latestView() *DeltaView { return db.views[len(db.views)-1] } +func (db *StateDB) balanceChange(addr gethCommon.Address, current *uint256.Int) bool { + balance, err := db.baseView.GetBalance(addr) + db.handleError(err) + + return balance.Cmp(current) != 0 +} + +func (db *StateDB) nonceChange(addr gethCommon.Address, current uint64) bool { + nonce, err := db.baseView.GetNonce(addr) + db.handleError(err) + + return nonce != current +} + +func (db *StateDB) codeChange(addr gethCommon.Address, current []byte) bool { + code, err := db.baseView.GetCode(addr) + db.handleError(err) + + return !bytes.Equal(code, current) +} + // set error captures the first non-nil error it is called with. func (db *StateDB) handleError(err error) { if err == nil { diff --git a/fvm/evm/emulator/state/stateDB_test.go b/fvm/evm/emulator/state/stateDB_test.go index 2231457e536..2f4d5a6f039 100644 --- a/fvm/evm/emulator/state/stateDB_test.go +++ b/fvm/evm/emulator/state/stateDB_test.go @@ -499,4 +499,183 @@ func TestStateDB(t *testing.T) { require.Equal(t, gethCommon.Hash{}, db.GetState(addr3, key)) require.NoError(t, db.Error()) }) + + t.Run("test Finalise functionality", func(t *testing.T) { + ledger := testutils.GetSimpleValueStore() + db, err := state.NewStateDB(ledger, rootAddr) + require.NoError(t, err) + + sender := testutils.RandomCommonAddress(t) + coinbase := testutils.RandomCommonAddress(t) + dest := testutils.RandomCommonAddress(t) + precompiles := []gethCommon.Address{ + testutils.RandomCommonAddress(t), + testutils.RandomCommonAddress(t), + } + txAccesses := gethTypes.AccessList([]gethTypes.AccessTuple{ + {Address: testutils.RandomCommonAddress(t), + StorageKeys: []gethCommon.Hash{ + testutils.RandomCommonHash(t), + testutils.RandomCommonHash(t), + }, + }, + }) + rules := gethParams.Rules{ + IsBerlin: true, + IsShanghai: true, + IsAmsterdam: true, + } + + db.Prepare(rules, sender, coinbase, &dest, precompiles, txAccesses) + require.NoError(t, err) + + // Block access list should be empty initially + bal := db.Finalise(true) + require.Len(t, bal.Accounts, 0) + + // Block access list with balance change on EOA + addr1 := testutils.RandomCommonAddress(t) + balance := uint256.NewInt(5) + db.AddBalance(addr1, balance, gethTracing.BalanceChangeUnspecified) + require.NoError(t, db.Error()) + + bal = db.Finalise(true) + require.Len(t, bal.Accounts, 1) + require.Equal(t, balance, bal.Accounts[addr1].BalanceChanges[0]) + + // Block access list with nonce change on EOA + addr2 := testutils.RandomCommonAddress(t) + nonce := uint64(3) + db.SetNonce(addr2, nonce, gethTracing.NonceChangeContractCreator) + require.NoError(t, db.Error()) + + bal = db.Finalise(true) + require.Len(t, bal.Accounts, 2) + require.Equal(t, nonce, bal.Accounts[addr2].NonceChanges[0]) + + // Block access list with code change on contract creation + addr3 := testutils.RandomCommonAddress(t) + code := []byte{1, 2, 3} + db.SetCode(addr3, code, gethTracing.CodeChangeContractCreation) + require.NoError(t, db.Error()) + + bal = db.Finalise(true) + require.Len(t, bal.Accounts, 3) + require.Equal(t, code, bal.Accounts[addr3].CodeChange[0]) + + // Block access list with balance change to 0 on smart contract SelfDestruct + addr4 := testutils.RandomCommonAddress(t) + balance = uint256.NewInt(200) + db.CreateAccount(addr4) + db.AddBalance(addr4, balance, gethTracing.BalanceChangeTransfer) + require.NoError(t, db.Error()) + + // commit and renew db + commit, err := db.Commit(true) + require.NoError(t, err) + require.NotEmpty(t, commit) + db, err = state.NewStateDB(ledger, rootAddr) + require.NoError(t, err) + db.Prepare(rules, sender, coinbase, &dest, precompiles, txAccesses) + require.NoError(t, err) + + // set code and call contract creation + db.SetCode(addr4, code, gethTracing.CodeChangeContractCreation) + db.CreateContract(addr4) + require.Equal(t, code, db.GetCode(addr4)) + // now calling selfdestruct should do the job + db.SelfDestruct(addr4) + require.NoError(t, db.Error()) + + bal = db.Finalise(true) + require.Len(t, bal.Accounts, 1) + require.Equal(t, uint256.NewInt(0), bal.Accounts[addr4].BalanceChanges[0]) + + // Block access list with account read + addr5 := testutils.RandomCommonAddress(t) + db.GetBalance(addr5) + + bal = db.Finalise(true) + require.Len(t, bal.Accounts, 2) + require.NotNil(t, bal.Accounts[addr5]) + + // Block access list with unseen EOA in block transactions + addr6 := testutils.RandomCommonAddress(t) + require.Nil(t, bal.Accounts[addr6]) + + // Block access list with storage read from GetCommittedState() + db, err = state.NewStateDB(ledger, rootAddr) + require.NoError(t, err) + db.Prepare(rules, sender, coinbase, &dest, precompiles, txAccesses) + require.NoError(t, err) + + addr7 := testutils.RandomCommonAddress(t) + key1 := testutils.RandomCommonHash(t) + + db.CreateAccount(addr7) + require.NoError(t, db.Error()) + + db.GetCommittedState(addr7, key1) + require.NoError(t, db.Error()) + + bal = db.Finalise(true) + require.Len(t, bal.Accounts, 1) + require.Contains(t, bal.Accounts[addr7].StorageReads, key1) + + // Block access list with storage read on GetState() dirty slot + db, err = state.NewStateDB(ledger, rootAddr) + require.NoError(t, err) + db.Prepare(rules, sender, coinbase, &dest, precompiles, txAccesses) + require.NoError(t, err) + + addr8 := testutils.RandomCommonAddress(t) + value1 := testutils.RandomCommonHash(t) + + // should have code to be able to set state + db.SetCode(addr8, []byte{1, 2, 3}, gethTracing.CodeChangeContractCreation) + require.NoError(t, db.Error()) + + db.SetState(addr8, key1, value1) + require.NoError(t, db.Error()) + + db.GetState(addr8, key1) + require.NoError(t, db.Error()) + + bal = db.Finalise(true) + require.Len(t, bal.Accounts, 1) + require.NotContains(t, bal.Accounts[addr8].StorageReads, key1) + require.Equal(t, value1, bal.Accounts[addr8].StorageWrites[key1][0]) + + // Block access list with storage read on GetState() existing slot + db, err = state.NewStateDB(ledger, rootAddr) + require.NoError(t, err) + db.Prepare(rules, sender, coinbase, &dest, precompiles, txAccesses) + require.NoError(t, err) + + addr9 := testutils.RandomCommonAddress(t) + + // should have code to be able to set state + db.SetCode(addr9, []byte{1, 2, 3}, gethTracing.CodeChangeContractCreation) + require.NoError(t, db.Error()) + + db.SetState(addr9, key1, value1) + require.NoError(t, db.Error()) + + commit, err = db.Commit(true) + require.NoError(t, err) + require.NotEmpty(t, commit) + + db, err = state.NewStateDB(ledger, rootAddr) + require.NoError(t, err) + db.Prepare(rules, sender, coinbase, &dest, precompiles, txAccesses) + require.NoError(t, err) + + ret := db.GetState(addr9, key1) + require.NoError(t, db.Error()) + require.Equal(t, value1, ret) + + bal = db.Finalise(true) + require.Len(t, bal.Accounts, 1) + require.Contains(t, bal.Accounts[addr9].StorageReads, key1) + }) } diff --git a/fvm/evm/types/result.go b/fvm/evm/types/result.go index a585eb11655..6c9e045c46b 100644 --- a/fvm/evm/types/result.go +++ b/fvm/evm/types/result.go @@ -6,6 +6,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi" gethCommon "github.com/ethereum/go-ethereum/common" gethTypes "github.com/ethereum/go-ethereum/core/types" + gethBAL "github.com/ethereum/go-ethereum/core/types/bal" gethVM "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/rlp" ) @@ -99,6 +100,8 @@ type Result struct { PrecompiledCalls []byte // StateChangeCommitment captures a commitment over the state change (delta) StateChangeCommitment []byte + // Per-transaction state access footprint for EIP-7928 + StateAccessList *gethBAL.ConstructionBlockAccessList } // Invalid returns true if transaction has been rejected From 10f911e681faad910b4fdcf53478af07bdd8fb8f Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Thu, 25 Jun 2026 10:57:12 +0300 Subject: [PATCH 27/30] Remove obsolete comment regarding usage of StateDB.Finalise() --- fvm/evm/emulator/emulator.go | 2 -- fvm/evm/evm_test.go | 20 ++++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/fvm/evm/emulator/emulator.go b/fvm/evm/emulator/emulator.go index 66cf63edc9e..41ba28c1598 100644 --- a/fvm/evm/emulator/emulator.go +++ b/fvm/evm/emulator/emulator.go @@ -432,8 +432,6 @@ type procedure struct { // commit commits the changes to the state (with optional finalization) func (proc *procedure) commit(finalize bool) (hash.Hash, *gethBAL.ConstructionBlockAccessList, error) { - // Calling `StateDB.Finalise(true)` is currently a no-op, but - // we add it here to be more in line with how its envisioned. bal := proc.state.Finalise(true) stateUpdateCommitment, err := proc.state.Commit(finalize) if err != nil { diff --git a/fvm/evm/evm_test.go b/fvm/evm/evm_test.go index fe9bb31e721..b7feeeec464 100644 --- a/fvm/evm/evm_test.go +++ b/fvm/evm/evm_test.go @@ -2231,7 +2231,7 @@ func TestEOAStateAccountCreationCost(t *testing.T) { testContract *TestContract, testAccount *EOATestAccount, ) { - code := []byte(fmt.Sprintf( + code := fmt.Appendf(nil, ` import EVM from %s import FlowToken from %s @@ -2256,7 +2256,7 @@ func TestEOAStateAccountCreationCost(t *testing.T) { `, sc.EVMContract.Address.HexWithPrefix(), sc.FlowToken.Address.HexWithPrefix(), - )) + ) addr := RandomAddress(t) @@ -2363,7 +2363,7 @@ func TestCOAStateAccountCreationCost(t *testing.T) { testContract *TestContract, testAccount *EOATestAccount, ) { - code := []byte(fmt.Sprintf( + code := fmt.Appendf(nil, ` import EVM from %s import FlowToken from %s @@ -2386,7 +2386,7 @@ func TestCOAStateAccountCreationCost(t *testing.T) { `, sc.EVMContract.Address.HexWithPrefix(), sc.FlowToken.Address.HexWithPrefix(), - )) + ) addr := RandomAddress(t) @@ -3148,7 +3148,7 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { testContract *TestContract, testAccount *EOATestAccount, ) { - code := []byte(fmt.Sprintf( + code := fmt.Appendf(nil, ` import EVM from %s import FlowToken from %s @@ -3177,7 +3177,7 @@ func TestCadenceOwnedAccountFunctionalities(t *testing.T) { `, sc.EVMContract.Address.HexWithPrefix(), sc.FlowToken.Address.HexWithPrefix(), - )) + ) txBody, err := flow.NewTransactionBodyBuilder(). SetScript(code). @@ -7259,7 +7259,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { testAccount *EOATestAccount, ) { sc := systemcontracts.SystemContractsForChain(chain.ChainID()) - code := []byte(fmt.Sprintf( + code := fmt.Appendf(nil, ` import EVM from %s @@ -7275,7 +7275,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { } `, sc.EVMContract.Address.HexWithPrefix(), - )) + ) coinbaseAddr := types.Address{1, 2, 3} coinbaseBalance := getEVMAccountBalance(t, ctx, vm, snapshot, coinbaseAddr) @@ -7365,7 +7365,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { testAccount *EOATestAccount, ) { sc := systemcontracts.SystemContractsForChain(chain.ChainID()) - code := []byte(fmt.Sprintf( + code := fmt.Appendf(nil, ` import EVM from %s @@ -7381,7 +7381,7 @@ func TestEthLogEmissionWithSelfDestruct(t *testing.T) { } `, sc.EVMContract.Address.HexWithPrefix(), - )) + ) coinbaseAddr := types.Address{1, 2, 3} coinbaseBalance := getEVMAccountBalance(t, ctx, vm, snapshot, coinbaseAddr) From 73f30b8190346807568e6b8c25fb668f662dc485 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Mon, 29 Jun 2026 18:23:00 +0300 Subject: [PATCH 28/30] Update gasLimit in VM Bridge bootstrap to 20M --- fvm/bootstrap.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fvm/bootstrap.go b/fvm/bootstrap.go index a31984ec87a..8ddf12ff158 100644 --- a/fvm/bootstrap.go +++ b/fvm/bootstrap.go @@ -1123,7 +1123,7 @@ func (b *bootstrapExecutor) setupVMBridge(serviceAddress flow.Address, env *temp // Arbitrary high gas limit that can be used for all the // EVM transactions to ensure none of them run out of gas - gasLimit := 16_777_216 + gasLimit := 20_000_000 deploymentValue := 0.0 // Retrieve the factory bytecode from the JSON args From ab9f09e312f7d4072469b7d6d7eb4422604870a8 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Tue, 7 Jul 2026 11:17:06 +0300 Subject: [PATCH 29/30] Run make tidy --- go.sum | 2 -- insecure/go.mod | 1 - insecure/go.sum | 2 -- integration/go.mod | 1 - integration/go.sum | 2 -- 5 files changed, 8 deletions(-) diff --git a/go.sum b/go.sum index 268c1b51fcc..213cbcdb476 100644 --- a/go.sum +++ b/go.sum @@ -935,8 +935,6 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onflow/atree v0.16.1 h1:EmlaIz/GwQ39o5agAb2KT2ynt4SHRBkgMMWU5bp6iTs= github.com/onflow/atree v0.16.1/go.mod h1:hiOT/vKK/Zyw34Ru9OFbfEemC5NnQ7SHFB43bN9/4qI= github.com/onflow/boxo v0.0.0-20240201202436-f2477b92f483 h1:LpiQhTAfM9CAmNVEs0n//cBBgCg+vJSiIxTHYUklZ84= diff --git a/insecure/go.mod b/insecure/go.mod index 03a075c9a08..d2a42440a8d 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -213,7 +213,6 @@ require ( github.com/multiformats/go-multistream v0.6.0 // indirect github.com/multiformats/go-varint v0.0.7 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onflow/atree v0.16.1 // indirect github.com/onflow/cadence v1.10.4 // indirect github.com/onflow/fixed-point v0.1.1 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index 9299a0809be..2f8fdee5015 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -885,8 +885,6 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onflow/atree v0.16.1 h1:EmlaIz/GwQ39o5agAb2KT2ynt4SHRBkgMMWU5bp6iTs= github.com/onflow/atree v0.16.1/go.mod h1:hiOT/vKK/Zyw34Ru9OFbfEemC5NnQ7SHFB43bN9/4qI= github.com/onflow/boxo v0.0.0-20240201202436-f2477b92f483 h1:LpiQhTAfM9CAmNVEs0n//cBBgCg+vJSiIxTHYUklZ84= diff --git a/integration/go.mod b/integration/go.mod index 16e6a323a66..7fe16f4fa9a 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -263,7 +263,6 @@ require ( github.com/multiformats/go-multistream v0.6.0 // indirect github.com/multiformats/go-varint v0.0.7 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onflow/atree v0.16.1 // indirect github.com/onflow/fixed-point v0.1.1 // indirect github.com/onflow/flow-evm-bridge v0.2.1 // indirect diff --git a/integration/go.sum b/integration/go.sum index fa58a56beca..5953a6fbc47 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -741,8 +741,6 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onflow/atree v0.16.1 h1:EmlaIz/GwQ39o5agAb2KT2ynt4SHRBkgMMWU5bp6iTs= github.com/onflow/atree v0.16.1/go.mod h1:hiOT/vKK/Zyw34Ru9OFbfEemC5NnQ7SHFB43bN9/4qI= github.com/onflow/boxo v0.0.0-20240201202436-f2477b92f483 h1:LpiQhTAfM9CAmNVEs0n//cBBgCg+vJSiIxTHYUklZ84= From 0d7078e7f23f981f0e9a0aa0b592e850aaa56157 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Tue, 7 Jul 2026 11:41:04 +0300 Subject: [PATCH 30/30] Bump golang.org/x/net dependency to v0.55.0 --- go.mod | 18 +++++++++--------- go.sum | 36 ++++++++++++++++++------------------ insecure/go.mod | 18 +++++++++--------- insecure/go.sum | 36 ++++++++++++++++++------------------ integration/go.mod | 18 +++++++++--------- integration/go.sum | 36 ++++++++++++++++++------------------ 6 files changed, 81 insertions(+), 81 deletions(-) diff --git a/go.mod b/go.mod index 54f8df3e92f..8b59b0ce69a 100644 --- a/go.mod +++ b/go.mod @@ -74,13 +74,13 @@ require ( go.opentelemetry.io/otel/trace v1.43.0 go.uber.org/atomic v1.11.0 go.uber.org/multierr v1.11.0 - golang.org/x/crypto v0.48.0 + golang.org/x/crypto v0.51.0 golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 - golang.org/x/sync v0.19.0 - golang.org/x/sys v0.42.0 - golang.org/x/text v0.34.0 + golang.org/x/sync v0.20.0 + golang.org/x/sys v0.45.0 + golang.org/x/text v0.37.0 golang.org/x/time v0.14.0 - golang.org/x/tools v0.41.0 + golang.org/x/tools v0.44.0 google.golang.org/api v0.267.0 google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 google.golang.org/grpc v1.79.3 @@ -133,7 +133,7 @@ require ( github.com/pion/stun/v3 v3.1.2 // indirect github.com/pion/transport/v4 v4.0.1 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect + golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect ) require ( @@ -350,10 +350,10 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/mock v0.5.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/mod v0.32.0 // indirect - golang.org/x/net v0.50.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.55.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect - golang.org/x/term v0.40.0 // indirect + golang.org/x/term v0.43.0 // indirect gonum.org/v1/gonum v0.16.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect diff --git a/go.sum b/go.sum index 213cbcdb476..ae313e2f14b 100644 --- a/go.sum +++ b/go.sum @@ -1424,8 +1424,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1467,8 +1467,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= -golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1534,8 +1534,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= -golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1573,8 +1573,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1680,10 +1680,10 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa h1:efT73AJZfAAUV7SOip6pWGkwJDzIGiKBZGVzHYa+ve4= +golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -1691,8 +1691,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= -golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1707,8 +1707,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1779,8 +1779,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= -golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/insecure/go.mod b/insecure/go.mod index d2a42440a8d..57824ebf5df 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -319,18 +319,18 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.48.0 // indirect + golang.org/x/crypto v0.51.0 // indirect golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect - golang.org/x/mod v0.32.0 // indirect - golang.org/x/net v0.50.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.55.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect - golang.org/x/term v0.40.0 // indirect - golang.org/x/text v0.34.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.41.0 // indirect + golang.org/x/tools v0.44.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gonum.org/v1/gonum v0.16.0 // indirect google.golang.org/api v0.267.0 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index 2f8fdee5015..85479adfcbf 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -1364,8 +1364,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1406,8 +1406,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= -golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1466,8 +1466,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= -golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1495,8 +1495,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1582,10 +1582,10 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa h1:efT73AJZfAAUV7SOip6pWGkwJDzIGiKBZGVzHYa+ve4= +golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -1593,8 +1593,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= -golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1608,8 +1608,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1676,8 +1676,8 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= -golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/integration/go.mod b/integration/go.mod index 7fe16f4fa9a..e970d59d13e 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -42,7 +42,7 @@ require ( go.uber.org/atomic v1.11.0 go.uber.org/mock v0.5.0 golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 - golang.org/x/sync v0.19.0 + golang.org/x/sync v0.20.0 google.golang.org/grpc v1.79.3 google.golang.org/protobuf v1.36.11 gopkg.in/yaml.v3 v3.0.1 @@ -367,16 +367,16 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.48.0 // indirect - golang.org/x/mod v0.32.0 // indirect - golang.org/x/net v0.50.0 // indirect + golang.org/x/crypto v0.51.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.55.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect - golang.org/x/term v0.40.0 // indirect - golang.org/x/text v0.34.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.41.0 // indirect + golang.org/x/tools v0.44.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gonum.org/v1/gonum v0.16.0 // indirect google.golang.org/api v0.267.0 // indirect diff --git a/integration/go.sum b/integration/go.sum index 5953a6fbc47..90689749358 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -1169,8 +1169,8 @@ golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo= golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= @@ -1187,8 +1187,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= -golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1224,8 +1224,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= -golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1243,8 +1243,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1294,10 +1294,10 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa h1:efT73AJZfAAUV7SOip6pWGkwJDzIGiKBZGVzHYa+ve4= +golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -1307,8 +1307,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= -golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -1322,8 +1322,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1350,8 +1350,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= -golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=