diff --git a/configs/cancun.yaml b/configs/cancun.yaml deleted file mode 100644 index 7a063f3c83..0000000000 --- a/configs/cancun.yaml +++ /dev/null @@ -1,84 +0,0 @@ -- client: besu - nametag: cancun-git - dockerfile: git - build_args: - github: hyperledger/besu - tag: main - -- client: erigon - nametag: cancun-git - dockerfile: git - build_args: - github: ledgerwatch/erigon - tag: devel - -- client: ethereumjs - nametag: cancun-git - build_args: - github: ethereumjs/ethereumjs-monorepo - tag: master - -- client: go-ethereum - nametag: cancun-git - dockerfile: git - -- client: nethermind - nametag: cancun-git - dockerfile: git - build_args: - github: NethermindEth/nethermind - tag: master - -- client: reth - nametag: cancun-git - dockerfile: git - build_args: - github: paradigmxyz/reth - tag: main - -- client: teku-bn - nametag: deneb - build_args: - baseimage: ethpandaops/teku - tag: master -- client: teku-vc - nametag: deneb - build_args: - baseimage: ethpandaops/teku - tag: master - -- client: prysm-bn - nametag: deneb - build_args: - baseimage: ethpandaops/prysm - tag: develop-linux-amd64 -- client: prysm-vc - nametag: deneb - build_args: - baseimage: ethpandaops/prysm-validator - tag: develop-linux-amd64 - -- client: lighthouse-bn - nametag: deneb - build_args: - baseimage: ethpandaops/lighthouse - tag: unstable-linux-amd64 -- client: lighthouse-vc - nametag: deneb - build_args: - baseimage: ethpandaops/lighthouse - tag: unstable-linux-amd64 - -- client: lodestar-bn - nametag: deneb - build_args: - baseimage: ethpandaops/lodestar - tag: unstable-linux-amd64 -- client: lodestar-vc - nametag: deneb - build_args: - baseimage: ethpandaops/lodestar - tag: unstable-linux-amd64 - -- client: nimbus-bn -- client: nimbus-vc diff --git a/simulators/ethereum/eest/consume-engine/Dockerfile b/simulators/ethereum/eest/consume-engine/Dockerfile new file mode 100644 index 0000000000..77855b6ede --- /dev/null +++ b/simulators/ethereum/eest/consume-engine/Dockerfile @@ -0,0 +1,16 @@ +# Builds and runs the EEST (execution-spec-tests) consume engine simulator +FROM python:3.10-slim + +## Install dependencies +RUN apt-get update && \ + apt-get install -y git wget tar && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +## Clone and install EEST +RUN git clone https://github.com/ethereum/execution-spec-tests.git --branch main --single-branch --depth 1 +WORKDIR execution-spec-tests +RUN pip install uv && uv sync + +## Define `consume engine` entry point using the local fixtures +ENTRYPOINT ["uv", "run", "consume", "engine", "-v", "--input", "latest-stable-release"] \ No newline at end of file diff --git a/simulators/ethereum/eest/consume-rlp/Dockerfile b/simulators/ethereum/eest/consume-rlp/Dockerfile new file mode 100644 index 0000000000..31a31fb85c --- /dev/null +++ b/simulators/ethereum/eest/consume-rlp/Dockerfile @@ -0,0 +1,16 @@ +# Builds and runs the EEST (execution-spec-tests) consume rlp simulator +FROM python:3.10-slim + +## Install dependencies +RUN apt-get update && \ + apt-get install -y git wget tar && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +## Clone and install EEST +RUN git clone https://github.com/ethereum/execution-spec-tests.git --branch main --single-branch --depth 1 +WORKDIR execution-spec-tests +RUN pip install uv && uv sync + +## Define `consume rlp` entry point using the local fixtures +ENTRYPOINT ["uv", "run", "consume", "rlp", "-v", "--input", "latest-stable-release"] diff --git a/simulators/ethereum/pyspec/Dockerfile b/simulators/ethereum/pyspec/Dockerfile deleted file mode 100644 index d42e0070b2..0000000000 --- a/simulators/ethereum/pyspec/Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -# ---------------------------------------------------------------# -# This simulation runs the Ethereum python execution-spec-tests. # -# ---------------------------------------------------------------# - -# 1) Create pyspec builder container. -FROM golang:1.22-alpine as builder -RUN apk add --update git ca-certificates gcc musl-dev linux-headers - -# Build the pyspec simulator executable. -ADD . /source -WORKDIR /source/pyspec -RUN go build -v . - -# 2) Create the simulator container. -FROM alpine:latest as simulator -RUN apk add --update wget -ADD ./pyspec /pyspec -WORKDIR /pyspec -COPY --from=builder /source/pyspec/pyspec . - -# To run locally generated fixtures, comment the following RUN lines and -# uncomment the ADD line. -# Download the latest fixture release. -RUN wget https://github.com/ethereum/execution-spec-tests/releases/latest/download/fixtures_develop.tar.gz -RUN tar -xzvf fixtures_develop.tar.gz -RUN mv fixtures/blockchain_tests_engine /fixtures - -# ADD ./pyspec/fixtures /fixtures - -# Point to executable and test fixtures. -ENV TESTPATH /fixtures -ENTRYPOINT ["./pyspec"] diff --git a/simulators/ethereum/pyspec/README.md b/simulators/ethereum/pyspec/README.md deleted file mode 100644 index 9310c3991e..0000000000 --- a/simulators/ethereum/pyspec/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# Hive Pyspec - -This is a `simulator` for running the python [execution-spec-tests](https://github.com/ethereum/execution-spec-tests) within [`hive`](https://github.com/ethereum/hive), based on the `consensus` simulator. It differs mostly by using the `Engine API` to feed blocks into clients. - -The simulator is only valid for post `Merge` forks (>= `Merge`). - -It can be run from the `hive` root directory simply: -```sh -./hive --client go-ethereum --sim ethereum/pyspec -``` - -The `pyspec simulator` uses the latest test fixtures from the -most recent execution-spec-tests [release](https://github.com/ethereum/execution-spec-tests/releases). - - -### Running Specific Test Fixtures - -By default all test fixtures will run. To run a specific test or set of test fixtures the regex `--sim-limit /` option can be used. - -This can utilised in `pyspec` for running tests exclusive to a specific fork. The pattern must match at least one hive simulation test name within the `pyspec` suite. - -Test names are of the type `_` omitting `fixtures` from the path. For example, the fixture test `000_push0_key_sstore_shanghai` within `push0.json` will have a hive test name of: `eips_eip3855_000_push0_key_sstore_shanghai`. - -1) To run only this test, an example pattern could be: - - `./hive --sim ethereum/pyspec --sim.limit /0_push0_key_sstore` - -2) To run every withdrawals test in the suite: - - `./hive --sim ethereum/pyspec --sim.limit /withdrawals` - -3) To run only tests exclusive to the `Shanghai` fork: - - `./hive --sim ethereum/pyspec --sim.limit /shanghai` - -For a better understand of how to utilise the regex pattern please browse the folder structure of the latest fixture [release](https://github.com/ethereum/execution-spec-tests/releases). - - -### Excluding Test Fixtures - -To exclude a file or set of files, partial paths can be added to `excludePaths := []string{"example/"}` within \ -the first code section of `runner.go/LoadFixtureTests()`. By default we exclude all files within the path `fixtures/example/example/*`. - diff --git a/simulators/ethereum/pyspec/forks.go b/simulators/ethereum/pyspec/forks.go deleted file mode 100644 index 422bd3444b..0000000000 --- a/simulators/ethereum/pyspec/forks.go +++ /dev/null @@ -1,75 +0,0 @@ -package main - -var envForks = map[string]map[string]int{ - "Merge": { - "HIVE_FORK_HOMESTEAD": 0, - "HIVE_FORK_TANGERINE": 0, - "HIVE_FORK_SPURIOUS": 0, - "HIVE_FORK_BYZANTIUM": 0, - "HIVE_FORK_CONSTANTINOPLE": 0, - "HIVE_FORK_PETERSBURG": 0, - "HIVE_FORK_ISTANBUL": 0, - "HIVE_FORK_BERLIN": 0, - "HIVE_FORK_LONDON": 0, - "HIVE_FORK_MERGE": 0, - "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, - }, - "Shanghai": { - "HIVE_FORK_HOMESTEAD": 0, - "HIVE_FORK_TANGERINE": 0, - "HIVE_FORK_SPURIOUS": 0, - "HIVE_FORK_BYZANTIUM": 0, - "HIVE_FORK_CONSTANTINOPLE": 0, - "HIVE_FORK_PETERSBURG": 0, - "HIVE_FORK_ISTANBUL": 0, - "HIVE_FORK_BERLIN": 0, - "HIVE_FORK_LONDON": 0, - "HIVE_FORK_MERGE": 0, - "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, - "HIVE_SHANGHAI_TIMESTAMP": 0, - }, - "MergeToShanghaiAtTime15k": { - "HIVE_FORK_HOMESTEAD": 0, - "HIVE_FORK_TANGERINE": 0, - "HIVE_FORK_SPURIOUS": 0, - "HIVE_FORK_BYZANTIUM": 0, - "HIVE_FORK_CONSTANTINOPLE": 0, - "HIVE_FORK_PETERSBURG": 0, - "HIVE_FORK_ISTANBUL": 0, - "HIVE_FORK_BERLIN": 0, - "HIVE_FORK_LONDON": 0, - "HIVE_FORK_MERGE": 0, - "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, - "HIVE_SHANGHAI_TIMESTAMP": 15000, - }, - "Cancun": { - "HIVE_FORK_HOMESTEAD": 0, - "HIVE_FORK_TANGERINE": 0, - "HIVE_FORK_SPURIOUS": 0, - "HIVE_FORK_BYZANTIUM": 0, - "HIVE_FORK_CONSTANTINOPLE": 0, - "HIVE_FORK_PETERSBURG": 0, - "HIVE_FORK_ISTANBUL": 0, - "HIVE_FORK_BERLIN": 0, - "HIVE_FORK_LONDON": 0, - "HIVE_FORK_MERGE": 0, - "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, - "HIVE_SHANGHAI_TIMESTAMP": 0, - "HIVE_CANCUN_TIMESTAMP": 0, - }, - "ShanghaiToCancunAtTime15k": { - "HIVE_FORK_HOMESTEAD": 0, - "HIVE_FORK_TANGERINE": 0, - "HIVE_FORK_SPURIOUS": 0, - "HIVE_FORK_BYZANTIUM": 0, - "HIVE_FORK_CONSTANTINOPLE": 0, - "HIVE_FORK_PETERSBURG": 0, - "HIVE_FORK_ISTANBUL": 0, - "HIVE_FORK_BERLIN": 0, - "HIVE_FORK_LONDON": 0, - "HIVE_FORK_MERGE": 0, - "HIVE_TERMINAL_TOTAL_DIFFICULTY": 0, - "HIVE_SHANGHAI_TIMESTAMP": 0, - "HIVE_CANCUN_TIMESTAMP": 15000, - }, -} diff --git a/simulators/ethereum/pyspec/gen_gb.go b/simulators/ethereum/pyspec/gen_gb.go deleted file mode 100644 index 09b9e4bea6..0000000000 --- a/simulators/ethereum/pyspec/gen_gb.go +++ /dev/null @@ -1,100 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package main - -import ( - "encoding/json" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/core/types" -) - -var _ = (*genesisBlockUnmarshaling)(nil) - -// MarshalJSON marshals as JSON. -func (g genesisBlock) MarshalJSON() ([]byte, error) { - type genesisBlock struct { - Coinbase common.Address `json:"coinbase"` - Difficulty *math.HexOrDecimal256 `json:"difficulty"` - GasLimit math.HexOrDecimal64 `json:"gasLimit"` - Timestamp *math.HexOrDecimal256 `json:"timestamp"` - ExtraData hexutil.Bytes `json:"extraData"` - MixHash common.Hash `json:"mixHash"` - Nonce types.BlockNonce `json:"nonce"` - BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas"` - BlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed"` - ExcessBlobGas *math.HexOrDecimal64 `json:"excessBlobGas"` - Hash common.Hash `json:"hash"` - } - var enc genesisBlock - enc.Coinbase = g.Coinbase - enc.Difficulty = (*math.HexOrDecimal256)(g.Difficulty) - enc.GasLimit = math.HexOrDecimal64(g.GasLimit) - enc.Timestamp = (*math.HexOrDecimal256)(g.Timestamp) - enc.ExtraData = g.ExtraData - enc.MixHash = g.MixHash - enc.Nonce = g.Nonce - enc.BaseFee = (*math.HexOrDecimal256)(g.BaseFee) - enc.BlobGasUsed = (*math.HexOrDecimal64)(g.BlobGasUsed) - enc.ExcessBlobGas = (*math.HexOrDecimal64)(g.ExcessBlobGas) - enc.Hash = g.Hash - return json.Marshal(&enc) -} - -// UnmarshalJSON unmarshals from JSON. -func (g *genesisBlock) UnmarshalJSON(input []byte) error { - type genesisBlock struct { - Coinbase *common.Address `json:"coinbase"` - Difficulty *math.HexOrDecimal256 `json:"difficulty"` - GasLimit *math.HexOrDecimal64 `json:"gasLimit"` - Timestamp *math.HexOrDecimal256 `json:"timestamp"` - ExtraData *hexutil.Bytes `json:"extraData"` - MixHash *common.Hash `json:"mixHash"` - Nonce *types.BlockNonce `json:"nonce"` - BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas"` - BlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed"` - ExcessBlobGas *math.HexOrDecimal64 `json:"excessBlobGas"` - Hash *common.Hash `json:"hash"` - } - var dec genesisBlock - if err := json.Unmarshal(input, &dec); err != nil { - return err - } - if dec.Coinbase != nil { - g.Coinbase = *dec.Coinbase - } - if dec.Difficulty != nil { - g.Difficulty = (*big.Int)(dec.Difficulty) - } - if dec.GasLimit != nil { - g.GasLimit = uint64(*dec.GasLimit) - } - if dec.Timestamp != nil { - g.Timestamp = (*big.Int)(dec.Timestamp) - } - if dec.ExtraData != nil { - g.ExtraData = *dec.ExtraData - } - if dec.MixHash != nil { - g.MixHash = *dec.MixHash - } - if dec.Nonce != nil { - g.Nonce = *dec.Nonce - } - if dec.BaseFee != nil { - g.BaseFee = (*big.Int)(dec.BaseFee) - } - if dec.BlobGasUsed != nil { - g.BlobGasUsed = (*uint64)(dec.BlobGasUsed) - } - if dec.ExcessBlobGas != nil { - g.ExcessBlobGas = (*uint64)(dec.ExcessBlobGas) - } - if dec.Hash != nil { - g.Hash = *dec.Hash - } - return nil -} diff --git a/simulators/ethereum/pyspec/go.mod b/simulators/ethereum/pyspec/go.mod deleted file mode 100644 index 8351fe3885..0000000000 --- a/simulators/ethereum/pyspec/go.mod +++ /dev/null @@ -1,79 +0,0 @@ -module github.com/ethereum/hive/simulators/ethereum/pyspec - -go 1.21 - -toolchain go1.22.1 - -require ( - github.com/ethereum/go-ethereum v1.14.7 - github.com/ethereum/hive v0.0.0-20240715150147-c87a99dccfce - github.com/ethereum/hive/simulators/ethereum/engine v0.0.0-20230919054339-322945164a97 -) - -require ( - github.com/DataDog/zstd v1.5.2 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/VictoriaMetrics/fastcache v1.12.2 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.10.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cockroachdb/errors v1.11.3 // indirect - github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v1.1.1 // indirect - github.com/cockroachdb/redact v1.1.5 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/consensys/bavard v0.1.13 // indirect - github.com/consensys/gnark-crypto v0.12.1 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect - github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect - github.com/deckarep/golang-set/v2 v2.6.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect - github.com/ethereum/c-kzg-4844 v1.0.0 // indirect - github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 // indirect - github.com/getsentry/sentry-go v0.27.0 // indirect - github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-stack/stack v1.8.1 // 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.4 // indirect - github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/gorilla/websocket v1.5.0 // indirect - github.com/holiman/bloomfilter/v2 v2.0.3 // indirect - github.com/holiman/uint256 v1.3.0 // indirect - github.com/klauspost/compress v1.16.0 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/lithammer/dedent v1.1.0 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/mmcloughlin/addchain v0.4.0 // indirect - github.com/olekukonko/tablewriter v0.0.5 // 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.39.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect - github.com/rivo/uniseg v0.4.3 // indirect - github.com/rogpeppe/go-internal v1.9.0 // indirect - github.com/shirou/gopsutil v3.21.11+incompatible // 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.12 // indirect - github.com/tklauser/numcpus v0.6.1 // indirect - github.com/yusufpapurcu/wmi v1.2.2 // indirect - golang.org/x/crypto v0.22.0 // indirect - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.14.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect - gopkg.in/inconshreveable/log15.v2 v2.0.0-20200109203555-b30bc20e4fd1 // indirect - rsc.io/tmplfunc v0.0.3 // indirect -) - -replace github.com/ethereum/hive/simulators/ethereum/engine => ../engine diff --git a/simulators/ethereum/pyspec/go.sum b/simulators/ethereum/pyspec/go.sum deleted file mode 100644 index 36604a1877..0000000000 --- a/simulators/ethereum/pyspec/go.sum +++ /dev/null @@ -1,333 +0,0 @@ -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= -github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= -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/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -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.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= -github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -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/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.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/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= -github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= -github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= -github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= -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 v1.1.1 h1:XnKU22oiCLy2Xn8vp1re67cXg4SAasg/WDt1NtcRFaw= -github.com/cockroachdb/pebble v1.1.1/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= -github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= -github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -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.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= -github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= -github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= -github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -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.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= -github.com/deckarep/golang-set/v2 v2.6.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/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= -github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.14.7 h1:EHpv3dE8evQmpVEQ/Ne2ahB06n2mQptdwqaMNhAT29g= -github.com/ethereum/go-ethereum v1.14.7/go.mod h1:Mq0biU2jbdmKSZoqOj29017ygFrMnB5/Rifwp980W4o= -github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 h1:KrE8I4reeVvf7C1tm8elRjj4BdscTYzz/WAbYyf/JI4= -github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0/go.mod h1:D9AJLVXSyZQXJQVk8oh1EwjISE+sJTn2duYIZC0dy3w= -github.com/ethereum/hive v0.0.0-20240715150147-c87a99dccfce h1:wgH9mh3TFSd+LFSsXO6RdTEO3niapJRywO1Xl3/IoIE= -github.com/ethereum/hive v0.0.0-20240715150147-c87a99dccfce/go.mod h1:ghNXZW+/WQClcyiwZpbTzUCyxwql7YeMacYd44v+BJE= -github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= -github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -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/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -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.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= -github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= -github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -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/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -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/protobuf v1.2.0/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.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.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -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/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.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -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.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= -github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -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-bexpr v0.1.11/go.mod h1:f03lAo0duBlDIUMGCuad8oLcgejw4m7U+N8T+6Kz1AE= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= -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.3.0 h1:4wdcm/tnd0xXdu7iS3ruNvxkWwrb4aeBQv19ayYn8F4= -github.com/holiman/uint256 v1.3.0/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= -github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -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/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.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= -github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -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/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/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY= -github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -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/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/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/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.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/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.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.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/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -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/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/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -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/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= -github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -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/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= -github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -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-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= -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/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/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-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-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -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.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/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-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.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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-20190412213103-97732733099d/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-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-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-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/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-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-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -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.3/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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -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/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/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.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -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.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20200109203555-b30bc20e4fd1 h1:iiHuQZCNgYPmFQxd3BBN/Nc5+dAwzZuq5y40s20oQw0= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20200109203555-b30bc20e4fd1/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= -gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= -gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -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.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/simulators/ethereum/pyspec/hive_context.txt b/simulators/ethereum/pyspec/hive_context.txt deleted file mode 100644 index a96aa0ea9d..0000000000 --- a/simulators/ethereum/pyspec/hive_context.txt +++ /dev/null @@ -1 +0,0 @@ -.. \ No newline at end of file diff --git a/simulators/ethereum/pyspec/main.go b/simulators/ethereum/pyspec/main.go deleted file mode 100644 index 72924f4e9c..0000000000 --- a/simulators/ethereum/pyspec/main.go +++ /dev/null @@ -1,129 +0,0 @@ -// ============================================================================== // -// Pyspec Hive Simulator: Ported/Altered directly from the Consensus Simulator. // -// -> https://github.com/ethereum/hive/tree/master/simulators/ethereum/consensus // -// ============================================================================== // - -package main - -import ( - "fmt" - "os" - "path/filepath" - "regexp" - "strconv" - "strings" - "sync" - - "github.com/ethereum/hive/hivesim" -) - -func main() { - suite := hivesim.Suite{ - Name: "pyspec", - Description: "The pyspec test suite runs every fixture from " + - "the execution-spec-tests repo (https://github.com/ethereum/execution-spec-tests) where the fork >= Merge. " + - "For each test clients are first fed the fixture genesis data followed by engine new payloads specific to the test.", - } - suite.Add(hivesim.TestSpec{ - Name: "pytest_fixture_runner", - Description: "This is a meta-test. It loads the test fixture files and " + - "launches the actual client tests. Any errors in test files will be reported " + - "through this test.", - Run: fixtureRunner, - AlwaysRun: true, - }) - hivesim.MustRunSuite(hivesim.New(), suite) -} - -// fixtureRunner loads the pyspec test files and spawns the client tests. -func fixtureRunner(t *hivesim.T) { - - // retrieve clients available for testing - clientTypes, err := t.Sim.ClientTypes() - if err != nil { - t.Fatal("can't get client types:", err) - } - - // use 16 for parallelism if env var is invalid - parallelism := 16 - if val, ok := os.LookupEnv("HIVE_PARALLELISM"); ok { - if p, err := strconv.Atoi(val); err != nil { - t.Logf("warning: invalid HIVE_PARALLELISM value %q", val) - } else { - parallelism = p - } - } - t.Log("parallelism set to:", parallelism) - - // find and set the fixtures directory as root - testPath, isset := os.LookupEnv("TESTPATH") - if !isset { - t.Fatal("$TESTPATH not set") - } - fileRoot := fmt.Sprintf("%s/", testPath) - t.Log("file root directory:", fileRoot) - - // to log all failing tests at the end of sim - failedTests := make(map[string]error) - - // spawn `parallelism` workers to run fixtures against clients - var wg sync.WaitGroup - var testCh = make(chan *TestCase) - wg.Add(parallelism) - for i := 0; i < parallelism; i++ { - go func() { - defer wg.Done() - for test := range testCh { - t.Run(hivesim.TestSpec{ - Name: test.Name, - Description: ("Test Link: " + - repoLink(test.FilePath)), - Run: test.run, - AlwaysRun: false, - }) - if test.FailedErr != nil { - failedTests[test.ClientType+"/"+test.Name] = test.FailedErr - } - } - }() - } - - _, testPattern := t.Sim.TestPattern() - re := regexp.MustCompile(testPattern) - - // deliver and run test cases against each client - loadFixtureTests(t, fileRoot, re, func(tc TestCase) { - for _, client := range clientTypes { - if !client.HasRole("eth1") { - continue - } - tc := tc // shallow copy - tc.ClientType = client.Name - testCh <- &tc - } - }) - close(testCh) - - // wait for all workers to finish - wg.Wait() - - // log all failed tests - if len(failedTests) > 0 { - t.Log("failing tests:") - for name, err := range failedTests { - t.Logf("%v: %v", name, err) - } - } -} - -// repoLink coverts a pyspec test path into a github repository link. -func repoLink(testPath string) string { - // Example: Converts '/fixtures/cancun/eip4844_blobs/blob_txs/invalid_normal_gas.json' - // into 'tests/cancun/eip4844_blobs/test_blob_txs.py', and appends onto main branch repo link. - filePath := strings.Replace(testPath, "/fixtures", "tests", -1) - fileDir := filepath.Dir(filePath) - fileBase := filepath.Base(fileDir) - fileName := filepath.Join(filepath.Dir(fileDir), "test_"+fileBase+".py") - repoLink := fmt.Sprintf("https://github.com/ethereum/execution-spec-tests/tree/main/%v", fileName) - return repoLink -} diff --git a/simulators/ethereum/pyspec/runner.go b/simulators/ethereum/pyspec/runner.go deleted file mode 100644 index 41e2946e63..0000000000 --- a/simulators/ethereum/pyspec/runner.go +++ /dev/null @@ -1,217 +0,0 @@ -package main - -import ( - "context" - "fmt" - "io/fs" - "math/big" - "path/filepath" - "regexp" - "strings" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/hive/hivesim" - "github.com/ethereum/hive/simulators/ethereum/engine/client/hive_rpc" - "github.com/ethereum/hive/simulators/ethereum/engine/globals" -) - -var ( - SyncTimeout = 10 * time.Second -) - -// loadFixtureTests extracts tests from fixture.json files in a given directory, -// creates a testcase for each test, and passes the testcase struct to fn. -func loadFixtureTests(t *hivesim.T, root string, re *regexp.Regexp, fn func(TestCase)) { - filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error { - // check file is actually a fixture - if err != nil { - t.Logf("unable to walk path: %s", err) - return err - } - if d.IsDir() || !strings.HasSuffix(d.Name(), ".json") { - return nil - } - excludePaths := []string{"example/"} // modify for tests to exclude - if strings.Contains(path, strings.Join(excludePaths, "")) { - return nil - } - - // extract fixture.json tests (multiple forks) into fixture structs - var fixtureTests map[string]*Fixture - if err := common.LoadJSON(path, &fixtureTests); err != nil { - t.Logf("invalid test file: %v, unable to load json", err) - return nil - } - - // create testcase structure from fixtureTests - for name, fixture := range fixtureTests { - // skip networks post merge or not supported - network := fixture.Fork - if _, exist := envForks[network]; !exist { - continue - } - // define testcase (tc) struct with initial fields - tc := TestCase{ - Name: path[10:len(path)-5] + "/" + name, - FilePath: path, - Fixture: fixture, - } - // match test case name against regex if provided - if !re.MatchString(tc.Name) { - continue - } - // feed tc to single worker within fixtureRunner() - fn(tc) - } - return nil - }) -} - -// run executes a testcase against the client, called within a test channel from -// fixtureRunner, all testcase payloads are sent and executed using the EngineAPI. for -// verification all fixture nonce, balance and storage values are checked against the -// response received from the lastest block. -func (tc *TestCase) run(t *hivesim.T) { - start := time.Now() - tc.FailCallback = t - - t.Log("setting variables required for starting client.") - engineStarter := hive_rpc.HiveRPCEngineStarter{ - ClientType: tc.ClientType, - EnginePort: globals.EnginePortHTTP, - EthPort: globals.EthPortHTTP, - JWTSecret: globals.DefaultJwtTokenSecretBytes, - } - ctx := context.Background() - env := hivesim.Params{ - "HIVE_FORK_DAO_VOTE": "1", - "HIVE_CHAIN_ID": "1", - "HIVE_NODETYPE": "full", - } - tc.updateEnv(env) - t0 := time.Now() - // If test is already failed, don't bother spinning up a client - if tc.FailedErr != nil { - t.Fatalf("test failed early: %v", tc.FailedErr) - } - // start client (also creates an engine RPC client internally) - t.Log("starting client with Engine API.") - engineClient, err := engineStarter.StartClient(t, ctx, tc.Genesis(), env, nil) - if err != nil { - tc.Fatalf("can't start client with Engine API: %v", err) - } - // verify genesis hash matches that of the fixture - genesisBlock, err := engineClient.BlockByNumber(ctx, big.NewInt(0)) - if err != nil { - tc.Fatalf("unable to get genesis block: %v", err) - } - if genesisBlock.Hash() != tc.GenesisBlock.Hash { - tc.Fatalf("genesis hash mismatch") - } - t1 := time.Now() - - // send payloads and check response - var latestValidPayload *EngineNewPayload - for _, engineNewPayload := range tc.EngineNewPayloads { - engineNewPayload := engineNewPayload - if syncing, err := engineNewPayload.ExecuteValidate( - ctx, - engineClient, - ); err != nil { - tc.Fatalf("Payload validation error: %v", err) - } else if syncing { - tc.Fatalf("Payload validation failed (not synced)") - } - // update latest valid block hash if payload status is VALID - if engineNewPayload.Valid() { - latestValidPayload = engineNewPayload - } - } - t2 := time.Now() - - // only update head of beacon chain if valid response occurred - if latestValidPayload != nil { - if syncing, err := latestValidPayload.ForkchoiceValidate(ctx, engineClient, tc.EngineFcuVersion); err != nil { - tc.Fatalf("unable to update head of chain: %v", err) - } else if syncing { - tc.Fatalf("forkchoice update failed (not synced)") - } - } - t3 := time.Now() - if err := tc.ValidatePost(ctx, engineClient); err != nil { - tc.Fatalf("unable to verify post allocation in test %s: %v", tc.Name, err) - } - - if tc.SyncPayload != nil { - // First send a new payload to the already running client - if syncing, err := tc.SyncPayload.ExecuteValidate( - ctx, - engineClient, - ); err != nil { - tc.Fatalf("unable to send sync payload: %v", err) - } else if syncing { - tc.Fatalf("sync payload failed (not synced)") - } - // Send a forkchoice update to the already running client to head to the sync payload - if syncing, err := tc.SyncPayload.ForkchoiceValidate(ctx, engineClient, tc.EngineFcuVersion); err != nil { - tc.Fatalf("unable to update head of chain: %v", err) - } else if syncing { - tc.Fatalf("forkchoice update failed (not synced)") - } - - // Spawn a second client connected to the already running client, - // send the forkchoice updated with the head hash and wait for sync. - // Then verify the post allocation. - // Add a timeout too. - secondEngineClient, err := engineStarter.StartClient(t, ctx, tc.Genesis(), env, nil, engineClient) - if err != nil { - tc.Fatalf("can't start client with Engine API: %v", err) - } - - if _, err := tc.SyncPayload.ExecuteValidate( - ctx, - secondEngineClient, - ); err != nil { - tc.Fatalf("unable to send sync payload: %v", err) - } // Don't check syncing here because some clients do sync immediately - - timeoutCtx, cancel := context.WithTimeout(ctx, SyncTimeout) - defer cancel() - for { - if syncing, err := tc.SyncPayload.ForkchoiceValidate(ctx, secondEngineClient, tc.EngineFcuVersion); err != nil { - tc.Fatalf("unable to update head of chain: %v", err) - } else if !syncing { - break - } - select { - case <-timeoutCtx.Done(): - tc.Fatalf("timeout waiting for sync of secondary client") - default: - } - time.Sleep(time.Second) - } - } - - end := time.Now() - - if false { // TODO: Activate only on --sim.loglevel > 3 - t.Logf(`test timing: - setupClientEnv %v - startClient %v - sendAllPayloads %v - setNewHeadOfChain %v - checkStorageValues %v - totalTestTime %v`, t0.Sub(start), t1.Sub(t0), t2.Sub(t1), t3.Sub(t2), end.Sub(t3), end.Sub(start)) - - } -} - -// updateEnv updates the environment variables against the fork rules -// defined in envForks, for the network specified in the testcase fixture. -func (tc *TestCase) updateEnv(env hivesim.Params) { - forkRules := envForks[tc.Fork] - for k, v := range forkRules { - env[k] = fmt.Sprintf("%d", v) - } -} diff --git a/simulators/ethereum/pyspec/types.go b/simulators/ethereum/pyspec/types.go deleted file mode 100644 index 1d763499c9..0000000000 --- a/simulators/ethereum/pyspec/types.go +++ /dev/null @@ -1,258 +0,0 @@ -package main - -import ( - "context" - "errors" - "fmt" - "math/big" - - api "github.com/ethereum/go-ethereum/beacon/engine" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/tests" - - "github.com/ethereum/hive/simulators/ethereum/engine/client" - typ "github.com/ethereum/hive/simulators/ethereum/engine/types" -) - -type Fail interface { - Fatalf(format string, args ...interface{}) -} - -type TestCase struct { - // test meta data - Name string - FilePath string - ClientType string - FailedErr error - // test fixture data - *Fixture - FailCallback Fail -} - -func (tc *TestCase) Fatalf(format string, args ...interface{}) { - tc.FailedErr = fmt.Errorf(format, args...) - tc.FailCallback.Fatalf(format, args...) -} - -type Fixture struct { - Fork string `json:"network"` - GenesisBlock genesisBlock `json:"genesisBlockHeader"` - EngineNewPayloads []*EngineNewPayload `json:"engineNewPayloads"` - EngineFcuVersion int `json:"engineFcuVersion,string"` - Pre core.GenesisAlloc `json:"pre"` - PostAlloc core.GenesisAlloc `json:"postState"` - SyncPayload *EngineNewPayload `json:"syncPayload"` -} - -func (f *Fixture) Genesis() *core.Genesis { - return &core.Genesis{ - Config: tests.Forks[f.Fork], - Coinbase: f.GenesisBlock.Coinbase, - Difficulty: f.GenesisBlock.Difficulty, - GasLimit: f.GenesisBlock.GasLimit, - Timestamp: f.GenesisBlock.Timestamp.Uint64(), - ExtraData: f.GenesisBlock.ExtraData, - Mixhash: f.GenesisBlock.MixHash, - Nonce: f.GenesisBlock.Nonce.Uint64(), - BaseFee: f.GenesisBlock.BaseFee, - BlobGasUsed: f.GenesisBlock.BlobGasUsed, - ExcessBlobGas: f.GenesisBlock.ExcessBlobGas, - Alloc: f.Pre, - } -} - -func (f *Fixture) ValidatePost(ctx context.Context, engineClient client.EngineClient) error { - // check nonce, balance & storage of accounts in final block against fixture values - for address, account := range f.PostAlloc { - // get nonce & balance from last block (end of test execution) - gotNonce, errN := engineClient.NonceAt(ctx, address, nil) - gotBalance, errB := engineClient.BalanceAt(ctx, address, nil) - if errN != nil { - return fmt.Errorf("unable to call nonce from account: %v: %v", address, errN) - } else if errB != nil { - return fmt.Errorf("unable to call balance from account: %v: %v", address, errB) - } - // check final nonce & balance matches expected in fixture - if account.Nonce != gotNonce { - return fmt.Errorf(`nonce received from account %v doesn't match expected from fixture: - received from block: %v - expected in fixture: %v`, address, gotNonce, account.Nonce) - } - if account.Balance.Cmp(gotBalance) != 0 { - return fmt.Errorf(`balance received from account %v doesn't match expected from fixture: - received from block: %v - expected in fixture: %v`, address, gotBalance, account.Balance) - } - // check final storage - if len(account.Storage) > 0 { - // extract fixture storage keys - keys := make([]common.Hash, 0, len(account.Storage)) - for key := range account.Storage { - keys = append(keys, key) - } - // get storage values for account with keys: keys - gotStorage, errS := engineClient.StorageAtKeys(ctx, address, keys, nil) - if errS != nil { - return fmt.Errorf("unable to get storage values from account: %v: %v", address, errS) - } - // check values in storage match with fixture - for _, key := range keys { - if account.Storage[key] != *gotStorage[key] { - return fmt.Errorf(`storage received from account %v doesn't match expected from fixture: - received from block: %v - expected in fixture: %v`, address, gotStorage[key], account.Storage[key]) - } - } - } - } - return nil -} - -//go:generate go run github.com/fjl/gencodec -type genesisBlock -field-override genesisBlockUnmarshaling -out gen_gb.go -type genesisBlock struct { - Coinbase common.Address `json:"coinbase"` - Difficulty *big.Int `json:"difficulty"` - GasLimit uint64 `json:"gasLimit"` - Timestamp *big.Int `json:"timestamp"` - ExtraData []byte `json:"extraData"` - MixHash common.Hash `json:"mixHash"` - Nonce types.BlockNonce `json:"nonce"` - BaseFee *big.Int `json:"baseFeePerGas"` - BlobGasUsed *uint64 `json:"blobGasUsed"` - ExcessBlobGas *uint64 `json:"excessBlobGas"` - - Hash common.Hash `json:"hash"` -} - -type genesisBlockUnmarshaling struct { - Difficulty *math.HexOrDecimal256 `json:"difficulty"` - GasLimit math.HexOrDecimal64 `json:"gasLimit"` - Timestamp *math.HexOrDecimal256 `json:"timestamp"` - ExtraData hexutil.Bytes `json:"extraData"` - BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas"` - BlobGasUsed *math.HexOrDecimal64 `json:"dataGasUsed"` - ExcessBlobGas *math.HexOrDecimal64 `json:"excessDataGas"` -} - -type EngineNewPayload struct { - ExecutionPayload *api.ExecutableData `json:"executionPayload"` - BlobVersionedHashes []common.Hash `json:"expectedBlobVersionedHashes"` - ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot"` - Version math.HexOrDecimal64 `json:"version"` - ValidationError *string `json:"validationError"` - ErrorCode int `json:"errorCode,string"` -} - -func (p *EngineNewPayload) ExecutableData() (*typ.ExecutableData, error) { - executableData, err := typ.FromBeaconExecutableData(p.ExecutionPayload) - if err != nil { - return nil, errors.New("executionPayload param within engineNewPayload is invalid") - } - executableData.VersionedHashes = &p.BlobVersionedHashes - executableData.ParentBeaconBlockRoot = p.ParentBeaconBlockRoot - return &executableData, nil -} - -func (p *EngineNewPayload) Valid() bool { - return p.ErrorCode == 0 && p.ValidationError == nil -} - -func (p *EngineNewPayload) ExpectedStatus() string { - if p.ValidationError != nil { - return "INVALID" - } - return "VALID" -} - -func (p *EngineNewPayload) Execute(ctx context.Context, engineClient client.EngineClient) (api.PayloadStatusV1, rpc.Error) { - executableData, err := p.ExecutableData() - if err != nil { - panic(err) - } - status, err := engineClient.NewPayload( - ctx, - int(p.Version), - executableData, - ) - return status, parseError(err) -} - -func (p *EngineNewPayload) ExecuteValidate(ctx context.Context, engineClient client.EngineClient) (bool, error) { - plStatus, plErr := p.Execute(ctx, engineClient) - if err := p.ValidateRPCError(plErr); err != nil { - return false, err - } else if plErr != nil { - // Got an expected error and is already validated in ValidateRPCError - return false, nil - } - if plStatus.Status == "SYNCING" { - return true, nil - } - // Check payload status matches expected - if plStatus.Status != p.ExpectedStatus() { - return false, fmt.Errorf("payload status mismatch: got %s, want %s", plStatus.Status, p.ExpectedStatus()) - } - return false, nil -} - -func (p *EngineNewPayload) ForkchoiceValidate(ctx context.Context, engineClient client.EngineClient, fcuVersion int) (bool, error) { - response, err := engineClient.ForkchoiceUpdated(ctx, fcuVersion, &api.ForkchoiceStateV1{HeadBlockHash: p.ExecutionPayload.BlockHash}, nil) - if err != nil { - return false, err - } - if response.PayloadStatus.Status == "SYNCING" { - return true, nil - } - if response.PayloadStatus.Status != p.ExpectedStatus() { - return false, fmt.Errorf("forkchoice update status mismatch: got %s, want %s", response.PayloadStatus.Status, p.ExpectedStatus()) - } - return false, nil -} - -type HTTPErrorWithCode struct { - rpc.HTTPError -} - -func (e HTTPErrorWithCode) ErrorCode() int { - return e.StatusCode -} - -func parseError(plErr interface{}) rpc.Error { - if plErr == nil { - return nil - } - rpcErr, isRpcErr := plErr.(rpc.Error) - if isRpcErr { - return rpcErr - } - httpErr, isHttpErr := plErr.(rpc.HTTPError) - if isHttpErr { - return HTTPErrorWithCode{httpErr} - } - panic("unable to parse") -} - -// checks for RPC errors and compares error codes if expected. -func (p *EngineNewPayload) ValidateRPCError(rpcErr rpc.Error) error { - if rpcErr == nil && p.ErrorCode == 0 { - return nil - } - if rpcErr == nil && p.ErrorCode != 0 { - return fmt.Errorf("expected error code %d but received no error", p.ErrorCode) - } - if rpcErr != nil && p.ErrorCode == 0 { - return fmt.Errorf("expected no error code but received %d", rpcErr.ErrorCode()) - } - if rpcErr != nil && p.ErrorCode != 0 { - plErrCode := rpcErr.ErrorCode() - if plErrCode != p.ErrorCode { - return fmt.Errorf("error code mismatch: got: %d, want: %d", plErrCode, p.ErrorCode) - } - } - return nil -}