diff --git a/clients/teku-bn/teku_bn.sh b/clients/teku-bn/teku_bn.sh index 7a053fdf6a..077c270c85 100755 --- a/clients/teku-bn/teku_bn.sh +++ b/clients/teku-bn/teku_bn.sh @@ -76,4 +76,6 @@ echo Starting Teku Beacon Node --data-storage-mode=ARCHIVE \ --Xstartup-target-peer-count=0 \ --p2p-subscribe-all-subnets-enabled \ - --Xtrusted-setup="$trusted_setup_path" + --Xtrusted-setup="$trusted_setup_path" \ + --Xpeer-rate-limit=100000 \ + --Xpeer-request-limit=1000 diff --git a/configs/cancun.yaml b/configs/cancun.yaml index 16eb785fe0..faaa66d957 100644 --- a/configs/cancun.yaml +++ b/configs/cancun.yaml @@ -39,6 +39,17 @@ github: paradigmxyz/reth tag: main +- client: teku-bn + nametag: evil + build_args: + baseimage: ethpandaops/teku + tag: evil-blobs-fb6275a +- client: teku-vc + nametag: evil + build_args: + baseimage: ethpandaops/teku + tag: evil-blobs-fb6275a + - client: teku-bn - client: teku-vc diff --git a/go.mod b/go.mod index 01582a1704..6d7936bc22 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/VictoriaMetrics/fastcache v1.12.0 // indirect github.com/allegro/bigcache v1.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.5.0 // indirect + github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cockroachdb/errors v1.9.1 // indirect diff --git a/go.sum b/go.sum index c2c5cd16fe..3a1cfec8d7 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,8 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5 github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.5.0 h1:NpE8frKRLGHIcEzkR+gZhiioW1+WbYV6fKwD6ZIpQT8= -github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= +github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= diff --git a/hivesim/hive_test.go b/hivesim/hive_test.go index 48863b109e..64c5053cdb 100644 --- a/hivesim/hive_test.go +++ b/hivesim/hive_test.go @@ -400,9 +400,9 @@ func TestStartClientInitialNetworks(t *testing.T) { } func newFakeAPI(hooks *fakes.BackendHooks) (*libhive.TestManager, *httptest.Server) { - defs := map[string]*libhive.ClientDefinition{ - "client-1": {Name: "client-1", Image: "/ignored/in/api", Version: "client-1-version", Meta: libhive.ClientMetadata{Roles: []string{"eth1"}}}, - "client-2": {Name: "client-2", Image: "/not/exposed/", Version: "client-2-version", Meta: libhive.ClientMetadata{Roles: []string{"beacon"}}}, + defs := []*libhive.ClientDefinition{ + {Name: "client-1", Image: "/ignored/in/api", Version: "client-1-version", Meta: libhive.ClientMetadata{Roles: []string{"eth1"}}}, + {Name: "client-2", Image: "/not/exposed/", Version: "client-2-version", Meta: libhive.ClientMetadata{Roles: []string{"beacon"}}}, } env := libhive.SimEnv{} backend := fakes.NewContainerBackend(hooks) diff --git a/internal/libhive/api.go b/internal/libhive/api.go index d0a051e3fa..06c89876d7 100644 --- a/internal/libhive/api.go +++ b/internal/libhive/api.go @@ -10,7 +10,6 @@ import ( "net/http" "path" "path/filepath" - "sort" "strconv" "strings" "time" @@ -61,14 +60,7 @@ type simAPI struct { // getClientTypes returns all known client types. func (api *simAPI) getClientTypes(w http.ResponseWriter, r *http.Request) { - clients := make([]*ClientDefinition, 0, len(api.tm.clientDefs)) - for _, def := range api.tm.clientDefs { - clients = append(clients, def) - } - sort.Slice(clients, func(i, j int) bool { - return clients[i].Name < clients[j].Name - }) - serveJSON(w, clients) + serveJSON(w, api.tm.clientDefs) } // startSuite starts a suite. @@ -332,11 +324,12 @@ func (api *simAPI) checkClient(req *simapi.NodeConfig) (*ClientDefinition, error if req.Client == "" { return nil, errors.New("missing client type in start request") } - def, ok := api.tm.clientDefs[req.Client] - if !ok { - return nil, errors.New("unknown client type in start request") + for _, client := range api.tm.clientDefs { + if client.Name == req.Client { + return client, nil + } } - return def, nil + return nil, errors.New("unknown client type in start request") } // checkClientNetworks pre-checks the existence of initial networks for a client container. diff --git a/internal/libhive/run.go b/internal/libhive/run.go index 37e0f8bd11..42b985e834 100644 --- a/internal/libhive/run.go +++ b/internal/libhive/run.go @@ -30,7 +30,7 @@ type Runner struct { // This holds the image names of all built simulators. simImages map[string]string - clientDefs map[string]*ClientDefinition + clientDefs []*ClientDefinition } func NewRunner(inv Inventory, b Builder, cb ContainerBackend) *Runner { @@ -58,11 +58,11 @@ func (r *Runner) buildClients(ctx context.Context, clientList []ClientDesignator return errors.New("client list is empty, cannot simulate") } - r.clientDefs = make(map[string]*ClientDefinition, len(clientList)) + r.clientDefs = make([]*ClientDefinition, len(clientList)) var anyBuilt bool log15.Info(fmt.Sprintf("building %d clients...", len(clientList))) - for _, client := range clientList { + for i, client := range clientList { image, err := r.builder.BuildClientImage(ctx, client) if err != nil { continue @@ -72,7 +72,7 @@ func (r *Runner) buildClients(ctx context.Context, clientList []ClientDesignator if err != nil { log15.Warn("can't read version info of "+client.Client, "image", image, "err", err) } - r.clientDefs[client.Name()] = &ClientDefinition{ + r.clientDefs[i] = &ClientDefinition{ Name: client.Name(), Version: strings.TrimSpace(string(version)), Image: image, @@ -117,8 +117,11 @@ func (r *Runner) RunDevMode(ctx context.Context, env SimEnv, endpoint string) er if err := createWorkspace(env.LogDir); err != nil { return err } - - tm := NewTestManager(env, r.container, r.clientDefs) + clientDefs := make([]*ClientDefinition, 0) + for _, def := range r.clientDefs { + clientDefs = append(clientDefs, def) + } + tm := NewTestManager(env, r.container, clientDefs) defer func() { if err := tm.Terminate(); err != nil { log15.Error("could not terminate test manager", "error", err) @@ -159,19 +162,23 @@ HIVE_SIMULATOR=http://%v func (r *Runner) run(ctx context.Context, sim string, env SimEnv) (SimResult, error) { log15.Info(fmt.Sprintf("running simulation: %s", sim)) - clientDefs := make(map[string]*ClientDefinition) + clientDefs := make([]*ClientDefinition, 0) if env.ClientList == nil { // Unspecified, make all clients available. - for name, def := range r.clientDefs { - clientDefs[name] = def - } + clientDefs = append(clientDefs, r.clientDefs...) } else { for _, client := range env.ClientList { - def, ok := r.clientDefs[client.Client] - if !ok { + found := false + for _, def := range r.clientDefs { + if def.Name == client.Client { + clientDefs = append(clientDefs, def) + found = true + break + } + } + if !found { return SimResult{}, fmt.Errorf("unknown client %q in simulation client list", client.Client) } - clientDefs[client.Client] = def } } diff --git a/internal/libhive/testmanager.go b/internal/libhive/testmanager.go index beee5ff621..18d5ffedae 100644 --- a/internal/libhive/testmanager.go +++ b/internal/libhive/testmanager.go @@ -61,7 +61,7 @@ type SimResult struct { type TestManager struct { config SimEnv backend ContainerBackend - clientDefs map[string]*ClientDefinition + clientDefs []*ClientDefinition simContainerID string simLogFile string @@ -80,7 +80,7 @@ type TestManager struct { results map[TestSuiteID]*TestSuite } -func NewTestManager(config SimEnv, b ContainerBackend, clients map[string]*ClientDefinition) *TestManager { +func NewTestManager(config SimEnv, b ContainerBackend, clients []*ClientDefinition) *TestManager { return &TestManager{ clientDefs: clients, config: config, diff --git a/simulators/eth2/common/chain_generators/pow/pow.go b/simulators/eth2/common/chain_generators/pow/pow.go deleted file mode 100644 index d167d4d28f..0000000000 --- a/simulators/eth2/common/chain_generators/pow/pow.go +++ /dev/null @@ -1,89 +0,0 @@ -package pow - -import ( - "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - execution_config "github.com/ethereum/hive/simulators/eth2/common/config/execution" -) - -var Defaults = ethash.Config{ - PowMode: ethash.ModeNormal, - CachesInMem: 2, - DatasetsOnDisk: 2, - DatasetDir: "/ethash", -} - -type ChainGenerator struct { - BlockCount int - ethash.Config - GenFunction func(int, *core.BlockGen) - blocks []*types.Block -} - -// instaSeal wraps a consensus engine with instant block sealing. When a block is produced -// using FinalizeAndAssemble, it also applies Seal. -type instaSeal struct{ consensus.Engine } - -// FinalizeAndAssemble implements consensus.Engine, accumulating the block and uncle rewards, -// setting the final state and assembling the block. -func (e instaSeal) FinalizeAndAssemble( - chain consensus.ChainHeaderReader, - header *types.Header, - state *state.StateDB, - txs []*types.Transaction, - uncles []*types.Header, - receipts []*types.Receipt, - withdrawals []*types.Withdrawal, -) (*types.Block, error) { - block, err := e.Engine.FinalizeAndAssemble( - chain, - header, - state, - txs, - uncles, - receipts, - withdrawals, - ) - if err != nil { - return nil, err - } - sealedBlock := make(chan *types.Block, 1) - if err = e.Engine.Seal(nil, block, sealedBlock, nil); err != nil { - return nil, err - } - return <-sealedBlock, nil -} - -func (p *ChainGenerator) Generate( - genesis *execution_config.ExecutionGenesis, -) ([]*types.Block, error) { - // We generate a new chain only if the generator had not generated one already. - // This is done because the chain generators can be reused on different clients to ensure - // they start with the same chain. - if p.blocks != nil { - return p.blocks, nil - } - engine := ethash.New(p.Config, nil, false) - insta := instaSeal{engine} - _, p.blocks, _ = core.GenerateChainWithGenesis( - genesis.Genesis, - insta, - p.BlockCount, - p.GenFunction, - ) - return p.blocks, nil -} - -func (p *ChainGenerator) Blocks() []*types.Block { - return p.blocks -} - -func (p *ChainGenerator) Head() *types.Block { - if p.blocks == nil || len(p.blocks) == 0 { - return nil - } - return p.blocks[len(p.blocks)-1] -} diff --git a/simulators/eth2/common/config/config.go b/simulators/eth2/common/config/config.go index af9db03cf8..ed71f910ee 100644 --- a/simulators/eth2/common/config/config.go +++ b/simulators/eth2/common/config/config.go @@ -3,8 +3,62 @@ package config import ( "bytes" "io" + "math/big" ) +type ForkConfig struct { + TerminalTotalDifficulty *big.Int `json:"terminal_total_difficulty,omitempty"` + AltairForkEpoch *big.Int `json:"altair_fork_epoch,omitempty"` + BellatrixForkEpoch *big.Int `json:"bellatrix_fork_epoch,omitempty"` + CapellaForkEpoch *big.Int `json:"capella_fork_epoch,omitempty"` + DenebForkEpoch *big.Int `json:"deneb_fork_epoch,omitempty"` +} + +// Choose a configuration value. `b` takes precedence +func choose(a, b *big.Int) *big.Int { + if b != nil { + return new(big.Int).Set(b) + } + if a != nil { + return new(big.Int).Set(a) + } + return nil +} + +// Join two configurations. `b` takes precedence +func (a *ForkConfig) Join(b *ForkConfig) *ForkConfig { + if b == nil { + return a + } + if a == nil { + return b + } + c := ForkConfig{} + c.AltairForkEpoch = choose(a.AltairForkEpoch, b.AltairForkEpoch) + c.BellatrixForkEpoch = choose(a.BellatrixForkEpoch, b.BellatrixForkEpoch) + c.CapellaForkEpoch = choose(a.CapellaForkEpoch, b.CapellaForkEpoch) + c.DenebForkEpoch = choose(a.DenebForkEpoch, b.DenebForkEpoch) + c.TerminalTotalDifficulty = choose( + a.TerminalTotalDifficulty, + b.TerminalTotalDifficulty, + ) + return &c +} + +func (c *ForkConfig) GenesisBeaconFork() string { + if c.DenebForkEpoch != nil && c.DenebForkEpoch.Uint64() == 0 { + return "deneb" + } else if c.CapellaForkEpoch != nil && c.CapellaForkEpoch.Uint64() == 0 { + return "capella" + } else if c.BellatrixForkEpoch != nil && c.BellatrixForkEpoch.Uint64() == 0 { + return "bellatrix" + } else if c.AltairForkEpoch != nil && c.AltairForkEpoch.Uint64() == 0 { + return "altair" + } else { + return "phase0" + } +} + func BytesSource(data []byte) func() (io.ReadCloser, error) { return func() (io.ReadCloser, error) { return io.NopCloser(bytes.NewReader(data)), nil diff --git a/simulators/eth2/common/config/consensus/consensus_config.go b/simulators/eth2/common/config/consensus/consensus_config.go index 46b14d3297..81f5cb5000 100644 --- a/simulators/eth2/common/config/consensus/consensus_config.go +++ b/simulators/eth2/common/config/consensus/consensus_config.go @@ -3,15 +3,61 @@ package consensus_config import ( "bytes" "fmt" + "math/big" - "github.com/ethereum/go-ethereum/core" + el_common "github.com/ethereum/go-ethereum/common" "github.com/ethereum/hive/hivesim" "github.com/ethereum/hive/simulators/eth2/common/config" + execution_config "github.com/ethereum/hive/simulators/eth2/common/config/execution" + "github.com/holiman/uint256" "github.com/protolambda/zrnt/eth2/beacon/common" "github.com/protolambda/ztyp/codec" + "github.com/protolambda/ztyp/tree" + "github.com/protolambda/ztyp/view" "gopkg.in/yaml.v2" ) +type ConsensusConfig struct { + ValidatorCount *big.Int `json:"validator_count,omitempty"` + KeyTranches *big.Int `json:"key_tranches,omitempty"` + SlotsPerEpoch *big.Int `json:"slots_per_epoch,omitempty"` + SlotTime *big.Int `json:"slot_time,omitempty"` + SafeSlotsToImportOptimistically *big.Int `json:"safe_slots_to_import_optimistically,omitempty"` + ExtraShares *big.Int `json:"extra_shares,omitempty"` +} + +// Choose a configuration value. `b` takes precedence +func choose(a, b *big.Int) *big.Int { + if b != nil { + return new(big.Int).Set(b) + } + if a != nil { + return new(big.Int).Set(a) + } + return nil +} + +// Join two configurations. `b` takes precedence +func (a *ConsensusConfig) Join(b *ConsensusConfig) *ConsensusConfig { + if b == nil { + return a + } + if a == nil { + return b + } + c := ConsensusConfig{} + c.ValidatorCount = choose(a.ValidatorCount, b.ValidatorCount) + c.KeyTranches = choose(a.KeyTranches, b.KeyTranches) + c.SlotsPerEpoch = choose(a.SlotsPerEpoch, b.SlotsPerEpoch) + c.SlotTime = choose(a.SlotTime, b.SlotTime) + c.SafeSlotsToImportOptimistically = choose( + a.SafeSlotsToImportOptimistically, + b.SafeSlotsToImportOptimistically, + ) + c.ExtraShares = choose(a.ExtraShares, b.ExtraShares) + return &c +} + func StateBundle(state common.BeaconState) (hivesim.StartOption, error) { var stateBytes bytes.Buffer if err := state.Serialize(codec.NewEncodingWriter(&stateBytes)); err != nil { @@ -23,9 +69,106 @@ func StateBundle(state common.BeaconState) (hivesim.StartOption, error) { ), nil } +func BuildSpec( + baseSpec *common.Spec, + forkConfig *config.ForkConfig, + consensusConfig *ConsensusConfig, + depositAddress common.Eth1Address, + executionGenesis *execution_config.ExecutionGenesis, +) (*common.Spec, error) { + // Generate beacon spec + // TODO: specify build-target based on preset, to run clients in mainnet or minimal mode. + // copy the default mainnet config, and make some minimal modifications for testnet usage + specCpy := *baseSpec + spec := &specCpy + spec.Config.DEPOSIT_CONTRACT_ADDRESS = depositAddress + spec.Config.DEPOSIT_CHAIN_ID = view.Uint64View(executionGenesis.ChainID()) + spec.Config.DEPOSIT_NETWORK_ID = view.Uint64View(executionGenesis.NetworkID()) + spec.Config.ETH1_FOLLOW_DISTANCE = 1 + + for _, currentConfig := range []struct { + ForkName string + VersionConfig *common.Version + EpochConfig *common.Epoch + ForkConfig *big.Int + }{ + { + ForkName: "genesis", + VersionConfig: &spec.Config.GENESIS_FORK_VERSION, + EpochConfig: nil, + ForkConfig: nil, + }, + { + ForkName: "altair", + VersionConfig: &spec.Config.ALTAIR_FORK_VERSION, + EpochConfig: &spec.Config.ALTAIR_FORK_EPOCH, + ForkConfig: forkConfig.AltairForkEpoch, + }, + { + ForkName: "bellatrix", + VersionConfig: &spec.Config.BELLATRIX_FORK_VERSION, + EpochConfig: &spec.Config.BELLATRIX_FORK_EPOCH, + ForkConfig: forkConfig.BellatrixForkEpoch, + }, + { + ForkName: "capella", + VersionConfig: &spec.Config.CAPELLA_FORK_VERSION, + EpochConfig: &spec.Config.CAPELLA_FORK_EPOCH, + ForkConfig: forkConfig.CapellaForkEpoch, + }, + { + ForkName: "deneb", + VersionConfig: &spec.Config.DENEB_FORK_VERSION, + EpochConfig: &spec.Config.DENEB_FORK_EPOCH, + ForkConfig: forkConfig.DenebForkEpoch, + }, + } { + // Modify version to avoid conflicts with base spec values + if currentConfig.VersionConfig == nil { + return nil, fmt.Errorf("VersionConfig was not configured for %s", currentConfig.ForkName) + } + currentConfig.VersionConfig[3] = 0x0a + fmt.Printf("Fork %s version %x\n", currentConfig.ForkName, *currentConfig.VersionConfig) + + // Adjust epoch to the fork configuration if it is set + if currentConfig.EpochConfig != nil && currentConfig.ForkConfig != nil { + *currentConfig.EpochConfig = common.Epoch(currentConfig.ForkConfig.Uint64()) + fmt.Printf("Fork %s at epoch %d\n", currentConfig.ForkName, currentConfig.ForkConfig.Uint64()) + } + } + + if consensusConfig.ValidatorCount == nil { + return nil, fmt.Errorf("ValidatorCount was not configured") + } + spec.Config.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT = view.Uint64View( + consensusConfig.ValidatorCount.Uint64(), + ) + if consensusConfig.SlotTime != nil { + spec.Config.SECONDS_PER_SLOT = common.Timestamp( + consensusConfig.SlotTime.Uint64(), + ) + } + tdd, _ := uint256.FromBig(forkConfig.TerminalTotalDifficulty) + spec.Config.TERMINAL_TOTAL_DIFFICULTY = view.Uint256View(*tdd) + if executionGenesis.IsPostMerge() { + spec.Config.TERMINAL_BLOCK_HASH = tree.Root(executionGenesis.Hash) + spec.Config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH = common.Timestamp(0) + } + + // Validators can exit immediately + spec.Config.SHARD_COMMITTEE_PERIOD = 0 + spec.Config.CHURN_LIMIT_QUOTIENT = 2 + + // Validators can withdraw immediately + spec.Config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY = 0 + + spec.Config.PROPOSER_SCORE_BOOST = 40 + return spec, nil +} + func ConsensusConfigsBundle( spec *common.Spec, - genesis *core.Genesis, + executionGenesisHash el_common.Hash, valCount uint64, ) (hivesim.StartOption, error) { specConfig, err := yaml.Marshal(spec.Config) @@ -48,7 +191,10 @@ func ConsensusConfigsBundle( if err != nil { return nil, err } - genesisHash := genesis.ToBlock().Hash() + denebPreset, err := yaml.Marshal(spec.DenebPreset) + if err != nil { + return nil, err + } return hivesim.Bundle( hivesim.WithDynamicFile( "/hive/input/config.yaml", @@ -70,8 +216,12 @@ func ConsensusConfigsBundle( "/hive/input/preset_capella.yaml", config.BytesSource(capellaPreset), ), + hivesim.WithDynamicFile( + "/hive/input/preset_deneb.yaml", + config.BytesSource(denebPreset), + ), hivesim.Params{ - "HIVE_ETH2_ETH1_GENESIS_HASH": genesisHash.String(), + "HIVE_ETH2_ETH1_GENESIS_HASH": executionGenesisHash.String(), }, ), nil } diff --git a/simulators/eth2/common/config/consensus/genesis.go b/simulators/eth2/common/config/consensus/genesis.go deleted file mode 100644 index 2288ffef52..0000000000 --- a/simulators/eth2/common/config/consensus/genesis.go +++ /dev/null @@ -1,372 +0,0 @@ -package consensus_config - -import ( - "fmt" - - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/holiman/uint256" - "github.com/protolambda/zrnt/eth2/beacon/altair" - "github.com/protolambda/zrnt/eth2/beacon/bellatrix" - "github.com/protolambda/zrnt/eth2/beacon/capella" - "github.com/protolambda/zrnt/eth2/beacon/common" - "github.com/protolambda/zrnt/eth2/beacon/phase0" - "github.com/protolambda/zrnt/eth2/configs" - "github.com/protolambda/ztyp/tree" - "github.com/protolambda/ztyp/view" -) - -func genesisPayloadHeader( - eth1GenesisBlock *types.Block, - spec *common.Spec, -) (*bellatrix.ExecutionPayloadHeader, error) { - extra := eth1GenesisBlock.Extra() - if len(extra) > common.MAX_EXTRA_DATA_BYTES { - return nil, fmt.Errorf( - "extra data is %d bytes, max is %d", - len(extra), - common.MAX_EXTRA_DATA_BYTES, - ) - } - if len(eth1GenesisBlock.Transactions()) != 0 { - return nil, fmt.Errorf( - "expected no transactions in genesis execution payload", - ) - } - - baseFee, overflow := uint256.FromBig(eth1GenesisBlock.BaseFee()) - if overflow { - return nil, fmt.Errorf("basefee larger than 2^256-1") - } - - return &bellatrix.ExecutionPayloadHeader{ - ParentHash: common.Root(eth1GenesisBlock.ParentHash()), - FeeRecipient: common.Eth1Address(eth1GenesisBlock.Coinbase()), - StateRoot: common.Bytes32(eth1GenesisBlock.Root()), - ReceiptsRoot: common.Bytes32(eth1GenesisBlock.ReceiptHash()), - LogsBloom: common.LogsBloom(eth1GenesisBlock.Bloom()), - PrevRandao: common.Bytes32{}, - BlockNumber: view.Uint64View(eth1GenesisBlock.NumberU64()), - GasLimit: view.Uint64View(eth1GenesisBlock.GasLimit()), - GasUsed: view.Uint64View(eth1GenesisBlock.GasUsed()), - Timestamp: common.Timestamp(eth1GenesisBlock.Time()), - ExtraData: extra, - BaseFeePerGas: view.Uint256View(*baseFee), - BlockHash: common.Root(eth1GenesisBlock.Hash()), - // empty transactions root - TransactionsRoot: common.PayloadTransactionsType(spec). - DefaultNode(). - MerkleRoot(tree.GetHashFn()), - }, nil -} - -func genesisPayloadHeaderCapella( - eth1GenesisBlock *types.Block, - spec *common.Spec, -) (*capella.ExecutionPayloadHeader, error) { - extra := eth1GenesisBlock.Extra() - if len(extra) > common.MAX_EXTRA_DATA_BYTES { - return nil, fmt.Errorf( - "extra data is %d bytes, max is %d", - len(extra), - common.MAX_EXTRA_DATA_BYTES, - ) - } - if len(eth1GenesisBlock.Transactions()) != 0 { - return nil, fmt.Errorf( - "expected no transactions in genesis execution payload", - ) - } - if len(eth1GenesisBlock.Withdrawals()) != 0 { - return nil, fmt.Errorf( - "expected no withdrawals in genesis execution payload", - ) - } - - baseFee, overflow := uint256.FromBig(eth1GenesisBlock.BaseFee()) - if overflow { - return nil, fmt.Errorf("basefee larger than 2^256-1") - } - - return &capella.ExecutionPayloadHeader{ - ParentHash: common.Root(eth1GenesisBlock.ParentHash()), - FeeRecipient: common.Eth1Address(eth1GenesisBlock.Coinbase()), - StateRoot: common.Bytes32(eth1GenesisBlock.Root()), - ReceiptsRoot: common.Bytes32(eth1GenesisBlock.ReceiptHash()), - LogsBloom: common.LogsBloom(eth1GenesisBlock.Bloom()), - PrevRandao: common.Bytes32{}, - BlockNumber: view.Uint64View(eth1GenesisBlock.NumberU64()), - GasLimit: view.Uint64View(eth1GenesisBlock.GasLimit()), - GasUsed: view.Uint64View(eth1GenesisBlock.GasUsed()), - Timestamp: common.Timestamp(eth1GenesisBlock.Time()), - ExtraData: extra, - BaseFeePerGas: view.Uint256View(*baseFee), - BlockHash: common.Root(eth1GenesisBlock.Hash()), - // empty transactions root - TransactionsRoot: common.PayloadTransactionsType(spec). - DefaultNode(). - MerkleRoot(tree.GetHashFn()), - // empty withdrawals root - WithdrawalsRoot: common.WithdrawalsType(spec). - DefaultNode(). - MerkleRoot(tree.GetHashFn()), - }, nil -} - -func createValidators( - spec *common.Spec, - keys []*ValidatorDetails, -) []phase0.KickstartValidatorData { - validators := make([]phase0.KickstartValidatorData, 0, len(keys)) - for _, key := range keys { - validators = append(validators, phase0.KickstartValidatorData{ - Pubkey: key.ValidatorPubkey, - WithdrawalCredentials: key.WithdrawalCredentials(), - Balance: spec.MAX_EFFECTIVE_BALANCE + key.ExtraInitialBalance, - }) - } - return validators -} - -// BuildBeaconState creates a beacon state, with either ExecutionFromGenesis or NoExecutionFromGenesis, the given timestamp, and validators derived from the given keys. -// The deposit contract will be recognized as an empty tree, ready for new deposits, thus skipping any transactions for pre-mined validators. -// -// TODO: instead of providing a eth1 genesis, provide an eth1 chain, so we can simulate a merge genesis state that embeds an existing eth1 chain. -func BuildBeaconState( - spec *common.Spec, - eth1Genesis *core.Genesis, - eth2GenesisTime common.Timestamp, - keys []*ValidatorDetails, -) (common.BeaconState, error) { - if uint64(len(keys)) < uint64(spec.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT) { - return nil, fmt.Errorf( - "not enough validator keys for genesis. Got %d, but need at least %d", - len(keys), - spec.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT, - ) - } - - eth1GenesisBlock := eth1Genesis.ToBlock() - eth1BlockHash := common.Root(eth1GenesisBlock.Hash()) - - validators := createValidators(spec, keys) - - hFn := tree.GetHashFn() - - var state common.BeaconState - var forkVersion common.Version - var previousForkVersion common.Version - var emptyBodyRoot common.Root - if spec.CAPELLA_FORK_EPOCH == 0 { - stateView := capella.NewBeaconStateView(spec) - forkVersion = spec.CAPELLA_FORK_VERSION - previousForkVersion = spec.BELLATRIX_FORK_VERSION - emptyBodyRoot = capella.BeaconBlockBodyType(configs.Mainnet). - New(). - HashTreeRoot(hFn) - // TODO: Check if we need to add execution payload to the state - state = stateView - } else if spec.BELLATRIX_FORK_EPOCH == 0 { - stateView := bellatrix.NewBeaconStateView(spec) - forkVersion = spec.BELLATRIX_FORK_VERSION - previousForkVersion = spec.ALTAIR_FORK_VERSION - emptyBodyRoot = bellatrix.BeaconBlockBodyType(configs.Mainnet). - New(). - HashTreeRoot(hFn) - state = stateView - } else if spec.ALTAIR_FORK_EPOCH == 0 { - state = bellatrix.NewBeaconStateView(spec) - forkVersion = spec.ALTAIR_FORK_VERSION - previousForkVersion = spec.GENESIS_FORK_VERSION - emptyBodyRoot = altair.BeaconBlockBodyType(configs.Mainnet). - New(). - HashTreeRoot(hFn) - } else { - state = phase0.NewBeaconStateView(spec) - forkVersion = spec.GENESIS_FORK_VERSION - previousForkVersion = spec.GENESIS_FORK_VERSION - emptyBodyRoot = phase0.BeaconBlockBodyType(configs.Mainnet). - New(). - HashTreeRoot(hFn) - } - - if err := state.SetGenesisTime(eth2GenesisTime); err != nil { - return nil, err - } - - if err := state.SetFork(common.Fork{ - PreviousVersion: previousForkVersion, - CurrentVersion: forkVersion, - Epoch: common.GENESIS_EPOCH, - }); err != nil { - return nil, err - } - // Empty deposit-tree - eth1Dat := common.Eth1Data{ - DepositRoot: phase0.NewDepositRootsView(). - HashTreeRoot(tree.GetHashFn()), - DepositCount: 0, - BlockHash: eth1BlockHash, - } - if err := state.SetEth1Data(eth1Dat); err != nil { - return nil, err - } - // sanity check: Leave the deposit index to 0. No deposits happened. - if i, err := state.Eth1DepositIndex(); err != nil { - return nil, err - } else if i != 0 { - return nil, fmt.Errorf("expected 0 deposit index in state, got %d", i) - } - if err := state.SetLatestBlockHeader(&common.BeaconBlockHeader{BodyRoot: emptyBodyRoot}); err != nil { - return nil, err - } - // Seed RANDAO with Eth1 entropy - if err := state.SeedRandao(spec, eth1BlockHash); err != nil { - return nil, err - } - - for _, v := range validators { - if err := state.AddValidator(spec, v.Pubkey, v.WithdrawalCredentials, v.Balance); err != nil { - return nil, err - } - } - vals, err := state.Validators() - if err != nil { - return nil, err - } - // Process activations and exits - for i := 0; i < len(validators); i++ { - val, err := vals.Validator(common.ValidatorIndex(i)) - if err != nil { - return nil, err - } - vEff, err := val.EffectiveBalance() - if err != nil { - return nil, err - } - if vEff == spec.MAX_EFFECTIVE_BALANCE { - if err := val.SetActivationEligibilityEpoch(common.GENESIS_EPOCH); err != nil { - return nil, err - } - if err := val.SetActivationEpoch(common.GENESIS_EPOCH); err != nil { - return nil, err - } - } - // Process exits/slashings - slashings, err := state.Slashings() - if err != nil { - return nil, err - } - if keys[i].Exited || keys[i].Slashed { - exit_epoch := common.GENESIS_EPOCH - val.SetExitEpoch(exit_epoch) - val.SetWithdrawableEpoch( - exit_epoch + spec.MIN_VALIDATOR_WITHDRAWABILITY_DELAY, - ) - if keys[i].Slashed { - val.MakeSlashed() - - bal, err := val.EffectiveBalance() - if err != nil { - return nil, err - } - - if err := slashings.AddSlashing(exit_epoch, bal); err != nil { - return nil, err - } - } - } - } - - if err := state.SetGenesisValidatorsRoot(vals.HashTreeRoot(tree.GetHashFn())); err != nil { - return nil, err - } - if st, ok := state.(common.SyncCommitteeBeaconState); ok { - indicesBounded, err := common.LoadBoundedIndices(vals) - if err != nil { - return nil, err - } - active := common.ActiveIndices(indicesBounded, common.GENESIS_EPOCH) - indices, err := common.ComputeSyncCommitteeIndices( - spec, - state, - common.GENESIS_EPOCH, - active, - ) - if err != nil { - return nil, fmt.Errorf( - "failed to compute sync committee indices: %v", - err, - ) - } - pubs, err := common.NewPubkeyCache(vals) - if err != nil { - return nil, err - } - // Note: A duplicate committee is assigned for the current and next committee at genesis - syncCommittee, err := common.IndicesToSyncCommittee(indices, pubs) - if err != nil { - return nil, err - } - syncCommitteeView, err := syncCommittee.View(spec) - if err != nil { - return nil, err - } - if err := st.SetCurrentSyncCommittee(syncCommitteeView); err != nil { - return nil, err - } - if err := st.SetNextSyncCommittee(syncCommitteeView); err != nil { - return nil, err - } - } - - switch st := state.(type) { - case *bellatrix.BeaconStateView: - tdd := uint256.Int(spec.TERMINAL_TOTAL_DIFFICULTY) - embedExecAtGenesis := tdd.ToBig().Cmp(eth1Genesis.Difficulty) <= 0 - - var execPayloadHeader *bellatrix.ExecutionPayloadHeader - if embedExecAtGenesis { - execPayloadHeader, err = genesisPayloadHeader( - eth1GenesisBlock, - spec, - ) - if err != nil { - return nil, err - } - } else { - // we didn't build any on the eth1 chain though, - // so we just put the genesis hash here (it could be any block from eth1 chain before TTD that is not ahead of eth2) - execPayloadHeader = new(bellatrix.ExecutionPayloadHeader) - } - - if err := st.SetLatestExecutionPayloadHeader(execPayloadHeader); err != nil { - return nil, err - } - case *capella.BeaconStateView: - // did we hit the TTD at genesis block? - tdd := uint256.Int(spec.TERMINAL_TOTAL_DIFFICULTY) - embedExecAtGenesis := tdd.ToBig().Cmp(eth1Genesis.Difficulty) <= 0 - - var execPayloadHeader *capella.ExecutionPayloadHeader - if embedExecAtGenesis { - execPayloadHeader, err = genesisPayloadHeaderCapella( - eth1GenesisBlock, - spec, - ) - if err != nil { - return nil, err - } - } else { - // we didn't build any on the eth1 chain though, - // so we just put the genesis hash here (it could be any block from eth1 chain before TTD that is not ahead of eth2) - execPayloadHeader = new(capella.ExecutionPayloadHeader) - } - - if err := st.SetLatestExecutionPayloadHeader(execPayloadHeader); err != nil { - return nil, err - } - } - - return state, nil -} diff --git a/simulators/eth2/common/config/consensus/genesis/bellatrix/state.go b/simulators/eth2/common/config/consensus/genesis/bellatrix/state.go new file mode 100644 index 0000000000..db4e17a51e --- /dev/null +++ b/simulators/eth2/common/config/consensus/genesis/bellatrix/state.go @@ -0,0 +1,101 @@ +package bellatrix + +import ( + "encoding/json" + "fmt" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/hive/simulators/eth2/common/config/consensus/genesis/interfaces" + "github.com/holiman/uint256" + "github.com/protolambda/zrnt/eth2/beacon/bellatrix" + "github.com/protolambda/zrnt/eth2/beacon/common" + "github.com/protolambda/zrnt/eth2/configs" + "github.com/protolambda/ztyp/tree" + "github.com/protolambda/ztyp/view" +) + +type GenesisStateView struct { + *bellatrix.BeaconStateView + Spec *common.Spec +} + +func NewBeaconStateView(spec *common.Spec) interfaces.StateViewGenesis { + return &GenesisStateView{ + BeaconStateView: bellatrix.NewBeaconStateView(spec), + Spec: spec, + } +} + +func (g *GenesisStateView) ToJson() ([]byte, error) { + raw, err := g.BeaconStateView.Raw(g.Spec) + if err != nil { + return nil, err + } + return json.MarshalIndent(raw, "", " ") +} + +func (g *GenesisStateView) ForkVersion() common.Version { + return g.Spec.BELLATRIX_FORK_VERSION +} + +func (g *GenesisStateView) PreviousForkVersion() common.Version { + return g.Spec.ALTAIR_FORK_VERSION +} + +func (g *GenesisStateView) EmptyBodyRoot() common.Root { + return bellatrix.BeaconBlockBodyType(configs.Mainnet). + New(). + HashTreeRoot(tree.GetHashFn()) +} + +func (g *GenesisStateView) SetGenesisExecutionHeader( + executionGenesis *types.Block, +) error { + var execPayloadHeader *bellatrix.ExecutionPayloadHeader + + ttd := uint256.Int(g.Spec.TERMINAL_TOTAL_DIFFICULTY) + + if executionGenesis.Difficulty().Cmp(ttd.ToBig()) >= 0 { + extra := executionGenesis.Extra() + if len(extra) > common.MAX_EXTRA_DATA_BYTES { + return fmt.Errorf( + "extra data is %d bytes, max is %d", + len(extra), + common.MAX_EXTRA_DATA_BYTES, + ) + } + if len(executionGenesis.Transactions()) != 0 { + return fmt.Errorf( + "expected no transactions in genesis execution payload", + ) + } + + baseFee, overflow := uint256.FromBig(executionGenesis.BaseFee()) + if overflow { + return fmt.Errorf("basefee larger than 2^256-1") + } + + execPayloadHeader = &bellatrix.ExecutionPayloadHeader{ + ParentHash: common.Root(executionGenesis.ParentHash()), + FeeRecipient: common.Eth1Address(executionGenesis.Coinbase()), + StateRoot: common.Bytes32(executionGenesis.Root()), + ReceiptsRoot: common.Bytes32(executionGenesis.ReceiptHash()), + LogsBloom: common.LogsBloom(executionGenesis.Bloom()), + PrevRandao: common.Bytes32{}, + BlockNumber: view.Uint64View(executionGenesis.NumberU64()), + GasLimit: view.Uint64View(executionGenesis.GasLimit()), + GasUsed: view.Uint64View(executionGenesis.GasUsed()), + Timestamp: common.Timestamp(executionGenesis.Time()), + ExtraData: extra, + BaseFeePerGas: view.Uint256View(*baseFee), + BlockHash: common.Root(executionGenesis.Hash()), + // empty transactions root + TransactionsRoot: common.PayloadTransactionsType(g.Spec). + DefaultNode(). + MerkleRoot(tree.GetHashFn()), + } + } else { + execPayloadHeader = new(bellatrix.ExecutionPayloadHeader) + } + return g.SetLatestExecutionPayloadHeader(execPayloadHeader) +} diff --git a/simulators/eth2/common/config/consensus/genesis/capella/state.go b/simulators/eth2/common/config/consensus/genesis/capella/state.go new file mode 100644 index 0000000000..979437c7b6 --- /dev/null +++ b/simulators/eth2/common/config/consensus/genesis/capella/state.go @@ -0,0 +1,114 @@ +package capella + +import ( + "encoding/json" + "fmt" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/holiman/uint256" + "github.com/protolambda/zrnt/eth2/beacon/capella" + "github.com/protolambda/zrnt/eth2/beacon/common" + "github.com/protolambda/zrnt/eth2/configs" + "github.com/protolambda/ztyp/tree" + "github.com/protolambda/ztyp/view" + + "github.com/ethereum/hive/simulators/eth2/common/config/consensus/genesis/interfaces" +) + +type GenesisStateView struct { + *capella.BeaconStateView + Spec *common.Spec +} + +func NewBeaconStateView(spec *common.Spec) interfaces.StateViewGenesis { + return &GenesisStateView{ + BeaconStateView: capella.NewBeaconStateView(spec), + Spec: spec, + } +} + +func (g *GenesisStateView) ToJson() ([]byte, error) { + raw, err := g.BeaconStateView.Raw(g.Spec) + if err != nil { + return nil, err + } + return json.MarshalIndent(raw, "", " ") +} + +func (g *GenesisStateView) ForkVersion() common.Version { + return g.Spec.CAPELLA_FORK_VERSION +} + +func (g *GenesisStateView) PreviousForkVersion() common.Version { + return g.Spec.BELLATRIX_FORK_VERSION +} + +func (g *GenesisStateView) EmptyBodyRoot() common.Root { + return capella.BeaconBlockBodyType(configs.Mainnet). + New(). + HashTreeRoot(tree.GetHashFn()) +} + +func (g *GenesisStateView) SetGenesisExecutionHeader( + executionGenesis *types.Block, +) error { + ttd := uint256.Int(g.Spec.TERMINAL_TOTAL_DIFFICULTY) + + if executionGenesis.Difficulty().Cmp(ttd.ToBig()) < 0 { + return fmt.Errorf( + "eth1 genesis difficulty %d is less than terminal total difficulty %d", + executionGenesis.Difficulty(), + ttd, + ) + } + + extra := executionGenesis.Extra() + if len(extra) > common.MAX_EXTRA_DATA_BYTES { + return fmt.Errorf( + "extra data is %d bytes, max is %d", + len(extra), + common.MAX_EXTRA_DATA_BYTES, + ) + } + if len(executionGenesis.Transactions()) != 0 { + return fmt.Errorf( + "expected no transactions in genesis execution payload", + ) + } + if len(executionGenesis.Withdrawals()) != 0 { + return fmt.Errorf( + "expected no withdrawals in genesis execution payload", + ) + } + + baseFee, overflow := uint256.FromBig(executionGenesis.BaseFee()) + if overflow { + return fmt.Errorf("basefee larger than 2^256-1") + } + + execPayloadHeader := &capella.ExecutionPayloadHeader{ + ParentHash: common.Root(executionGenesis.ParentHash()), + FeeRecipient: common.Eth1Address(executionGenesis.Coinbase()), + StateRoot: common.Bytes32(executionGenesis.Root()), + ReceiptsRoot: common.Bytes32(executionGenesis.ReceiptHash()), + LogsBloom: common.LogsBloom(executionGenesis.Bloom()), + PrevRandao: common.Bytes32{}, + BlockNumber: view.Uint64View(executionGenesis.NumberU64()), + GasLimit: view.Uint64View(executionGenesis.GasLimit()), + GasUsed: view.Uint64View(executionGenesis.GasUsed()), + Timestamp: common.Timestamp(executionGenesis.Time()), + ExtraData: extra, + BaseFeePerGas: view.Uint256View(*baseFee), + BlockHash: common.Root(executionGenesis.Hash()), + // empty transactions root + TransactionsRoot: common.PayloadTransactionsType(g.Spec). + DefaultNode(). + MerkleRoot(tree.GetHashFn()), + // empty withdrawals root + WithdrawalsRoot: common.WithdrawalsType(g.Spec). + DefaultNode(). + MerkleRoot(tree.GetHashFn()), + } + + return g.SetLatestExecutionPayloadHeader(execPayloadHeader) +} diff --git a/simulators/eth2/common/config/consensus/genesis/deneb/state.go b/simulators/eth2/common/config/consensus/genesis/deneb/state.go new file mode 100644 index 0000000000..bffba326c2 --- /dev/null +++ b/simulators/eth2/common/config/consensus/genesis/deneb/state.go @@ -0,0 +1,129 @@ +package deneb + +import ( + "encoding/json" + "fmt" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/holiman/uint256" + "github.com/protolambda/zrnt/eth2/beacon/common" + "github.com/protolambda/zrnt/eth2/beacon/deneb" + "github.com/protolambda/zrnt/eth2/configs" + "github.com/protolambda/ztyp/tree" + "github.com/protolambda/ztyp/view" + + "github.com/ethereum/hive/simulators/eth2/common/config/consensus/genesis/interfaces" +) + +type GenesisStateView struct { + *deneb.BeaconStateView + Spec *common.Spec +} + +func NewBeaconStateView(spec *common.Spec) interfaces.StateViewGenesis { + return &GenesisStateView{ + BeaconStateView: deneb.NewBeaconStateView(spec), + Spec: spec, + } +} + +func (g *GenesisStateView) ToJson() ([]byte, error) { + raw, err := g.BeaconStateView.Raw(g.Spec) + if err != nil { + return nil, err + } + return json.MarshalIndent(raw, "", " ") +} + +func (g *GenesisStateView) ForkVersion() common.Version { + return g.Spec.DENEB_FORK_VERSION +} + +func (g *GenesisStateView) PreviousForkVersion() common.Version { + return g.Spec.CAPELLA_FORK_VERSION +} + +func (g *GenesisStateView) EmptyBodyRoot() common.Root { + return deneb.BeaconBlockBodyType(configs.Mainnet). + New(). + HashTreeRoot(tree.GetHashFn()) +} + +func (g *GenesisStateView) SetGenesisExecutionHeader( + executionGenesis *types.Block, +) error { + ttd := uint256.Int(g.Spec.TERMINAL_TOTAL_DIFFICULTY) + + if executionGenesis.Difficulty().Cmp(ttd.ToBig()) < 0 { + return fmt.Errorf( + "eth1 genesis difficulty %d is less than terminal total difficulty %d", + executionGenesis.Difficulty(), + ttd, + ) + } + + extra := executionGenesis.Extra() + if len(extra) > common.MAX_EXTRA_DATA_BYTES { + return fmt.Errorf( + "extra data is %d bytes, max is %d", + len(extra), + common.MAX_EXTRA_DATA_BYTES, + ) + } + if len(executionGenesis.Transactions()) != 0 { + return fmt.Errorf( + "expected no transactions in genesis execution payload", + ) + } + if len(executionGenesis.Withdrawals()) != 0 { + return fmt.Errorf( + "expected no withdrawals in genesis execution payload", + ) + } + + baseFee, overflow := uint256.FromBig(executionGenesis.BaseFee()) + if overflow { + return fmt.Errorf("basefee larger than 2^256-1") + } + + blobGasUsed := executionGenesis.BlobGasUsed() + if blobGasUsed == nil { + return fmt.Errorf("nil blob gas used in genesis block") + } + excessBlobGas := executionGenesis.ExcessBlobGas() + if excessBlobGas == nil { + return fmt.Errorf("nil excess blob gas in genesis block") + } + + if executionGenesis.BeaconRoot() == nil { + return fmt.Errorf("nil beacon root in genesis block") + } + + execPayloadHeader := &deneb.ExecutionPayloadHeader{ + ParentHash: common.Root(executionGenesis.ParentHash()), + FeeRecipient: common.Eth1Address(executionGenesis.Coinbase()), + StateRoot: common.Bytes32(executionGenesis.Root()), + ReceiptsRoot: common.Bytes32(executionGenesis.ReceiptHash()), + LogsBloom: common.LogsBloom(executionGenesis.Bloom()), + PrevRandao: common.Bytes32{}, + BlockNumber: view.Uint64View(executionGenesis.NumberU64()), + GasLimit: view.Uint64View(executionGenesis.GasLimit()), + GasUsed: view.Uint64View(executionGenesis.GasUsed()), + Timestamp: common.Timestamp(executionGenesis.Time()), + ExtraData: extra, + BaseFeePerGas: view.Uint256View(*baseFee), + BlockHash: common.Root(executionGenesis.Hash()), + // empty transactions root + TransactionsRoot: common.PayloadTransactionsType(g.Spec). + DefaultNode(). + MerkleRoot(tree.GetHashFn()), + // empty withdrawals root + WithdrawalsRoot: common.WithdrawalsType(g.Spec). + DefaultNode(). + MerkleRoot(tree.GetHashFn()), + BlobGasUsed: view.Uint64View(*blobGasUsed), + ExcessBlobGas: view.Uint64View(*excessBlobGas), + } + + return g.SetLatestExecutionPayloadHeader(execPayloadHeader) +} diff --git a/simulators/eth2/common/config/consensus/genesis/genesis.go b/simulators/eth2/common/config/consensus/genesis/genesis.go new file mode 100644 index 0000000000..a17a69651c --- /dev/null +++ b/simulators/eth2/common/config/consensus/genesis/genesis.go @@ -0,0 +1,201 @@ +package genesis + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/core/types" + consensus_config "github.com/ethereum/hive/simulators/eth2/common/config/consensus" + "github.com/ethereum/hive/simulators/eth2/common/config/consensus/genesis/bellatrix" + "github.com/ethereum/hive/simulators/eth2/common/config/consensus/genesis/capella" + "github.com/ethereum/hive/simulators/eth2/common/config/consensus/genesis/deneb" + "github.com/ethereum/hive/simulators/eth2/common/config/consensus/genesis/interfaces" + "github.com/protolambda/zrnt/eth2/beacon/common" + "github.com/protolambda/zrnt/eth2/beacon/phase0" + "github.com/protolambda/ztyp/tree" +) + +func createValidators( + spec *common.Spec, + keys []*consensus_config.ValidatorDetails, +) []phase0.KickstartValidatorData { + validators := make([]phase0.KickstartValidatorData, 0, len(keys)) + for _, key := range keys { + validators = append(validators, phase0.KickstartValidatorData{ + Pubkey: key.ValidatorPubkey, + WithdrawalCredentials: key.WithdrawalCredentials(), + Balance: spec.MAX_EFFECTIVE_BALANCE + key.ExtraInitialBalance, + }) + } + return validators +} + +// BuildBeaconState creates a beacon state, with either ExecutionFromGenesis or NoExecutionFromGenesis, the given timestamp, and validators derived from the given keys. +// The deposit contract will be recognized as an empty tree, ready for new deposits, thus skipping any transactions for pre-mined validators. +// +// TODO: instead of providing a eth1 genesis, provide an eth1 chain, so we can simulate a merge genesis state that embeds an existing eth1 chain. +func BuildBeaconState( + spec *common.Spec, + executionGenesis *types.Block, + beaconGenesisTime common.Timestamp, + keys []*consensus_config.ValidatorDetails, +) (common.BeaconState, error) { + if uint64(len(keys)) < uint64(spec.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT) { + return nil, fmt.Errorf( + "not enough validator keys for genesis. Got %d, but need at least %d", + len(keys), + spec.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT, + ) + } + + eth1BlockHash := common.Root(executionGenesis.Hash()) + + validators := createValidators(spec, keys) + + var state interfaces.StateViewGenesis + if spec.DENEB_FORK_EPOCH == 0 { + state = deneb.NewBeaconStateView(spec) + } else if spec.CAPELLA_FORK_EPOCH == 0 { + state = capella.NewBeaconStateView(spec) + } else if spec.BELLATRIX_FORK_EPOCH == 0 { + state = bellatrix.NewBeaconStateView(spec) + } else { + return nil, fmt.Errorf("pre-merge not supported") + } + + if err := state.SetGenesisTime(beaconGenesisTime); err != nil { + return nil, err + } + + if err := state.SetFork(common.Fork{ + PreviousVersion: state.PreviousForkVersion(), + CurrentVersion: state.ForkVersion(), + Epoch: common.GENESIS_EPOCH, + }); err != nil { + return nil, err + } + // Empty deposit-tree + eth1Dat := common.Eth1Data{ + DepositRoot: phase0.NewDepositRootsView(). + HashTreeRoot(tree.GetHashFn()), + DepositCount: 0, + BlockHash: eth1BlockHash, + } + if err := state.SetEth1Data(eth1Dat); err != nil { + return nil, err + } + // sanity check: Leave the deposit index to 0. No deposits happened. + if i, err := state.Eth1DepositIndex(); err != nil { + return nil, err + } else if i != 0 { + return nil, fmt.Errorf("expected 0 deposit index in state, got %d", i) + } + if err := state.SetLatestBlockHeader(&common.BeaconBlockHeader{BodyRoot: state.EmptyBodyRoot()}); err != nil { + return nil, err + } + // Seed RANDAO with Eth1 entropy + if err := state.SeedRandao(spec, eth1BlockHash); err != nil { + return nil, err + } + + for _, v := range validators { + if err := state.AddValidator(spec, v.Pubkey, v.WithdrawalCredentials, v.Balance); err != nil { + return nil, err + } + } + vals, err := state.Validators() + if err != nil { + return nil, err + } + // Process activations and exits + for i := 0; i < len(validators); i++ { + val, err := vals.Validator(common.ValidatorIndex(i)) + if err != nil { + return nil, err + } + vEff, err := val.EffectiveBalance() + if err != nil { + return nil, err + } + if vEff == spec.MAX_EFFECTIVE_BALANCE { + if err := val.SetActivationEligibilityEpoch(common.GENESIS_EPOCH); err != nil { + return nil, err + } + if err := val.SetActivationEpoch(common.GENESIS_EPOCH); err != nil { + return nil, err + } + } + // Process exits/slashings + slashings, err := state.Slashings() + if err != nil { + return nil, err + } + if keys[i].Exited || keys[i].Slashed { + exit_epoch := common.GENESIS_EPOCH + val.SetExitEpoch(exit_epoch) + val.SetWithdrawableEpoch( + exit_epoch + spec.MIN_VALIDATOR_WITHDRAWABILITY_DELAY, + ) + if keys[i].Slashed { + val.MakeSlashed() + + bal, err := val.EffectiveBalance() + if err != nil { + return nil, err + } + + if err := slashings.AddSlashing(exit_epoch, bal); err != nil { + return nil, err + } + } + } + } + + if err := state.SetGenesisValidatorsRoot(vals.HashTreeRoot(tree.GetHashFn())); err != nil { + return nil, err + } + if st, ok := state.(common.SyncCommitteeBeaconState); ok { + indicesBounded, err := common.LoadBoundedIndices(vals) + if err != nil { + return nil, err + } + active := common.ActiveIndices(indicesBounded, common.GENESIS_EPOCH) + indices, err := common.ComputeSyncCommitteeIndices( + spec, + state, + common.GENESIS_EPOCH, + active, + ) + if err != nil { + return nil, fmt.Errorf( + "failed to compute sync committee indices: %v", + err, + ) + } + pubs, err := common.NewPubkeyCache(vals) + if err != nil { + return nil, err + } + // Note: A duplicate committee is assigned for the current and next committee at genesis + syncCommittee, err := common.IndicesToSyncCommittee(indices, pubs) + if err != nil { + return nil, err + } + syncCommitteeView, err := syncCommittee.View(spec) + if err != nil { + return nil, err + } + if err := st.SetCurrentSyncCommittee(syncCommitteeView); err != nil { + return nil, err + } + if err := st.SetNextSyncCommittee(syncCommitteeView); err != nil { + return nil, err + } + } + + // Set execution payload header + if err := state.SetGenesisExecutionHeader(executionGenesis); err != nil { + return nil, err + } + + return state, nil +} diff --git a/simulators/eth2/common/config/consensus/genesis/interfaces/state.go b/simulators/eth2/common/config/consensus/genesis/interfaces/state.go new file mode 100644 index 0000000000..927ef6c4d5 --- /dev/null +++ b/simulators/eth2/common/config/consensus/genesis/interfaces/state.go @@ -0,0 +1,15 @@ +package interfaces + +import ( + "github.com/ethereum/go-ethereum/core/types" + "github.com/protolambda/zrnt/eth2/beacon/common" +) + +type StateViewGenesis interface { + common.BeaconState + ForkVersion() common.Version + PreviousForkVersion() common.Version + EmptyBodyRoot() common.Root + SetGenesisExecutionHeader(genesisBlock *types.Block) error + ToJson() ([]byte, error) +} diff --git a/simulators/eth2/common/config/execution/execution_config.go b/simulators/eth2/common/config/execution/execution_config.go index 2b254c01b5..2b76ae2a98 100644 --- a/simulators/eth2/common/config/execution/execution_config.go +++ b/simulators/eth2/common/config/execution/execution_config.go @@ -56,6 +56,16 @@ var embeddedDepositContract = ` } } ` +var embeddedBeaconRootContract = ` +{ + "balance": "0", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604457602036146024575f5ffd5b620180005f350680545f35146037575f5ffd5b6201800001545f5260205ff35b42620180004206555f3562018000420662018000015500", + "nonce": "1", + "storage": {} + } + ` + +var beaconRootContractAddress = common.BigToAddress(big.NewInt(0x0b)) var ( CLIQUE_PERIOD_DEFAULT = uint64(2) @@ -196,19 +206,85 @@ func (c ExecutionCliqueConsensus) SecondsPerBlock() uint64 { return c.CliquePeriod } +func BuildChainConfig( + ttd *big.Int, + beaconChainGenesisTime uint64, + slotsPerEpoch uint64, + secondsPerSlot uint64, + config *config.ForkConfig, +) (*params.ChainConfig, error) { + chainConfig := ¶ms.ChainConfig{ + ChainID: big.NewInt(7), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: false, + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + ArrowGlacierBlock: big.NewInt(0), + MergeNetsplitBlock: big.NewInt(0), + TerminalTotalDifficulty: ttd, + Clique: nil, + } + + // Configure post-merge forks + var ( + previousForkTime = config.BellatrixForkEpoch + previousFork = "bellatrix" + ) + for _, forkConfig := range []struct { + ForkName string + BeaconForkTime *big.Int + ChainConfig **uint64 + }{ + { + ForkName: "capella", + BeaconForkTime: config.CapellaForkEpoch, + ChainConfig: &chainConfig.ShanghaiTime, + }, + { + ForkName: "deneb", + BeaconForkTime: config.DenebForkEpoch, + ChainConfig: &chainConfig.CancunTime, + }, + } { + if forkConfig.BeaconForkTime != nil { + if previousForkTime == nil { + return nil, fmt.Errorf("fork '%s' has a time but previous fork '%s' does not", forkConfig.ForkName, previousFork) + } + if forkConfig.BeaconForkTime.Cmp(previousForkTime) < 0 { + return nil, fmt.Errorf("fork '%s' has a time before previous fork '%s'", forkConfig.ForkName, previousFork) + } + timestamp := beaconChainGenesisTime + (forkConfig.BeaconForkTime.Uint64() * secondsPerSlot * slotsPerEpoch) + *forkConfig.ChainConfig = ×tamp + } + previousForkTime = forkConfig.BeaconForkTime + previousFork = forkConfig.ForkName + } + return chainConfig, nil +} + type ExecutionGenesis struct { Genesis *core.Genesis + Block *types.Block + Hash common.Hash DepositAddress common.Address - NetworkID uint64 } func BuildExecutionGenesis( - ttd *big.Int, genesisTime uint64, consensus ExecutionConsensus, - forkConfig *params.ChainConfig, + chainConfig *params.ChainConfig, genesisExecAccounts map[common.Address]core.GenesisAccount, -) *ExecutionGenesis { + initialBaseFee *big.Int, +) (*ExecutionGenesis, error) { depositContractAddr := common.HexToAddress( "0x4242424242424242424242424242424242424242", ) @@ -216,42 +292,19 @@ func BuildExecutionGenesis( if err := json.Unmarshal([]byte(embeddedDepositContract), &depositContractAcc); err != nil { panic(err) } - genesis := ExecutionGenesis{ - Genesis: &core.Genesis{ - Config: ¶ms.ChainConfig{ - ChainID: big.NewInt(7), - HomesteadBlock: big.NewInt(0), - DAOForkBlock: nil, - DAOForkSupport: false, - EIP150Block: big.NewInt(0), - EIP150Hash: common.Hash{}, - EIP155Block: big.NewInt(0), - EIP158Block: big.NewInt(0), - ByzantiumBlock: big.NewInt(0), - ConstantinopleBlock: big.NewInt(0), - PetersburgBlock: big.NewInt(0), - IstanbulBlock: big.NewInt(0), - MuirGlacierBlock: big.NewInt(0), - BerlinBlock: big.NewInt(0), - LondonBlock: big.NewInt(0), - ArrowGlacierBlock: big.NewInt(0), - MergeNetsplitBlock: big.NewInt(0), - TerminalTotalDifficulty: ttd, - Clique: nil, - }, - Nonce: 0, - Timestamp: genesisTime, - ExtraData: nil, - GasLimit: 30_000_000, - Difficulty: big.NewInt(0), - Mixhash: common.Hash{}, - Coinbase: common.Address{}, - Alloc: core.GenesisAlloc{ - depositContractAddr: depositContractAcc, - }, + genesis := &core.Genesis{ + Config: chainConfig, + Nonce: 0, + Timestamp: genesisTime, + ExtraData: nil, + GasLimit: 30_000_000, + Difficulty: big.NewInt(0), + BaseFee: initialBaseFee, + Mixhash: common.Hash{}, + Coinbase: common.Address{}, + Alloc: core.GenesisAlloc{ + depositContractAddr: depositContractAcc, }, - DepositAddress: depositContractAddr, - NetworkID: 7, } for addr, acc := range genesisExecAccounts { @@ -259,20 +312,42 @@ func BuildExecutionGenesis( if acc.Balance == nil { acc.Balance = common.Big0 } - genesis.Genesis.Alloc[addr] = acc + genesis.Alloc[addr] = acc } - // Configure post-merge forks - if forkConfig.ShanghaiTime != nil { - genesis.Genesis.Config.ShanghaiTime = forkConfig.ShanghaiTime + if chainConfig.CancunTime != nil { + var beaconRootContractAcc core.GenesisAccount + if err := json.Unmarshal([]byte(embeddedBeaconRootContract), &beaconRootContractAcc); err != nil { + panic(err) + } + genesis.Alloc[beaconRootContractAddress] = beaconRootContractAcc + } + + wrappedGenesis := &ExecutionGenesis{ + Genesis: genesis, + Block: genesis.ToBlock(), + DepositAddress: depositContractAddr, } + wrappedGenesis.Hash = wrappedGenesis.Block.Hash() // Configure consensus - if err := consensus.Configure(&genesis); err != nil { - panic(err) + if err := consensus.Configure(wrappedGenesis); err != nil { + return nil, err } - return &genesis + return wrappedGenesis, nil +} + +func (genesis *ExecutionGenesis) NetworkID() uint64 { + return 7 +} + +func (genesis *ExecutionGenesis) ChainID() uint64 { + return genesis.Genesis.Config.ChainID.Uint64() +} + +func (genesis *ExecutionGenesis) IsPostMerge() bool { + return genesis.Block.Difficulty().Cmp(genesis.Genesis.Config.TerminalTotalDifficulty) >= 0 } func (conf *ExecutionGenesis) ToParams( @@ -300,16 +375,15 @@ func (conf *ExecutionGenesis) ToParams( if conf.Genesis.Config.ShanghaiTime != nil { params["HIVE_SHANGHAI_TIMESTAMP"] = fmt.Sprint(*conf.Genesis.Config.ShanghaiTime) } + if conf.Genesis.Config.CancunTime != nil { + params["HIVE_CANCUN_TIMESTAMP"] = fmt.Sprint(*conf.Genesis.Config.CancunTime) + } if conf.Genesis.Config.Clique != nil { params["HIVE_CLIQUE_PERIOD"] = fmt.Sprint(conf.Genesis.Config.Clique.Period) } return params } -func IsEth1GenesisPostMerge(genesis *core.Genesis) bool { - return genesis.Config.TerminalTotalDifficulty.Cmp(genesis.Difficulty) <= 0 -} - func ExecutionBundle(genesis *core.Genesis) (hivesim.StartOption, error) { out, err := json.Marshal(genesis) if err != nil { diff --git a/simulators/eth2/common/config/execution/execution_config_test.go b/simulators/eth2/common/config/execution/execution_config_test.go new file mode 100644 index 0000000000..2644428f79 --- /dev/null +++ b/simulators/eth2/common/config/execution/execution_config_test.go @@ -0,0 +1,69 @@ +package execution_config + +import ( + "math/big" + "testing" + + "github.com/ethereum/hive/simulators/eth2/common/config" +) + +func TestBuildChainConfig(t *testing.T) { + slotsPerEpoch := uint64(32) + slotTime := uint64(12) + beaconChainGenesisTime := uint64(1634025600) + ttd := big.NewInt(200) + chainConfig, err := BuildChainConfig(ttd, beaconChainGenesisTime, slotsPerEpoch, slotTime, &config.ForkConfig{ + AltairForkEpoch: big.NewInt(0), + BellatrixForkEpoch: big.NewInt(200), + CapellaForkEpoch: nil, + DenebForkEpoch: nil, + }) + if err != nil { + t.Fatalf("Error producing chainConfig: %v", err) + } + if chainConfig.ShanghaiTime != nil { + t.Fatal("ShanghaiTime is not nil") + } + if chainConfig.CancunTime != nil { + t.Fatal("CancunTime is not nil") + } + if chainConfig.TerminalTotalDifficulty.Cmp(ttd) != 0 { + t.Fatalf("Incorrect TerminalTotalDifficulty is not %d", ttd) + } + + // Shanghai Chain Config Test + ttd = big.NewInt(0) + chainConfig, err = BuildChainConfig(ttd, beaconChainGenesisTime, slotsPerEpoch, slotTime, &config.ForkConfig{ + AltairForkEpoch: big.NewInt(0), + BellatrixForkEpoch: big.NewInt(200), + CapellaForkEpoch: big.NewInt(200), + DenebForkEpoch: nil, + }) + if err != nil { + t.Fatalf("Error producing shanghaiChainConfig: %v", err) + } + if chainConfig.ShanghaiTime == nil { + t.Fatal("ShanghaiTime is nil") + } + if *chainConfig.ShanghaiTime != beaconChainGenesisTime+(slotsPerEpoch*slotTime*200) { + t.Fatalf("Incorrect ShanghaiTime is not %d", beaconChainGenesisTime+(slotsPerEpoch*slotTime)) + } + if chainConfig.CancunTime != nil { + t.Fatal("CancunTime is not nil") + } + if chainConfig.TerminalTotalDifficulty.Cmp(ttd) != 0 { + t.Fatalf("Incorrect TerminalTotalDifficulty is not %d", ttd) + } + + // Incorrectly configured epoch + ttd = big.NewInt(0) + chainConfig, err = BuildChainConfig(ttd, beaconChainGenesisTime, slotsPerEpoch, slotTime, &config.ForkConfig{ + AltairForkEpoch: big.NewInt(0), + BellatrixForkEpoch: big.NewInt(200), + CapellaForkEpoch: big.NewInt(199), + DenebForkEpoch: nil, + }) + if err == nil { + t.Fatalf("Expected error producing chainConfig") + } +} diff --git a/simulators/eth2/common/debug/debug.go b/simulators/eth2/common/debug/debug.go index e09253648d..8ac76cc486 100644 --- a/simulators/eth2/common/debug/debug.go +++ b/simulators/eth2/common/debug/debug.go @@ -45,7 +45,7 @@ func PrintAllBeaconBlocks( ) if versionedBlock, err := b.BlockV2(parentCtx, eth2api.BlockIdRoot(root)); err == nil { - if executionPayload, err := versionedBlock.ExecutionPayload(); err == nil { + if executionPayload, _, _, err := versionedBlock.ExecutionPayload(); err == nil { execution = utils.Shorten(executionPayload.BlockHash.Hex()) } } @@ -190,7 +190,7 @@ func PrintAllTestnetBeaconBlocks( ) if versionedBlock, err := beaconNode.BlockV2(parentCtx, eth2api.BlockIdRoot(root)); err == nil { - if executionPayload, err := versionedBlock.ExecutionPayload(); err == nil { + if executionPayload, _, _, err := versionedBlock.ExecutionPayload(); err == nil { execution = executionPayload.BlockHash l.Logf( "Node %d: Execution payload: hash=%s", diff --git a/simulators/eth2/common/go.mod b/simulators/eth2/common/go.mod index a69a55e15b..a4fbfb970a 100644 --- a/simulators/eth2/common/go.mod +++ b/simulators/eth2/common/go.mod @@ -1,15 +1,15 @@ module github.com/ethereum/hive/simulators/eth2/common -go 1.18 +go 1.20 require ( - github.com/ethereum/go-ethereum v1.11.5 + github.com/ethereum/go-ethereum v1.13.1 github.com/ethereum/hive v0.0.0-20230401205547-71595beab31d github.com/google/uuid v1.3.0 github.com/herumi/bls-eth-go-binary v1.29.1 - github.com/holiman/uint256 v1.2.2 - github.com/marioevz/eth-clients v0.0.0-20230503173323-98293c926363 - github.com/marioevz/mock-builder v0.0.0-20230515180219-3b0b5c3eefe3 + github.com/holiman/uint256 v1.2.3 + github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76 + github.com/marioevz/mock-builder v1.1.1-0.20230920235938-1f29ea279d7d github.com/pkg/errors v0.9.1 github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d @@ -19,23 +19,28 @@ require ( github.com/rauljordan/engine-proxy v0.0.0-20230316220057-4c80c36c4c3a github.com/tyler-smith/go-bip39 v1.1.0 github.com/wealdtech/go-eth2-util v1.8.1 - golang.org/x/exp v0.0.0-20230321023759-10a507213a29 + golang.org/x/exp v0.0.0-20230810033253-352e893a4cad gopkg.in/yaml.v2 v2.4.0 ) require ( github.com/DataDog/zstd v1.5.2 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20230404150825-93eff0a72e22 // indirect + github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 // indirect github.com/cockroachdb/redact v1.1.3 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.10.0 // indirect + github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect github.com/deckarep/golang-set/v2 v2.3.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect - github.com/edsrzf/mmap-go v1.1.0 // indirect + github.com/ethereum/c-kzg-4844 v0.3.1 // indirect github.com/ferranbt/fastssz v0.1.3 // indirect github.com/getsentry/sentry-go v0.20.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect @@ -58,6 +63,7 @@ require ( github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/prometheus/client_golang v1.14.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect @@ -67,16 +73,24 @@ require ( github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/sirupsen/logrus v1.9.0 // indirect + github.com/supranational/blst v0.3.11 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect - github.com/tklauser/go-sysconf v0.3.11 // indirect - github.com/tklauser/numcpus v0.6.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/wealdtech/go-bytesutil v1.2.1 // indirect github.com/wealdtech/go-eth2-types/v2 v2.8.1 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - golang.org/x/crypto v0.7.0 // indirect - golang.org/x/sys v0.7.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/crypto v0.12.0 // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect + golang.org/x/tools v0.9.1 // indirect google.golang.org/protobuf v1.30.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + rsc.io/tmplfunc v0.0.3 // indirect ) + +replace github.com/protolambda/zrnt => github.com/marioevz/zrnt v0.26.2-0.20230927204959-21993eae2d9f + +replace github.com/protolambda/eth2api => github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033 diff --git a/simulators/eth2/common/go.sum b/simulators/eth2/common/go.sum index afdad59ad9..7fc6cab725 100644 --- a/simulators/eth2/common/go.sum +++ b/simulators/eth2/common/go.sum @@ -6,6 +6,8 @@ github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMd github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= @@ -16,6 +18,8 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5 github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= +github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= @@ -27,24 +31,30 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230404150825-93eff0a72e22 h1:2Nwgec/S3FkQW3r807JL9+D2xb2XU9zbRCotvQWLIfY= -github.com/cockroachdb/pebble v0.0.0-20230404150825-93eff0a72e22/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM/P5NAw0e2Rf1FGvzDau1h54MKvx8G7w= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.10.0 h1:zRh22SR7o4K35SoNqouS9J/TKHTyU2QWaj5ldehyXtA= +github.com/consensys/gnark-crypto v0.10.0/go.mod h1:Iq/P3HHl0ElSjsg2E1gsMwhAyxnxoKK5nVyZKd+/KhU= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= +github.com/crate-crypto/go-kzg-4844 v0.3.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -57,16 +67,16 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2U github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= -github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum/go-ethereum v1.11.5 h1:3M1uan+LAUvdn+7wCEFrcMM4LJTeuxDrPTg/f31a5QQ= -github.com/ethereum/go-ethereum v1.11.5/go.mod h1:it7x0DWnTDMfVFdXcU6Ti4KEFQynLHVRarcSlPr0HBo= +github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= +github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.1 h1:UF2FaUKPIy5jeZk3X06ait3y2Q4wI+vJ1l7+UARp+60= +github.com/ethereum/go-ethereum v1.13.1/go.mod h1:xHQKzwkHSl0gnSjZK1mWa06XEdm9685AHqhRknOzqGQ= github.com/ethereum/hive v0.0.0-20230401205547-71595beab31d h1:aYS/z/WooDYsJKpOoZ/ha8Zg+CwSf9Kp1919rnmmC0s= github.com/ethereum/hive v0.0.0-20230401205547-71595beab31d/go.mod h1:zKL2DscVzRusnGVpseAvLrXGJ3qrGHuSfOIrv4JfnRk= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= @@ -125,7 +135,6 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -140,6 +149,7 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -154,13 +164,14 @@ github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/herumi/bls-eth-go-binary v1.29.1 h1:XcNSHYTyNjEUVfWDCE2gtG5r95biTwd7MJUJF09LtSE= github.com/herumi/bls-eth-go-binary v1.29.1/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.2 h1:TXKcSGc2WaxPD2+bmzAsVthL4+pEN0YwXcL5qED83vk= -github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= +github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= @@ -205,17 +216,16 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/marioevz/eth-clients v0.0.0-20230501225027-135b7d52b617 h1:sk4stg95D93cfiIIYI+XPRhXZQ91QGIPOHNDZjmpXms= -github.com/marioevz/eth-clients v0.0.0-20230501225027-135b7d52b617/go.mod h1:LnzXFKyMw3wF/3eaTfPhKiwkWkZJXokOWcUI02Ioi4s= -github.com/marioevz/eth-clients v0.0.0-20230503000902-6ba8d15dfe6a h1:EbX/rlcGlMXhwlTibd+TWuN2G2mQKiahwH4xBFpzXo0= -github.com/marioevz/eth-clients v0.0.0-20230503000902-6ba8d15dfe6a/go.mod h1:LnzXFKyMw3wF/3eaTfPhKiwkWkZJXokOWcUI02Ioi4s= -github.com/marioevz/eth-clients v0.0.0-20230503173323-98293c926363 h1:ONwsdY5/heIE0HHxh4+QXkwa69MZuaO+vONXduNBbrM= -github.com/marioevz/eth-clients v0.0.0-20230503173323-98293c926363/go.mod h1:LnzXFKyMw3wF/3eaTfPhKiwkWkZJXokOWcUI02Ioi4s= -github.com/marioevz/mock-builder v0.0.0-20230501225822-df434a88e375 h1:44F0CrAc81Nzsr/4BhkeKebbrHERHdCjO6jXS9VAE/0= -github.com/marioevz/mock-builder v0.0.0-20230501225822-df434a88e375/go.mod h1:FQIXEFViaQkOqKrqLC91JgqG+6YEvqMVh9D7g6PmFUg= -github.com/marioevz/mock-builder v0.0.0-20230515180219-3b0b5c3eefe3 h1:LbF6BNBYypeF1pjTulvFr4vUSXeeT8B9ZeYCU9KDbuo= -github.com/marioevz/mock-builder v0.0.0-20230515180219-3b0b5c3eefe3/go.mod h1:FQIXEFViaQkOqKrqLC91JgqG+6YEvqMVh9D7g6PmFUg= +github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76 h1:fj+aeR3YLmSRUWjOGgTxNMdvzm72J5JbKGKosNO/jkE= +github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76/go.mod h1:YVrdn57Q3rAzm3wus4T9tg1vMPca4csVbzorPhkGCW0= +github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033 h1:sn57n+lbJrLS8FKYs08W7TEzraTGOCQGrSC4hni6rYw= +github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033/go.mod h1:hcwWCT4sF1X7KsMZ535MvDZVk5M20Uyj+x2LARZjQsM= +github.com/marioevz/mock-builder v1.1.1-0.20230920235938-1f29ea279d7d h1:MKDrztpuiYtlG8MpW7wES2f37bEevR5F1ziR2x8VzfA= +github.com/marioevz/mock-builder v1.1.1-0.20230920235938-1f29ea279d7d/go.mod h1:SNZ7dv5aXLJQZ88JNmARdXz9N8HEbU5KVyitRuXnPXY= +github.com/marioevz/zrnt v0.26.2-0.20230927204959-21993eae2d9f h1:pXAUGkBHJVQ2OH8SDFi26HYgJYcFJ8As+o+Gn7ASuCY= +github.com/marioevz/zrnt v0.26.2-0.20230927204959-21993eae2d9f/go.mod h1:MzAcHPo2QQIx+IEPdxXMiqKtYRUlszz7RA/fhAuOm1I= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= @@ -234,7 +244,6 @@ github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zk github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -242,6 +251,9 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -286,16 +298,10 @@ github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/protolambda/bls12-381-util v0.0.0-20210720105258-a772f2aac13e/go.mod h1:MPZvj2Pr0N8/dXyTPS5REeg2sdLG7t8DRzC1rLv925w= github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 h1:cZC+usqsYgHtlBaGulVnZ1hfKAi8iWtujBnRLQE698c= github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7/go.mod h1:IToEjHuttnUzwZI5KBSM/LOOW3qLbbrHOEfp3SbECGY= -github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d h1:35qD9zgP3ApfcHsETuJyX3G5kVOgFgAx6kaRGzPC+FY= -github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d/go.mod h1:4WbGGB4Bv17hKsiytlJY4IQDNpRS234DvFvIBNLnd60= github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564 h1:yCXGkFjrZ8EggxW+Y7ueRZesNcBk0avLU0mVU/I2KtU= github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564/go.mod h1:Xda3KO8+DMyWaTr+LwUUpVRTB5SdFzoKu0ivXNI6p1s= -github.com/protolambda/messagediff v1.4.0/go.mod h1:LboJp0EwIbJsePYpzh5Op/9G1/4mIztMRYzzwR0dR2M= -github.com/protolambda/zrnt v0.30.0 h1:pHEn69ZgaDFGpLGGYG1oD7DvYI7RDirbMBPfbC+8p4g= -github.com/protolambda/zrnt v0.30.0/go.mod h1:qcdX9CXFeVNCQK/q0nswpzhd+31RHMk2Ax/2lMsJ4Jw= github.com/protolambda/ztyp v0.2.2 h1:rVcL3vBu9W/aV646zF6caLS/dyn9BN8NYiuJzicLNyY= github.com/protolambda/ztyp v0.2.2/go.mod h1:9bYgKGqg3wJqT9ac1gI2hnVb0STQq7p/1lapqrqY1dU= github.com/rauljordan/engine-proxy v0.0.0-20230316220057-4c80c36c4c3a h1:ZIfMLprHVdo2vs3WcSqSDEyz2ZsSzDhGeOyxh8VQThA= @@ -337,12 +343,14 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= -github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= -github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -350,7 +358,7 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/umbracle/gohashtree v0.0.2-alpha.0.20230207094856-5b775a815c10 h1:CQh33pStIp/E30b7TxDlXfM0145bn2e8boI30IxAhTg= -github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa h1:5SqCsI/2Qya2bCzK15ozrqo2sZxkh0FHynJZOTVoV6Q= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= @@ -386,11 +394,11 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230810033253-352e893a4cad h1:g0bG7Z4uG+OgH2QDODnjp6ggkk1bJDsINcuWmJN1iJU= +golang.org/x/exp v0.0.0-20230810033253-352e893a4cad/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -399,6 +407,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -420,7 +430,7 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -430,7 +440,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -465,10 +476,10 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -477,8 +488,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -495,6 +506,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= 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= @@ -537,8 +550,7 @@ gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/R gopkg.in/inconshreveable/log15.v2 v2.0.0-20200109203555-b30bc20e4fd1 h1:iiHuQZCNgYPmFQxd3BBN/Nc5+dAwzZuq5y40s20oQw0= gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -553,3 +565,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/simulators/eth2/common/spoofing/beacon/beacon_verification.go b/simulators/eth2/common/spoofing/beacon/beacon_verification.go index 941182c920..49cc2a09a0 100644 --- a/simulators/eth2/common/spoofing/beacon/beacon_verification.go +++ b/simulators/eth2/common/spoofing/beacon/beacon_verification.go @@ -13,18 +13,22 @@ import ( const ( EngineForkchoiceUpdatedV1 = "engine_forkchoiceUpdatedV1" EngineForkchoiceUpdatedV2 = "engine_forkchoiceUpdatedV2" + EngineForkchoiceUpdatedV3 = "engine_forkchoiceUpdatedV3" EngineNewPayloadV1 = "engine_newPayloadV1" EngineNewPayloadV2 = "engine_newPayloadV2" + EngineNewPayloadV3 = "engine_newPayloadV3" ) var EngineNewPayload = []string{ EngineNewPayloadV1, EngineNewPayloadV2, + EngineNewPayloadV3, } var EngineForkchoiceUpdated = []string{ EngineForkchoiceUpdatedV1, EngineForkchoiceUpdatedV2, + EngineForkchoiceUpdatedV3, } type FallibleLogger interface { diff --git a/simulators/eth2/common/testnet/config.go b/simulators/eth2/common/testnet/config.go index cb8c618cee..b7ff86256e 100644 --- a/simulators/eth2/common/testnet/config.go +++ b/simulators/eth2/common/testnet/config.go @@ -7,6 +7,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/common/config" + consensus_config "github.com/ethereum/hive/simulators/eth2/common/config/consensus" execution_config "github.com/ethereum/hive/simulators/eth2/common/config/execution" mock_builder "github.com/marioevz/mock-builder/mock" ) @@ -28,15 +30,8 @@ var ( ) type Config struct { - AltairForkEpoch *big.Int `json:"altair_fork_epoch,omitempty"` - BellatrixForkEpoch *big.Int `json:"bellatrix_fork_epoch,omitempty"` - CapellaForkEpoch *big.Int `json:"capella_fork_epoch,omitempty"` - ValidatorCount *big.Int `json:"validator_count,omitempty"` - KeyTranches *big.Int `json:"key_tranches,omitempty"` - SlotTime *big.Int `json:"slot_time,omitempty"` - TerminalTotalDifficulty *big.Int `json:"terminal_total_difficulty,omitempty"` - SafeSlotsToImportOptimistically *big.Int `json:"safe_slots_to_import_optimistically,omitempty"` - ExtraShares *big.Int `json:"extra_shares,omitempty"` + *config.ForkConfig `json:"fork_config,omitempty"` + *consensus_config.ConsensusConfig `json:"consensus_config,omitempty"` // Node configurations to launch. Each node as a proportional share of // validators. @@ -66,24 +61,11 @@ func choose(a, b *big.Int) *big.Int { // Join two configurations. `b` takes precedence func (a *Config) Join(b *Config) *Config { c := Config{} - // Forks - c.AltairForkEpoch = choose(a.AltairForkEpoch, b.AltairForkEpoch) - c.BellatrixForkEpoch = choose(a.BellatrixForkEpoch, b.BellatrixForkEpoch) - c.CapellaForkEpoch = choose(a.CapellaForkEpoch, b.CapellaForkEpoch) - - // Testnet config - c.ValidatorCount = choose(a.ValidatorCount, b.ValidatorCount) - c.KeyTranches = choose(a.KeyTranches, b.KeyTranches) - c.SlotTime = choose(a.SlotTime, b.SlotTime) - c.TerminalTotalDifficulty = choose( - a.TerminalTotalDifficulty, - b.TerminalTotalDifficulty, - ) - c.SafeSlotsToImportOptimistically = choose( - a.SafeSlotsToImportOptimistically, - b.SafeSlotsToImportOptimistically, - ) - c.ExtraShares = choose(a.ExtraShares, b.ExtraShares) + // ForkConfig + c.ForkConfig = a.ForkConfig.Join(b.ForkConfig) + + // ConsensusConfig + c.ConsensusConfig = a.ConsensusConfig.Join(b.ConsensusConfig) // EL config c.InitialBaseFeePerGas = choose( @@ -114,20 +96,11 @@ func (a *Config) Join(b *Config) *Config { return &c } -func (c *Config) activeFork() string { - if c.CapellaForkEpoch != nil && c.CapellaForkEpoch.Cmp(Big0) == 0 { - return "capella" - } else if c.BellatrixForkEpoch != nil && c.BellatrixForkEpoch.Cmp(Big0) == 0 { - return "bellatrix" - } else if c.AltairForkEpoch != nil && c.AltairForkEpoch.Cmp(Big0) == 0 { - return "altair" - } else { - return "phase0" - } -} - // Check the configuration and its support by the multiple client definitions -func (c *Config) fillDefaults() error { +func (c *Config) FillDefaults() error { + if c.SlotsPerEpoch == nil { + c.SlotsPerEpoch = big.NewInt(32) + } if c.SlotTime == nil { allNodeDefinitions := c.NodeDefinitions if len( diff --git a/simulators/eth2/common/testnet/prepared_testnet.go b/simulators/eth2/common/testnet/prepared_testnet.go index 0d7ece7533..69748d7c3e 100644 --- a/simulators/eth2/common/testnet/prepared_testnet.go +++ b/simulators/eth2/common/testnet/prepared_testnet.go @@ -7,22 +7,20 @@ import ( "math/big" "net" "os" + "strconv" "strings" "time" - "github.com/holiman/uint256" blsu "github.com/protolambda/bls12-381-util" - "github.com/protolambda/ztyp/tree" - "github.com/protolambda/ztyp/view" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/params" "github.com/protolambda/zrnt/eth2/beacon/common" "github.com/protolambda/zrnt/eth2/configs" "github.com/ethereum/hive/hivesim" "github.com/ethereum/hive/simulators/eth2/common/clients" cl "github.com/ethereum/hive/simulators/eth2/common/config/consensus" + cl_genesis "github.com/ethereum/hive/simulators/eth2/common/config/consensus/genesis" el "github.com/ethereum/hive/simulators/eth2/common/config/execution" beacon_client "github.com/marioevz/eth-clients/clients/beacon" exec_client "github.com/marioevz/eth-clients/clients/execution" @@ -49,7 +47,7 @@ type PreparedTestnet struct { spec *common.Spec // Execution chain configuration and genesis info - eth1Genesis *el.ExecutionGenesis + executionGenesis *el.ExecutionGenesis // Consensus genesis state eth2Genesis common.BeaconState // Secret keys of validators, to fabricate extra signed test messages with during testnet/ @@ -65,60 +63,66 @@ type PreparedTestnet struct { keyTranches []cl.ValidatorDetailsMap } -// Prepares the fork timestamps of post-merge forks based on the -// consensus layer genesis time and the fork epochs -func prepareExecutionForkConfig( - eth2GenesisTime common.Timestamp, - config *Config, -) *params.ChainConfig { - chainConfig := params.ChainConfig{} - if config.CapellaForkEpoch != nil { - shanghai := uint64(eth2GenesisTime) - if config.CapellaForkEpoch.Uint64() != 0 { - shanghai += uint64( - config.CapellaForkEpoch.Int64() * config.SlotTime.Int64() * 32, - ) - } - chainConfig.ShanghaiTime = &shanghai - } - return &chainConfig +func getLogLevelString() string { + logLevelInt, _ := strconv.Atoi(os.Getenv("HIVE_LOGLEVEL")) + switch logLevelInt { + case 2: + return "warn" + case 3: + return "info" + case 4: + return "debug" + case 5: + return "trace" + } + return "error" } // Build all artifacts require to start a testnet. func prepareTestnet( - t *hivesim.T, env *Environment, config *Config, -) *PreparedTestnet { - eth1GenesisTime := common.Timestamp(time.Now().Unix()) - eth2GenesisTime := eth1GenesisTime + 30 +) (*PreparedTestnet, error) { + genesisTime := common.Timestamp(time.Now().Unix()) + 30 // Sanitize configuration according to the clients used - if err := config.fillDefaults(); err != nil { - t.Fatal(fmt.Errorf("FAIL: error filling defaults: %v", err)) + if err := config.FillDefaults(); err != nil { + return nil, fmt.Errorf("FAIL: error filling defaults: %v", err) } if configJson, err := json.MarshalIndent(config, "", " "); err != nil { panic(err) } else { - t.Logf("Testnet config: %s", configJson) + fmt.Printf("Testnet config: %s\n", configJson) } // Generate genesis for execution clients - eth1Genesis := el.BuildExecutionGenesis( + chainConfig, err := el.BuildChainConfig( config.TerminalTotalDifficulty, - uint64(eth1GenesisTime), + uint64(genesisTime), + config.SlotsPerEpoch.Uint64(), + config.SlotTime.Uint64(), + config.ForkConfig, + ) + if err != nil { + return nil, fmt.Errorf("error producing chainConfig: %v", err) + } + + executionGenesis, err := el.BuildExecutionGenesis( + uint64(genesisTime), config.Eth1Consensus, - prepareExecutionForkConfig(eth2GenesisTime, config), + chainConfig, config.GenesisExecutionAccounts, + config.InitialBaseFeePerGas, ) - if config.InitialBaseFeePerGas != nil { - eth1Genesis.Genesis.BaseFee = config.InitialBaseFeePerGas + if err != nil { + return nil, fmt.Errorf("error producing execution genesis: %v", err) } - eth1ConfigOpt := eth1Genesis.ToParams(depositAddress) - eth1Bundle, err := el.ExecutionBundle(eth1Genesis.Genesis) + + eth1ConfigOpt := executionGenesis.ToParams(depositAddress) + eth1Bundle, err := el.ExecutionBundle(executionGenesis.Genesis) if err != nil { - t.Fatal(err) + return nil, fmt.Errorf("unable to bundle execution genesis: %v", err) } execNodeOpts := hivesim.Params{ "HIVE_LOGLEVEL": os.Getenv("HIVE_LOGLEVEL"), @@ -136,10 +140,10 @@ func prepareTestnet( for i := 0; i < len(config.NodeDefinitions); i++ { if config.NodeDefinitions[i].ChainGenerator != nil { config.NodeDefinitions[i].Chain, err = config.NodeDefinitions[i].ChainGenerator.Generate( - eth1Genesis, + executionGenesis, ) if err != nil { - t.Fatal(err) + return nil, fmt.Errorf("unable to generate PoW chains for node %d: %v", i, err) } fmt.Printf("Generated chain for node %d:\n", i+1) for j, b := range config.NodeDefinitions[i].Chain { @@ -149,70 +153,17 @@ func prepareTestnet( } } - // Generate beacon spec - // - // TODO: specify build-target based on preset, to run clients in mainnet or minimal mode. - // copy the default mainnet config, and make some minimal modifications for testnet usage - specCpy := *configs.Mainnet - spec := &specCpy - spec.Config.DEPOSIT_CONTRACT_ADDRESS = depositAddress - spec.Config.DEPOSIT_CHAIN_ID = view.Uint64View( - eth1Genesis.Genesis.Config.ChainID.Uint64(), + spec, err := cl.BuildSpec( + configs.Mainnet, + config.ForkConfig, + config.ConsensusConfig, + depositAddress, + executionGenesis, ) - spec.Config.DEPOSIT_NETWORK_ID = view.Uint64View(eth1Genesis.NetworkID) - spec.Config.ETH1_FOLLOW_DISTANCE = 1 - - // Alter versions to avoid conflicts with mainnet values - spec.Config.GENESIS_FORK_VERSION = common.Version{0x00, 0x00, 0x00, 0x0a} - if config.AltairForkEpoch != nil { - spec.Config.ALTAIR_FORK_EPOCH = common.Epoch( - config.AltairForkEpoch.Uint64(), - ) - } - spec.Config.ALTAIR_FORK_VERSION = common.Version{0x01, 0x00, 0x00, 0x0a} - if config.BellatrixForkEpoch != nil { - spec.Config.BELLATRIX_FORK_EPOCH = common.Epoch( - config.BellatrixForkEpoch.Uint64(), - ) - } - spec.Config.BELLATRIX_FORK_VERSION = common.Version{0x02, 0x00, 0x00, 0x0a} - if config.CapellaForkEpoch != nil { - spec.Config.CAPELLA_FORK_EPOCH = common.Epoch( - config.CapellaForkEpoch.Uint64(), - ) - } - spec.Config.CAPELLA_FORK_VERSION = common.Version{0x03, 0x00, 0x00, 0x0a} - spec.Config.DENEB_FORK_VERSION = common.Version{0x04, 0x00, 0x00, 0x0a} - if config.ValidatorCount == nil { - t.Fatal(fmt.Errorf("ValidatorCount was not configured")) - } - spec.Config.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT = view.Uint64View( - config.ValidatorCount.Uint64(), - ) - if config.SlotTime != nil { - spec.Config.SECONDS_PER_SLOT = common.Timestamp( - config.SlotTime.Uint64(), - ) - } - tdd, _ := uint256.FromBig(config.TerminalTotalDifficulty) - spec.Config.TERMINAL_TOTAL_DIFFICULTY = view.Uint256View(*tdd) - if el.IsEth1GenesisPostMerge(eth1Genesis.Genesis) { - genesisBlock := eth1Genesis.Genesis.ToBlock() - spec.Config.TERMINAL_BLOCK_HASH = tree.Root( - genesisBlock.Hash(), - ) - spec.Config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH = common.Timestamp(0) + if err != nil { + return nil, fmt.Errorf("error producing spec: %v", err) } - // Validators can exit immediately - spec.Config.SHARD_COMMITTEE_PERIOD = 0 - spec.Config.CHURN_LIMIT_QUOTIENT = 2 - - // Validators can withdraw immediately - spec.Config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY = 0 - - spec.Config.PROPOSER_SCORE_BOOST = 40 - // Generate keys opts for validators shares := config.NodeDefinitions.Shares() // ExtraShares defines an extra set of keys that none of the nodes will have. @@ -224,11 +175,11 @@ func prepareTestnet( consensusConfigOpts, err := cl.ConsensusConfigsBundle( spec, - eth1Genesis.Genesis, + executionGenesis.Hash, config.ValidatorCount.Uint64(), ) if err != nil { - t.Fatal(err) + return nil, fmt.Errorf("error producing consensus config bundle: %v", err) } var optimisticSync hivesim.Params @@ -241,20 +192,20 @@ func prepareTestnet( ) // prepare genesis beacon state, with all the validators in it. - state, err := cl.BuildBeaconState( + state, err := cl_genesis.BuildBeaconState( spec, - eth1Genesis.Genesis, - eth2GenesisTime, + executionGenesis.Block, + genesisTime, env.Keys, ) if err != nil { - t.Fatal(err) + return nil, fmt.Errorf("error producing beacon genesis state: %v", err) } // Write info so that the genesis state can be generated by the client stateOpt, err := cl.StateBundle(state) if err != nil { - t.Fatal(err) + return nil, fmt.Errorf("error producing state bundle: %v", err) } // Define additional start options for beacon chain @@ -274,7 +225,7 @@ func prepareTestnet( "HIVE_ETH2_CONFIG_DEPOSIT_CONTRACT_ADDRESS": depositAddress.String(), "HIVE_ETH2_DEPOSIT_DEPLOY_BLOCK_HASH": fmt.Sprintf( "%s", - eth1Genesis.Genesis.ToBlock().Hash(), + executionGenesis.Hash, ), } beaconOpts := hivesim.Bundle( @@ -287,9 +238,9 @@ func prepareTestnet( "HIVE_ETH2_MERGE_ENABLED": "1", "HIVE_ETH2_ETH1_GENESIS_TIME": fmt.Sprintf( "%d", - eth1Genesis.Genesis.Timestamp, + executionGenesis.Genesis.Timestamp, ), - "HIVE_ETH2_GENESIS_FORK": config.activeFork(), + "HIVE_ETH2_GENESIS_FORK": config.GenesisBeaconFork(), }, stateOpt, consensusConfigOpts, @@ -305,15 +256,15 @@ func prepareTestnet( ) return &PreparedTestnet{ - spec: spec, - eth1Genesis: eth1Genesis, - eth2Genesis: state, - keys: env.Secrets, - executionOpts: executionOpts, - beaconOpts: beaconOpts, - validatorOpts: validatorOpts, - keyTranches: keyTranches, - } + spec: spec, + executionGenesis: executionGenesis, + eth2Genesis: state, + keys: env.Secrets, + executionOpts: executionOpts, + beaconOpts: beaconOpts, + validatorOpts: validatorOpts, + keyTranches: keyTranches, + }, nil } func (p *PreparedTestnet) createTestnet(t *hivesim.T) *Testnet { @@ -324,7 +275,7 @@ func (p *PreparedTestnet) createTestnet(t *hivesim.T) *Testnet { genesisTime: genesisTime, genesisValidatorsRoot: genesisValidatorsRoot, spec: p.spec, - eth1Genesis: p.eth1Genesis, + executionGenesis: p.executionGenesis, eth2GenesisState: p.eth2Genesis, // Testing @@ -471,6 +422,7 @@ func (p *PreparedTestnet) prepareBeaconNode( mock_builder.WithID(config.ClientIndex), mock_builder.WithBeaconGenesisTime(testnet.genesisTime), mock_builder.WithSpec(p.spec), + mock_builder.WithLogLevel(getLogLevelString()), } if builderOptions != nil { @@ -568,6 +520,8 @@ func (p *PreparedTestnet) prepareBeaconNode( opts = append(opts, hivesim.Params{ "HIVE_ETH2_BUILDER_ENDPOINT": builder.Address(), }) + } else { + panic(fmt.Errorf("builder is not a Builder")) } } diff --git a/simulators/eth2/common/testnet/running_testnet.go b/simulators/eth2/common/testnet/running_testnet.go index 0214ce71dc..e9fb439731 100644 --- a/simulators/eth2/common/testnet/running_testnet.go +++ b/simulators/eth2/common/testnet/running_testnet.go @@ -52,7 +52,7 @@ type Testnet struct { // Consensus chain configuration spec *common.Spec // Execution chain configuration and genesis info - eth1Genesis *execution_config.ExecutionGenesis + executionGenesis *execution_config.ExecutionGenesis // Consensus genesis state eth2GenesisState common.BeaconState @@ -135,7 +135,7 @@ func (t *Testnet) GenesisValidatorsRoot() common.Root { } func (t *Testnet) ExecutionGenesis() *core.Genesis { - return t.eth1Genesis.Genesis + return t.executionGenesis.Genesis } func StartTestnet( @@ -144,8 +144,11 @@ func StartTestnet( env *Environment, config *Config, ) *Testnet { + prep, err := prepareTestnet(env, config) + if err != nil { + t.Fatalf("FAIL: Unable to prepare testnet: %v", err) + } var ( - prep = prepareTestnet(t, env, config) testnet = prep.createTestnet(t) genesisTime = testnet.GenesisTimeUnix() ) @@ -203,13 +206,13 @@ func StartTestnet( } if node.ExecutionClientTTD != nil { executionTTD = node.ExecutionClientTTD.Int64() - } else if testnet.eth1Genesis.Genesis.Config.TerminalTotalDifficulty != nil { - executionTTD = testnet.eth1Genesis.Genesis.Config.TerminalTotalDifficulty.Int64() + } else if testnet.executionGenesis.Genesis.Config.TerminalTotalDifficulty != nil { + executionTTD = testnet.executionGenesis.Genesis.Config.TerminalTotalDifficulty.Int64() } if node.BeaconNodeTTD != nil { beaconTTD = node.BeaconNodeTTD.Int64() - } else if testnet.eth1Genesis.Genesis.Config.TerminalTotalDifficulty != nil { - beaconTTD = testnet.eth1Genesis.Genesis.Config.TerminalTotalDifficulty.Int64() + } else if testnet.executionGenesis.Genesis.Config.TerminalTotalDifficulty != nil { + beaconTTD = testnet.executionGenesis.Genesis.Config.TerminalTotalDifficulty.Int64() } // Prepare the client objects with all the information necessary to @@ -228,7 +231,7 @@ func StartTestnet( ProxyConfig: &exec_client.ExecutionProxyConfig{ Host: simulatorIP, Port: exec_client.PortEngineRPC + nodeIndex, - TrackForkchoiceUpdated: true, + TrackForkchoiceUpdated: false, LogEngineCalls: env.LogEngineCalls, }, }, @@ -267,9 +270,12 @@ func StartTestnet( nodeClient.Verification = node.TestVerificationNode // Start the node clients if specified so if !node.DisableStartup { + t.Logf("Starting node %d", nodeIndex) if err := nodeClient.Start(); err != nil { t.Fatalf("FAIL: Unable to start node %d: %v", nodeIndex, err) } + } else { + t.Logf("Node %d startup disabled, skipping", nodeIndex) } } @@ -385,7 +391,7 @@ func (t *Testnet) WaitForFork(ctx context.Context, fork string) error { } execution := ethcommon.Hash{} - if executionPayload, err := versionedBlock.ExecutionPayload(); err == nil { + if executionPayload, _, _, err := versionedBlock.ExecutionPayload(); err == nil { execution = executionPayload.BlockHash } @@ -491,7 +497,7 @@ func (t *Testnet) WaitForFinality(ctx context.Context) ( return } execution := ethcommon.Hash{} - if executionPayload, err := versionedBlock.ExecutionPayload(); err == nil { + if executionPayload, _, _, err := versionedBlock.ExecutionPayload(); err == nil { execution = executionPayload.BlockHash } @@ -543,6 +549,127 @@ func (t *Testnet) WaitForFinality(ctx context.Context) ( } } +// WaitForSync blocks until all beacon clients converge to the same head. +func (t *Testnet) WaitForSync(ctx context.Context) ( + tree.Root, error, +) { + var ( + genesis = t.GenesisTimeUnix() + slotDuration = time.Duration(t.spec.SECONDS_PER_SLOT) * time.Second + timer = time.NewTicker(slotDuration) + runningNodes = t.VerificationNodes().Running() + results = makeResults(runningNodes, t.maxConsecutiveErrorsOnWaits) + ) + + for { + select { + case <-ctx.Done(): + return tree.Root{}, ctx.Err() + case tim := <-timer.C: + // start polling after first slot of genesis + if tim.Before(genesis.Add(slotDuration)) { + t.Logf("Time till genesis: %s", genesis.Sub(tim)) + continue + } + + // new slot, log and check status of all beacon nodes + var ( + wg sync.WaitGroup + clockSlot = t.spec.TimeToSlot( + common.Timestamp(time.Now().Unix()), + t.GenesisTime(), + ) + heads = make(chan tree.Root, len(runningNodes)) + ) + results.Clear() + + for i, n := range runningNodes { + wg.Add(1) + go func(ctx context.Context, n *node.Node, r *result) { + defer wg.Done() + + b := n.BeaconClient + + checkpoints, err := b.BlockFinalityCheckpoints( + ctx, + eth2api.BlockHead, + ) + if err != nil { + r.err = errors.Wrap( + err, + "failed to poll finality checkpoint", + ) + return + } + + versionedBlock, err := b.BlockV2( + ctx, + eth2api.BlockHead, + ) + if err != nil { + r.err = errors.Wrap(err, "failed to retrieve block") + return + } + heads <- versionedBlock.Root() + + execution := ethcommon.Hash{} + if executionPayload, _, _, err := versionedBlock.ExecutionPayload(); err == nil { + execution = executionPayload.BlockHash + } + + slot := versionedBlock.Slot() + health, _ := GetHealth(ctx, b, t.spec, slot) + + r.msg = fmt.Sprintf( + "fork=%s, clock_slot=%d, slot=%d, head=%s, "+ + "health=%.2f, exec_payload=%s, justified=%s, "+ + "finalized=%s", + versionedBlock.Version, + clockSlot, + slot, + utils.Shorten(versionedBlock.Root().String()), + health, + utils.Shorten(execution.String()), + utils.Shorten(checkpoints.CurrentJustified.String()), + utils.Shorten(checkpoints.Finalized.String()), + ) + + if (checkpoints.Finalized != common.Checkpoint{}) { + r.done = true + r.result = checkpoints.Finalized + } + }(ctx, n, results[i]) + } + wg.Wait() + + if err := results.CheckError(); err != nil { + return tree.Root{}, err + } + results.PrintMessages(t.Logf) + + // Check if all heads are the same + close(heads) + var ( + head tree.Root + ok bool = true + ) + for h := range heads { + if head == EMPTY_TREE_ROOT { + head = h + continue + } + if !bytes.Equal(head[:], h[:]) { + ok = false + break + } + } + if ok && head != EMPTY_TREE_ROOT { + return head, nil + } + } + } +} + // WaitForExecutionFinality blocks until a beacon client reaches finality // and the finality checkpoint contains an execution payload, // or timeoutSlots have passed, whichever happens first. @@ -616,7 +743,7 @@ func (t *Testnet) WaitForExecutionFinality( } execution := ethcommon.Hash{} - if exeuctionPayload, err := headBlock.ExecutionPayload(); err == nil { + if exeuctionPayload, _, _, err := headBlock.ExecutionPayload(); err == nil { execution = exeuctionPayload.BlockHash } @@ -633,7 +760,7 @@ func (t *Testnet) WaitForExecutionFinality( return } else { finalizedFork = finalizedBlock.Version - if exeuctionPayload, err := finalizedBlock.ExecutionPayload(); err == nil { + if exeuctionPayload, _, _, err := finalizedBlock.ExecutionPayload(); err == nil { finalizedExecution = exeuctionPayload.BlockHash } } @@ -731,13 +858,13 @@ func (t *Testnet) WaitForCurrentEpochFinalization( b := n.BeaconClient - headInfo, err := b.BlockHeader(ctx, eth2api.BlockHead) + headInfo, err := b.BlockV2(ctx, eth2api.BlockHead) if err != nil { r.err = errors.Wrap(err, "failed to poll head") return } - slot := headInfo.Header.Message.Slot + slot := headInfo.Slot() if clockSlot > slot && (clockSlot-slot) >= t.spec.SLOTS_PER_EPOCH { r.fatal = fmt.Errorf( @@ -761,11 +888,12 @@ func (t *Testnet) WaitForCurrentEpochFinalization( } r.msg = fmt.Sprintf( - "clock_slot=%d, slot=%d, head=%s justified=%s, "+ + "fork=%s, clock_slot=%d, slot=%d, head=%s justified=%s, "+ "finalized=%s, epoch_to_finalize=%d", + headInfo.Version, clockSlot, slot, - utils.Shorten(headInfo.Root.String()), + utils.Shorten(headInfo.Root().String()), utils.Shorten(checkpoints.CurrentJustified.String()), utils.Shorten(checkpoints.Finalized.String()), epochToBeFinalized, @@ -828,7 +956,7 @@ func (t *Testnet) WaitForExecutionPayload( // Check if TTD has been reached if td, err := executionClient.TotalDifficultyByNumber(ctx, nil); err == nil { if td.Cmp( - t.eth1Genesis.Genesis.Config.TerminalTotalDifficulty, + t.executionGenesis.Genesis.Config.TerminalTotalDifficulty, ) >= 0 { ttdReached = true } else { @@ -877,7 +1005,7 @@ func (t *Testnet) WaitForExecutionPayload( } executionHash := ethcommon.Hash{} - if executionPayload, err := versionedBlock.ExecutionPayload(); err == nil { + if executionPayload, _, _, err := versionedBlock.ExecutionPayload(); err == nil { executionHash = executionPayload.BlockHash } diff --git a/simulators/eth2/common/testnet/verification.go b/simulators/eth2/common/testnet/verification.go index 6ebf3b85e4..d486f4e152 100644 --- a/simulators/eth2/common/testnet/verification.go +++ b/simulators/eth2/common/testnet/verification.go @@ -3,6 +3,7 @@ package testnet import ( "bytes" "context" + "crypto/sha256" "fmt" "math/big" "time" @@ -29,6 +30,8 @@ type FirstSlotAfterCheckpoint struct { *common.Checkpoint } +var _ VerificationSlot = FirstSlotAfterCheckpoint{} + func (c FirstSlotAfterCheckpoint) Slot( ctx context.Context, t *Testnet, @@ -42,6 +45,8 @@ type LastSlotAtCheckpoint struct { *common.Checkpoint } +var _ VerificationSlot = LastSlotAtCheckpoint{} + func (c LastSlotAtCheckpoint) Slot( ctx context.Context, t *Testnet, @@ -53,6 +58,8 @@ func (c LastSlotAtCheckpoint) Slot( // Get last slot according to current time type LastestSlotByTime struct{} +var _ VerificationSlot = LastestSlotByTime{} + func (l LastestSlotByTime) Slot( ctx context.Context, t *Testnet, @@ -66,6 +73,8 @@ func (l LastestSlotByTime) Slot( // Get last slot according to current head of a beacon node type LastestSlotByHead struct{} +var _ VerificationSlot = LastestSlotByHead{} + func (l LastestSlotByHead) Slot( ctx context.Context, t *Testnet, @@ -151,7 +160,7 @@ func (t *Testnet) VerifyExecutionPayloadIsCanonical( ) } - payload, err := versionedBlock.ExecutionPayload() + payload, _, _, err := versionedBlock.ExecutionPayload() if err != nil { return err } @@ -216,7 +225,7 @@ func (t *Testnet) VerifyExecutionPayloadHashInclusionNode( if err != nil { continue } - if executionPayload, err := versionedBlock.ExecutionPayload(); err != nil { + if executionPayload, _, _, err := versionedBlock.ExecutionPayload(); err != nil { // Block can't contain an executable payload break } else if bytes.Equal(executionPayload.BlockHash[:], hash[:]) { @@ -323,7 +332,7 @@ func (t *Testnet) VerifyELBlockLabels(parentCtx context.Context) error { if err != nil { return err } - if executionPayload, err := versionedBlock.ExecutionPayload(); err != nil { + if executionPayload, _, _, err := versionedBlock.ExecutionPayload(); err != nil { // Get the el block and compare h, err := el.HeaderByLabel(parentCtx, label) if err != nil { @@ -385,3 +394,208 @@ func (t *Testnet) VerifyELHeads( } return nil } + +func (t *Testnet) VerifyBlobs( + parentCtx context.Context, + vs VerificationSlot, +) (uint64, error) { + nodes := t.VerificationNodes().Running() + beaconClients := nodes.BeaconClients() + if len(nodes) == 0 { + return 0, fmt.Errorf("no beacon clients running") + } + if len(nodes) == 1 { + return 0, fmt.Errorf("only one beacon client running, can't verify blobs") + } + var blobCount uint64 + + lastSlot, err := vs.Slot(parentCtx, t, beaconClients[0]) + if err != nil { + return 0, err + } + for slot := lastSlot; slot > 0; slot -= 1 { + + versionedBlock, err := beaconClients[0].BlockV2(parentCtx, eth2api.BlockIdSlot(slot)) + if err != nil { + continue + } + if !versionedBlock.ContainsKZGCommitments() { + // Block can't contain blobs before deneb + break + } + + // Get the execution block from the execution client + executionPayload, _, _, err := versionedBlock.ExecutionPayload() + if err != nil { + panic(err) + } + executionBlock, err := nodes[0].ExecutionClient.BlockByHash(parentCtx, executionPayload.BlockHash) + if err != nil { + panic(err) + } + blockKzgCommitments := versionedBlock.KZGCommitments() + + refSidecars, err := beaconClients[0].BlobSidecars(parentCtx, eth2api.BlockIdSlot(slot)) + if err != nil { + continue + } + blobCount += uint64(len(refSidecars)) + + if len(refSidecars) != len(blockKzgCommitments) { + return 0, fmt.Errorf( + "node %d (%s): block kzg commitments and sidecars lenght differ (sidecar count=%d, block kzg commitments=%d)", + 0, + t.VerificationNodes().Running()[0].ClientNames(), + len(refSidecars), + len(blockKzgCommitments), + ) + } + + // Verify against the execution block transactions + executionBlockHashesCount := 0 + for _, tx := range executionBlock.Transactions() { + blobHashes := tx.BlobHashes() + versionedHashVersion := byte(1) + if len(blobHashes) > 0 { + for _, blobHash := range blobHashes { + if executionBlockHashesCount < len(blockKzgCommitments) { + // Sha256 the kzg commitment and modify the first byte to be the version + hasher := sha256.New() + hasher.Write(blockKzgCommitments[executionBlockHashesCount][:]) + kzgHash := hasher.Sum(nil) + if !bytes.Equal(blobHash[1:], kzgHash[1:]) { + return 0, fmt.Errorf( + "node %d (%s): block kzg commitments and execution block hashes differ (block kzg commitment=%x, execution block hash=%x)", + 0, + t.VerificationNodes().Running()[0].ClientNames(), + blockKzgCommitments[executionBlockHashesCount][:], + blobHash[:], + ) + } + if blobHash[0] != versionedHashVersion { + return 0, fmt.Errorf( + "node %d (%s): execution blob hash does not contain the correct version: %d", + 0, + t.VerificationNodes().Running()[0].ClientNames(), + blobHash[0], + ) + } + } // else: test will fail after the loop, but we need to keep counting the hashes + executionBlockHashesCount++ + } + } + } + if executionBlockHashesCount != len(blockKzgCommitments) { + return 0, fmt.Errorf( + "node %d (%s): block kzg commitments and execution block hashes lenght differ (block kzg commitment count=%d, execution block hash count=%d)", + 0, + t.VerificationNodes().Running()[0].ClientNames(), + len(blockKzgCommitments), + executionBlockHashesCount, + ) + } + + for i := 1; i < len(beaconClients); i++ { + // Check the reference client against the other clients, and verify that all clients return the same blobs + // Also keep count of blobs per client + bn := beaconClients[i] + // Get the sidecars for this client + sidecars, err := bn.BlobSidecars(parentCtx, eth2api.BlockIdSlot(slot)) + if err != nil { + // We already got some blobs from the reference client, so we should not get an error here + return 0, err + } + if len(sidecars) != len(refSidecars) { + return 0, fmt.Errorf( + "node %d (%s): different number of blobs (got=%d, expected=%d)", + i, + t.VerificationNodes().Running()[i].ClientNames(), + len(sidecars), + len(refSidecars), + ) + } + for j := 0; j < len(sidecars); j++ { + if !bytes.Equal(sidecars[j].Blob[:], refSidecars[j].Blob[:]) { + return 0, fmt.Errorf( + "node %d (%s): different blobs\ngot=%x\nexpected=%x", + i, + t.VerificationNodes().Running()[i].ClientNames(), + sidecars[j].Blob[:], + refSidecars[j].Blob[:], + ) + } + // Verify the commitments + if !bytes.Equal(sidecars[j].KZGCommitment[:], refSidecars[j].KZGCommitment[:]) { + return 0, fmt.Errorf( + "node %d (%s): different commitments\ngot=%x\nexpected=%x", + i, + t.VerificationNodes().Running()[i].ClientNames(), + sidecars[j].KZGCommitment[:], + refSidecars[j].KZGCommitment[:], + ) + } + // Verify the proofs + if !bytes.Equal(sidecars[j].KZGProof[:], refSidecars[j].KZGProof[:]) { + return 0, fmt.Errorf( + "node %d (%s): different proofs\ngot=%x\nexpected=%x", + i, + t.VerificationNodes().Running()[i].ClientNames(), + sidecars[j].KZGProof[:], + refSidecars[j].KZGProof[:], + ) + } + // Verify the block roots + if !bytes.Equal(sidecars[j].BlockRoot[:], refSidecars[j].BlockRoot[:]) { + return 0, fmt.Errorf( + "node %d (%s): different block roots\ngot=%x\nexpected=%x", + i, + t.VerificationNodes().Running()[i].ClientNames(), + sidecars[j].BlockRoot[:], + refSidecars[j].BlockRoot[:], + ) + } + // Verify the blob index + if sidecars[j].Index != refSidecars[j].Index || uint64(sidecars[j].Index) != uint64(j) { + return 0, fmt.Errorf( + "node %d (%s): different blob indices\ngot=%d\nexpected=%d", + i, + t.VerificationNodes().Running()[i].ClientNames(), + sidecars[j].Index, + j, + ) + } + // Verify the slot number + if sidecars[j].Slot != refSidecars[j].Slot || uint64(sidecars[j].Slot) != uint64(slot) { + return 0, fmt.Errorf( + "node %d (%s): different slot numbers\ngot=%d\nexpected=%d", + i, + t.VerificationNodes().Running()[i].ClientNames(), + sidecars[j].Slot, + slot, + ) + } + // Verify the block parent root + if !bytes.Equal(sidecars[j].BlockParentRoot[:], refSidecars[j].BlockParentRoot[:]) { + return 0, fmt.Errorf( + "node %d (%s): different block parent roots\ngot=%x\nexpected=%x", + i, + t.VerificationNodes().Running()[i].ClientNames(), + sidecars[j].BlockParentRoot[:], + refSidecars[j].BlockParentRoot[:], + ) + } + // Verify the proposer index + if sidecars[j].ProposerIndex != refSidecars[j].ProposerIndex { + return 0, fmt.Errorf( + "node %d (%s): different proposer indices\ngot=%d\nexpected=%d", + i, + t.VerificationNodes().Running()[i].ClientNames(), + sidecars[j].ProposerIndex, + refSidecars[j].ProposerIndex, + ) + } + } + } + } + return blobCount, nil +} diff --git a/simulators/eth2/dencun/Dockerfile b/simulators/eth2/dencun/Dockerfile new file mode 100644 index 0000000000..7f30ff90a0 --- /dev/null +++ b/simulators/eth2/dencun/Dockerfile @@ -0,0 +1,18 @@ +# Build the simulator binary +FROM golang:1-alpine AS builder +RUN apk --no-cache add gcc musl-dev linux-headers cmake make clang build-base clang-static clang-dev + +# Prepare workspace. +# Note: the build context of this simulator image is the parent directory! +ADD . /source + +# Build within simulator folder +WORKDIR /source/dencun +RUN go build -o ./sim . + +# Build the runner container. +FROM alpine:latest +ADD . / +COPY --from=builder /source/dencun/sim / + +ENTRYPOINT ["./sim"] diff --git a/simulators/eth2/dencun/README.md b/simulators/eth2/dencun/README.md new file mode 100644 index 0000000000..9fbca22dfc --- /dev/null +++ b/simulators/eth2/dencun/README.md @@ -0,0 +1,18 @@ +# Dencun Interop Hive Simulator + +The simulator contains implementation of tests that verify interoperability behavior of the +Execution and Consensus clients on the Deneb+Cancun (Dencun) hard-fork. + +## Test Suites + +### Testnet Simulations + +[Link](suites/base/README.md) + +### Sync Simulations + +[Link](suites/sync/README.md) + +### Builder Simulations + +[Link](suites/builder/README.md) diff --git a/simulators/eth2/dencun/go.mod b/simulators/eth2/dencun/go.mod new file mode 100644 index 0000000000..69892cc63e --- /dev/null +++ b/simulators/eth2/dencun/go.mod @@ -0,0 +1,101 @@ +module github.com/ethereum/hive/simulators/eth2/dencun + +go 1.20 + +require ( + github.com/ethereum/go-ethereum v1.13.1 + github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e + github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6 + github.com/ethereum/hive/simulators/ethereum/engine v0.0.0-20230912233535-da792c2fb747 + github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76 + github.com/marioevz/mock-builder v1.1.1-0.20230920235938-1f29ea279d7d + github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d + github.com/protolambda/zrnt v0.30.0 + github.com/protolambda/ztyp v0.2.2 +) + +require ( + github.com/VictoriaMetrics/fastcache v1.12.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/ferranbt/fastssz v0.1.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-stack/stack v1.8.1 // indirect + github.com/holiman/uint256 v1.2.3 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/minio/sha256-simd v1.0.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 + github.com/shirou/gopsutil v3.21.11+incompatible // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) + +require ( + github.com/DataDog/zstd v1.5.2 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.7.0 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/cockroachdb/errors v1.9.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 // indirect + github.com/cockroachdb/redact v1.1.3 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.11.0 // indirect + github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect + github.com/deckarep/golang-set/v2 v2.3.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/ethereum/c-kzg-4844 v0.3.1 // indirect + github.com/getsentry/sentry-go v0.20.0 // indirect + github.com/gofrs/flock v0.8.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/gorilla/mux v1.8.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/herumi/bls-eth-go-binary v1.28.1 // indirect + github.com/holiman/bloomfilter/v2 v2.0.3 // indirect + github.com/julienschmidt/httprouter v1.3.0 // indirect + github.com/kilic/bls12-381 v0.1.0 // indirect + github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.42.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect + github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564 // indirect + github.com/rauljordan/engine-proxy v0.0.0-20230316220057-4c80c36c4c3a // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + github.com/tyler-smith/go-bip39 v1.1.0 // indirect + github.com/wealdtech/go-bytesutil v1.2.0 // indirect + github.com/wealdtech/go-eth2-types/v2 v2.8.0 // indirect + github.com/wealdtech/go-eth2-util v1.8.0 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect + golang.org/x/crypto v0.12.0 // indirect + golang.org/x/exp v0.0.0-20230810033253-352e893a4cad // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/tools v0.9.1 // indirect + google.golang.org/protobuf v1.30.0 // indirect + rsc.io/tmplfunc v0.0.3 // indirect +) + +replace github.com/protolambda/eth2api => github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033 + +replace github.com/protolambda/zrnt => github.com/marioevz/zrnt v0.26.2-0.20230927204959-21993eae2d9f diff --git a/simulators/eth2/dencun/go.sum b/simulators/eth2/dencun/go.sum new file mode 100644 index 0000000000..7898bab716 --- /dev/null +++ b/simulators/eth2/dencun/go.sum @@ -0,0 +1,573 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= +github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= +github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= +github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= +github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= +github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= +github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM/P5NAw0e2Rf1FGvzDau1h54MKvx8G7w= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= +github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= +github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.11.0 h1:QqzHQlwEqlQr5jfWblGDkwlKHpT+4QodYqqExkAtyks= +github.com/consensys/gnark-crypto v0.11.0/go.mod h1:Iq/P3HHl0ElSjsg2E1gsMwhAyxnxoKK5nVyZKd+/KhU= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= +github.com/crate-crypto/go-kzg-4844 v0.3.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set/v2 v2.3.0 h1:qs18EKUfHm2X9fA50Mr/M5hccg2tNnVqsiBImnyDs0g= +github.com/deckarep/golang-set/v2 v2.3.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= +github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= +github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.1 h1:UF2FaUKPIy5jeZk3X06ait3y2Q4wI+vJ1l7+UARp+60= +github.com/ethereum/go-ethereum v1.13.1/go.mod h1:xHQKzwkHSl0gnSjZK1mWa06XEdm9685AHqhRknOzqGQ= +github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e h1:3g9cqRqpbZ92tSlGL4PfFoq435axKw6HiZ1Gz3fOkfk= +github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e/go.mod h1:PlpDuxHg6q1jU0K8Ouf+RXlHguignJ7k8Eyukc9RCPQ= +github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6 h1:LcSUNGwQuJyR/gdPcsif57yKX+3MyhpoAuChzR8k6Yk= +github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6/go.mod h1:FX4oxNyTNw/P+TUWrb7vva7o/rFI0pHO7OYdtG6EtN4= +github.com/ethereum/hive/simulators/ethereum/engine v0.0.0-20230912233535-da792c2fb747 h1:yvp9rTmddOTwwW+X9BUYEiAYMOaG528w59aTA3fkMG4= +github.com/ethereum/hive/simulators/ethereum/engine v0.0.0-20230912233535-da792c2fb747/go.mod h1:zCFJyLJJjLDT5/R9l8Rqrwt9i9irgg94d2n4kpehTno= +github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/ferranbt/fastssz v0.1.2 h1:Dky6dXlngF6Qjc+EfDipAkE83N5I5DE68bY6O0VLNPk= +github.com/ferranbt/fastssz v0.1.2/go.mod h1:X5UPrE2u1UJjxHA8X54u04SBwdAQjG2sFtWs39YxyWs= +github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= +github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= +github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ= +github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/go-bexpr v0.1.11 h1:6DqdA/KBjurGby9yTY0bmkathya0lfwF2SeuubCI7dY= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/herumi/bls-eth-go-binary v1.28.1 h1:fcIZ48y5EE9973k05XjE8+P3YiQgjZz4JI/YabAm8KA= +github.com/herumi/bls-eth-go-binary v1.28.1/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= +github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= +github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= +github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= +github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= +github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= +github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= +github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= +github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= +github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4= +github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76 h1:fj+aeR3YLmSRUWjOGgTxNMdvzm72J5JbKGKosNO/jkE= +github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76/go.mod h1:YVrdn57Q3rAzm3wus4T9tg1vMPca4csVbzorPhkGCW0= +github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033 h1:sn57n+lbJrLS8FKYs08W7TEzraTGOCQGrSC4hni6rYw= +github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033/go.mod h1:hcwWCT4sF1X7KsMZ535MvDZVk5M20Uyj+x2LARZjQsM= +github.com/marioevz/mock-builder v1.1.1-0.20230920235938-1f29ea279d7d h1:MKDrztpuiYtlG8MpW7wES2f37bEevR5F1ziR2x8VzfA= +github.com/marioevz/mock-builder v1.1.1-0.20230920235938-1f29ea279d7d/go.mod h1:SNZ7dv5aXLJQZ88JNmARdXz9N8HEbU5KVyitRuXnPXY= +github.com/marioevz/zrnt v0.26.2-0.20230927204959-21993eae2d9f h1:pXAUGkBHJVQ2OH8SDFi26HYgJYcFJ8As+o+Gn7ASuCY= +github.com/marioevz/zrnt v0.26.2-0.20230927204959-21993eae2d9f/go.mod h1:MzAcHPo2QQIx+IEPdxXMiqKtYRUlszz7RA/fhAuOm1I= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 h1:cZC+usqsYgHtlBaGulVnZ1hfKAi8iWtujBnRLQE698c= +github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7/go.mod h1:IToEjHuttnUzwZI5KBSM/LOOW3qLbbrHOEfp3SbECGY= +github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564 h1:yCXGkFjrZ8EggxW+Y7ueRZesNcBk0avLU0mVU/I2KtU= +github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564/go.mod h1:Xda3KO8+DMyWaTr+LwUUpVRTB5SdFzoKu0ivXNI6p1s= +github.com/protolambda/ztyp v0.2.2 h1:rVcL3vBu9W/aV646zF6caLS/dyn9BN8NYiuJzicLNyY= +github.com/protolambda/ztyp v0.2.2/go.mod h1:9bYgKGqg3wJqT9ac1gI2hnVb0STQq7p/1lapqrqY1dU= +github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48 h1:cSo6/vk8YpvkLbk9v3FO97cakNmUoxwi2KMP8hd5WIw= +github.com/rauljordan/engine-proxy v0.0.0-20230316220057-4c80c36c4c3a h1:ZIfMLprHVdo2vs3WcSqSDEyz2ZsSzDhGeOyxh8VQThA= +github.com/rauljordan/engine-proxy v0.0.0-20230316220057-4c80c36c4c3a/go.mod h1:9OVXfWYnIV+wj1/SqfdREmE5mzN/OANAgdOJRtFtvpo= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= +github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= +github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/wealdtech/go-bytesutil v1.2.0 h1:GEIzvAZEIgqOoRfnEAaMRNL73gl8e+YlQzqxhFyR30Y= +github.com/wealdtech/go-bytesutil v1.2.0/go.mod h1:FHQSlwhzfSZGffu1osaUGdnNtl5C8tBKwmqvPdB66pM= +github.com/wealdtech/go-eth2-types/v2 v2.8.0 h1:Cts9J78ryXVp8jwotdSSVU75S+QWJrgVCArXreD2X8A= +github.com/wealdtech/go-eth2-types/v2 v2.8.0/go.mod h1:tJazo9o28kdQs3V/U4VafQ4neG+/sL3OBozQ8J3CWmo= +github.com/wealdtech/go-eth2-util v1.8.0 h1:hhs3h2y3Ldty18lppFdpe46nZpdDAMbY7QqiHO5BvE0= +github.com/wealdtech/go-eth2-util v1.8.0/go.mod h1:rSuE0v5zX+uyZrqW/iUmXOxeDpB7lTvhcZvAVh0KlMU= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20230810033253-352e893a4cad h1:g0bG7Z4uG+OgH2QDODnjp6ggkk1bJDsINcuWmJN1iJU= +golang.org/x/exp v0.0.0-20230810033253-352e893a4cad/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +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.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +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= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +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= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20200109203555-b30bc20e4fd1 h1:iiHuQZCNgYPmFQxd3BBN/Nc5+dAwzZuq5y40s20oQw0= +gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/simulators/eth2/dencun/helper/helper.go b/simulators/eth2/dencun/helper/helper.go new file mode 100644 index 0000000000..161b6baebc --- /dev/null +++ b/simulators/eth2/dencun/helper/helper.go @@ -0,0 +1,460 @@ +package helper + +import ( + "bytes" + "context" + "fmt" + "math/big" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/hive/hivesim" + cl "github.com/ethereum/hive/simulators/eth2/common/config/consensus" + "github.com/ethereum/hive/simulators/eth2/common/testnet" + "github.com/ethereum/hive/simulators/ethereum/engine/globals" + "github.com/ethereum/hive/simulators/ethereum/engine/helper" + beacon_client "github.com/marioevz/eth-clients/clients/beacon" + exec_client "github.com/marioevz/eth-clients/clients/execution" + blsu "github.com/protolambda/bls12-381-util" + "github.com/protolambda/eth2api" + beacon "github.com/protolambda/zrnt/eth2/beacon/common" + "github.com/protolambda/ztyp/tree" +) + +type TransactionSpammer struct { + *hivesim.T + Name string + ExecutionClients []*exec_client.ExecutionClient + Accounts []*globals.TestAccount + Recipient *common.Address + TransactionType helper.TestTransactionType + TransactionsPerIteration int + SecondsBetweenIterations int + BlobCount *big.Int +} + +func (t *TransactionSpammer) Run(ctx context.Context) error { + // Send some transactions constantly in the bg + nonceMap := make(map[common.Address]uint64) + secondsBetweenIterations := time.Duration(t.SecondsBetweenIterations) + txCreator := helper.BaseTransactionCreator{ + Recipient: t.Recipient, + GasLimit: 500000, + Amount: common.Big1, + TxType: t.TransactionType, + BlobCount: t.BlobCount, + } + txsSent := 0 + iteration := 0 + for { + select { + case <-ctx.Done(): + return ctx.Err() + case <-time.After(time.Second * secondsBetweenIterations): + currentClient := t.ExecutionClients[iteration%len(t.ExecutionClients)] + h, err := currentClient.HeaderByNumber(ctx, nil) + if err == nil { + for i := 0; i < t.TransactionsPerIteration; i++ { + sender := t.Accounts[txsSent%len(t.Accounts)] + nonce := nonceMap[sender.GetAddress()] + tx, err := txCreator.MakeTransaction(sender, nonce, h.Time) + if err != nil { + panic(err) + } + if err := currentClient.SendTransaction( + ctx, + tx, + ); err != nil { + t.Logf("INFO: Error sending tx (spammer %s): %v, sender: %s (%d), nonce=%d", t.Name, err, sender.GetAddress().String(), sender.GetIndex(), nonce) + } + nonceMap[sender.GetAddress()] = nonce + 1 + txsSent += 1 + } + iteration += 1 + } else { + t.Logf("INFO: Error fetching header: %v", err) + } + } + } +} + +func WithdrawalsContainValidator( + ws []*types.Withdrawal, + vId beacon.ValidatorIndex, +) bool { + for _, w := range ws { + if w.Validator == uint64(vId) { + return true + } + } + return false +} + +type BeaconBlockState struct { + *beacon_client.VersionedBeaconStateResponse + *beacon_client.VersionedSignedBeaconBlock +} + +type BeaconCache map[tree.Root]BeaconBlockState + +// Clear the cache for when there was a known/expected re-org to query everything again +func (c BeaconCache) Clear() error { + roots := make([]tree.Root, len(c)) + i := 0 + for s := range c { + roots[i] = s + i++ + } + for _, s := range roots { + delete(c, s) + } + return nil +} + +func (c BeaconCache) GetBlockStateByRoot( + ctx context.Context, + bc *beacon_client.BeaconClient, + blockroot tree.Root, +) (BeaconBlockState, error) { + if s, ok := c[blockroot]; ok { + return s, nil + } + b, err := bc.BlockV2(ctx, eth2api.BlockIdRoot(blockroot)) + if err != nil { + return BeaconBlockState{}, err + } + s, err := bc.BeaconStateV2(ctx, eth2api.StateIdSlot(b.Slot())) + if err != nil { + return BeaconBlockState{}, err + } + blockStateRoot := b.StateRoot() + stateRoot := s.Root() + if !bytes.Equal(blockStateRoot[:], stateRoot[:]) { + return BeaconBlockState{}, fmt.Errorf( + "state root missmatch while fetching state", + ) + } + both := BeaconBlockState{ + VersionedBeaconStateResponse: s, + VersionedSignedBeaconBlock: b, + } + c[blockroot] = both + return both, nil +} + +func (c BeaconCache) GetBlockStateBySlotFromHeadRoot( + ctx context.Context, + bc *beacon_client.BeaconClient, + headblockroot tree.Root, + slot beacon.Slot, +) (*BeaconBlockState, error) { + current, err := c.GetBlockStateByRoot(ctx, bc, headblockroot) + if err != nil { + return nil, err + } + if current.Slot() < slot { + return nil, fmt.Errorf("requested for slot above head") + } + for { + if current.Slot() == slot { + return ¤t, nil + } + if current.Slot() < slot || current.Slot() == 0 { + // Skipped slot probably, not a fatal error + return nil, nil + } + current, err = c.GetBlockStateByRoot(ctx, bc, current.ParentRoot()) + if err != nil { + return nil, err + } + } +} + +// Helper struct to keep track of current status of a validator withdrawal state +type Validator struct { + Index beacon.ValidatorIndex + PubKey *beacon.BLSPubkey + WithdrawAddress *common.Address + Exited bool + ExitCondition string + ExactWithdrawableBalance *big.Int + Keys *cl.ValidatorDetails + Verified bool + InitialBalance beacon.Gwei + Spec beacon.Spec + BlockStateCache BeaconCache +} + +// Signs the BLS-to-execution-change for the given address +func (v *Validator) SignBLSToExecutionChange( + executionAddress common.Address, + blsToExecutionChangeDomain beacon.BLSDomain, +) (*beacon.SignedBLSToExecutionChange, error) { + if v.Keys == nil { + return nil, fmt.Errorf("no key to sign") + } + if v.WithdrawAddress != nil { + return nil, fmt.Errorf("execution address already set") + } + kdPubKey := beacon.BLSPubkey{} + copy(kdPubKey[:], v.Keys.WithdrawalPubkey[:]) + eth1Address := beacon.Eth1Address{} + copy(eth1Address[:], executionAddress[:]) + blsToExecChange := beacon.BLSToExecutionChange{ + ValidatorIndex: v.Index, + FromBLSPubKey: kdPubKey, + ToExecutionAddress: eth1Address, + } + sigRoot := beacon.ComputeSigningRoot( + blsToExecChange.HashTreeRoot(tree.GetHashFn()), + blsToExecutionChangeDomain, + ) + sk := new(blsu.SecretKey) + sk.Deserialize(&v.Keys.WithdrawalSecretKey) + signature := blsu.Sign(sk, sigRoot[:]).Serialize() + return &beacon.SignedBLSToExecutionChange{ + BLSToExecutionChange: blsToExecChange, + Signature: beacon.BLSSignature(signature), + }, nil +} + +// Sign and send the BLS-to-execution-change. +// Also internally update the withdraw address. +func (v *Validator) SignSendBLSToExecutionChange( + ctx context.Context, + bc *beacon_client.BeaconClient, + executionAddress common.Address, + blsToExecutionChangeDomain beacon.BLSDomain, +) error { + signedBLS, err := v.SignBLSToExecutionChange(executionAddress, blsToExecutionChangeDomain) + if err != nil { + return err + } + if err := bc.SubmitPoolBLSToExecutionChange(ctx, beacon.SignedBLSToExecutionChanges{ + *signedBLS, + }); err != nil { + return err + } + + v.WithdrawAddress = &executionAddress + return nil +} + +type Validators []*Validator + +func (vs Validators) GetValidatorByIndex(i beacon.ValidatorIndex) *Validator { + for _, v := range vs { + if v.Index == i { + return v + } + } + return nil +} + +func (vs Validators) NonWithdrawable() Validators { + ret := make(Validators, 0) + for _, v := range vs { + v := v + if v.WithdrawAddress == nil { + ret = append(ret, v) + } + } + return ret +} + +func (vs Validators) Withdrawable() Validators { + ret := make(Validators, 0) + for _, v := range vs { + v := v + if v.WithdrawAddress != nil { + ret = append(ret, v) + } + } + return ret +} + +func (vs Validators) FullyWithdrawable() Validators { + ret := make(Validators, 0) + for _, v := range vs { + v := v + if v.WithdrawAddress != nil && v.Exited { + ret = append(ret, v) + } + } + return ret +} + +func (vs Validators) Exited() Validators { + ret := make(Validators, 0) + for _, v := range vs { + v := v + if v.Exited { + ret = append(ret, v) + } + } + return ret +} + +func (vs Validators) Chunks(totalShares int) []Validators { + ret := make([]Validators, totalShares) + countPerChunk := len(vs) / totalShares + for i := range ret { + ret[i] = vs[i*countPerChunk : (i*countPerChunk)+countPerChunk] + } + return ret +} + +func ValidatorFromBeaconValidator( + spec beacon.Spec, + index beacon.ValidatorIndex, + source beacon.Validator, + balance beacon.Gwei, + keys *cl.ValidatorDetails, + beaconCache BeaconCache, +) (*Validator, error) { + // Assume genesis state + currentEpoch := beacon.Epoch(0) + + v := new(Validator) + + v.Spec = spec + v.Index = index + v.Keys = keys + v.BlockStateCache = beaconCache + + pk, err := source.Pubkey() + if err != nil { + return nil, err + } + v.PubKey = &pk + + wc, err := source.WithdrawalCredentials() + if err != nil { + return nil, err + } + if wc[0] == beacon.ETH1_ADDRESS_WITHDRAWAL_PREFIX { + withdrawAddress := common.Address{} + copy(withdrawAddress[:], wc[12:]) + v.WithdrawAddress = &withdrawAddress + } + + exitEpoch, err := source.ExitEpoch() + if err != nil { + return nil, err + } + + slashed, err := source.Slashed() + if err != nil { + return nil, err + } + + // Assuming this is the genesis beacon state + if exitEpoch <= currentEpoch || slashed { + v.Exited = true + if slashed { + v.ExitCondition = "Slashed" + } else { + v.ExitCondition = "Voluntary Exited" + } + v.ExactWithdrawableBalance = big.NewInt(int64(balance)) + v.ExactWithdrawableBalance.Mul( + v.ExactWithdrawableBalance, + big.NewInt(1e9), + ) + } + v.InitialBalance = balance + return v, nil +} + +func ValidatorFromBeaconState( + spec beacon.Spec, + state beacon.BeaconState, + index beacon.ValidatorIndex, + keys *cl.ValidatorDetails, + beaconCache BeaconCache, +) (*Validator, error) { + stateVals, err := state.Validators() + if err != nil { + return nil, err + } + balances, err := state.Balances() + if err != nil { + return nil, err + } + beaconVal, err := stateVals.Validator(index) + if err != nil { + return nil, err + } + balance, err := balances.GetBalance(index) + if err != nil { + return nil, err + } + return ValidatorFromBeaconValidator( + spec, + index, + beaconVal, + balance, + keys, + beaconCache, + ) +} + +func ValidatorsFromBeaconState( + state beacon.BeaconState, + spec beacon.Spec, + keys []*cl.ValidatorDetails, +) (Validators, error) { + stateVals, err := state.Validators() + if err != nil { + return nil, err + } + balances, err := state.Balances() + if err != nil { + return nil, err + } + validatorCount, err := stateVals.ValidatorCount() + if err != nil { + return nil, err + } else if validatorCount == 0 { + return nil, fmt.Errorf("got zero validators") + } else if validatorCount != uint64(len(keys)) { + return nil, fmt.Errorf("incorrect amount of keys: want=%d, got=%d", validatorCount, len(keys)) + } + beaconCache := make(BeaconCache) + validators := make(Validators, 0) + for i := beacon.ValidatorIndex(0); i < beacon.ValidatorIndex(validatorCount); i++ { + beaconVal, err := stateVals.Validator(beacon.ValidatorIndex(i)) + if err != nil { + return nil, err + } + balance, err := balances.GetBalance(i) + if err != nil { + return nil, err + } + validator, err := ValidatorFromBeaconValidator( + spec, + i, + beaconVal, + balance, + keys[i], + beaconCache, + ) + if err != nil { + return nil, err + } + validators = append(validators, validator) + + } + return validators, nil +} + +func ComputeBLSToExecutionDomain( + t *testnet.Testnet, +) beacon.BLSDomain { + return beacon.ComputeDomain( + beacon.DOMAIN_BLS_TO_EXECUTION_CHANGE, + t.Spec().GENESIS_FORK_VERSION, + t.GenesisValidatorsRoot(), + ) +} diff --git a/simulators/eth2/dencun/hive_context.txt b/simulators/eth2/dencun/hive_context.txt new file mode 100644 index 0000000000..a96aa0ea9d --- /dev/null +++ b/simulators/eth2/dencun/hive_context.txt @@ -0,0 +1 @@ +.. \ No newline at end of file diff --git a/simulators/eth2/dencun/main.go b/simulators/eth2/dencun/main.go new file mode 100644 index 0000000000..b345b276de --- /dev/null +++ b/simulators/eth2/dencun/main.go @@ -0,0 +1,35 @@ +package main + +import ( + "github.com/ethereum/hive/hivesim" + "github.com/ethereum/hive/simulators/eth2/common/clients" + suite_base "github.com/ethereum/hive/simulators/eth2/dencun/suites/base" + suite_builder "github.com/ethereum/hive/simulators/eth2/dencun/suites/builder" + suite_evil "github.com/ethereum/hive/simulators/eth2/dencun/suites/evil" + suite_reorg "github.com/ethereum/hive/simulators/eth2/dencun/suites/reorg" + suite_sync "github.com/ethereum/hive/simulators/eth2/dencun/suites/sync" +) + +func main() { + // Create simulator that runs all tests + sim := hivesim.New() + if sim == nil { + panic("failed to create simulator") + } + // From the simulator we can get all client types provided + clientTypes, err := sim.ClientTypes() + if err != nil { + panic(err) + } + clientsByRole := clients.ClientsByRole(clientTypes) + if clientsByRole == nil { + panic("failed to create clients by role") + } + + // Mark suites for execution + hivesim.MustRunSuite(sim, suite_base.Suite(clientsByRole)) + hivesim.MustRunSuite(sim, suite_sync.Suite(clientsByRole)) + hivesim.MustRunSuite(sim, suite_builder.Suite(clientsByRole)) + hivesim.MustRunSuite(sim, suite_reorg.Suite(clientsByRole)) + hivesim.MustRunSuite(sim, suite_evil.Suite(clientsByRole)) +} diff --git a/simulators/eth2/dencun/suites/base/README.md b/simulators/eth2/dencun/suites/base/README.md new file mode 100644 index 0000000000..02880b4904 --- /dev/null +++ b/simulators/eth2/dencun/suites/base/README.md @@ -0,0 +1,47 @@ +# Dencun Interop Testnet Simulator + +To run locally use: + +```bash +./hive --client-file ./configs/cancun.yaml --client "go-ethereum,${cl}-bn,${cl}-vc" --sim eth2/dencun --sim.limit "eth2-deneb-testnet/" +``` + +## Test Cases + +### Deneb/Cancun Transition + +* [x] Deneb/Cancun Transition +
+ Click for details + + - Start two validating nodes that begin on Capella/Shanghai genesis + - Deneb/Cancun transition occurs on Epoch 1 + - Total of 128 Validators, 64 for each validating node + - Wait for Deneb fork and start sending blob transactions to the Execution client + - Verify on the execution client that: + - Blob (type-3) transactions are included in the blocks + - Verify on the consensus client that: + - For each blob transaction on the execution chain, the blob sidecars are available for the + beacon block at the same height + - The beacon block lists the correct commitments for each blob + +
+ +### Deneb/Cancun Genesis + +* [x] Deneb/Cancun Genesis +
+ Click for details + + - Start two validating nodes that begin on Deneb genesis + - Total of 128 Validators, 64 for each validating node + - From the beginning send blob transactions to the Execution client + - Verify on the execution client that: + - Blob (type-3) transactions are included in the blocks + - Verify on the consensus client that: + - For each blob transaction on the execution chain, the blob sidecars are available for the + beacon block at the same height + - The beacon block lists the correct commitments for each blob + +
+ diff --git a/simulators/eth2/dencun/suites/base/config.go b/simulators/eth2/dencun/suites/base/config.go new file mode 100644 index 0000000000..dd9e262a8b --- /dev/null +++ b/simulators/eth2/dencun/suites/base/config.go @@ -0,0 +1,202 @@ +package suite_base + +import ( + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/common/config" + cl "github.com/ethereum/hive/simulators/eth2/common/config/consensus" + el "github.com/ethereum/hive/simulators/eth2/common/config/execution" + "github.com/ethereum/hive/simulators/eth2/common/testnet" + "github.com/ethereum/hive/simulators/ethereum/engine/globals" + beacon "github.com/protolambda/zrnt/eth2/beacon/common" +) + +type BaseTestSpec struct { + // Spec + Name string + Description string + + // Testnet Nodes + NodeCount int + ValidatingNodeCount int + + // Beacon Chain + ValidatorCount uint64 + DenebGenesis bool + + // Genesis Validators Configuration + // (One every Nth validator, 1 means all validators, 2 means half, etc...) + GenesisExecutionWithdrawalCredentialsShares int + GenesisExitedShares int + GenesisSlashedShares int + + // Verifications + EpochsAfterFork beacon.Epoch + WaitForFinality bool + + // Extra Gwei + ExtraGwei beacon.Gwei + + // Blob count of each blob tx + BlobCount *big.Int +} + +var ( + DEFAULT_VALIDATOR_COUNT uint64 = 128 + + EPOCHS_TO_FINALITY beacon.Epoch = 4 + + // Default config used for all tests unless a client specific config exists + DEFAULT_CONFIG = &testnet.Config{ + ConsensusConfig: &cl.ConsensusConfig{ + ValidatorCount: big.NewInt(int64(DEFAULT_VALIDATOR_COUNT)), + }, + ForkConfig: &config.ForkConfig{ + TerminalTotalDifficulty: common.Big0, + AltairForkEpoch: common.Big0, + BellatrixForkEpoch: common.Big0, + CapellaForkEpoch: common.Big0, + DenebForkEpoch: common.Big1, + }, + Eth1Consensus: &el.ExecutionPostMergeGenesis{}, + } + + // This is the account that sends vault funding transactions. + VaultStartAmount, _ = new(big.Int).SetString("d3c21bcecceda1000000", 16) + + CodeContractAddress = common.HexToAddress( + "0xcccccccccccccccccccccccccccccccccccccccc", + ) + CodeContract = common.Hex2Bytes("0x328043558043600080a250") + + BeaconRootContractAddress = common.HexToAddress( + "0xbEAC020008aFF7331c0A389CB2AAb67597567d7a", + ) + + GasPrice = big.NewInt(30 * params.GWei) + GasTipPrice = big.NewInt(1 * params.GWei) + + ChainID = big.NewInt(7) +) + +func (ts BaseTestSpec) GetTestnetConfig( + allNodeDefinitions clients.NodeDefinitions, +) *testnet.Config { + config := *DEFAULT_CONFIG + + if ts.DenebGenesis { + config.DenebForkEpoch = common.Big0 + } + + nodeCount := 2 + if len(allNodeDefinitions) == 0 { + panic("incorrect number of node definitions") + } else if len(allNodeDefinitions) > 1 { + nodeCount = len(allNodeDefinitions) + } + if ts.NodeCount > 0 { + nodeCount = ts.NodeCount + } + maxValidatingNodeIndex := nodeCount - 1 + if ts.ValidatingNodeCount > 0 { + maxValidatingNodeIndex = ts.ValidatingNodeCount - 1 + } + nodeDefinitions := make(clients.NodeDefinitions, 0) + for i := 0; i < nodeCount; i++ { + n := allNodeDefinitions[i%len(allNodeDefinitions)] + if i <= maxValidatingNodeIndex { + n.ValidatorShares = 1 + } else { + n.ValidatorShares = 0 + } + nodeDefinitions = append(nodeDefinitions, n) + } + + // Fund execution layer account for transactions + + config.GenesisExecutionAccounts = map[common.Address]core.GenesisAccount{ + CodeContractAddress: { + Balance: common.Big0, + Code: CodeContract, + }, + } + + for _, acc := range globals.TestAccounts { + config.GenesisExecutionAccounts[acc.GetAddress()] = core.GenesisAccount{ + Balance: VaultStartAmount, + } + } + + return config.Join(&testnet.Config{ + NodeDefinitions: nodeDefinitions, + }) +} + +func (ts BaseTestSpec) CanRun(clients.NodeDefinitions) bool { + // Base test specs can always run + return true +} + +func (ts BaseTestSpec) GetName() string { + return ts.Name +} + +func (ts BaseTestSpec) GetDescription() string { + return ts.Description +} + +func (ts BaseTestSpec) GetValidatorCount() uint64 { + if ts.ValidatorCount != 0 { + return ts.ValidatorCount + } + return DEFAULT_VALIDATOR_COUNT +} + +func (ts BaseTestSpec) GetValidatorKeys( + mnemonic string, +) []*cl.ValidatorDetails { + keySrc := &cl.MnemonicsKeySource{ + From: 0, + To: ts.GetValidatorCount(), + Validator: mnemonic, + Withdrawal: mnemonic, + } + keys, err := keySrc.Keys() + if err != nil { + panic(err) + } + + for index, key := range keys { + // All validators have idiosyncratic balance amounts to identify them. + // Also include a high amount in order to guarantee withdrawals. + key.ExtraInitialBalance = beacon.Gwei((index+1)*1000000) + ts.ExtraGwei + + if ts.GenesisExecutionWithdrawalCredentialsShares > 0 && + (index%ts.GenesisExecutionWithdrawalCredentialsShares) == 0 { + key.WithdrawalCredentialType = beacon.ETH1_ADDRESS_WITHDRAWAL_PREFIX + key.WithdrawalExecAddress = beacon.Eth1Address{byte(index + 0x100)} + } + if ts.GenesisExitedShares > 1 && (index%ts.GenesisExitedShares) == 1 { + key.Exited = true + } + if ts.GenesisSlashedShares > 2 && + (index%ts.GenesisSlashedShares) == 2 { + key.Slashed = true + } + fmt.Printf( + "INFO: Validator %d, extra_gwei=%d, exited=%v, slashed=%v, key_type=%d\n", + index, + key.ExtraInitialBalance, + key.Exited, + key.Slashed, + key.WithdrawalCredentialType, + ) + } + + return keys +} diff --git a/simulators/eth2/dencun/suites/base/execution.go b/simulators/eth2/dencun/suites/base/execution.go new file mode 100644 index 0000000000..1c257bb6df --- /dev/null +++ b/simulators/eth2/dencun/suites/base/execution.go @@ -0,0 +1,187 @@ +package suite_base + +import ( + "context" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/hive/hivesim" + "github.com/ethereum/hive/simulators/eth2/dencun/helper" + + beacon_verification "github.com/ethereum/hive/simulators/eth2/common/spoofing/beacon" + tn "github.com/ethereum/hive/simulators/eth2/common/testnet" + "github.com/ethereum/hive/simulators/ethereum/engine/globals" + engine_helper "github.com/ethereum/hive/simulators/ethereum/engine/helper" + "github.com/protolambda/eth2api" + beacon "github.com/protolambda/zrnt/eth2/beacon/common" +) + +var Deneb string = "deneb" + +var ( + normalTxAccounts = globals.TestAccounts[:len(globals.TestAccounts)/2] + blobTxAccounts = globals.TestAccounts[len(globals.TestAccounts)/2:] +) + +// Generic Deneb test routine, capable of running most of the test +// scenarios. +func (ts BaseTestSpec) ExecutePreFork( + t *hivesim.T, + ctx context.Context, + testnet *tn.Testnet, + env *tn.Environment, + config *tn.Config, +) { + // Setup the transaction spammers, both normal and blob transactions + normalTxSpammer := helper.TransactionSpammer{ + T: t, + Name: "normal", + Recipient: &CodeContractAddress, + ExecutionClients: testnet.ExecutionClients().Running(), + Accounts: normalTxAccounts, + TransactionType: engine_helper.DynamicFeeTxOnly, + TransactionsPerIteration: 40, + SecondsBetweenIterations: int(testnet.Spec().SECONDS_PER_SLOT), + } + + // Start sending normal transactions from dedicated accounts + go normalTxSpammer.Run(ctx) + + // Add verification of Beacon->Execution Engine API calls to the proxies + chainconfig := testnet.ExecutionGenesis().Config + // NewPayloadV2 expires at CancunTime: if a client sends a payload with + // a timestamp greater than CancunTime, and it's using NewPayloadV2, it + // must result in test failure. + newPayloadV2ExpireVerifier := beacon_verification.NewEngineMaxTimestampVerifier( + t, + beacon_verification.EngineNewPayloadV2, + *chainconfig.CancunTime, + ) + // ForkchoiceUpdatedV2 expires at CancunTime: if a client sends a payload with + // a timestamp greater than CancunTime, and it's using ForkchoiceUpdatedV2, it + // must result in test failure. + forkchoiceUpdatedV2ExpireVerifier := beacon_verification.NewEngineMaxTimestampVerifier( + t, + beacon_verification.EngineForkchoiceUpdatedV2, + *chainconfig.CancunTime, + ) + for _, e := range testnet.ExecutionClients() { + newPayloadV2ExpireVerifier.AddToProxy(e.Proxy()) + forkchoiceUpdatedV2ExpireVerifier.AddToProxy(e.Proxy()) + } + + // Wait for beacon chain genesis to happen + testnet.WaitForGenesis(ctx) +} + +func (ts BaseTestSpec) ExecutePostFork( + t *hivesim.T, + ctx context.Context, + testnet *tn.Testnet, + env *tn.Environment, + config *tn.Config, +) { + // Wait one more slot before continuing + testnet.WaitSlots(ctx, 1) + + // Start sending blob transactions from dedicated accounts + blobTxSpammer := helper.TransactionSpammer{ + T: t, + Name: "blobs", + Recipient: &CodeContractAddress, + ExecutionClients: testnet.ExecutionClients().Running(), + Accounts: blobTxAccounts, + TransactionType: engine_helper.BlobTxOnly, + TransactionsPerIteration: 2, + SecondsBetweenIterations: int(testnet.Spec().SECONDS_PER_SLOT), + BlobCount: ts.BlobCount, + } + + go blobTxSpammer.Run(ctx) + + // Send BLSToExecutionChanges messages during Deneb for all validators on BLS credentials + allValidators, err := helper.ValidatorsFromBeaconState( + testnet.GenesisBeaconState(), + *testnet.Spec().Spec, + env.Keys, + ) + if err != nil { + t.Fatalf("FAIL: Error parsing validators from beacon state") + } + nonWithdrawableValidators := allValidators.NonWithdrawable() + if len(nonWithdrawableValidators) > 0 { + beaconClients := testnet.BeaconClients().Running() + for i := 0; i < len(nonWithdrawableValidators); i++ { + b := beaconClients[i%len(beaconClients)] + v := nonWithdrawableValidators[i] + if err := v.SignSendBLSToExecutionChange( + ctx, + b, + common.Address{byte(v.Index + 0x100)}, + helper.ComputeBLSToExecutionDomain(testnet), + ); err != nil { + t.Fatalf( + "FAIL: Unable to submit bls-to-execution changes: %v", + err, + ) + } + } + } else { + t.Logf("INFO: no validators left on BLS credentials") + } +} + +func (ts BaseTestSpec) ExecutePostForkWait( + t *hivesim.T, + ctx context.Context, + testnet *tn.Testnet, + env *tn.Environment, + config *tn.Config, +) { + if ts.EpochsAfterFork != 0 { + // Wait for the specified number of epochs after Deneb + testnet.WaitSlots(ctx, beacon.Slot(ts.EpochsAfterFork)*testnet.Spec().SLOTS_PER_EPOCH) + } + if ts.WaitForFinality { + finalityCtx, cancel := testnet.Spec().EpochTimeoutContext(ctx, 5) + defer cancel() + if _, err := testnet.WaitForCurrentEpochFinalization(finalityCtx); err != nil { + t.Fatalf("FAIL: error waiting for epoch finalization: %v", err) + } + } +} + +func (ts BaseTestSpec) Verify( + t *hivesim.T, + ctx context.Context, + testnet *tn.Testnet, + env *tn.Environment, + config *tn.Config, +) { + // Check all clients are on the same head + if err := testnet.VerifyELHeads(ctx); err != nil { + t.Fatalf("FAIL: error verifying execution layer heads: %v", err) + } + + // Check for optimistic sync + for i, n := range testnet.Nodes.Running() { + bc := n.BeaconClient + if op, err := bc.BlockIsOptimistic(ctx, eth2api.BlockHead); op { + t.Fatalf( + "FAIL: client %d (%s) is optimistic, it should be synced.", + i, + n.ClientNames(), + ) + } else if err != nil { + t.Fatalf("FAIL: error querying optimistic state on client %d (%s): %v", i, n.ClientNames(), err) + } + } + + // Verify all clients agree on blobs for each slot + if blobCount, err := testnet.VerifyBlobs(ctx, tn.LastestSlotByHead{}); err != nil { + t.Fatalf("FAIL: error verifying blobs: %v", err) + } else if blobCount == 0 { + t.Fatalf("FAIL: no blobs were included in the chain") + } else { + t.Logf("INFO: %d blobs were included in the chain", blobCount) + } +} diff --git a/simulators/eth2/dencun/suites/base/tests.go b/simulators/eth2/dencun/suites/base/tests.go new file mode 100644 index 0000000000..3e05de3b3e --- /dev/null +++ b/simulators/eth2/dencun/suites/base/tests.go @@ -0,0 +1,42 @@ +package suite_base + +import ( + "github.com/ethereum/hive/hivesim" + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/dencun/suites" +) + +var testSuite = hivesim.Suite{ + Name: "eth2-deneb-testnet", + Description: `Collection of test vectors that use a ExecutionClient+BeaconNode+ValidatorClient testnet for Cancun+Deneb.`, +} + +var Tests = make([]suites.TestSpec, 0) + +func init() { + Tests = append(Tests, + BaseTestSpec{ + Name: "test-deneb-fork", + Description: ` + Sanity test to check the fork transition to deneb. + `, + DenebGenesis: false, + GenesisExecutionWithdrawalCredentialsShares: 1, + EpochsAfterFork: 1, + }, + BaseTestSpec{ + Name: "test-deneb-genesis", + Description: ` + Sanity test to check the beacon clients can start with deneb genesis. + `, + DenebGenesis: true, + GenesisExecutionWithdrawalCredentialsShares: 1, + WaitForFinality: true, + }, + ) +} + +func Suite(c *clients.ClientDefinitionsByRole) hivesim.Suite { + suites.SuiteHydrate(&testSuite, c, Tests) + return testSuite +} diff --git a/simulators/eth2/dencun/suites/builder/README.md b/simulators/eth2/dencun/suites/builder/README.md new file mode 100644 index 0000000000..61850fca4b --- /dev/null +++ b/simulators/eth2/dencun/suites/builder/README.md @@ -0,0 +1,130 @@ +# Dencun Interop Builder Simulator + +To run locally use: + +```bash +./hive --client-file ./configs/cancun.yaml --client "go-ethereum,${cl}-bn,${cl}-vc" --sim eth2/dencun --sim.limit "eth2-deneb-builder/" +``` + +## Test Cases + +### Test Deneb Builder Correct Workflow + +* [x] Deneb Builder Workflow From Capella Transition +
+ Click for details + + - Start two validating nodes that begin on Capella/Shanghai genesis + - Deneb/Cancun transition occurs on Epoch 1 or 5 + - Epoch depends on whether builder workflow activation requires finalization for the CL client. Following clients require finalization: + - Lighthouse + - Teku + - Both nodes have the mock-builder configured as builder endpoint from the start + - Total of 128 Validators, 64 for each validating node + - Wait for Deneb fork + - Verify that the builder, up to before Deneb fork, has been able to produce blocks and they have been included in the canonical chain + - Start sending blob transactions to the Execution client + - Wait one more epoch for the chain to progress and include blobs + - Verify on the beacon chain that: + - Builder was able to include blocks with blobs in the canonical chain, which implicitly verifies: + - Consensus client is able to properly format header requests to the builder + - Consensus client is able to properly format blinded signed requests to the builder + - No signed block or blob sidecar contained an invalid format or signature + - For each blob transaction on the execution chain, the blob sidecars are available for the + beacon block at the same height + - The beacon block lists the correct commitments for each blob + - Chain is finalizing + - No more than two missed slots on the latest epoch + +
+ +### Test Deneb Builder Error Workflow + +* [x] Deneb Builder Builds Block With Invalid Beacon Root, Correct State Root +
+ Click for details + + - Start two validating nodes that begin on Capella/Shanghai genesis + - Deneb/Cancun transition occurs on Epoch 1 or 5 + - Epoch depends on whether builder workflow activation requires finalization for the CL client. Following clients require finalization: + - Lighthouse + - Teku + - Both nodes have the mock-builder configured as builder endpoint from the start + - Total of 128 Validators, 64 for each validating node + - Wait for Deneb fork + - Verify that the builder, up to before Deneb fork, has been able to produce blocks and they have been included in the canonical chain + - Start sending blob transactions to the Execution client + - Starting from Deneb, Mock builder starts corrupting the payload attributes' parent beacon block root sent to the execution client to produce the payloads + - Wait one more epoch for the chain to progress + - Verify on the beacon chain that: + - Blocks with the corrupted beacon root are not included in the canonical chain + - Circuit breaker correctly kicks in and disables the builder workflow + +
+ +* [x] Deneb Builder Errors Out on Header Requests +
+ Click for details + + - Start two validating nodes that begin on Capella/Shanghai genesis + - Deneb/Cancun transition occurs on Epoch 1 or 5 + - Epoch depends on whether builder workflow activation requires finalization for the CL client. Following clients require finalization: + - Lighthouse + - Teku + - Both nodes have the mock-builder configured as builder endpoint from the start + - Total of 128 Validators, 64 for each validating node + - Wait for Deneb fork + - Verify that the builder, up to before Deneb fork, has been able to produce blocks and they have been included in the canonical chain + - Start sending blob transactions to the Execution client + - Starting from Deneb, Mock builder starts returning error on the request for block headers + - Wait one more epoch for the chain to progress + - Verify on the beacon chain that: + - Consensus clients fallback to local block building + - No more than two missed slots on the latest epoch + +
+ +* [x] Deneb Builder Errors Out on Signed Blinded Beacon Block/Blob Sidecars Submission +
+ Click for details + + - Start two validating nodes that begin on Capella/Shanghai genesis + - Deneb/Cancun transition occurs on Epoch 1 or 5 + - Epoch depends on whether builder workflow activation requires finalization for the CL client. Following clients require finalization: + - Lighthouse + - Teku + - Both nodes have the mock-builder configured as builder endpoint from the start + - Total of 128 Validators, 64 for each validating node + - Wait for Deneb fork + - Verify that the builder, up to before Deneb fork, has been able to produce blocks and they have been included in the canonical chain + - Start sending blob transactions to the Execution client + - Starting from Deneb, Mock builder starts returning error on the submission of signed blinded beacon block/blob sidecars + - Wait one more epoch for the chain to progress + - Verify on the beacon chain that: + - Signed missed slots do not fallback to local block building + - Circuit breaker correctly kicks in and disables the builder workflow + +
+ + +* [x] Deneb Builder Builds Block With Invalid Beacon Root, Incorrect State Root +
+ Click for details + + - Start two validating nodes that begin on Capella/Shanghai genesis + - Deneb/Cancun transition occurs on Epoch 1 or 5 + - Epoch depends on whether builder workflow activation requires finalization for the CL client. Following clients require finalization: + - Lighthouse + - Teku + - Both nodes have the mock-builder configured as builder endpoint from the start + - Total of 128 Validators, 64 for each validating node + - Wait for Deneb fork + - Verify that the builder, up to before Deneb fork, has been able to produce blocks and they have been included in the canonical chain + - Start sending blob transactions to the Execution client + - Starting from Deneb, Mock builder starts corrupting the parent beacon block root of the payload received from the execution client + - Wait one more epoch for the chain to progress + - Verify on the beacon chain that: + - Blocks with the corrupted beacon root are not included in the canonical chain + - Circuit breaker correctly kicks in and disables the builder workflow + +
\ No newline at end of file diff --git a/simulators/eth2/dencun/suites/builder/config.go b/simulators/eth2/dencun/suites/builder/config.go new file mode 100644 index 0000000000..40d54e8ba9 --- /dev/null +++ b/simulators/eth2/dencun/suites/builder/config.go @@ -0,0 +1,98 @@ +package suite_builder + +import ( + "math/big" + + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/common/testnet" + suite_base "github.com/ethereum/hive/simulators/eth2/dencun/suites/base" + mock_builder "github.com/marioevz/mock-builder/mock" + beacon "github.com/protolambda/zrnt/eth2/beacon/common" +) + +var REQUIRES_FINALIZATION_TO_ACTIVATE_BUILDER = []string{ + "lighthouse", + "teku", +} + +type BuilderTestSpec struct { + suite_base.BaseTestSpec + ErrorOnHeaderRequest bool + ErrorOnPayloadReveal bool + InvalidPayloadVersion bool + InvalidatePayload mock_builder.PayloadInvalidation + InvalidatePayloadAttributes mock_builder.PayloadAttributesInvalidation +} + +func (ts BuilderTestSpec) GetTestnetConfig( + allNodeDefinitions clients.NodeDefinitions, +) *testnet.Config { + tc := ts.BaseTestSpec.GetTestnetConfig(allNodeDefinitions) + + tc.DenebForkEpoch = big.NewInt(1) + + if len( + allNodeDefinitions.FilterByCL( + REQUIRES_FINALIZATION_TO_ACTIVATE_BUILDER, + ), + ) > 0 { + // At least one of the CLs require finalization to start requesting + // headers from the builder + tc.DenebForkEpoch = big.NewInt(5) + } + + // Builders are always enabled for these tests + tc.EnableBuilders = true + + // Builder config + // Configure the builder according to the error + tc.BuilderOptions = make([]mock_builder.Option, 0) + + // Bump the built payloads value + tc.BuilderOptions = append( + tc.BuilderOptions, + mock_builder.WithPayloadWeiValueMultiplier(big.NewInt(10)), + mock_builder.WithExtraDataWatermark("builder payload tst"), + ) + + // Inject test error + denebEpoch := beacon.Epoch(tc.DenebForkEpoch.Uint64()) + if ts.ErrorOnHeaderRequest { + tc.BuilderOptions = append( + tc.BuilderOptions, + mock_builder.WithErrorOnHeaderRequestAtEpoch(denebEpoch), + ) + } + if ts.ErrorOnPayloadReveal { + tc.BuilderOptions = append( + tc.BuilderOptions, + mock_builder.WithErrorOnPayloadRevealAtEpoch(denebEpoch), + ) + } + if ts.InvalidatePayload != "" { + tc.BuilderOptions = append( + tc.BuilderOptions, + mock_builder.WithPayloadInvalidatorAtEpoch( + denebEpoch, + ts.InvalidatePayload, + ), + ) + } + if ts.InvalidatePayloadAttributes != "" { + tc.BuilderOptions = append( + tc.BuilderOptions, + mock_builder.WithPayloadAttributesInvalidatorAtEpoch( + denebEpoch, + ts.InvalidatePayloadAttributes, + ), + ) + } + if ts.InvalidPayloadVersion { + tc.BuilderOptions = append( + tc.BuilderOptions, + mock_builder.WithInvalidBuilderBidVersionAtEpoch(denebEpoch), + ) + } + + return tc +} diff --git a/simulators/eth2/dencun/suites/builder/execution.go b/simulators/eth2/dencun/suites/builder/execution.go new file mode 100644 index 0000000000..cb719fe54e --- /dev/null +++ b/simulators/eth2/dencun/suites/builder/execution.go @@ -0,0 +1,252 @@ +package suite_builder + +import ( + "bytes" + "context" + "encoding/json" + "math/big" + + "github.com/ethereum/hive/hivesim" + tn "github.com/ethereum/hive/simulators/eth2/common/testnet" + mock_builder "github.com/marioevz/mock-builder/mock" + beacon "github.com/protolambda/zrnt/eth2/beacon/common" +) + +// Builder testnet. +func (ts BuilderTestSpec) ExecutePostFork( + t *hivesim.T, + ctx context.Context, + testnet *tn.Testnet, + env *tn.Environment, + config *tn.Config, +) { + // Run the base test spec execute function + ts.BaseTestSpec.ExecutePostFork(t, ctx, testnet, env, config) + + // Check that the builder was working properly until now + if !ts.DenebGenesis { + for i, b := range testnet.BeaconClients().Running() { + builder, ok := b.Builder.(*mock_builder.MockBuilder) + if !ok { + t.Fatalf( + "FAIL: client %d (%s) is not a mock builder", + i, + b.ClientName(), + ) + } + if builder.GetBuiltPayloadsCount() == 0 { + t.Fatalf("FAIL: builder %d did not build any payloads", i) + } + if builder.GetSignedBeaconBlockCount() == 0 { + t.Fatalf( + "FAIL: builder %d did not produce any signed beacon blocks", + i, + ) + } + } + } +} + +func (ts BuilderTestSpec) Verify( + t *hivesim.T, + ctx context.Context, + testnet *tn.Testnet, + env *tn.Environment, + config *tn.Config, +) { + // Run the base test spec verify function + ts.BaseTestSpec.Verify(t, ctx, testnet, env, config) + + // Verify any modified payloads did not make it into the + // canonical chain + if !ts.ErrorOnHeaderRequest && !ts.ErrorOnPayloadReveal && + !ts.InvalidPayloadVersion && + ts.InvalidatePayload == "" && + ts.InvalidatePayloadAttributes == "" { + // Simply verify that builder's deneb payloads were included in the + // canonical chain + t.Logf("INFO: Verifying builder payloads were included in the canonical chain") + for i, n := range testnet.Nodes.Running() { + b, ok := n.BeaconClient.Builder.(*mock_builder.MockBuilder) + if !ok { + t.Fatalf( + "FAIL: client %d (%s) is not a mock builder", + i, + n.BeaconClient.ClientName(), + ) + } + ec := n.ExecutionClient + includedPayloads := 0 + includedPayloadsWithBlobs := 0 + for _, p := range b.GetBuiltPayloads() { + p, _, err := p.FullPayload().ToExecutableData() + if err != nil { + t.Fatalf( + "FAIL: error converting payload to executable data: %v", + err, + ) + } + if testnet.ExecutionGenesis().Config.CancunTime == nil { + t.Fatalf("FAIL: Cancun time is nil") + } + if p.Timestamp >= *testnet.ExecutionGenesis().Config.CancunTime { + if h, err := ec.HeaderByNumber(ctx, big.NewInt(int64(p.Number))); err != nil { + t.Fatalf( + "FAIL: error getting execution header from node %d: %v", + i, + err, + ) + } else if h != nil { + hash := h.Hash() + if bytes.Equal(hash[:], p.BlockHash[:]) { + includedPayloads++ + // On deneb we also need to make sure at least one payload has blobs + if p.BlobGasUsed != nil && *p.BlobGasUsed > 0 { + includedPayloadsWithBlobs++ + } + } + } + } + } + if includedPayloads == 0 { + t.Fatalf( + "FAIL: builder %d did not produce deneb payloads included in the canonical chain", + i, + ) + } + if includedPayloadsWithBlobs == 0 { + t.Fatalf( + "FAIL: builder %d did not produce deneb payloads with blobs included in the canonical chain", + i, + ) + } + } + } else if ts.InvalidatePayloadAttributes != "" { + // TODO: INVALIDATE_ATTR_BEACON_ROOT cannot be detected by the consensus client + // on a blinded payload + t.Logf("INFO: Verifying builder payloads were NOT included in the canonical chain") + for i, n := range testnet.VerificationNodes().Running() { + b, ok := n.BeaconClient.Builder.(*mock_builder.MockBuilder) + if !ok { + t.Fatalf( + "FAIL: client %d (%s) is not a mock builder", + i, + n.BeaconClient.ClientName(), + ) + } + modifiedPayloads := b.GetModifiedPayloads() + if len(modifiedPayloads) == 0 { + t.Fatalf("FAIL: No payloads were modified by builder %d", i) + } + for _, p := range modifiedPayloads { + p, _, err := p.ToExecutableData() + if err != nil { + t.Fatalf( + "FAIL: error converting payload to executable data: %v", + err, + ) + } + for _, ec := range testnet.ExecutionClients().Running() { + b, err := ec.BlockByNumber( + ctx, + big.NewInt(int64(p.Number)), + ) + if err != nil { + t.Fatalf( + "FAIL: Error getting execution block %d: %v", + p.Number, + err, + ) + } + h := b.Hash() + if bytes.Equal(h[:], p.BlockHash[:]) { + t.Fatalf( + "FAIL: Modified payload included in canonical chain: %d (%s)", + p.Number, + p.BlockHash, + ) + } + } + } + t.Logf( + "INFO: No modified payloads were included in canonical chain of node %d", + i, + ) + } + } + + // Count, print and verify missed slots + if count, err := testnet.BeaconClients().Running()[0].GetFilledSlotsCountPerEpoch(ctx); err != nil { + t.Fatalf("FAIL: unable to obtain slot count per epoch: %v", err) + } else { + for ep, slots := range count { + t.Logf("INFO: Epoch %d, filled slots=%d", ep, slots) + } + + var max_missed_slots uint64 = 0 + if ts.ErrorOnHeaderRequest || ts.InvalidPayloadVersion || ts.InvalidatePayloadAttributes != "" { + // These errors should be caught by the CL client when the built blinded + // payload is received. Hence, a low number of missed slots is expected. + max_missed_slots = 1 + } else { + // All other errors cannot be caught by the CL client until the + // payload is revealed, and the beacon block had been signed. + // Hence, a high number of missed slots is expected because the + // circuit breaker is a mechanism that only kicks in after many + // missed slots. + max_missed_slots = 10 + } + + denebEpoch := beacon.Epoch(config.DenebForkEpoch.Uint64()) + + if count[denebEpoch] < uint64(testnet.Spec().SLOTS_PER_EPOCH)-max_missed_slots { + t.Fatalf( + "FAIL: Epoch %d should have at least %d filled slots, but has %d", + denebEpoch, + uint64(testnet.Spec().SLOTS_PER_EPOCH)-max_missed_slots, + count[denebEpoch], + ) + } + + } + + // Verify all submited blinded beacon blocks have correct signatures + for i, n := range testnet.Nodes.Running() { + b, ok := n.BeaconClient.Builder.(*mock_builder.MockBuilder) + if !ok { + t.Fatalf( + "FAIL: client %d (%s) is not a mock builder", + i, + n.BeaconClient.ClientName(), + ) + } + + if b.GetValidationErrorsCount() > 0 { + // Validation errors should never happen, this means the submited blinded + // beacon response received from the consensus client was incorrect. + validationErrorsMap := b.GetValidationErrors() + for slot, validationError := range validationErrorsMap { + signedBeaconResponse, ok := b.GetSignedBeaconBlock(slot) + if ok { + signedBeaconResponseJson, _ := json.MarshalIndent(signedBeaconResponse, "", " ") + t.Logf( + "INFO: builder %d encountered a validation error on slot %d: %v\n%s", + i, + slot, + validationError, + signedBeaconResponseJson, + ) + } + t.Fatalf( + "FAIL: builder %d encountered a validation error on slot %d: %v", + i, + slot, + validationError, + ) + } + } + } + t.Logf( + "INFO: Validated all signatures of beacon blocks received by builders", + ) +} diff --git a/simulators/eth2/dencun/suites/builder/tests.go b/simulators/eth2/dencun/suites/builder/tests.go new file mode 100644 index 0000000000..9db7ce76dd --- /dev/null +++ b/simulators/eth2/dencun/suites/builder/tests.go @@ -0,0 +1,106 @@ +package suite_builder + +import ( + "github.com/ethereum/hive/hivesim" + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/dencun/suites" + suite_base "github.com/ethereum/hive/simulators/eth2/dencun/suites/base" + mock_builder "github.com/marioevz/mock-builder/mock" +) + +var testSuite = hivesim.Suite{ + Name: "eth2-deneb-builder", + Description: `Collection of test vectors that use a ExecutionClient+BeaconNode+ValidatorClient testnet and builder API for Cancun+Deneb.`, +} + +var Tests = make([]suites.TestSpec, 0) + +func init() { + Tests = append(Tests, + BuilderTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-builders-sanity", + Description: ` + Test canonical chain includes deneb payloads built by the builder api. + `, + // All validators start with BLS withdrawal credentials + GenesisExecutionWithdrawalCredentialsShares: 0, + WaitForFinality: true, + }, + }, + BuilderTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-builders-invalid-payload-attributes-beacon-root", + Description: ` + Test canonical chain can still finalize if the builders start + building payloads with invalid parent beacon block root. + `, + // All validators can withdraw from the start + GenesisExecutionWithdrawalCredentialsShares: 1, + WaitForFinality: true, + }, + InvalidatePayloadAttributes: mock_builder.INVALIDATE_ATTR_BEACON_ROOT, + }, + BuilderTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-builders-error-on-deneb-header-request", + Description: ` + Test canonical chain can still finalize if the builders start + returning error on header request after deneb transition. + `, + // All validators can withdraw from the start + GenesisExecutionWithdrawalCredentialsShares: 1, + WaitForFinality: true, + }, + ErrorOnHeaderRequest: true, + }, + BuilderTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-builders-error-on-deneb-unblind-payload-request", + Description: ` + Test canonical chain can still finalize if the builders start + returning error on unblinded payload request after deneb transition. + `, + // All validators can withdraw from the start + GenesisExecutionWithdrawalCredentialsShares: 1, + WaitForFinality: true, + }, + ErrorOnPayloadReveal: true, + }, + BuilderTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-builders-invalid-payload-version", + Description: ` + Test consensus clients correctly reject a built payload if the + version is outdated (capella instead of deneb). + `, + // All validators can withdraw from the start + GenesisExecutionWithdrawalCredentialsShares: 1, + WaitForFinality: true, + }, + InvalidPayloadVersion: true, + }, + BuilderTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-builders-invalid-payload-beacon-root", + Description: ` + Test consensus clients correctly circuit break builder after a + period of empty blocks due to invalid unblinded blocks. + The payloads are built using an invalid parent beacon block root, which can only + be caught after unblinding the entire payload and running it in the + local execution client, at which point another payload cannot be + produced locally and results in an empty slot. + `, + // All validators can withdraw from the start + GenesisExecutionWithdrawalCredentialsShares: 1, + WaitForFinality: true, + }, + InvalidatePayload: mock_builder.INVALIDATE_PAYLOAD_BEACON_ROOT, + }, + ) +} + +func Suite(c *clients.ClientDefinitionsByRole) hivesim.Suite { + suites.SuiteHydrate(&testSuite, c, Tests) + return testSuite +} diff --git a/simulators/eth2/dencun/suites/evil/tests.go b/simulators/eth2/dencun/suites/evil/tests.go new file mode 100644 index 0000000000..1f22203e31 --- /dev/null +++ b/simulators/eth2/dencun/suites/evil/tests.go @@ -0,0 +1,40 @@ +package suite_evil + +import ( + "math/big" + + "github.com/ethereum/hive/hivesim" + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/dencun/suites" + suite_base "github.com/ethereum/hive/simulators/eth2/dencun/suites/base" + "github.com/ethereum/hive/simulators/ethereum/engine/config/cancun" +) + +var testSuite = hivesim.Suite{ + Name: "eth2-deneb-evil", + Description: `Test suite that uses a modified node that sends incorrect blobs on each proposal.`, +} + +var Tests = make([]suites.TestSpec, 0) + +func init() { + Tests = append(Tests, + suite_base.BaseTestSpec{ + Name: "test-invalid-extra-blob", + Description: ` + Spawns testnet with one validating node that first publishes a modified blobSidecar with a random KZGProof, after 500ms publishes block and all valid blobs, and a second importing node that imports the block and all blobs. + `, + DenebGenesis: true, + NodeCount: 2, + ValidatingNodeCount: 1, + GenesisExecutionWithdrawalCredentialsShares: 1, + WaitForFinality: true, + BlobCount: new(big.Int).SetUint64(cancun.MAX_BLOBS_PER_BLOCK - 1), // Evil teku requires 1 less blob than the max + }, + ) +} + +func Suite(c *clients.ClientDefinitionsByRole) hivesim.Suite { + suites.SuiteHydrate(&testSuite, c, Tests) + return testSuite +} diff --git a/simulators/eth2/dencun/suites/reorg/config.go b/simulators/eth2/dencun/suites/reorg/config.go new file mode 100644 index 0000000000..d304803816 --- /dev/null +++ b/simulators/eth2/dencun/suites/reorg/config.go @@ -0,0 +1,51 @@ +package suite_reorg + +import ( + "fmt" + + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/common/testnet" + suite_base "github.com/ethereum/hive/simulators/eth2/dencun/suites/base" +) + +type ReorgTestSpec struct { + suite_base.BaseTestSpec + + // Array of weights for each chain, the last client re-orgs to the chain with the highest weight. + // The length of the array also determines the number of chains to generate. + ChainWeights []uint64 +} + +func (ts ReorgTestSpec) GetTestnetConfig( + allNodeDefinitions clients.NodeDefinitions, +) *testnet.Config { + // By default the last client does not validate and must sync to the other clients + if ts.BaseTestSpec.ValidatingNodeCount == 0 { + ts.BaseTestSpec.ValidatingNodeCount = ts.BaseTestSpec.NodeCount - 1 + } + + chains := ts.ChainWeights + if len(chains) == 0 { + chains = []uint64{1, 1} + } + + if ts.NodeCount < (len(chains) + 1) { + panic(fmt.Errorf("need at least %d nodes to generate %d different chains", len(chains)+1, len(chains))) + } + + tc := ts.BaseTestSpec.GetTestnetConfig(allNodeDefinitions) + + for i := 0; i < len(tc.NodeDefinitions); i++ { + if i == len(tc.NodeDefinitions)-1 { + // The last node is the one that re-orgs all other nodes + tc.NodeDefinitions[i].DisableStartup = true + } else { + // Other clients are disconnected from each other to form different chains + tc.NodeDefinitions[i].ConsensusSubnet = fmt.Sprintf("%d", i%len(chains)) + tc.NodeDefinitions[i].ExecutionSubnet = fmt.Sprintf("%d", i%len(chains)) + tc.NodeDefinitions[i].ValidatorShares = chains[i%len(chains)] + } + } + + return tc +} diff --git a/simulators/eth2/dencun/suites/reorg/execution.go b/simulators/eth2/dencun/suites/reorg/execution.go new file mode 100644 index 0000000000..f2653e90ff --- /dev/null +++ b/simulators/eth2/dencun/suites/reorg/execution.go @@ -0,0 +1,39 @@ +package suite_reorg + +import ( + "context" + + "github.com/ethereum/hive/hivesim" + tn "github.com/ethereum/hive/simulators/eth2/common/testnet" +) + +// Re-org testnet. +func (ts ReorgTestSpec) Verify( + t *hivesim.T, + ctx context.Context, + testnet *tn.Testnet, + env *tn.Environment, + config *tn.Config, +) { + t.Logf("INFO: Starting secondary clients") + // Start the other clients + for _, n := range testnet.Nodes { + if !n.IsRunning() { + if err := n.Start(); err != nil { + t.Fatalf("FAIL: error starting node %s: %v", n.ClientNames(), err) + } + } + } + + // Wait for all other clients to sync with a timeout of 1 epoch + syncCtx, cancel := testnet.Spec().EpochTimeoutContext(ctx, 1) + defer cancel() + if h, err := testnet.WaitForSync(syncCtx); err != nil { + t.Fatalf("FAIL: error waiting for canonincal chain: %v", err) + } else { + t.Logf("INFO: all clients synced at head %s", h) + } + + // Run the base test spec verifications + ts.BaseTestSpec.Verify(t, ctx, testnet, env, config) +} diff --git a/simulators/eth2/dencun/suites/reorg/tests.go b/simulators/eth2/dencun/suites/reorg/tests.go new file mode 100644 index 0000000000..6de49571fd --- /dev/null +++ b/simulators/eth2/dencun/suites/reorg/tests.go @@ -0,0 +1,58 @@ +package suite_reorg + +import ( + "github.com/ethereum/hive/hivesim" + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/dencun/suites" + suite_base "github.com/ethereum/hive/simulators/eth2/dencun/suites/base" +) + +var testSuite = hivesim.Suite{ + Name: "eth2-deneb-reorg", + Description: `Collection of test vectors that use a ExecutionClient+BeaconNode+ValidatorClient testnet for Cancun+Deneb and test re-orgs of the beacon chain.`, +} + +var Tests = make([]suites.TestSpec, 0) + +func init() { + Tests = append(Tests, + ReorgTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-reorg-from-capella", + Description: ` + Test re-org of the beacon chain by a third non-validating client, re-org from capella. + Start two clients disconnected from each other, then connect them through a third client and check that they re-org. + `, + NodeCount: 5, + // Wait for 1 epoch after the fork to start the last client + EpochsAfterFork: 1, + // All validators start with BLS withdrawal credentials + GenesisExecutionWithdrawalCredentialsShares: 0, + }, + // Chain A has 66% of the validators, chain B has 33% of the validators + ChainWeights: []uint64{2, 1}, + }, + ReorgTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-reorg-from-deneb", + Description: ` + Test re-org of the beacon chain by a third non-validating client, re-org from deneb. + Start two clients disconnected from each other, then connect them through a third client and check that they re-org. + `, + NodeCount: 5, + // Wait for 1 epoch after the fork to start the last client + EpochsAfterFork: 1, + // All validators start with BLS withdrawal credentials + GenesisExecutionWithdrawalCredentialsShares: 0, + DenebGenesis: true, + }, + // Chain A has 66% of the validators, chain B has 33% of the validators + ChainWeights: []uint64{2, 1}, + }, + ) +} + +func Suite(c *clients.ClientDefinitionsByRole) hivesim.Suite { + suites.SuiteHydrate(&testSuite, c, Tests) + return testSuite +} diff --git a/simulators/eth2/dencun/suites/spec.go b/simulators/eth2/dencun/suites/spec.go new file mode 100644 index 0000000000..07e56f2c49 --- /dev/null +++ b/simulators/eth2/dencun/suites/spec.go @@ -0,0 +1,92 @@ +package suites + +import ( + "context" + "fmt" + "strings" + + "github.com/ethereum/hive/hivesim" + "github.com/ethereum/hive/simulators/eth2/common/clients" + consensus_config "github.com/ethereum/hive/simulators/eth2/common/config/consensus" + "github.com/ethereum/hive/simulators/eth2/common/testnet" + beacon "github.com/protolambda/zrnt/eth2/beacon/common" +) + +var Deneb string = "deneb" + +type TestSpec interface { + GetName() string + GetTestnetConfig(clients.NodeDefinitions) *testnet.Config + GetDescription() string + ExecutePreFork(*hivesim.T, context.Context, *testnet.Testnet, *testnet.Environment, *testnet.Config) + ExecutePostFork(*hivesim.T, context.Context, *testnet.Testnet, *testnet.Environment, *testnet.Config) + ExecutePostForkWait(*hivesim.T, context.Context, *testnet.Testnet, *testnet.Environment, *testnet.Config) + Verify(*hivesim.T, context.Context, *testnet.Testnet, *testnet.Environment, *testnet.Config) + GetValidatorKeys(string) []*consensus_config.ValidatorDetails +} + +// Add all tests to the suite +func SuiteHydrate( + suite *hivesim.Suite, + c *clients.ClientDefinitionsByRole, + tests []TestSpec, +) { + mnemonic := "couple kiwi radio river setup fortune hunt grief buddy forward perfect empty slim wear bounce drift execute nation tobacco dutch chapter festival ice fog" + + clientCombinations := c.Combinations() + for _, test := range tests { + test := test + suite.Add(hivesim.TestSpec{ + Name: fmt.Sprintf( + "%s-%s", + test.GetName(), + strings.Join(clientCombinations.ClientTypes(), "-"), + ), + Description: test.GetDescription(), + Run: func(t *hivesim.T) { + keys := test.GetValidatorKeys(mnemonic) + secrets, err := consensus_config.SecretKeys(keys) + if err != nil { + panic(err) + } + env := &testnet.Environment{ + Clients: c, + Keys: keys, + Secrets: secrets, + } + config := test.GetTestnetConfig(clientCombinations) + + // Create the testnet + ctx := context.Background() + testnet := testnet.StartTestnet(ctx, t, env, config) + if testnet == nil { + t.Fatalf("failed to start testnet") + } + defer testnet.Stop() + + // Execute pre-fork + test.ExecutePreFork(t, ctx, testnet, env, config) + + // Wait for the fork + slotsUntilFork := beacon.Slot( + config.DenebForkEpoch.Uint64(), + )*testnet.Spec().SLOTS_PER_EPOCH + 4 + timeoutCtx, cancel := testnet.Spec().SlotTimeoutContext(ctx, slotsUntilFork) + defer cancel() + if err := testnet.WaitForFork(timeoutCtx, Deneb); err != nil { + t.Fatalf("FAIL: error waiting for deneb: %v", err) + } + + // Execute post-fork + test.ExecutePostFork(t, ctx, testnet, env, config) + + // Execute post-fork wait + test.ExecutePostForkWait(t, ctx, testnet, env, config) + + // Verify + test.Verify(t, ctx, testnet, env, config) + }, + }, + ) + } +} diff --git a/simulators/eth2/dencun/suites/sync/README.md b/simulators/eth2/dencun/suites/sync/README.md new file mode 100644 index 0000000000..4f28903943 --- /dev/null +++ b/simulators/eth2/dencun/suites/sync/README.md @@ -0,0 +1,49 @@ +# Dencun Interop Sync Simulator + +To run locally use: + +```bash +./hive --client-file ./configs/cancun.yaml --client "go-ethereum,${cl}-bn,${cl}-vc" --sim eth2/dencun --sim.limit "eth2-deneb-sync/" +``` + +## Test Cases + +### Test Deneb Syncing + +* [x] Sync From Capella Transition +
+ Click for details + + - Start two validating nodes that begin on Capella/Shanghai genesis + - Deneb/Cancun transition occurs on Epoch 1 + - Total of 128 Validators, 64 for each validating node + - Wait for Deneb fork and start sending blob transactions to the Execution client + - Wait one more epoch for the chain to progress and include blobs + - Start a third client with the first two validating nodes as bootnodes + - Wait for the third client to reach the head of the canonical chain + - Verify on the consensus client on the synced client that: + - For each blob transaction on the execution chain, the blob sidecars are available for the + beacon block at the same height + - The beacon block lists the correct commitments for each blob + - The blob sidecars and kzg commitments match on each block for the synced client + +
+ +* [x] Sync From Deneb Genesis +
+ Click for details + + - Start two validating nodes that begin on Deneb genesis + - Total of 128 Validators, 64 for each validating node + - Start sending blob transactions to the Execution client + - Wait one epoch for the chain to progress and include blobs + - Start a third client with the first two validating nodes as bootnodes + - Wait for the third client to reach the head of the canonical chain + - Verify on the consensus client on the synced client that: + - For each blob transaction on the execution chain, the blob sidecars are available for the + beacon block at the same height + - The beacon block lists the correct commitments for each blob + - The blob sidecars and kzg commitments match on each block for the synced client + +
+ diff --git a/simulators/eth2/dencun/suites/sync/config.go b/simulators/eth2/dencun/suites/sync/config.go new file mode 100644 index 0000000000..3d23d62ba7 --- /dev/null +++ b/simulators/eth2/dencun/suites/sync/config.go @@ -0,0 +1,27 @@ +package suite_sync + +import ( + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/common/testnet" + suite_base "github.com/ethereum/hive/simulators/eth2/dencun/suites/base" +) + +type SyncTestSpec struct { + suite_base.BaseTestSpec +} + +func (ts SyncTestSpec) GetTestnetConfig( + allNodeDefinitions clients.NodeDefinitions, +) *testnet.Config { + // By default the last client does not validate and must sync to the other clients + if ts.BaseTestSpec.ValidatingNodeCount == 0 { + ts.BaseTestSpec.ValidatingNodeCount = ts.BaseTestSpec.NodeCount - 1 + } + + tc := ts.BaseTestSpec.GetTestnetConfig(allNodeDefinitions) + + // We disable the start of the last node + tc.NodeDefinitions[len(tc.NodeDefinitions)-1].DisableStartup = true + + return tc +} diff --git a/simulators/eth2/dencun/suites/sync/execution.go b/simulators/eth2/dencun/suites/sync/execution.go new file mode 100644 index 0000000000..aeb3e4490f --- /dev/null +++ b/simulators/eth2/dencun/suites/sync/execution.go @@ -0,0 +1,39 @@ +package suite_sync + +import ( + "context" + + "github.com/ethereum/hive/hivesim" + tn "github.com/ethereum/hive/simulators/eth2/common/testnet" +) + +// Re-org testnet. +func (ts SyncTestSpec) Verify( + t *hivesim.T, + ctx context.Context, + testnet *tn.Testnet, + env *tn.Environment, + config *tn.Config, +) { + t.Logf("INFO: Starting secondary clients") + // Start the other clients + for _, n := range testnet.Nodes { + if !n.IsRunning() { + if err := n.Start(); err != nil { + t.Fatalf("FAIL: error starting node %s: %v", n.ClientNames(), err) + } + } + } + + // Wait for all other clients to sync with a timeout of 1 epoch + syncCtx, cancel := testnet.Spec().EpochTimeoutContext(ctx, 1) + defer cancel() + if h, err := testnet.WaitForSync(syncCtx); err != nil { + t.Fatalf("FAIL: error waiting for sync: %v", err) + } else { + t.Logf("INFO: all clients synced at head %s", h) + } + + // Run the base test spec verifications + ts.BaseTestSpec.Verify(t, ctx, testnet, env, config) +} diff --git a/simulators/eth2/dencun/suites/sync/tests.go b/simulators/eth2/dencun/suites/sync/tests.go new file mode 100644 index 0000000000..eed02386ec --- /dev/null +++ b/simulators/eth2/dencun/suites/sync/tests.go @@ -0,0 +1,52 @@ +package suite_sync + +import ( + "github.com/ethereum/hive/hivesim" + "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/dencun/suites" + suite_base "github.com/ethereum/hive/simulators/eth2/dencun/suites/base" +) + +var testSuite = hivesim.Suite{ + Name: "eth2-deneb-sync", + Description: `Collection of test vectors that use a ExecutionClient+BeaconNode+ValidatorClient testnet for Cancun+Deneb and test syncing of the beacon chain.`, +} + +var Tests = make([]suites.TestSpec, 0) + +func init() { + Tests = append(Tests, + SyncTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-sync-from-capella", + Description: ` + Test syncing of the beacon chain by a secondary non-validating client, sync from capella. + `, + NodeCount: 3, + // Wait for 1 epoch after the fork to start the syncing client + EpochsAfterFork: 1, + // All validators start with BLS withdrawal credentials + GenesisExecutionWithdrawalCredentialsShares: 0, + }, + }, + SyncTestSpec{ + BaseTestSpec: suite_base.BaseTestSpec{ + Name: "test-sync-from-deneb", + Description: ` + Test syncing of the beacon chain by a secondary non-validating client, sync from deneb. + `, + NodeCount: 3, + // Wait for 1 epoch after the fork to start the syncing client + EpochsAfterFork: 1, + // All validators start with BLS withdrawal credentials + GenesisExecutionWithdrawalCredentialsShares: 0, + DenebGenesis: true, + }, + }, + ) +} + +func Suite(c *clients.ClientDefinitionsByRole) hivesim.Suite { + suites.SuiteHydrate(&testSuite, c, Tests) + return testSuite +} diff --git a/simulators/eth2/engine/go.mod b/simulators/eth2/engine/go.mod index ba7e118f38..03a91617f8 100644 --- a/simulators/eth2/engine/go.mod +++ b/simulators/eth2/engine/go.mod @@ -3,10 +3,10 @@ module github.com/ethereum/hive/simulators/eth2/engine go 1.18 require ( - github.com/ethereum/go-ethereum v1.11.5 + github.com/ethereum/go-ethereum v1.13.1 github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6 - github.com/marioevz/eth-clients v0.0.0-20230503173323-98293c926363 + github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76 github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d github.com/protolambda/zrnt v0.30.0 github.com/rauljordan/engine-proxy v0.0.0-20230316220057-4c80c36c4c3a @@ -18,7 +18,7 @@ require ( github.com/ferranbt/fastssz v0.1.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-stack/stack v1.8.1 // indirect - github.com/holiman/uint256 v1.2.2 // indirect + github.com/holiman/uint256 v1.2.3 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -26,24 +26,29 @@ require ( github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect - github.com/tklauser/go-sysconf v0.3.11 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) require ( github.com/DataDog/zstd v1.5.2 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.5.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 // indirect + github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 // indirect github.com/cockroachdb/redact v1.1.3 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.10.0 // indirect + github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect - github.com/edsrzf/mmap-go v1.1.0 // indirect + github.com/ethereum/c-kzg-4844 v0.3.1 // indirect github.com/fjl/memsize v0.0.1 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/getsentry/sentry-go v0.18.0 // indirect @@ -65,6 +70,7 @@ require ( github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.14.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect @@ -75,16 +81,20 @@ require ( github.com/rivo/uniseg v0.4.3 // indirect github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect - github.com/tklauser/numcpus v0.6.0 // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect - github.com/urfave/cli/v2 v2.23.7 // indirect github.com/wealdtech/go-bytesutil v1.2.0 // indirect github.com/wealdtech/go-eth2-types/v2 v2.8.0 // indirect github.com/wealdtech/go-eth2-util v1.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - golang.org/x/crypto v0.4.0 // indirect - golang.org/x/exp v0.0.0-20230206171751-46f607a40771 // indirect - golang.org/x/time v0.3.0 // indirect + golang.org/x/crypto v0.12.0 // indirect + golang.org/x/exp v0.0.0-20230810033253-352e893a4cad // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/tools v0.9.1 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + rsc.io/tmplfunc v0.0.3 // indirect ) + +replace github.com/protolambda/eth2api => github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033 diff --git a/simulators/eth2/engine/go.sum b/simulators/eth2/engine/go.sum index 3c8aeb83df..3cead53528 100644 --- a/simulators/eth2/engine/go.sum +++ b/simulators/eth2/engine/go.sum @@ -1,25 +1,44 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/VictoriaMetrics/fastcache v1.12.0 h1:vnVi/y9yKDcD9akmc4NqAoqgQhJrOwUF+j9LTgn4QDE= github.com/VictoriaMetrics/fastcache v1.12.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.5.0 h1:NpE8frKRLGHIcEzkR+gZhiioW1+WbYV6fKwD6ZIpQT8= +github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -27,52 +46,64 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM/P5NAw0e2Rf1FGvzDau1h54MKvx8G7w= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.10.0 h1:zRh22SR7o4K35SoNqouS9J/TKHTyU2QWaj5ldehyXtA= +github.com/consensys/gnark-crypto v0.10.0/go.mod h1:Iq/P3HHl0ElSjsg2E1gsMwhAyxnxoKK5nVyZKd+/KhU= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= +github.com/crate-crypto/go-kzg-4844 v0.3.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= -github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum/go-ethereum v1.11.5 h1:3M1uan+LAUvdn+7wCEFrcMM4LJTeuxDrPTg/f31a5QQ= -github.com/ethereum/go-ethereum v1.11.5/go.mod h1:it7x0DWnTDMfVFdXcU6Ti4KEFQynLHVRarcSlPr0HBo= +github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= +github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.1 h1:UF2FaUKPIy5jeZk3X06ait3y2Q4wI+vJ1l7+UARp+60= +github.com/ethereum/go-ethereum v1.13.1/go.mod h1:xHQKzwkHSl0gnSjZK1mWa06XEdm9685AHqhRknOzqGQ= github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e h1:3g9cqRqpbZ92tSlGL4PfFoq435axKw6HiZ1Gz3fOkfk= github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e/go.mod h1:PlpDuxHg6q1jU0K8Ouf+RXlHguignJ7k8Eyukc9RCPQ= github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6 h1:LcSUNGwQuJyR/gdPcsif57yKX+3MyhpoAuChzR8k6Yk= github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6/go.mod h1:FX4oxNyTNw/P+TUWrb7vva7o/rFI0pHO7OYdtG6EtN4= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/ferranbt/fastssz v0.1.2 h1:Dky6dXlngF6Qjc+EfDipAkE83N5I5DE68bY6O0VLNPk= github.com/ferranbt/fastssz v0.1.2/go.mod h1:X5UPrE2u1UJjxHA8X54u04SBwdAQjG2sFtWs39YxyWs= @@ -93,9 +124,11 @@ github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/ github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -143,7 +176,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -153,31 +188,38 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/hashicorp/go-bexpr v0.1.11 h1:6DqdA/KBjurGby9yTY0bmkathya0lfwF2SeuubCI7dY= github.com/hashicorp/go-bexpr v0.1.11/go.mod h1:f03lAo0duBlDIUMGCuad8oLcgejw4m7U+N8T+6Kz1AE= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/herumi/bls-eth-go-binary v1.28.1 h1:fcIZ48y5EE9973k05XjE8+P3YiQgjZz4JI/YabAm8KA= github.com/herumi/bls-eth-go-binary v1.28.1/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.2 h1:TXKcSGc2WaxPD2+bmzAsVthL4+pEN0YwXcL5qED83vk= -github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= +github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= @@ -208,13 +250,18 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/marioevz/eth-clients v0.0.0-20230503171433-707db4e8bc85 h1:A3UX2d+yP+URXOlirB6ulC6mV6ET54MiMgEdgh29Wj8= -github.com/marioevz/eth-clients v0.0.0-20230503171433-707db4e8bc85/go.mod h1:LnzXFKyMw3wF/3eaTfPhKiwkWkZJXokOWcUI02Ioi4s= -github.com/marioevz/eth-clients v0.0.0-20230503173323-98293c926363 h1:ONwsdY5/heIE0HHxh4+QXkwa69MZuaO+vONXduNBbrM= -github.com/marioevz/eth-clients v0.0.0-20230503173323-98293c926363/go.mod h1:LnzXFKyMw3wF/3eaTfPhKiwkWkZJXokOWcUI02Ioi4s= +github.com/marioevz/eth-clients v0.0.0-20230925172743-e379ee1ecd6e h1:uBr6Gn5jBHnyoS34HV4GOiYjuua6J/F2FST0T6MO89E= +github.com/marioevz/eth-clients v0.0.0-20230925172743-e379ee1ecd6e/go.mod h1:YVrdn57Q3rAzm3wus4T9tg1vMPca4csVbzorPhkGCW0= +github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76 h1:fj+aeR3YLmSRUWjOGgTxNMdvzm72J5JbKGKosNO/jkE= +github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76/go.mod h1:YVrdn57Q3rAzm3wus4T9tg1vMPca4csVbzorPhkGCW0= +github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033 h1:sn57n+lbJrLS8FKYs08W7TEzraTGOCQGrSC4hni6rYw= +github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033/go.mod h1:hcwWCT4sF1X7KsMZ535MvDZVk5M20Uyj+x2LARZjQsM= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= @@ -243,11 +290,18 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= github.com/mitchellh/pointerstructure v1.2.1/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= @@ -269,7 +323,9 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -290,8 +346,6 @@ github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB github.com/protolambda/bls12-381-util v0.0.0-20210720105258-a772f2aac13e/go.mod h1:MPZvj2Pr0N8/dXyTPS5REeg2sdLG7t8DRzC1rLv925w= github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 h1:cZC+usqsYgHtlBaGulVnZ1hfKAi8iWtujBnRLQE698c= github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7/go.mod h1:IToEjHuttnUzwZI5KBSM/LOOW3qLbbrHOEfp3SbECGY= -github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d h1:35qD9zgP3ApfcHsETuJyX3G5kVOgFgAx6kaRGzPC+FY= -github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d/go.mod h1:4WbGGB4Bv17hKsiytlJY4IQDNpRS234DvFvIBNLnd60= github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564 h1:yCXGkFjrZ8EggxW+Y7ueRZesNcBk0avLU0mVU/I2KtU= github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564/go.mod h1:Xda3KO8+DMyWaTr+LwUUpVRTB5SdFzoKu0ivXNI6p1s= github.com/protolambda/messagediff v1.4.0/go.mod h1:LboJp0EwIbJsePYpzh5Op/9G1/4mIztMRYzzwR0dR2M= @@ -338,20 +392,21 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= -github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= -github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli/v2 v2.23.7 h1:YHDQ46s3VghFHFf1DdF+Sh7H4RqhcM+t0TmZRJx4oJY= -github.com/urfave/cli/v2 v2.23.7/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= @@ -387,11 +442,11 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20230206171751-46f607a40771 h1:xP7rWLUr1e1n2xkK5YB4LI0hPEy3LJC6Wk+D4pGlOJg= -golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230810033253-352e893a4cad h1:g0bG7Z4uG+OgH2QDODnjp6ggkk1bJDsINcuWmJN1iJU= +golang.org/x/exp v0.0.0-20230810033253-352e893a4cad/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -400,6 +455,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -421,7 +478,7 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -431,7 +488,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -467,9 +525,9 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -478,11 +536,10 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -497,6 +554,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= 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= @@ -528,10 +587,12 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= @@ -539,7 +600,7 @@ gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/R gopkg.in/inconshreveable/log15.v2 v2.0.0-20200109203555-b30bc20e4fd1 h1:iiHuQZCNgYPmFQxd3BBN/Nc5+dAwzZuq5y40s20oQw0= gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -555,3 +616,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/simulators/eth2/engine/main.go b/simulators/eth2/engine/main.go index 949cc6f7ad..ed6d64d2a7 100644 --- a/simulators/eth2/engine/main.go +++ b/simulators/eth2/engine/main.go @@ -32,6 +32,7 @@ var engineTests = []testSpec{ {Name: "invalid-quantity-fields", Run: InvalidQuantityPayloadFields}, {Name: "timeouts", Run: Timeouts}, } + var transitionTests = []testSpec{ // Transition (TERMINAL_TOTAL_DIFFICULTY) tests {Name: "invalid-transition-payload", Run: InvalidPayloadGen(1, Invalid)}, @@ -41,10 +42,6 @@ var transitionTests = []testSpec{ {Name: "invalid-terminal-block-payload-lower-ttd", Run: IncorrectTerminalBlockGen(-2)}, {Name: "invalid-terminal-block-payload-higher-ttd", Run: IncorrectTerminalBlockGen(1)}, {Name: "build-atop-invalid-terminal-block", Run: IncorrectTTDConfigEL}, - {Name: "syncing-with-chain-having-valid-transition-block", Run: SyncingWithChainHavingValidTransitionBlock}, - {Name: "syncing-with-chain-having-invalid-transition-block", Run: SyncingWithChainHavingInvalidTransitionBlock}, - {Name: "syncing-with-chain-having-invalid-post-transition-block", Run: SyncingWithChainHavingInvalidPostTransitionBlock}, - {Name: "re-org-and-sync-with-chain-having-invalid-terminal-block", Run: ReOrgSyncWithChainHavingInvalidTerminalBlock}, {Name: "no-viable-head-due-to-optimistic-sync", Run: NoViableHeadDueToOptimisticSync}, } diff --git a/simulators/eth2/engine/scenarios.go b/simulators/eth2/engine/scenarios.go index a44307afc9..5b1391ab56 100644 --- a/simulators/eth2/engine/scenarios.go +++ b/simulators/eth2/engine/scenarios.go @@ -13,14 +13,14 @@ import ( api "github.com/ethereum/go-ethereum/beacon/engine" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/hive/hivesim" - "github.com/ethereum/hive/simulators/eth2/common/chain_generators/pow" "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/common/config" + cl "github.com/ethereum/hive/simulators/eth2/common/config/consensus" el "github.com/ethereum/hive/simulators/eth2/common/config/execution" "github.com/ethereum/hive/simulators/eth2/common/debug" payload_spoof "github.com/ethereum/hive/simulators/eth2/common/spoofing/payload" tn "github.com/ethereum/hive/simulators/eth2/common/testnet" exec_client "github.com/marioevz/eth-clients/clients/execution" - "github.com/marioevz/eth-clients/clients/node" "github.com/protolambda/eth2api" beacon "github.com/protolambda/zrnt/eth2/beacon/common" spoof "github.com/rauljordan/engine-proxy/proxy" @@ -35,13 +35,17 @@ var ( // Default config used for all tests unless a client specific config exists DEFAULT_CONFIG = &tn.Config{ - ValidatorCount: big.NewInt(int64(DEFAULT_VALIDATOR_COUNT)), - TerminalTotalDifficulty: big.NewInt( - int64(DEFAULT_TERMINAL_TOTAL_DIFFICULTY), - ), - AltairForkEpoch: common.Big0, - BellatrixForkEpoch: common.Big0, - Eth1Consensus: &el.ExecutionCliqueConsensus{}, + ConsensusConfig: &cl.ConsensusConfig{ + ValidatorCount: big.NewInt(int64(DEFAULT_VALIDATOR_COUNT)), + }, + ForkConfig: &config.ForkConfig{ + TerminalTotalDifficulty: big.NewInt( + int64(DEFAULT_TERMINAL_TOTAL_DIFFICULTY), + ), + AltairForkEpoch: common.Big0, + BellatrixForkEpoch: common.Big0, + }, + Eth1Consensus: &el.ExecutionCliqueConsensus{}, } SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY_CLIENT_OVERRIDE = map[string]*big.Int{} @@ -671,7 +675,9 @@ func Timeouts(t *hivesim.T, env *tn.Environment, n clients.NodeDefinition) { n, }, // Use the default mainnet slot time to allow the timeout value to make sense - SlotTime: big.NewInt(int64(MAINNET_SLOT_TIME)), + ConsensusConfig: &cl.ConsensusConfig{ + SlotTime: big.NewInt(int64(MAINNET_SLOT_TIME)), + }, }) testnet := tn.StartTestnet(ctx, t, env, config) @@ -1225,7 +1231,7 @@ func SyncingWithInvalidChain( // Block can't contain an executable payload t.Fatalf("FAIL: Head of the chain is not a bellatrix fork block") } - if payload, err := versionedBlock.ExecutionPayload(); err == nil { + if payload, _, _, err := versionedBlock.ExecutionPayload(); err == nil { t.Fatalf( "FAIL: error getting execution payload: %v", err, @@ -1329,12 +1335,14 @@ func EqualTimestampTerminalTransitionBlock( n clients.NodeDefinition, ) { ctx := context.Background() - config := getClientConfig(n) - config = config.Join(&tn.Config{ - // We are increasing the clique period, therefore we can reduce the TTD - TerminalTotalDifficulty: big.NewInt( - config.TerminalTotalDifficulty.Int64() / 3, - ), + cfg := getClientConfig(n) + cfg = cfg.Join(&tn.Config{ + ForkConfig: &config.ForkConfig{ + // We are increasing the clique period, therefore we can reduce the TTD + TerminalTotalDifficulty: big.NewInt( + cfg.TerminalTotalDifficulty.Int64() / 3, + ), + }, NodeDefinitions: []clients.NodeDefinition{ n, n, @@ -1343,11 +1351,11 @@ func EqualTimestampTerminalTransitionBlock( // The clique period needs to be equal to the slot time to try to get the CL client to attempt to produce // a payload with the same timestamp as the terminal block Eth1Consensus: &el.ExecutionCliqueConsensus{ - CliquePeriod: config.SlotTime.Uint64(), + CliquePeriod: cfg.SlotTime.Uint64(), }, }) - testnet := tn.StartTestnet(ctx, t, env, config) + testnet := tn.StartTestnet(ctx, t, env, cfg) defer testnet.Stop() // No ForkchoiceUpdated with payload attributes should fail, which could happen if CL tries to create @@ -1383,23 +1391,25 @@ func TTDBeforeBellatrix( n clients.NodeDefinition, ) { ctx := context.Background() - config := getClientConfig(n) - config = config.Join(&tn.Config{ - AltairForkEpoch: common.Big1, - BellatrixForkEpoch: common.Big2, - TerminalTotalDifficulty: big.NewInt(150), + cfg := getClientConfig(n) + cfg = cfg.Join(&tn.Config{ + ForkConfig: &config.ForkConfig{ + AltairForkEpoch: common.Big1, + BellatrixForkEpoch: common.Big2, + TerminalTotalDifficulty: big.NewInt(150), + }, NodeDefinitions: []clients.NodeDefinition{ n, n, }, }) - testnet := tn.StartTestnet(ctx, t, env, config) + testnet := tn.StartTestnet(ctx, t, env, cfg) defer testnet.Stop() execPayloadCtx, cancel := testnet.Spec().SlotTimeoutContext( ctx, - SlotsUntilMerge(ctx, testnet, config), + SlotsUntilMerge(ctx, testnet, cfg), ) defer cancel() _, err := testnet.WaitForExecutionPayload(execPayloadCtx) @@ -1427,7 +1437,7 @@ func InvalidQuantityPayloadFields( n clients.NodeDefinition, ) { ctx := context.Background() - config := getClientConfig(n).Join(&tn.Config{ + cfg := getClientConfig(n).Join(&tn.Config{ NodeDefinitions: clients.NodeDefinitions{ n, n, @@ -1435,13 +1445,13 @@ func InvalidQuantityPayloadFields( }, }) - testnet := tn.StartTestnet(ctx, t, env, config) + testnet := tn.StartTestnet(ctx, t, env, cfg) defer testnet.Stop() // First we are going to wait for the transition to happen execPayloadCtx, cancel := testnet.Spec().SlotTimeoutContext( ctx, - SlotsUntilMerge(ctx, testnet, config), + SlotsUntilMerge(ctx, testnet, cfg), ) defer cancel() _, err := testnet.WaitForExecutionPayload(execPayloadCtx) @@ -1644,7 +1654,7 @@ func InvalidQuantityPayloadFields( t.Fatalf("FAIL: Error during payload verification: %v", err) } else if b != nil { - if execPayload, err := b.ExecutionPayload(); err != nil { + if execPayload, _, _, err := b.ExecutionPayload(); err != nil { t.Logf( "FAIL: Beacon block does not contain a payload, slot %d (%v)", b.Slot(), b.StateRoot(), @@ -1667,706 +1677,6 @@ func InvalidQuantityPayloadFields( } } -func SyncingWithChainHavingValidTransitionBlock( - t *hivesim.T, - env *tn.Environment, - n clients.NodeDefinition, -) { - var ( - safeSlotsToImportOptimistically = big.NewInt(8) - safeSlotsImportThreshold = uint64(4) - ctx = context.Background() - ) - if clientSafeSlots, ok := SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY_CLIENT_OVERRIDE[n.ConsensusClient]; ok { - safeSlotsToImportOptimistically = clientSafeSlots - } - - config := getClientConfig(n).Join(&tn.Config{ - NodeDefinitions: clients.NodeDefinitions{ - // Builder - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 1, - ChainGenerator: &pow.ChainGenerator{ - BlockCount: 1, - Config: pow.Defaults, - }, - }, - // Importer - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 0, - ChainGenerator: &pow.ChainGenerator{ - BlockCount: 1, - Config: pow.Defaults, - }, - }, - }, - Eth1Consensus: el.ExecutionPreChain{}, - SafeSlotsToImportOptimistically: safeSlotsToImportOptimistically, - }) - - testnet := tn.StartTestnet(ctx, t, env, config) - defer testnet.Stop() - - var ( - builder = testnet.BeaconClients()[0] - importer = testnet.BeaconClients()[1] - importerProxy = testnet.Proxies().Running()[1] - ) - - importerResponseMocker := payload_spoof.NewEngineResponseMocker( - &api.PayloadStatusV1{ - // By default we respond SYNCING to any payload - Status: Syncing, - LatestValidHash: nil, - }, - ) - importerResponseMocker.AddCallbacksToProxy(importerProxy) - - execPayloadCtx, cancel := testnet.Spec().SlotTimeoutContext( - ctx, - SlotsUntilMerge(ctx, testnet, config), - ) - defer cancel() - // Wait until the builder creates the first block with an execution payload - _, err := testnet.WaitForExecutionPayload(execPayloadCtx) - if err != nil { - t.Fatalf("FAIL: Waiting for execution payload on builder: %v", err) - } - - builderExecutionBlock, err := builder.GetFirstExecutionBeaconBlock(ctx) - if err != nil || builderExecutionBlock == nil { - t.Fatalf("FAIL: Could not find first execution block") - } - t.Logf( - "Builder Execution block found on slot %d", - builderExecutionBlock.Slot(), - ) - - // We wait until the importer reaches optimistic sync - optimisticStateCtx, cancel := testnet.Spec().SlotTimeoutContext( - ctx, - beacon.Slot( - safeSlotsToImportOptimistically.Uint64()+ - safeSlotsImportThreshold), - ) - defer cancel() - _, err = importer.WaitForOptimisticState( - optimisticStateCtx, - eth2api.BlockIdSlot(builderExecutionBlock.Slot()), - true, - ) - if err != nil { - t.Fatalf( - "FAIL: Timeout waiting for beacon node to become optimistic: %v", - err, - ) - } - - // Mocked responses are disabled, so the EL can finally validate payloads - importerResponseMocker.Mocking = false - - // Wait until newPayload or forkchoiceUpdated are called at least once - ctxTimeout, cancel := context.WithTimeout(ctx, time.Second*20) - defer cancel() - select { - case <-importerResponseMocker.NewPayloadCalled: - case <-importerResponseMocker.ForkchoiceUpdatedCalled: - case <-ctxTimeout.Done(): - t.Fatalf( - "FAIL: Timeout waiting for beacon node to send engine directive: %v", - err, - ) - } - - // Wait a couple of slots here to make sure syncing does not produce a false positive - time.Sleep(time.Duration(config.SlotTime.Uint64()*10) * time.Second) - - // Wait for the importer to get an execution payload - execPayloadCtx, cancel = testnet.Spec().SlotTimeoutContext( - ctx, - beacon.Slot(safeSlotsToImportOptimistically.Uint64()+safeSlotsImportThreshold), - ) - defer cancel() - _, err = importer.WaitForExecutionPayload(execPayloadCtx) - if err != nil { - t.Fatalf("FAIL: Waiting for execution payload on importer: %v", err) - } - - // Compare heads, the importer must have the same head as the builder, - // and `execution_optimistic==false`. - var ( - importerHeadInfo *eth2api.BeaconBlockHeaderAndInfo - builderHeadInfo *eth2api.BeaconBlockHeaderAndInfo - ) - importerHeadInfo, err = importer.BlockHeader(ctx, eth2api.BlockHead) - if err != nil { - t.Fatalf("FAIL: Failed to poll head importer head: %v", err) - } - - builderHeadInfo, err = builder.BlockHeader(ctx, eth2api.BlockHead) - if err != nil { - t.Fatalf("FAIL: Failed to poll head builder head: %v", err) - } - - if importerHeadInfo.Root != builderHeadInfo.Root { - t.Fatalf( - "FAIL: importer and builder heads are not equal: %v != %v", - importerHeadInfo.Root, - builderHeadInfo.Root, - ) - } - - optimistic, err := importer.BlockIsOptimistic(ctx, eth2api.BlockHead) - if err != nil { - t.Fatalf("FAIL: Failed to poll head importer head: %v", err) - } else if optimistic { - t.Fatalf( - "FAIL: importer still optimistic: execution_optimistic==%t", - optimistic, - ) - } -} - -func SyncingWithChainHavingInvalidTransitionBlock( - t *hivesim.T, - env *tn.Environment, - n clients.NodeDefinition, -) { - var ( - safeSlotsToImportOptimistically = big.NewInt(8) - safeSlotsImportThreshold = uint64(4) - ctx = context.Background() - ) - if clientSafeSlots, ok := SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY_CLIENT_OVERRIDE[n.ConsensusClient]; ok { - safeSlotsToImportOptimistically = clientSafeSlots - } - - config := getClientConfig(n).Join(&tn.Config{ - NodeDefinitions: clients.NodeDefinitions{ - // Builder - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 1, - ChainGenerator: &pow.ChainGenerator{ - BlockCount: 1, - Config: pow.Defaults, - }, - }, - // Importer - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 0, - ChainGenerator: &pow.ChainGenerator{ - BlockCount: 1, - Config: pow.Defaults, - }, - }, - }, - AltairForkEpoch: common.Big1, - BellatrixForkEpoch: common.Big2, - Eth1Consensus: el.ExecutionPreChain{}, - SafeSlotsToImportOptimistically: safeSlotsToImportOptimistically, - }) - - testnet := tn.StartTestnet(ctx, t, env, config) - defer testnet.Stop() - - var ( - builder = testnet.BeaconClients()[0] - importer = testnet.BeaconClients()[1] - importerProxy = testnet.Proxies().Running()[1] - ) - - importerResponseMocker := payload_spoof.NewEngineResponseMocker( - &api.PayloadStatusV1{ - // By default we respond SYNCING to any payload - Status: Syncing, - LatestValidHash: nil, - }, - ) - importerResponseMocker.AddCallbacksToProxy(importerProxy) - - // Wait until the builder creates the first block with an execution payload - execPayloadCtx, cancel := testnet.Spec().SlotTimeoutContext( - ctx, - SlotsUntilMerge(ctx, testnet, config), - ) - defer cancel() - _, err := testnet.WaitForExecutionPayload(execPayloadCtx) - if err != nil { - t.Fatalf( - "FAIL: Timeout waiting for execution payload on builder: %v", - err, - ) - } - - // Fetch the first execution block which will be used for verification - builderExecutionBlock, err := builder.GetFirstExecutionBeaconBlock(ctx) - if err != nil || builderExecutionBlock == nil { - t.Fatalf("FAIL: Could not find first execution block") - } - - t.Logf( - "INFO: First execution block: %d, %v", - builderExecutionBlock.Slot(), builderExecutionBlock.StateRoot(), - ) - - // We wait until the importer reaches optimistic sync - optimisticStateCtx, cancel := testnet.Spec().SlotTimeoutContext( - ctx, - beacon.Slot( - safeSlotsToImportOptimistically.Uint64()+ - safeSlotsImportThreshold), - ) - defer cancel() - _, err = importer.WaitForOptimisticState( - optimisticStateCtx, - eth2api.BlockIdSlot(builderExecutionBlock.Slot()), - true, - ) - if err != nil { - t.Fatalf( - "FAIL: Timeout waiting for beacon node to become optimistic: %v", - err, - ) - } - - // We invalidate the entire proof-of-stake chain - t.Logf("INFO: Changing default response to INVALID") - importerResponseMocker.SetDefaultResponse(&api.PayloadStatusV1{ - // The default is now that the execution client returns INVALID + LVH==0x00..00 - Status: Invalid, - LatestValidHash: &(common.Hash{}), - }) - - // Wait until newPayload or forkchoiceUpdated are called at least once - ctxTimeout, cancel := context.WithTimeout(ctx, time.Second*20) - defer cancel() - select { - case <-importerResponseMocker.NewPayloadCalled: - case <-importerResponseMocker.ForkchoiceUpdatedCalled: - case <-ctxTimeout.Done(): - t.Fatalf( - "FAIL: Timeout waiting for beacon node to send engine directive: %v", - err, - ) - } - - // Wait a couple of slots here to make sure syncing does not produce a false positive - time.Sleep(time.Duration(config.SlotTime.Uint64()*10) * time.Second) - - // Query the beacon chain head of the importer node, it should still - // point to a pre-merge block. - headInfo, err := importer.BlockHeader(ctx, eth2api.BlockHead) - if err != nil { - t.Fatalf("FAIL: Failed to poll head importer head: %v", err) - } - - if headInfo.Header.Message.Slot != (builderExecutionBlock.Slot() - 1) { - optimistic, err := importer.BlockIsOptimistic(ctx, eth2api.BlockHead) - if err != nil { - t.Fatalf("FAIL: Failed to poll head importer head: %v", err) - } - - t.Fatalf( - "FAIL: Importer head is beyond the invalid execution payload block: importer=%v:%d, builder=%v:%d, execution_optimistic=%t", - headInfo.Root, - headInfo.Header.Message.Slot, - builderExecutionBlock.StateRoot(), - builderExecutionBlock.Slot(), - optimistic, - ) - } -} - -func SyncingWithChainHavingInvalidPostTransitionBlock( - t *hivesim.T, - env *tn.Environment, - n clients.NodeDefinition, -) { - var ( - safeSlotsToImportOptimistically = big.NewInt(8) - safeSlotsImportThreshold = uint64(4) - ctx = context.Background() - ) - if clientSafeSlots, ok := SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY_CLIENT_OVERRIDE[n.ConsensusClient]; ok { - safeSlotsToImportOptimistically = clientSafeSlots - } - - config := getClientConfig(n).Join(&tn.Config{ - NodeDefinitions: clients.NodeDefinitions{ - // Builder - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 1, - ChainGenerator: &pow.ChainGenerator{ - BlockCount: 1, - Config: pow.Defaults, - }, - }, - // Importer - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 0, - ChainGenerator: &pow.ChainGenerator{ - BlockCount: 1, - Config: pow.Defaults, - }, - }, - }, - AltairForkEpoch: common.Big1, - BellatrixForkEpoch: common.Big2, - Eth1Consensus: el.ExecutionPreChain{}, - SafeSlotsToImportOptimistically: safeSlotsToImportOptimistically, - }) - - testnet := tn.StartTestnet(ctx, t, env, config) - defer testnet.Stop() - - var ( - builder = testnet.BeaconClients()[0] - importer = testnet.BeaconClients()[1] - importerProxy = testnet.Proxies().Running()[1] - ) - - importerResponseMocker := payload_spoof.NewEngineResponseMocker( - &api.PayloadStatusV1{ - // By default we respond SYNCING to any payload - Status: Syncing, - LatestValidHash: nil, - }, - ) - importerResponseMocker.AddCallbacksToProxy(importerProxy) - - // Wait until the builder creates the first block with an execution payload - execPayloadCtx, cancel := testnet.Spec().SlotTimeoutContext( - ctx, - SlotsUntilMerge(ctx, testnet, config), - ) - defer cancel() - _, err := testnet.WaitForExecutionPayload(execPayloadCtx) - if err != nil { - t.Fatalf("FAIL: Waiting for execution payload on builder: %v", err) - } - - // Fetch the first execution block which will be used for verification - builderExecutionBlock, err := builder.GetFirstExecutionBeaconBlock(ctx) - if err != nil || builderExecutionBlock == nil { - t.Fatalf("FAIL: Could not find first execution block") - } - execPayload, _ := builderExecutionBlock.ExecutionPayload() - transitionPayloadHash := execPayload.BlockHash - t.Logf( - "Builder Execution block found on slot %d, hash=%s", - builderExecutionBlock.Slot(), - transitionPayloadHash, - ) - - // We wait until the importer reaches optimistic sync - optimisticStateCtx, cancel := testnet.Spec().SlotTimeoutContext( - ctx, - beacon.Slot(safeSlotsToImportOptimistically.Uint64()+ - safeSlotsImportThreshold), - ) - defer cancel() - _, err = importer.WaitForOptimisticState( - optimisticStateCtx, - eth2api.BlockIdSlot(builderExecutionBlock.Slot()), - true, - ) - if err != nil { - t.Fatalf( - "FAIL: Timeout waiting for beacon node to become optimistic: %v", - err, - ) - } - - // We invalidate the chain after the transition payload - importerResponseMocker.AddResponse( - transitionPayloadHash, - &api.PayloadStatusV1{ - // Transition payload is valid - Status: Valid, - LatestValidHash: &transitionPayloadHash, - }, - ) - importerResponseMocker.SetDefaultResponse(&api.PayloadStatusV1{ - // The default is now that the execution client returns INVALID - // with latest valid hash equal to the transition payload - Status: Invalid, - LatestValidHash: &transitionPayloadHash, - }) - - // Wait until newPayload or forkchoiceUpdated are called at least once - ctxTimeout, cancel := context.WithTimeout(ctx, time.Second*20) - defer cancel() - select { - case <-importerResponseMocker.NewPayloadCalled: - case <-importerResponseMocker.ForkchoiceUpdatedCalled: - case <-ctxTimeout.Done(): - t.Fatalf( - "FAIL: Timeout waiting for beacon node to send engine directive: %v", - err, - ) - } - - // Wait a couple of slots here to make sure syncing does not produce a false positive - <-testnet.Spec().SlotsTimeout(5) - - // Query the beacon chain head of the importer node, - // it should point to transition payload block. - block, err := importer.GetFirstExecutionBeaconBlock(ctx) - if err != nil || block == nil { - t.Fatalf("FAIL: Block not found: %v", err) - } - payload, _ := block.ExecutionPayload() - if common.BytesToHash(payload.BlockHash[:]) != transitionPayloadHash { - t.Fatalf( - "FAIL: Latest payload in the importer is not the transition payload: %v", - common.BytesToHash(payload.BlockHash[:]), - ) - } -} - -func ReOrgSyncWithChainHavingInvalidTerminalBlock( - t *hivesim.T, - env *tn.Environment, - n clients.NodeDefinition, -) { - var ( - safeSlotsToImportOptimistically = big.NewInt(8) - ctx = context.Background() - ) - if clientSafeSlots, ok := SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY_CLIENT_OVERRIDE[n.ConsensusClient]; ok { - safeSlotsToImportOptimistically = clientSafeSlots - } - - // We are going to produce two PoW chains for three different clients - // EL_A: - EL_A := &pow.ChainGenerator{ // TD = 0x40000 - BlockCount: 2, - Config: pow.Defaults, - } - // EL_B: - EL_B := &pow.ChainGenerator{ // TD = 0x40000 - BlockCount: 2, - Config: pow.Defaults, - } - - // Network is partitioned from the start, execution client subnets A and B will never be able to communicate with - // each other. - config := getClientConfig(n).Join(&tn.Config{ - NodeDefinitions: clients.NodeDefinitions{ - // Builder 1 - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 10, - ChainGenerator: EL_A, - ExecutionSubnet: "A", - }, - // Importer 1 - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 0, - ChainGenerator: EL_A, - ExecutionSubnet: "A", - }, - // Builder 2 - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 10, - ChainGenerator: EL_B, - ExecutionSubnet: "B", - }, - // Importer 2 - clients.NodeDefinition{ - ExecutionClient: n.ExecutionClient, - ConsensusClient: n.ConsensusClient, - ValidatorShares: 0, - ChainGenerator: EL_B, - ExecutionSubnet: "B", - }, - }, - Eth1Consensus: el.ExecutionPreChain{}, - TerminalTotalDifficulty: big.NewInt(0x40000), - SafeSlotsToImportOptimistically: safeSlotsToImportOptimistically, - }) - - testnet := tn.StartTestnet(ctx, t, env, config) - defer testnet.Stop() - - // One pair of clients will produce the first execution payload, to which the other pair won't be able to sync, - // because they are not interconnected. - // Therefore only one client pair will end up in optimistic sync mode. - type BuilderImporterInfo struct { - Builder *node.Node - Importer *node.Node - ChainGenerator *pow.ChainGenerator - } - builderImporterPairs := []BuilderImporterInfo{ - { - Builder: testnet.Nodes[0], - Importer: testnet.Nodes[1], - ChainGenerator: EL_A, - }, - { - Builder: testnet.Nodes[2], - Importer: testnet.Nodes[3], - ChainGenerator: EL_B, - }, - } - optimisticPairChan := make(chan *BuilderImporterInfo) - for i, p := range builderImporterPairs { - p := p - // Only one pair will reach optimistic sync - go func(i int, p *BuilderImporterInfo) { - optimisticStateCtx, cancel := testnet.Spec().SlotTimeoutContext( - ctx, - SlotsUntilMerge(ctx, testnet, config)+ - beacon.Slot(safeSlotsToImportOptimistically.Uint64()+4), - ) - defer cancel() - _, err := p.Builder.BeaconClient.WaitForOptimisticState( - optimisticStateCtx, - eth2api.BlockHead, - true, - ) - if err != nil { - return - } - t.Logf("INFO: Detected optimistic sync on pair %d", i) - select { - case optimisticPairChan <- p: - default: - } - }(i, &p) - } - - var optimisticPair *BuilderImporterInfo - select { - case optimisticPair = <-optimisticPairChan: - case <-testnet.Spec().SlotsTimeout(SlotsUntilMerge(ctx, testnet, config) + - beacon.Slot(safeSlotsToImportOptimistically.Uint64()+4)): - t.Fatalf("FAIL: Timeout waiting for pair to become optimistic") - } - - t.Logf( - "INFO: Reached optimistic sync on nodes %d + %d", - optimisticPair.Builder.Index, - optimisticPair.Importer.Index, - ) - - // After the client pair reaches optimistic sync, invalidate the execution payload to trigger a - responseMocker := payload_spoof.NewEngineResponseMocker( - &api.PayloadStatusV1{ - Status: Invalid, - LatestValidHash: &(common.Hash{}), - }, - ) - // Every payload generated by this same pair is not invalidated - responseMocker.AddGetPayloadPassthroughToProxy( - optimisticPair.Builder.ExecutionClient.Proxy(), - ) - // The original head of the PoW chain needs to passthrough too - responseMocker.AddPassthrough( - optimisticPair.ChainGenerator.Head().Hash(), - true, - ) - // Add the callbacks to the optimistic sync pair - responseMocker.AddCallbacksToProxy( - optimisticPair.Builder.ExecutionClient.Proxy(), - ) - responseMocker.AddCallbacksToProxy( - optimisticPair.Importer.ExecutionClient.Proxy(), - ) - - // Wait until the optimistic builder creates its first block with an execution payload. - // At this point the builder is no longer optimistic - execPayloadCtx, cancel := testnet.Spec().SlotTimeoutContext( - ctx, - 12, - ) - defer cancel() - _, err := optimisticPair.Builder.BeaconClient.WaitForExecutionPayload( - execPayloadCtx) - if err != nil { - if err := debug.PrintAllTestnetBeaconBlocks(ctx, t, testnet.BeaconClients().Running()); err != nil { - t.Logf("FAIL: Error while printing all blocks: %v", err) - } - t.Fatalf( - "FAIL: Waiting for execution payload on optimistic builder: %v", - err, - ) - } - - // Wait until the optimistic importer fetches the first execution payload - // from the optimistic builder - execPayloadCtx, cancel = testnet.Spec().SlotTimeoutContext( - ctx, - 12, - ) - defer cancel() - _, err = optimisticPair.Importer.BeaconClient.WaitForExecutionPayload( - execPayloadCtx) - if err != nil { - // Print all heads for debugging - if err := debug.PrintAllTestnetBeaconBlocks(ctx, t, testnet.BeaconClients().Running()); err != nil { - t.Logf("FAIL: Error while printing all blocks: %v", err) - } - t.Fatalf( - "FAIL: Waiting for execution payload on optimistic importer: %v", - err, - ) - } - - // Verify the heads match - optimisticClients := exec_client.ExecutionClients{ - optimisticPair.Builder.ExecutionClient, - optimisticPair.Importer.ExecutionClient, - } - if match, err := optimisticClients.CheckHeads(t, ctx); err != nil { - t.Fatalf("FAIL: Error getting head of optimistic clients: %v", err) - } else if !match { - // Print all heads for debugging - if err := debug.PrintAllTestnetBeaconBlocks(ctx, t, testnet.BeaconClients().Running()); err != nil { - t.Logf("FAIL: Error while printing all blocks: %v", err) - } - t.Fatalf("FAIL: Heads of the optimistic clients don't match") - } - - // Verify heads of the two client pairs are different - forkedClients := exec_client.ExecutionClients{ - testnet.ExecutionClients().Running()[0], - testnet.ExecutionClients().Running()[2], - } - if match, err := forkedClients.CheckHeads(t, ctx); err != nil { - t.Fatalf("FAIL: Error getting head of clients: %v", err) - } else if match { - // Print all heads for debugging - if err := debug.PrintAllTestnetBeaconBlocks(ctx, t, testnet.BeaconClients().Running()); err != nil { - t.Logf("FAIL: Error while printing all blocks: %v", err) - } - t.Fatalf("FAIL: Heads of the clients match") - } - time.Sleep( - time.Duration(testnet.Spec().SECONDS_PER_SLOT) * time.Second * 6, - ) - if err := debug.PrintAllTestnetBeaconBlocks(ctx, t, testnet.BeaconClients().Running()); err != nil { - t.Fatalf("PrintAllTestnetBeaconBlocks failed: %v", err) - } -} - func NoViableHeadDueToOptimisticSync( t *hivesim.T, env *tn.Environment, @@ -2381,7 +1691,7 @@ func NoViableHeadDueToOptimisticSync( safeSlotsToImportOptimistically = clientSafeSlots } - config := getClientConfig(n).Join(&tn.Config{ + cfg := getClientConfig(n).Join(&tn.Config{ NodeDefinitions: clients.NodeDefinitions{ // Builder 1 clients.NodeDefinition{ @@ -2406,15 +1716,19 @@ func NoViableHeadDueToOptimisticSync( DisableStartup: true, }, }, - AltairForkEpoch: common.Big1, - BellatrixForkEpoch: big.NewInt(4), // Slot 128 + ForkConfig: &config.ForkConfig{ + AltairForkEpoch: common.Big1, + BellatrixForkEpoch: big.NewInt(4), // Slot 128 + }, Eth1Consensus: el.ExecutionEthashConsensus{ MiningNodes: 2, }, - SafeSlotsToImportOptimistically: safeSlotsToImportOptimistically, + ConsensusConfig: &cl.ConsensusConfig{ + SafeSlotsToImportOptimistically: safeSlotsToImportOptimistically, + }, }) - testnet := tn.StartTestnet(ctx, t, env, config) + testnet := tn.StartTestnet(ctx, t, env, cfg) defer testnet.Stop() var ( @@ -2552,7 +1866,7 @@ forloop: } // Sleep a few seconds so the invalid payload is incorporated into the chain - time.Sleep(time.Duration(config.SlotTime.Int64()/2) * time.Second) + time.Sleep(time.Duration(cfg.SlotTime.Int64()/2) * time.Second) // We need to check that the latestValidHash Block is indeed optimistic // First look for the block on the builder diff --git a/simulators/eth2/go.work b/simulators/eth2/go.work index e7295a1dba..ff54be7f8e 100644 --- a/simulators/eth2/go.work +++ b/simulators/eth2/go.work @@ -1,7 +1,8 @@ -go 1.18 +go 1.20 use ( ./common + ./dencun ./engine ./testnet ./withdrawals diff --git a/simulators/eth2/go.work.sum b/simulators/eth2/go.work.sum index a5d4d9c1f7..2bcad12d77 100644 --- a/simulators/eth2/go.work.sum +++ b/simulators/eth2/go.work.sum @@ -38,6 +38,7 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= @@ -55,6 +56,7 @@ github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935 github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= @@ -91,9 +93,10 @@ github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/aclements/go-gg v0.0.0-20170118225347-6dbb4e4fefb0/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794/go.mod h1:7e+I0LQFUI9AXWxOfsQROs9xPhoJtbsyWcjJqDd4KPY= @@ -113,6 +116,7 @@ github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHG github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= @@ -133,6 +137,8 @@ github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngE github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= @@ -147,7 +153,9 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0Bsq github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -155,6 +163,9 @@ github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOo github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= +github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= @@ -170,12 +181,13 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/cockroachdb/pebble v0.0.0-20230821143352-55b44ac08de8/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= -github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.9.1-0.20230105202408-1a7a29904a7c/go.mod h1:CkbdF9hbRidRJYMRzmfX8TMOr95I2pYXRHF18MzRrvA= github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= @@ -221,6 +233,7 @@ github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cE github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= @@ -229,6 +242,7 @@ github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1S github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= +github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= @@ -238,6 +252,7 @@ github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= @@ -260,11 +275,14 @@ github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNR github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= @@ -282,6 +300,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma 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.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-ipa v0.0.0-20220523130400-f11357ae11c7/go.mod h1:gFnFS95y8HstDP6P9pPwzrxOOC5TRDkwbM+ao15ChAI= +github.com/crate-crypto/go-ipa v0.0.0-20230601170251-1830d0757c80/go.mod h1:gzbVz57IDJgQ9rLQwfSk696JGWof8ftznEL9GoAv3NI= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -293,14 +312,20 @@ github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/ github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= +github.com/deepmap/oapi-codegen v1.12.4/go.mod h1:3lgHGMu6myQ2vqbbTXH2H1o4eXFTGnFiDaOaKKl5yas= github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= @@ -316,6 +341,7 @@ github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE= github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= @@ -330,11 +356,13 @@ github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7/go.mod h1:yRkwfj0CBpOGre+TwBsqPV0IH0Pk73e4PXJOeNDboGs= +github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= @@ -342,12 +370,15 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/ethereum/c-kzg-4844 v0.3.0/go.mod h1:WI2Nd82DMZAAZI1wV2neKGost9EKjvbpQR9OqE5Qqa8= +github.com/ethereum/go-ethereum v1.12.2-0.20230815181937-e0b119884c6a/go.mod h1:1JU/x0JQLBndZb2727eswdCzyF2rFd8SZUj7HDQuVqc= github.com/ethereum/hive/hiveproxy v0.0.0-20230313101845-c7dfe88c8138 h1:Y74Ksk90DLCMWnpOfOEWRLxVjsf/67vY+hX5kWu9UY0= github.com/ethereum/hive/hiveproxy v0.0.0-20230313101845-c7dfe88c8138/go.mod h1:1LWNU6/EYsIOXZGa2KdklD1ET77gLTeEyhq+WTZ+37o= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanw/esbuild v0.17.6/go.mod h1:iINY06rn799hi48UqEnaQvVfZWe6W9bET78LbvN8VWk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= +github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= @@ -363,8 +394,10 @@ github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILD github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-verkle v0.0.0-20220902153445-097bd83b7732/go.mod h1:o/XfIXWi4/GqbQirfRm5uTbXMG5NpqxkxblnbZ+QM9I= +github.com/gballet/go-verkle v0.0.0-20230607174250-df487255f46b/go.mod h1:CDncRYVRSDqwakm282WEkjfaAj1hxU/v5RXxk5nXOiI= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.107.0/go.mod h1:9Dhr+FasATJZjS4iOLvB0hkaxgYdulrNYm2e9epLWOo= github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -373,6 +406,7 @@ github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= @@ -396,7 +430,11 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -409,14 +447,20 @@ github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= @@ -467,9 +511,11 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -482,9 +528,9 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/safehtml v0.0.2/go.mod h1:L4KWwDsUJdECRAEpZoBn3O64bQaywRscowZjJAzjHnU= -github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -496,13 +542,16 @@ github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/graph-gophers/graphql-go v1.4.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= 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= @@ -510,17 +559,22 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb github.com/guptarohit/asciigraph v0.5.5/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= @@ -529,19 +583,25 @@ github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= +github.com/influxdata/influxdb-client-go/v2 v2.12.1/go.mod h1:YteV91FiQxRdccyJ2cHvj2f/5sq4y4Njqu1fQzsQCOU= +github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= +github.com/invopop/yaml v0.1.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q= +github.com/iris-contrib/httpexpect/v2 v2.12.1/go.mod h1:7+RB6W5oNClX7PTwJgJnsQP3ZuUUYB3u61KCqeSgZ88= github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= +github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5UybogqrXvJTBE= github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1nSAbGFqGVzn6Jyl1R/iCcBUHN4g+gW1u9CoBTrb9E= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -558,19 +618,22 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= github.com/kataras/golog v0.1.8/go.mod h1:rGPAin4hYROfk1qT9wZP6VY2rsb4zzc37QpdPjdkqVw= github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= github.com/kataras/iris/v12 v12.2.0/go.mod h1:BLzBpEunc41GbE68OUaQlqX4jzi791mx5HU04uPb90Y= +github.com/kataras/jwt v0.1.8/go.mod h1:Q5j2IkcIHnfwy+oNY3TVWuEBJNw0ADgCcXK9CaZwV4o= github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw= +github.com/kataras/neffos v0.0.21/go.mod h1:FeGka8lu8cjD2H+0OpBvW8c6xXawy3fj5VX6xcIJ1Fg= github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= @@ -598,20 +661,33 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/echo/v4 v4.9.1/go.mod h1:Pop5HLc+xoc4qhTZ1ip6C0RtP7Z+4VzRLWZZFKqbbjo= github.com/labstack/echo/v4 v4.10.0/go.mod h1:S/T/5fy/GigaXnHTkh0ZGe4LpkkQysvRjFMSUTkDRNQ= github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= +github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ= +github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= +github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc= +github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY= +github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/marioevz/eth-clients v0.0.0-20230823175101-fdc85382188d/go.mod h1:LZb4HPhmomFs5C3Rxj57X83yp3qzQHgB/xDAsvrFmDw= +github.com/marioevz/zrnt v0.26.2-0.20230828220330-2bd62bc28aed h1:sXvMvzGd7Q28BcDrE8vxaN0iAYwo8y+qL6dDIx/kg78= +github.com/marioevz/zrnt v0.26.2-0.20230828220330-2bd62bc28aed/go.mod h1:qcdX9CXFeVNCQK/q0nswpzhd+31RHMk2Ax/2lMsJ4Jw= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/matryer/moq v0.2.7/go.mod h1:kITsx543GOENm48TUAQyJ9+SAvFSr7iGQXPoth/VUBk= github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -631,15 +707,18 @@ github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182aff github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= +github.com/mediocregopher/radix/v3 v3.8.1/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microcosm-cc/bluemonday v1.0.23/go.mod h1:mN70sk7UkkF8TUr2IGBpNN0jAgStuPzlK76QuruE/z4= github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= -github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs= github.com/moby/sys/mount v0.3.3/go.mod h1:PBaEorSNTLG5t/+4EgukEQVlAvVEc6ZjTySwKdqp5K0= github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= @@ -647,12 +726,15 @@ github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2J github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= @@ -664,8 +746,11 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= +github.com/nats-io/nats.go v1.23.0/go.mod h1:ki/Scsa23edbh8IRZbCuNXR9TDcbvfaSijKtaqQgw+Q= github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -713,15 +798,19 @@ github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqi github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/peterh/liner v1.2.2/go.mod h1:xFwJyiKIXJZUKItq5dGHZSTBRAuG/CpeNpWLyiNRNwI= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= @@ -730,7 +819,9 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -768,6 +859,7 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48/go.mod h1:4pWaT30XoEx1j8KNJf3TV+E3mQkaufn7mf+jRNb/Fuk= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -780,6 +872,7 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= @@ -789,6 +882,7 @@ github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfP github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.23.2/go.mod h1:gv0aQw33GLo3pG8SiWKiQrbDzbRY1K80RyZJ7V4Th1M= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -810,6 +904,7 @@ github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bd github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -847,15 +942,19 @@ github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI= +github.com/urfave/cli/v2 v2.24.1/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= @@ -878,6 +977,7 @@ go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -886,9 +986,20 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= +go.opentelemetry.io/otel v1.6.3/go.mod h1:7BgNga5fNlF/iZjG06hM3yofffp0ofKCDwSXx1GC4dI= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= +go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= +go.opentelemetry.io/otel/trace v1.6.3/go.mod h1:GNJQusJlUgZl9/TQBPKU/Y/ty+0iVB5fjhKeJGZPGFs= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -905,8 +1016,13 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -945,8 +1061,12 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKG golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -985,10 +1105,13 @@ golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1003,6 +1126,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/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.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1074,18 +1198,29 @@ golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +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/text v0.0.0-20170915032832-14c0d48ead0c/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.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +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/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= @@ -1093,7 +1228,10 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1142,9 +1280,12 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= @@ -1257,9 +1398,12 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= @@ -1268,42 +1412,51 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= +k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= +k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= +k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= +k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= +k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= +k8s.io/cri-api v0.25.0/go.mod h1:J1rAyQkSJ2Q6I+aBMOVgg2/cbbebso6FNa0UagiR0kc= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHcE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/simulators/eth2/testnet/scenarios.go b/simulators/eth2/testnet/scenarios.go index 2c30f1ca98..f7b741bab2 100644 --- a/simulators/eth2/testnet/scenarios.go +++ b/simulators/eth2/testnet/scenarios.go @@ -6,6 +6,8 @@ import ( "github.com/ethereum/hive/hivesim" "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/common/config" + consensus_config "github.com/ethereum/hive/simulators/eth2/common/config/consensus" el "github.com/ethereum/hive/simulators/eth2/common/config/execution" tn "github.com/ethereum/hive/simulators/eth2/common/testnet" ) @@ -18,11 +20,15 @@ var ( func Phase0Testnet(t *hivesim.T, env *tn.Environment, n clients.NodeDefinition) { config := tn.Config{ - AltairForkEpoch: big.NewInt(10), - BellatrixForkEpoch: big.NewInt(20), - ValidatorCount: VALIDATOR_COUNT, - SlotTime: SLOT_TIME, - TerminalTotalDifficulty: TERMINAL_TOTAL_DIFFICULTY, + ForkConfig: &config.ForkConfig{ + AltairForkEpoch: big.NewInt(10), + BellatrixForkEpoch: big.NewInt(20), + TerminalTotalDifficulty: TERMINAL_TOTAL_DIFFICULTY, + }, + ConsensusConfig: &consensus_config.ConsensusConfig{ + ValidatorCount: VALIDATOR_COUNT, + SlotTime: SLOT_TIME, + }, NodeDefinitions: []clients.NodeDefinition{ n, n, @@ -50,11 +56,15 @@ func Phase0Testnet(t *hivesim.T, env *tn.Environment, n clients.NodeDefinition) func TransitionTestnet(t *hivesim.T, env *tn.Environment, n clients.NodeDefinition) { config := tn.Config{ - AltairForkEpoch: big.NewInt(0), - BellatrixForkEpoch: big.NewInt(0), - ValidatorCount: VALIDATOR_COUNT, - SlotTime: SLOT_TIME, - TerminalTotalDifficulty: TERMINAL_TOTAL_DIFFICULTY, + ForkConfig: &config.ForkConfig{ + AltairForkEpoch: big.NewInt(0), + BellatrixForkEpoch: big.NewInt(0), + TerminalTotalDifficulty: TERMINAL_TOTAL_DIFFICULTY, + }, + ConsensusConfig: &consensus_config.ConsensusConfig{ + ValidatorCount: VALIDATOR_COUNT, + SlotTime: SLOT_TIME, + }, NodeDefinitions: []clients.NodeDefinition{ n, n, diff --git a/simulators/eth2/withdrawals/go.mod b/simulators/eth2/withdrawals/go.mod index a010a2151b..a1de3a64a8 100644 --- a/simulators/eth2/withdrawals/go.mod +++ b/simulators/eth2/withdrawals/go.mod @@ -3,9 +3,12 @@ module github.com/ethereum/hive/simulators/eth2/withdrawals go 1.18 require ( - github.com/ethereum/go-ethereum v1.11.5 + github.com/ethereum/go-ethereum v1.13.1 github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6 + github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76 + github.com/marioevz/mock-builder v0.0.0-20230501225822-df434a88e375 + github.com/pkg/errors v0.9.1 github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d github.com/protolambda/zrnt v0.30.0 github.com/protolambda/ztyp v0.2.2 @@ -17,7 +20,7 @@ require ( github.com/ferranbt/fastssz v0.1.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-stack/stack v1.8.1 // indirect - github.com/holiman/uint256 v1.2.2 // indirect + github.com/holiman/uint256 v1.2.3 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -25,23 +28,29 @@ require ( github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect - github.com/tklauser/go-sysconf v0.3.11 // indirect - golang.org/x/sys v0.7.0 // indirect - golang.org/x/text v0.8.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) require ( github.com/DataDog/zstd v1.5.2 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.5.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20230404150825-93eff0a72e22 // indirect + github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 // indirect github.com/cockroachdb/redact v1.1.3 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.10.0 // indirect + github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect github.com/deckarep/golang-set/v2 v2.3.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/ethereum/c-kzg-4844 v0.3.1 // indirect github.com/fjl/memsize v0.0.1 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/getsentry/sentry-go v0.20.0 // indirect @@ -62,10 +71,8 @@ require ( github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect - github.com/marioevz/eth-clients v0.0.0-20230501225027-135b7d52b617 // indirect - github.com/marioevz/mock-builder v0.0.0-20230501225822-df434a88e375 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/pkg/errors v0.9.1 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/prometheus/client_golang v1.14.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect @@ -75,16 +82,20 @@ require ( github.com/rivo/uniseg v0.4.4 // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect - github.com/tklauser/numcpus v0.6.0 // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect - github.com/urfave/cli/v2 v2.23.7 // indirect github.com/wealdtech/go-bytesutil v1.2.0 // indirect github.com/wealdtech/go-eth2-types/v2 v2.8.0 // indirect github.com/wealdtech/go-eth2-util v1.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - golang.org/x/crypto v0.7.0 // indirect - golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect - golang.org/x/time v0.3.0 // indirect + golang.org/x/crypto v0.12.0 // indirect + golang.org/x/exp v0.0.0-20230810033253-352e893a4cad // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/tools v0.9.1 // indirect google.golang.org/protobuf v1.30.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + rsc.io/tmplfunc v0.0.3 // indirect ) + +replace github.com/protolambda/eth2api => github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033 diff --git a/simulators/eth2/withdrawals/go.sum b/simulators/eth2/withdrawals/go.sum index 3de52d5233..04549da703 100644 --- a/simulators/eth2/withdrawals/go.sum +++ b/simulators/eth2/withdrawals/go.sum @@ -1,85 +1,106 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/VictoriaMetrics/fastcache v1.12.0 h1:vnVi/y9yKDcD9akmc4NqAoqgQhJrOwUF+j9LTgn4QDE= -github.com/VictoriaMetrics/fastcache v1.12.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8= github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.5.0 h1:NpE8frKRLGHIcEzkR+gZhiioW1+WbYV6fKwD6ZIpQT8= +github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= -github.com/cockroachdb/pebble v0.0.0-20230404150825-93eff0a72e22 h1:2Nwgec/S3FkQW3r807JL9+D2xb2XU9zbRCotvQWLIfY= -github.com/cockroachdb/pebble v0.0.0-20230404150825-93eff0a72e22/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM/P5NAw0e2Rf1FGvzDau1h54MKvx8G7w= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.10.0 h1:zRh22SR7o4K35SoNqouS9J/TKHTyU2QWaj5ldehyXtA= +github.com/consensys/gnark-crypto v0.10.0/go.mod h1:Iq/P3HHl0ElSjsg2E1gsMwhAyxnxoKK5nVyZKd+/KhU= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= +github.com/crate-crypto/go-kzg-4844 v0.3.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= -github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/deckarep/golang-set/v2 v2.3.0 h1:qs18EKUfHm2X9fA50Mr/M5hccg2tNnVqsiBImnyDs0g= github.com/deckarep/golang-set/v2 v2.3.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum/go-ethereum v1.11.4 h1:KG81SnUHXWk8LJB3mBcHg/E2yLvXoiPmRMCIRxgx3cE= -github.com/ethereum/go-ethereum v1.11.4/go.mod h1:it7x0DWnTDMfVFdXcU6Ti4KEFQynLHVRarcSlPr0HBo= -github.com/ethereum/go-ethereum v1.11.5 h1:3M1uan+LAUvdn+7wCEFrcMM4LJTeuxDrPTg/f31a5QQ= -github.com/ethereum/go-ethereum v1.11.5/go.mod h1:it7x0DWnTDMfVFdXcU6Ti4KEFQynLHVRarcSlPr0HBo= +github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= +github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.1 h1:UF2FaUKPIy5jeZk3X06ait3y2Q4wI+vJ1l7+UARp+60= +github.com/ethereum/go-ethereum v1.13.1/go.mod h1:xHQKzwkHSl0gnSjZK1mWa06XEdm9685AHqhRknOzqGQ= github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e h1:3g9cqRqpbZ92tSlGL4PfFoq435axKw6HiZ1Gz3fOkfk= github.com/ethereum/hive v0.0.0-20230313141339-8e3200bfc09e/go.mod h1:PlpDuxHg6q1jU0K8Ouf+RXlHguignJ7k8Eyukc9RCPQ= github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6 h1:LcSUNGwQuJyR/gdPcsif57yKX+3MyhpoAuChzR8k6Yk= github.com/ethereum/hive/simulators/eth2/common v0.0.0-20230316220410-1364352c32a6/go.mod h1:FX4oxNyTNw/P+TUWrb7vva7o/rFI0pHO7OYdtG6EtN4= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/ferranbt/fastssz v0.1.2 h1:Dky6dXlngF6Qjc+EfDipAkE83N5I5DE68bY6O0VLNPk= github.com/ferranbt/fastssz v0.1.2/go.mod h1:X5UPrE2u1UJjxHA8X54u04SBwdAQjG2sFtWs39YxyWs= @@ -93,8 +114,6 @@ github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= -github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ= github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= @@ -102,9 +121,11 @@ github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/ github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -120,8 +141,6 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU= -github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -138,12 +157,10 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -157,7 +174,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -167,33 +186,38 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/hashicorp/go-bexpr v0.1.11 h1:6DqdA/KBjurGby9yTY0bmkathya0lfwF2SeuubCI7dY= github.com/hashicorp/go-bexpr v0.1.11/go.mod h1:f03lAo0duBlDIUMGCuad8oLcgejw4m7U+N8T+6Kz1AE= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/herumi/bls-eth-go-binary v1.28.1 h1:fcIZ48y5EE9973k05XjE8+P3YiQgjZz4JI/YabAm8KA= github.com/herumi/bls-eth-go-binary v1.28.1/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.1 h1:XRtyuda/zw2l+Bq/38n5XUoEF72aSOu/77Thd9pPp2o= -github.com/holiman/uint256 v1.2.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.2 h1:TXKcSGc2WaxPD2+bmzAsVthL4+pEN0YwXcL5qED83vk= -github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= +github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= @@ -209,14 +233,10 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= -github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.2 h1:xPMwiykqNK9VK0NYC3+jTMYv9I6Vl3YdjZgPZKG3zO0= -github.com/klauspost/cpuid/v2 v2.2.2/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -228,11 +248,18 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/marioevz/eth-clients v0.0.0-20230501225027-135b7d52b617 h1:sk4stg95D93cfiIIYI+XPRhXZQ91QGIPOHNDZjmpXms= -github.com/marioevz/eth-clients v0.0.0-20230501225027-135b7d52b617/go.mod h1:LnzXFKyMw3wF/3eaTfPhKiwkWkZJXokOWcUI02Ioi4s= +github.com/marioevz/eth-clients v0.0.0-20230925172743-e379ee1ecd6e h1:uBr6Gn5jBHnyoS34HV4GOiYjuua6J/F2FST0T6MO89E= +github.com/marioevz/eth-clients v0.0.0-20230925172743-e379ee1ecd6e/go.mod h1:YVrdn57Q3rAzm3wus4T9tg1vMPca4csVbzorPhkGCW0= +github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76 h1:fj+aeR3YLmSRUWjOGgTxNMdvzm72J5JbKGKosNO/jkE= +github.com/marioevz/eth-clients v0.0.0-20230925201418-d5fbddd99b76/go.mod h1:YVrdn57Q3rAzm3wus4T9tg1vMPca4csVbzorPhkGCW0= +github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033 h1:sn57n+lbJrLS8FKYs08W7TEzraTGOCQGrSC4hni6rYw= +github.com/marioevz/eth2api v0.0.0-20230922201437-72bd1301e033/go.mod h1:hcwWCT4sF1X7KsMZ535MvDZVk5M20Uyj+x2LARZjQsM= github.com/marioevz/mock-builder v0.0.0-20230501225822-df434a88e375 h1:44F0CrAc81Nzsr/4BhkeKebbrHERHdCjO6jXS9VAE/0= github.com/marioevz/mock-builder v0.0.0-20230501225822-df434a88e375/go.mod h1:FQIXEFViaQkOqKrqLC91JgqG+6YEvqMVh9D7g6PmFUg= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -244,7 +271,7 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -263,11 +290,18 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= github.com/mitchellh/pointerstructure v1.2.1/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= @@ -289,7 +323,9 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -303,8 +339,6 @@ github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQg github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= -github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= @@ -312,8 +346,6 @@ github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB github.com/protolambda/bls12-381-util v0.0.0-20210720105258-a772f2aac13e/go.mod h1:MPZvj2Pr0N8/dXyTPS5REeg2sdLG7t8DRzC1rLv925w= github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 h1:cZC+usqsYgHtlBaGulVnZ1hfKAi8iWtujBnRLQE698c= github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7/go.mod h1:IToEjHuttnUzwZI5KBSM/LOOW3qLbbrHOEfp3SbECGY= -github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d h1:35qD9zgP3ApfcHsETuJyX3G5kVOgFgAx6kaRGzPC+FY= -github.com/protolambda/eth2api v0.0.0-20230316214135-5f8afbd6d05d/go.mod h1:4WbGGB4Bv17hKsiytlJY4IQDNpRS234DvFvIBNLnd60= github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564 h1:yCXGkFjrZ8EggxW+Y7ueRZesNcBk0avLU0mVU/I2KtU= github.com/protolambda/go-keystorev4 v0.0.0-20211007151826-f20444f6d564/go.mod h1:Xda3KO8+DMyWaTr+LwUUpVRTB5SdFzoKu0ivXNI6p1s= github.com/protolambda/messagediff v1.4.0/go.mod h1:LboJp0EwIbJsePYpzh5Op/9G1/4mIztMRYzzwR0dR2M= @@ -325,17 +357,14 @@ github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48 h github.com/rauljordan/engine-proxy v0.0.0-20230316220057-4c80c36c4c3a h1:ZIfMLprHVdo2vs3WcSqSDEyz2ZsSzDhGeOyxh8VQThA= github.com/rauljordan/engine-proxy v0.0.0-20230316220057-4c80c36c4c3a/go.mod h1:9OVXfWYnIV+wj1/SqfdREmE5mzN/OANAgdOJRtFtvpo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= @@ -363,21 +392,22 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= -github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= -github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli/v2 v2.23.7 h1:YHDQ46s3VghFHFf1DdF+Sh7H4RqhcM+t0TmZRJx4oJY= -github.com/urfave/cli/v2 v2.23.7/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= @@ -413,15 +443,11 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20230206171751-46f607a40771 h1:xP7rWLUr1e1n2xkK5YB4LI0hPEy3LJC6Wk+D4pGlOJg= -golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230810033253-352e893a4cad h1:g0bG7Z4uG+OgH2QDODnjp6ggkk1bJDsINcuWmJN1iJU= +golang.org/x/exp v0.0.0-20230810033253-352e893a4cad/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -430,6 +456,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -451,7 +479,7 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -461,7 +489,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -492,16 +521,14 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -510,13 +537,10 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -531,6 +555,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= 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= @@ -560,14 +586,13 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= @@ -575,7 +600,7 @@ gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/R gopkg.in/inconshreveable/log15.v2 v2.0.0-20200109203555-b30bc20e4fd1 h1:iiHuQZCNgYPmFQxd3BBN/Nc5+dAwzZuq5y40s20oQw0= gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -591,3 +616,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/simulators/eth2/withdrawals/helper.go b/simulators/eth2/withdrawals/helper.go index c246ab0583..e8525a6d59 100644 --- a/simulators/eth2/withdrawals/helper.go +++ b/simulators/eth2/withdrawals/helper.go @@ -239,7 +239,7 @@ func (v *Validator) VerifyWithdrawnBalance( ) // Then get the balance - execPayload, err := headBlockState.ExecutionPayload() + execPayload, _, _, err := headBlockState.ExecutionPayload() if err != nil { return false, errors.Wrap( err, @@ -297,7 +297,7 @@ func (v *Validator) VerifyWithdrawnBalance( continue } - execPayload, err := blockState.ExecutionPayload() + execPayload, _, _, err := blockState.ExecutionPayload() if err != nil { return false, errors.Wrapf(err, "failed to get execution payload, slot %d", slot) } diff --git a/simulators/eth2/withdrawals/scenarios.go b/simulators/eth2/withdrawals/scenarios.go index 9465d26b95..827317f0fe 100644 --- a/simulators/eth2/withdrawals/scenarios.go +++ b/simulators/eth2/withdrawals/scenarios.go @@ -472,7 +472,14 @@ func (ts BuilderWithdrawalsTestSpec) Execute( } ec := n.ExecutionClient includedPayloads := 0 - for _, p := range b.GetBuiltPayloads() { + for _, b := range b.GetBuiltPayloads() { + p, _, err := b.FullPayload().ToExecutableData() + if err != nil { + t.Fatalf( + "FAIL: error getting executable data from payload: %v", + err, + ) + } if p.Withdrawals != nil { if h, err := ec.HeaderByNumber(ctx, big.NewInt(int64(p.Number))); err != nil { t.Fatalf( @@ -509,7 +516,14 @@ func (ts BuilderWithdrawalsTestSpec) Execute( if len(modifiedPayloads) == 0 { t.Fatalf("FAIL: No payloads were modified by builder %d", i) } - for _, p := range modifiedPayloads { + for _, modP := range modifiedPayloads { + p, _, err := modP.ToExecutableData() + if err != nil { + t.Fatalf( + "FAIL: error getting executable data from payload: %v", + err, + ) + } for _, ec := range testnet.ExecutionClients().Running() { b, err := ec.BlockByNumber( ctx, diff --git a/simulators/eth2/withdrawals/specs.go b/simulators/eth2/withdrawals/specs.go index 8d39f93ae2..9faeb226dd 100644 --- a/simulators/eth2/withdrawals/specs.go +++ b/simulators/eth2/withdrawals/specs.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/hive/simulators/eth2/common/clients" + "github.com/ethereum/hive/simulators/eth2/common/config" cl "github.com/ethereum/hive/simulators/eth2/common/config/consensus" el "github.com/ethereum/hive/simulators/eth2/common/config/execution" "github.com/ethereum/hive/simulators/eth2/common/testnet" @@ -52,12 +53,16 @@ var ( // Default config used for all tests unless a client specific config exists DEFAULT_CONFIG = &testnet.Config{ - ValidatorCount: big.NewInt(int64(DEFAULT_VALIDATOR_COUNT)), - TerminalTotalDifficulty: common.Big0, - AltairForkEpoch: common.Big0, - BellatrixForkEpoch: common.Big0, - CapellaForkEpoch: common.Big1, - Eth1Consensus: &el.ExecutionPostMergeGenesis{}, + ForkConfig: &config.ForkConfig{ + TerminalTotalDifficulty: common.Big0, + AltairForkEpoch: common.Big0, + BellatrixForkEpoch: common.Big0, + CapellaForkEpoch: common.Big1, + }, + ConsensusConfig: &cl.ConsensusConfig{ + ValidatorCount: big.NewInt(int64(DEFAULT_VALIDATOR_COUNT)), + }, + Eth1Consensus: &el.ExecutionPostMergeGenesis{}, } // This is the account that sends vault funding transactions.