mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 06:36:43 +00:00
Merge branch 'ethereum:master' into gethintegration
This commit is contained in:
commit
51519f6799
9 changed files with 96 additions and 146 deletions
116
accounts/abi/abigen/testdata/v2/structs-abi.go.txt
vendored
116
accounts/abi/abigen/testdata/v2/structs-abi.go.txt
vendored
|
|
@ -1,116 +0,0 @@
|
|||
// Code generated via abigen V2 - DO NOT EDIT.
|
||||
// This file is a generated binding and any manual changes will be lost.
|
||||
|
||||
package v1bindtests
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/accounts/abi"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi/bind/v2"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var (
|
||||
_ = bytes.Equal
|
||||
_ = errors.New
|
||||
_ = big.NewInt
|
||||
_ = common.Big1
|
||||
_ = types.BloomLookup
|
||||
_ = abi.ConvertType
|
||||
)
|
||||
|
||||
// Struct0 is an auto generated low-level Go binding around an user-defined struct.
|
||||
type Struct0 struct {
|
||||
B [32]byte
|
||||
}
|
||||
|
||||
// StructsMetaData contains all meta data concerning the Structs contract.
|
||||
var StructsMetaData = bind.MetaData{
|
||||
ABI: "[{\"inputs\":[],\"name\":\"F\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"B\",\"type\":\"bytes32\"}],\"internalType\":\"structStructs.A[]\",\"name\":\"a\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"c\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"d\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"G\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"B\",\"type\":\"bytes32\"}],\"internalType\":\"structStructs.A[]\",\"name\":\"a\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
|
||||
ID: "Structs",
|
||||
}
|
||||
|
||||
// Structs is an auto generated Go binding around an Ethereum contract.
|
||||
type Structs struct {
|
||||
abi abi.ABI
|
||||
}
|
||||
|
||||
// NewStructs creates a new instance of Structs.
|
||||
func NewStructs() *Structs {
|
||||
parsed, err := StructsMetaData.ParseABI()
|
||||
if err != nil {
|
||||
panic(errors.New("invalid ABI: " + err.Error()))
|
||||
}
|
||||
return &Structs{abi: *parsed}
|
||||
}
|
||||
|
||||
// Instance creates a wrapper for a deployed contract instance at the given address.
|
||||
<<<<<<< HEAD
|
||||
// Use this to create the instance object passed to abigen v2 library functions Call, Transact, etc.
|
||||
func (c *Structs) Instance(backend bind.ContractBackend, addr common.Address) *bind.BoundContract {
|
||||
return bind.NewBoundContract(addr, c.abi, backend, backend, backend)
|
||||
=======
|
||||
// Use this to create the instance object passed to abigen v2 library functions Call,
|
||||
// Transact, etc.
|
||||
func (c *Structs) Instance(backend bind.ContractBackend, addr common.Address) bind.BoundContract {
|
||||
return bind.NewBoundContract(backend, addr, c.abi)
|
||||
>>>>>>> 854c25e086 (accounts/abi/abigen: improve v2 template)
|
||||
}
|
||||
|
||||
// F is the Go binding used to pack the parameters required for calling
|
||||
// the contract method 0x28811f59.
|
||||
//
|
||||
// Solidity: function F() view returns((bytes32)[] a, uint256[] c, bool[] d)
|
||||
func (structs *Structs) PackF() ([]byte, error) {
|
||||
return structs.abi.Pack("F")
|
||||
}
|
||||
|
||||
// FOutput serves as a container for the return parameters of contract
|
||||
// method F.
|
||||
type FOutput struct {
|
||||
A []Struct0
|
||||
C []*big.Int
|
||||
D []bool
|
||||
}
|
||||
|
||||
// UnpackF is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x28811f59.
|
||||
//
|
||||
// Solidity: function F() view returns((bytes32)[] a, uint256[] c, bool[] d)
|
||||
func (structs *Structs) UnpackF(data []byte) (*FOutput, error) {
|
||||
out, err := structs.abi.Unpack("F", data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ret := new(FOutput)
|
||||
ret.A = *abi.ConvertType(out[0], new([]Struct0)).(*[]Struct0)
|
||||
ret.C = *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int)
|
||||
ret.D = *abi.ConvertType(out[2], new([]bool)).(*[]bool)
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
// G is the Go binding used to pack the parameters required for calling
|
||||
// the contract method 0x6fecb623.
|
||||
//
|
||||
// Solidity: function G() view returns((bytes32)[] a)
|
||||
func (structs *Structs) PackG() ([]byte, error) {
|
||||
return structs.abi.Pack("G")
|
||||
}
|
||||
|
||||
// UnpackG is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x6fecb623.
|
||||
//
|
||||
// Solidity: function G() view returns((bytes32)[] a)
|
||||
func (structs *Structs) UnpackG(data []byte) (*[]Struct0, error) {
|
||||
out, err := structs.abi.Unpack("G", data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([]Struct0)).(*[]Struct0)
|
||||
return &out0, nil
|
||||
}
|
||||
|
|
@ -2543,14 +2543,22 @@ func (bc *BlockChain) reportBlock(block *types.Block, res *ProcessResult, err er
|
|||
// logForkReadiness will write a log when a future fork is scheduled, but not
|
||||
// active. This is useful so operators know their client is ready for the fork.
|
||||
func (bc *BlockChain) logForkReadiness(block *types.Block) {
|
||||
c := bc.Config()
|
||||
current, last := c.LatestFork(block.Time()), c.LatestFork(math.MaxUint64)
|
||||
t := c.Timestamp(last)
|
||||
if t == nil {
|
||||
config := bc.Config()
|
||||
current, last := config.LatestFork(block.Time()), config.LatestFork(math.MaxUint64)
|
||||
|
||||
// Short circuit if the timestamp of the last fork is undefined,
|
||||
// or if the network has already passed the last configured fork.
|
||||
t := config.Timestamp(last)
|
||||
if t == nil || current >= last {
|
||||
return
|
||||
}
|
||||
at := time.Unix(int64(*t), 0)
|
||||
if current < last && time.Now().After(bc.lastForkReadyAlert.Add(forkReadyInterval)) {
|
||||
|
||||
// Only log if:
|
||||
// - Current time is before the fork activation time
|
||||
// - Enough time has passed since last alert
|
||||
now := time.Now()
|
||||
if now.Before(at) && now.After(bc.lastForkReadyAlert.Add(forkReadyInterval)) {
|
||||
log.Info("Ready for fork activation", "fork", last, "date", at.Format(time.RFC822),
|
||||
"remaining", time.Until(at).Round(time.Second), "timestamp", at.Unix())
|
||||
bc.lastForkReadyAlert = time.Now()
|
||||
|
|
|
|||
|
|
@ -298,7 +298,7 @@ func (s *StateDB) SubRefund(gas uint64) {
|
|||
}
|
||||
|
||||
// Exist reports whether the given account address exists in the state.
|
||||
// Notably this also returns true for self-destructed accounts.
|
||||
// Notably this also returns true for self-destructed accounts within the current transaction.
|
||||
func (s *StateDB) Exist(addr common.Address) bool {
|
||||
return s.getStateObject(addr) != nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ type StateDB interface {
|
|||
SelfDestruct6780(common.Address) (uint256.Int, bool)
|
||||
|
||||
// Exist reports whether the given account exists in state.
|
||||
// Notably this should also return true for self-destructed accounts.
|
||||
// Notably this also returns true for self-destructed accounts within the current transaction.
|
||||
Exist(common.Address) bool
|
||||
// Empty returns whether the given account is empty. Empty
|
||||
// is defined according to EIP161 (balance = nonce = code = 0).
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/consensys/gnark-crypto/ecc/bls12-381/fr"
|
||||
gokzg4844 "github.com/crate-crypto/go-kzg-4844"
|
||||
gokzg4844 "github.com/crate-crypto/go-eth-kzg"
|
||||
)
|
||||
|
||||
func randFieldElement() [32]byte {
|
||||
|
|
|
|||
|
|
@ -217,7 +217,13 @@ func (eth *Ethereum) stateAtBlock(ctx context.Context, block *types.Block, reexe
|
|||
return eth.pathState(block)
|
||||
}
|
||||
|
||||
// stateAtTransaction returns the execution environment of a certain transaction.
|
||||
// stateAtTransaction returns the execution environment of a certain
|
||||
// transaction.
|
||||
//
|
||||
// Note: when a block is empty and the state for tx index 0 is requested, this
|
||||
// function will return the state of block after the pre-block operations have
|
||||
// been completed (e.g. updating system contracts), but before post-block
|
||||
// operations are completed (e.g. processing withdrawals).
|
||||
func (eth *Ethereum) stateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (*types.Transaction, vm.BlockContext, *state.StateDB, tracers.StateReleaseFunc, error) {
|
||||
// Short circuit if it's genesis block.
|
||||
if block.NumberU64() == 0 {
|
||||
|
|
@ -245,7 +251,7 @@ func (eth *Ethereum) stateAtTransaction(ctx context.Context, block *types.Block,
|
|||
core.ProcessParentBlockHash(block.ParentHash(), evm)
|
||||
}
|
||||
if txIndex == 0 && len(block.Transactions()) == 0 {
|
||||
return nil, vm.BlockContext{}, statedb, release, nil
|
||||
return nil, context, statedb, release, nil
|
||||
}
|
||||
// Recompute transactions up to the target index.
|
||||
signer := types.MakeSigner(eth.blockchain.Config(), block.Number(), block.Time())
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import (
|
|||
"bytes"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
|
@ -57,6 +58,7 @@ const (
|
|||
type Database struct {
|
||||
fn string // filename for reporting
|
||||
db *pebble.DB // Underlying pebble storage engine
|
||||
namespace string // Namespace for metrics
|
||||
|
||||
compTimeMeter *metrics.Meter // Meter for measuring the total time spent in database compaction
|
||||
compReadMeter *metrics.Meter // Meter for measuring the data read during compaction
|
||||
|
|
@ -71,7 +73,17 @@ type Database struct {
|
|||
nonlevel0CompGauge *metrics.Gauge // Gauge for tracking the number of table compaction in non0 level
|
||||
seekCompGauge *metrics.Gauge // Gauge for tracking the number of table compaction caused by read opt
|
||||
manualMemAllocGauge *metrics.Gauge // Gauge for tracking amount of non-managed memory currently allocated
|
||||
|
||||
liveMemTablesGauge *metrics.Gauge // Gauge for tracking the number of live memory tables
|
||||
zombieMemTablesGauge *metrics.Gauge // Gauge for tracking the number of zombie memory tables
|
||||
blockCacheHitGauge *metrics.Gauge // Gauge for tracking the number of total hit in the block cache
|
||||
blockCacheMissGauge *metrics.Gauge // Gauge for tracking the number of total miss in the block cache
|
||||
tableCacheHitGauge *metrics.Gauge // Gauge for tracking the number of total hit in the table cache
|
||||
tableCacheMissGauge *metrics.Gauge // Gauge for tracking the number of total miss in the table cache
|
||||
filterHitGauge *metrics.Gauge // Gauge for tracking the number of total hit in bloom filter
|
||||
filterMissGauge *metrics.Gauge // Gauge for tracking the number of total miss in bloom filter
|
||||
estimatedCompDebtGauge *metrics.Gauge // Gauge for tracking the number of bytes that need to be compacted
|
||||
liveCompGauge *metrics.Gauge // Gauge for tracking the number of in-progress compactions
|
||||
liveCompSizeGauge *metrics.Gauge // Gauge for tracking the size of in-progress compactions
|
||||
levelsGauge []*metrics.Gauge // Gauge for tracking the number of tables in levels
|
||||
|
||||
quitLock sync.RWMutex // Mutex protecting the quit channel and the closed flag
|
||||
|
|
@ -88,6 +100,7 @@ type Database struct {
|
|||
|
||||
writeStalled atomic.Bool // Flag whether the write is stalled
|
||||
writeDelayStartTime time.Time // The start time of the latest write stall
|
||||
writeDelayReason string // The reason of the latest write stall
|
||||
writeDelayCount atomic.Int64 // Total number of write stall counts
|
||||
writeDelayTime atomic.Int64 // Total time spent in write stalls
|
||||
|
||||
|
|
@ -120,11 +133,30 @@ func (d *Database) onWriteStallBegin(b pebble.WriteStallBeginInfo) {
|
|||
d.writeDelayStartTime = time.Now()
|
||||
d.writeDelayCount.Add(1)
|
||||
d.writeStalled.Store(true)
|
||||
|
||||
// Take just the first word of the reason. These are two potential
|
||||
// reasons for the write stall:
|
||||
// - memtable count limit reached
|
||||
// - L0 file count limit exceeded
|
||||
reason := b.Reason
|
||||
if i := strings.IndexByte(reason, ' '); i != -1 {
|
||||
reason = reason[:i]
|
||||
}
|
||||
if reason == "L0" || reason == "memtable" {
|
||||
d.writeDelayReason = reason
|
||||
metrics.GetOrRegisterGauge(d.namespace+"stall/count/"+reason, nil).Inc(1)
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Database) onWriteStallEnd() {
|
||||
d.writeDelayTime.Add(int64(time.Since(d.writeDelayStartTime)))
|
||||
d.writeStalled.Store(false)
|
||||
|
||||
if d.writeDelayReason != "" {
|
||||
metrics.GetOrRegisterResettingTimer(d.namespace+"stall/time/"+d.writeDelayReason, nil).UpdateSince(d.writeDelayStartTime)
|
||||
d.writeDelayReason = ""
|
||||
}
|
||||
d.writeDelayStartTime = time.Time{}
|
||||
}
|
||||
|
||||
// panicLogger is just a noop logger to disable Pebble's internal logger.
|
||||
|
|
@ -270,6 +302,17 @@ func New(file string, cache int, handles int, namespace string, readonly bool) (
|
|||
db.nonlevel0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/nonlevel0", nil)
|
||||
db.seekCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/seek", nil)
|
||||
db.manualMemAllocGauge = metrics.GetOrRegisterGauge(namespace+"memory/manualalloc", nil)
|
||||
db.liveMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/live", nil)
|
||||
db.zombieMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/zombie", nil)
|
||||
db.blockCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/hit", nil)
|
||||
db.blockCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/miss", nil)
|
||||
db.tableCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/hit", nil)
|
||||
db.tableCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/miss", nil)
|
||||
db.filterHitGauge = metrics.GetOrRegisterGauge(namespace+"filter/hit", nil)
|
||||
db.filterMissGauge = metrics.GetOrRegisterGauge(namespace+"filter/miss", nil)
|
||||
db.estimatedCompDebtGauge = metrics.GetOrRegisterGauge(namespace+"compact/estimateDebt", nil)
|
||||
db.liveCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/count", nil)
|
||||
db.liveCompSizeGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/size", nil)
|
||||
|
||||
// Start up the metrics gathering and return
|
||||
go db.meter(metricsGatheringInterval, namespace)
|
||||
|
|
@ -517,6 +560,18 @@ func (d *Database) meter(refresh time.Duration, namespace string) {
|
|||
d.nonlevel0CompGauge.Update(nonLevel0CompCount)
|
||||
d.level0CompGauge.Update(level0CompCount)
|
||||
d.seekCompGauge.Update(stats.Compact.ReadCount)
|
||||
d.liveCompGauge.Update(stats.Compact.NumInProgress)
|
||||
d.liveCompSizeGauge.Update(stats.Compact.InProgressBytes)
|
||||
|
||||
d.liveMemTablesGauge.Update(stats.MemTable.Count)
|
||||
d.zombieMemTablesGauge.Update(stats.MemTable.ZombieCount)
|
||||
d.estimatedCompDebtGauge.Update(int64(stats.Compact.EstimatedDebt))
|
||||
d.tableCacheHitGauge.Update(stats.TableCache.Hits)
|
||||
d.tableCacheMissGauge.Update(stats.TableCache.Misses)
|
||||
d.blockCacheHitGauge.Update(stats.BlockCache.Hits)
|
||||
d.blockCacheMissGauge.Update(stats.BlockCache.Misses)
|
||||
d.filterHitGauge.Update(stats.Filter.Hits)
|
||||
d.filterMissGauge.Update(stats.Filter.Misses)
|
||||
|
||||
for i, level := range stats.Levels {
|
||||
// Append metrics for additional layers
|
||||
|
|
|
|||
1
go.mod
1
go.mod
|
|
@ -16,7 +16,6 @@ require (
|
|||
github.com/consensys/gnark-crypto v0.16.0
|
||||
github.com/crate-crypto/go-eth-kzg v1.3.0
|
||||
github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a
|
||||
github.com/crate-crypto/go-kzg-4844 v1.1.0
|
||||
github.com/davecgh/go-spew v1.1.1
|
||||
github.com/deckarep/golang-set/v2 v2.6.0
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1
|
||||
|
|
|
|||
2
go.sum
2
go.sum
|
|
@ -84,8 +84,6 @@ github.com/crate-crypto/go-eth-kzg v1.3.0 h1:05GrhASN9kDAidaFJOda6A4BEvgvuXbazXg
|
|||
github.com/crate-crypto/go-eth-kzg v1.3.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/crate-crypto/go-kzg-4844 v1.1.0 h1:EN/u9k2TF6OWSHrCCDBBU6GLNMq88OspHHlMnHfoyU4=
|
||||
github.com/crate-crypto/go-kzg-4844 v1.1.0/go.mod h1:JolLjpSff1tCCJKaJx4psrlEdlXuJEC996PL3tTAFks=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
|
|
|||
Loading…
Reference in a new issue