Compare commits

..

1 Commits

Author SHA1 Message Date
e027e285e4 Update Geth to 1.13 2024-03-15 16:14:27 +08:00
93 changed files with 53 additions and 2078 deletions

View File

@ -1,21 +0,0 @@
name: Test
on:
pull_request:
branches: '*'
push:
branches:
- main
jobs:
test:
name: Run unit tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v3
with:
go-version-file: go.mod
check-latest: true
- name: Run unit tests
run: go test -v -p 1 ./...

View File

@ -1,4 +1,4 @@
package chains
package chaindata
import (
"errors"
@ -14,9 +14,7 @@ type Paths struct {
// List of names of chaindata fixtures accessible via ChainDataPaths
var FixtureChains = []string{
"premerge1",
"premerge2",
"postmerge1",
"small", "small2",
}
func IsFixture(chain string) bool {
@ -32,7 +30,7 @@ func IsFixture(chain string) bool {
// GetFixture returns the paths to the fixture chaindata for the given name. This copies the
// fixture data and returns paths to temp directories, due to the fact that Go modules are installed
// read-only and Leveldb/Pebble will attempt to create lock files when opening a DB.
// read-only and Leveldb will attempt to create lock files when opening a DB.
func GetFixture(chain string) (*Paths, error) {
if !IsFixture(chain) {
return nil, errors.New("no fixture named " + chain)
@ -43,25 +41,20 @@ func GetFixture(chain string) (*Paths, error) {
return nil, errors.New("could not get function source path")
}
chaindataPath := filepath.Join(filepath.Dir(thisPath), "data", chain, "geth", "chaindata")
chaindataPath := filepath.Join(filepath.Dir(thisPath), "_data", chain)
if _, err := os.Stat(chaindataPath); err != nil {
return nil, errors.New("cannot access chaindata at " + chaindataPath)
}
// Copy chaindata directory to a temporary directory
// Note that we assume the ancient path is a subdirectory
copyTo, err := os.MkdirTemp("", chain+"-chaindata-*")
if err != nil {
return nil, err
}
copyTo := filepath.Join(os.TempDir(), chain)
if err := copyDir(chaindataPath, copyTo); err != nil {
return nil, err
}
ancientCopy := filepath.Join(copyTo, "ancient")
return &Paths{
copyTo,
filepath.Join(copyTo, "ancient"),
}, nil
return &Paths{copyTo, ancientCopy}, nil
}
func copyDir(src, dest string) error {
@ -70,16 +63,22 @@ func copyDir(src, dest string) error {
return err
}
entries, err := os.ReadDir(src)
srcDir, err := os.Open(src)
if err != nil {
return err
}
defer srcDir.Close()
fileInfos, err := srcDir.Readdir(-1)
if err != nil {
return err
}
for _, entry := range entries {
srcPath := filepath.Join(src, entry.Name())
destPath := filepath.Join(dest, entry.Name())
for _, fileInfo := range fileInfos {
srcPath := filepath.Join(src, fileInfo.Name())
destPath := filepath.Join(dest, fileInfo.Name())
if entry.IsDir() {
if fileInfo.IsDir() {
if err := copyDir(srcPath, destPath); err != nil {
return err
}
@ -106,5 +105,8 @@ func copyFile(src, dest string) error {
defer destFile.Close()
_, err = io.Copy(destFile, srcFile)
return err
if err != nil {
return err
}
return nil
}

View File

@ -1,4 +1,4 @@
package chains_test
package chaindata_test
import (
"testing"
@ -6,18 +6,15 @@ import (
"github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/core/state"
"github.com/cerc-io/eth-testing/chains"
"github.com/cerc-io/eth-testing/chaindata"
)
func testReadChainData(t *testing.T, data *chains.Paths) {
edb, err := rawdb.Open(rawdb.OpenOptions{
Directory: data.ChainData,
AncientsDirectory: data.Ancient,
Namespace: t.Name(),
Cache: 1024,
Handles: 256,
ReadOnly: true,
})
func testReadChainData(t *testing.T, data *chaindata.Paths) {
kvdb, ldberr := rawdb.NewLevelDBDatabase(data.ChainData, 1024, 256, t.Name(), true)
if ldberr != nil {
t.Fatal(ldberr)
}
edb, err := rawdb.NewDatabaseWithFreezer(kvdb, data.Ancient, t.Name(), true)
if err != nil {
t.Fatal(err)
}
@ -50,9 +47,9 @@ func testReadChainData(t *testing.T, data *chains.Paths) {
}
func TestReadChainData(t *testing.T) {
for _, name := range chains.FixtureChains {
for _, name := range []string{"small", "small2"} {
t.Run(name, func(t *testing.T) {
data, err := chains.GetFixture(name)
data, err := chaindata.GetFixture(name)
if err != nil {
t.Fatal(err)
}

View File

@ -9,7 +9,7 @@ import (
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/triedb"
"github.com/cerc-io/eth-testing/chains/mainnet"
"github.com/cerc-io/eth-testing/chaindata/mainnet"
)
func TestLoadChain(t *testing.T) {

15
chaindata/small/chain.go Normal file
View File

@ -0,0 +1,15 @@
package small
import (
"github.com/cerc-io/eth-testing/chaindata"
)
var (
ChainData, err = chaindata.GetFixture("small")
)
func init() {
if err != nil {
panic(err)
}
}

View File

@ -1,13 +1,12 @@
// premerge2 is from an Ethash-based pre-Merge chain.
package premerge2
package small2
import (
"github.com/cerc-io/eth-testing/chains"
"github.com/cerc-io/eth-testing/chaindata"
"github.com/cerc-io/eth-testing/utils"
)
var (
ChainData, err = chains.GetFixture("premerge2")
ChainData, err = chaindata.GetFixture("small2")
// keybytes-encoded leaf keys of all state nodes
Block1_StateNodeLeafKeys [][]byte

View File

@ -1,4 +1,4 @@
package premerge2
package small2
var Block1_StateNodePaths = [][]byte{
{},

View File

@ -1 +0,0 @@
{"jsonrpc":"2.0","id":1,"result":"0xaa"}

View File

@ -1 +0,0 @@
{"jsonrpc":"2.0","id":1,"result":{"baseFeePerGas":"0x3b9aca00","blobGasUsed":"0x0","difficulty":"0x1","excessBlobGas":"0x0","extraData":"0x","gasLimit":"0x17d7840","gasUsed":"0x0","hash":"0x66ef6002e201cfdb23bd3f615fcf41e59d8382055e5a836f8d4c2af0d484647c","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x0000000000000000000000000000000000000000","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000001234","number":"0x0","parentBeaconBlockRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x243","stateRoot":"0x35be87b2aa5190fe0896fc287cdfeaa8f982dcf2e2786d6976276551f5549ec2","timestamp":"0x0","totalDifficulty":"0x1","transactions":[],"transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","uncles":[],"withdrawals":[],"withdrawalsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"}}

View File

@ -1,18 +0,0 @@
{
"chainId": 1212,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"mergeNetsplitBlock": 0,
"terminalTotalDifficulty": 0,
"terminalTotalDifficultyPassed": true,
"shanghaiTime": 0,
"cancunTime": 0
}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
MANIFEST-000012

View File

@ -1,108 +0,0 @@
[Version]
pebble_version=0.1
[Options]
bytes_per_sync=524288
cache_size=536870912
cleaner=delete
compaction_debt_concurrency=1073741824
comparer=leveldb.BytewiseComparator
disable_wal=false
flush_delay_delete_range=0s
flush_delay_range_key=0s
flush_split_bytes=4194304
format_major_version=1
l0_compaction_concurrency=10
l0_compaction_file_threshold=500
l0_compaction_threshold=4
l0_stop_writes_threshold=12
lbase_max_bytes=67108864
max_concurrent_compactions=10
max_manifest_file_size=134217728
max_open_files=524288
mem_table_size=134217728
mem_table_stop_writes_threshold=2
min_deletion_rate=0
merger=pebble.concatenate
read_compaction_rate=16000
read_sampling_multiplier=-1
strict_wal_tail=true
table_cache_shards=10
table_property_collectors=[]
validate_on_ingest=false
wal_dir=
wal_bytes_per_sync=0
max_writer_concurrency=0
force_writer_parallelism=false
secondary_cache_size_bytes=0
create_on_shared=0
[Level "0"]
block_restart_interval=16
block_size=4096
block_size_threshold=90
compression=Snappy
filter_policy=rocksdb.BuiltinBloomFilter
filter_type=table
index_block_size=4096
target_file_size=2097152
[Level "1"]
block_restart_interval=16
block_size=4096
block_size_threshold=90
compression=Snappy
filter_policy=rocksdb.BuiltinBloomFilter
filter_type=table
index_block_size=4096
target_file_size=2097152
[Level "2"]
block_restart_interval=16
block_size=4096
block_size_threshold=90
compression=Snappy
filter_policy=rocksdb.BuiltinBloomFilter
filter_type=table
index_block_size=4096
target_file_size=2097152
[Level "3"]
block_restart_interval=16
block_size=4096
block_size_threshold=90
compression=Snappy
filter_policy=rocksdb.BuiltinBloomFilter
filter_type=table
index_block_size=4096
target_file_size=2097152
[Level "4"]
block_restart_interval=16
block_size=4096
block_size_threshold=90
compression=Snappy
filter_policy=rocksdb.BuiltinBloomFilter
filter_type=table
index_block_size=4096
target_file_size=2097152
[Level "5"]
block_restart_interval=16
block_size=4096
block_size_threshold=90
compression=Snappy
filter_policy=rocksdb.BuiltinBloomFilter
filter_type=table
index_block_size=4096
target_file_size=2097152
[Level "6"]
block_restart_interval=16
block_size=4096
block_size_threshold=90
compression=Snappy
filter_policy=rocksdb.BuiltinBloomFilter
filter_type=table
index_block_size=4096
target_file_size=2097152

View File

@ -1 +0,0 @@


View File

@ -1 +0,0 @@
{"jsonrpc":"2.0","id":1,"result":"0x20"}

View File

@ -1,26 +0,0 @@
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"difficulty": "0x1",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000dc7d7a8920c8eecc098da5b7522a5f31509b5bfc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x7a1200",
"gasUsed": "0x0",
"hash": "0x37cbb63c7150a7b60f2878433963ed8ba7e5f82fb2683ec7a945c974e1cf4e05",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0x0000000000000000000000000000000000000000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000000",
"number": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x272",
"stateRoot": "0xf9b061564470224729393dc3363c75f0477af16fbb66e6e707b5348e19a18b1b",
"timestamp": "0x603eb748",
"totalDifficulty": "0x1",
"transactions": [],
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles": []
}
}

View File

@ -1,15 +0,0 @@
{
"chainId": 41337,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"clique": {
"period": 5,
"epoch": 30000
}
}

View File

@ -1,35 +0,0 @@
{
"config": {
"chainId": 41337,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"clique": {
"period": 5,
"epoch": 30000
}
},
"nonce": "0x0",
"timestamp": "0x603eb748",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000dc7d7a8920c8eecc098da5b7522a5f31509b5bfc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x7a1200",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"dc7d7a8920c8eecc098da5b7522a5f31509b5bfc": {
"balance": "0x1000000000000000000000000"
}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"baseFeePerGas": null,
"excessBlobGas": null,
"blobGasUsed": null
}

View File

@ -1 +0,0 @@
MANIFEST-000005

View File

@ -1 +0,0 @@
{"jsonrpc":"2.0","id":1,"result":"0x106"}

View File

@ -1,26 +0,0 @@
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"difficulty": "0x1",
"extraData": "0x",
"gasLimit": "0x400000",
"gasUsed": "0x0",
"hash": "0x8a3c7cddacbd1ab4ec1b03805fa2a287f3a75e43d87f4f987fcc399f5c042614",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0x0000000000000000000000000000000000000000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000001234",
"number": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x1f8",
"stateRoot": "0x151cf8db334cc8ca0ef46e1d52776f3c08db659d865b00967f5eee0a8b28a98b",
"timestamp": "0x0",
"totalDifficulty": "0x1",
"transactions": [],
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles": []
}
}

View File

@ -1,15 +0,0 @@
{
"chainId": 1212,
"homesteadBlock": 1,
"eip150Block": 1,
"eip155Block": 1,
"eip158Block": 1,
"byzantiumBlock": 1,
"constantinopleBlock": 1,
"petersburgBlock": 1,
"istanbulBlock": 1,
"berlinBlock": 1,
"londonBlock": 1,
"mergeNetsplitBlock": 1,
"terminalTotalDifficulty": 1000
}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
MANIFEST-000004

View File

@ -1 +0,0 @@
<EFBFBD><01>

View File

@ -1 +0,0 @@
<EFBFBD><01>

View File

@ -1 +0,0 @@
<EFBFBD><01>

View File

@ -1 +0,0 @@
<EFBFBD><01>

View File

@ -1,18 +0,0 @@
// postmerge1 is the first fixture using Pebble instead of Leveldb. It was generated by a fixturenet
// running geth 1.14.5 using a "merged from Genesis" configuration, as opposed to the previous
// fixtures for which the Merge occurred at block 1.
package postmerge1
import (
"github.com/cerc-io/eth-testing/chains"
)
var (
ChainData, err = chains.GetFixture("postmerge1")
)
func init() {
if err != nil {
panic(err)
}
}

View File

@ -1,16 +0,0 @@
// premerge1 is from a Clique-based pre-Merge chain with a single genesis allocation.
package premerge1
import (
"github.com/cerc-io/eth-testing/chains"
)
var (
ChainData, err = chains.GetFixture("premerge1")
)
func init() {
if err != nil {
panic(err)
}
}

4
go.mod
View File

@ -1,8 +1,6 @@
module github.com/cerc-io/eth-testing
go 1.21
toolchain go1.22.3
go 1.19
require github.com/ethereum/go-ethereum v1.13.14

12
go.sum
View File

@ -25,7 +25,6 @@ github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
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/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=
@ -33,7 +32,6 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
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.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.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=
@ -86,7 +84,6 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga
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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE=
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc=
@ -98,7 +95,6 @@ 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-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
@ -143,7 +139,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
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-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
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/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
@ -192,11 +187,9 @@ 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/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
@ -286,7 +279,6 @@ 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.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
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.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
@ -359,7 +351,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
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=
@ -465,7 +456,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
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=
@ -478,12 +468,10 @@ 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=