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.