Compare commits
1 Commits
v5-go-upgr
...
v5
Author | SHA1 | Date | |
---|---|---|---|
23e838f9ac |
@ -108,11 +108,11 @@ func validateTrie() {
|
|||||||
WithField("storage root", storageRoot).
|
WithField("storage root", storageRoot).
|
||||||
Debug("Validating storage trie")
|
Debug("Validating storage trie")
|
||||||
if err = v.ValidateStorageTrie(stateRoot, addr, storageRoot); err != nil {
|
if err = v.ValidateStorageTrie(stateRoot, addr, storageRoot); err != nil {
|
||||||
logWithCommand.Fatalf("Validation failed", err)
|
logWithCommand.Fatal("Validation failed", err)
|
||||||
}
|
}
|
||||||
logWithCommand.Infof("Storage trie for contract %s and root %s is complete", addr, storageRoot)
|
logWithCommand.Infof("Storage trie for contract %s and root %s is complete", addr, storageRoot)
|
||||||
default:
|
default:
|
||||||
logWithCommand.Fatalf("Invalid traversal level: '%s'", traversal)
|
logWithCommand.Fatal("Invalid traversal level:", traversal)
|
||||||
}
|
}
|
||||||
|
|
||||||
stats := v.GetCacheStats()
|
stats := v.GetCacheStats()
|
||||||
|
314
go.mod
314
go.mod
@ -1,255 +1,265 @@
|
|||||||
module github.com/cerc-io/eth-ipfs-state-validator/v5
|
module github.com/cerc-io/eth-ipfs-state-validator/v5
|
||||||
|
|
||||||
go 1.19
|
go 1.21
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/cerc-io/eth-iterator-utils v0.1.1
|
github.com/cerc-io/eth-iterator-utils v0.2.0
|
||||||
github.com/cerc-io/ipfs-ethdb/v5 v5.0.0-alpha
|
github.com/cerc-io/ipfs-ethdb/v5 v5.1.0-alpha
|
||||||
github.com/cerc-io/ipld-eth-statedb v0.0.5-alpha
|
github.com/cerc-io/ipld-eth-statedb v0.1.0
|
||||||
github.com/ethereum/go-ethereum v1.11.6
|
github.com/ethereum/go-ethereum v1.13.14
|
||||||
github.com/ipfs/go-blockservice v0.5.0
|
github.com/holiman/uint256 v1.2.4
|
||||||
|
github.com/ipfs/boxo v0.19.0
|
||||||
github.com/ipfs/go-cid v0.4.1
|
github.com/ipfs/go-cid v0.4.1
|
||||||
github.com/ipfs/kubo v0.18.1
|
github.com/ipfs/kubo v0.27.0
|
||||||
github.com/jmoiron/sqlx v1.3.5
|
github.com/jmoiron/sqlx v1.3.5
|
||||||
github.com/lib/pq v1.10.9
|
github.com/lib/pq v1.10.9
|
||||||
github.com/mailgun/groupcache/v2 v2.3.0
|
github.com/mailgun/groupcache/v2 v2.3.0
|
||||||
github.com/multiformats/go-multihash v0.2.3
|
github.com/multiformats/go-multihash v0.2.3
|
||||||
github.com/onsi/ginkgo/v2 v2.9.2
|
github.com/onsi/ginkgo/v2 v2.15.0
|
||||||
github.com/onsi/gomega v1.27.4
|
github.com/onsi/gomega v1.30.0
|
||||||
github.com/sirupsen/logrus v1.9.0
|
github.com/sirupsen/logrus v1.9.0
|
||||||
github.com/spf13/cobra v1.4.0
|
github.com/spf13/cobra v1.8.0
|
||||||
github.com/spf13/viper v1.11.0
|
github.com/spf13/viper v1.18.2
|
||||||
golang.org/x/sync v0.3.0
|
golang.org/x/sync v0.7.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
bazil.org/fuse v0.0.0-20200117225306-7b5117fecadc // indirect
|
bazil.org/fuse v0.0.0-20200117225306-7b5117fecadc // indirect
|
||||||
github.com/DataDog/zstd v1.5.5 // indirect
|
github.com/DataDog/zstd v1.5.5 // indirect
|
||||||
github.com/VictoriaMetrics/fastcache v1.12.1 // indirect
|
github.com/Jorropo/jsync v1.0.1 // indirect
|
||||||
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
|
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||||
github.com/benbjohnson/clock v1.3.0 // indirect
|
github.com/VictoriaMetrics/fastcache v1.12.2 // indirect
|
||||||
|
github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect
|
||||||
|
github.com/benbjohnson/clock v1.3.5 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
github.com/bits-and-blooms/bitset v1.10.0 // indirect
|
||||||
github.com/blang/semver/v4 v4.0.0 // indirect
|
github.com/blang/semver/v4 v4.0.0 // indirect
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
|
github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
|
||||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect
|
||||||
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
|
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
|
github.com/cerc-io/plugeth-statediff v0.2.1 // indirect
|
||||||
github.com/cerc-io/plugeth-statediff v0.1.1 // indirect
|
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||||
github.com/cockroachdb/errors v1.10.0 // indirect
|
github.com/cockroachdb/errors v1.10.0 // indirect
|
||||||
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
|
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
|
||||||
github.com/cockroachdb/pebble v0.0.0-20230720154706-692f3b61a3c4 // indirect
|
github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 // indirect
|
||||||
github.com/cockroachdb/redact v1.1.5 // indirect
|
github.com/cockroachdb/redact v1.1.5 // indirect
|
||||||
github.com/cockroachdb/tokenbucket v0.0.0-20230613231145-182959a1fad6 // indirect
|
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
|
||||||
github.com/containerd/cgroups v1.0.4 // indirect
|
github.com/consensys/bavard v0.1.13 // indirect
|
||||||
|
github.com/consensys/gnark-crypto v0.12.1 // indirect
|
||||||
|
github.com/containerd/cgroups v1.1.0 // indirect
|
||||||
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
|
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668 // indirect
|
||||||
github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect
|
github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect
|
||||||
|
github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect
|
||||||
github.com/cskr/pubsub v1.0.2 // indirect
|
github.com/cskr/pubsub v1.0.2 // indirect
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
|
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
|
||||||
|
github.com/deckarep/golang-set/v2 v2.3.0 // indirect
|
||||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
|
||||||
github.com/docker/go-units v0.5.0 // indirect
|
github.com/docker/go-units v0.5.0 // indirect
|
||||||
github.com/dustin/go-humanize v1.0.0 // indirect
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||||
github.com/elastic/gosigar v0.14.2 // indirect
|
github.com/elastic/gosigar v0.14.2 // indirect
|
||||||
github.com/emirpasic/gods v1.18.1 // indirect
|
github.com/ethereum/c-kzg-4844 v0.4.0 // indirect
|
||||||
github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect
|
github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect
|
||||||
github.com/flynn/noise v1.0.0 // indirect
|
github.com/flynn/noise v1.1.0 // indirect
|
||||||
github.com/francoispqt/gojay v1.2.13 // indirect
|
github.com/francoispqt/gojay v1.2.13 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||||
|
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect
|
||||||
|
github.com/georgysavva/scany v0.2.9 // indirect
|
||||||
github.com/getsentry/sentry-go v0.22.0 // indirect
|
github.com/getsentry/sentry-go v0.22.0 // indirect
|
||||||
github.com/go-logr/logr v1.2.3 // indirect
|
github.com/go-logr/logr v1.4.1 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||||
github.com/go-stack/stack v1.8.1 // indirect
|
github.com/go-stack/stack v1.8.1 // indirect
|
||||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
|
||||||
github.com/godbus/dbus/v5 v5.1.0 // indirect
|
github.com/godbus/dbus/v5 v5.1.0 // indirect
|
||||||
github.com/gofrs/flock v0.8.1 // indirect
|
github.com/gofrs/flock v0.8.1 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang/mock v1.6.0 // indirect
|
|
||||||
github.com/golang/protobuf v1.5.3 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
|
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
|
||||||
github.com/google/go-cmp v0.5.9 // indirect
|
github.com/google/go-cmp v0.6.0 // indirect
|
||||||
github.com/google/gopacket v1.1.19 // indirect
|
github.com/google/gopacket v1.1.19 // indirect
|
||||||
github.com/google/pprof v0.0.0-20221203041831-ce31453925ec // indirect
|
github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect
|
||||||
github.com/google/uuid v1.3.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/gorilla/mux v1.8.0 // indirect
|
github.com/gorilla/websocket v1.5.1 // indirect
|
||||||
github.com/gorilla/websocket v1.5.0 // indirect
|
|
||||||
github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e // indirect
|
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect
|
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
||||||
|
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/holiman/bloomfilter/v2 v2.0.3 // indirect
|
github.com/holiman/bloomfilter/v2 v2.0.3 // indirect
|
||||||
github.com/holiman/uint256 v1.2.3 // indirect
|
github.com/huin/goupnp v1.3.0 // indirect
|
||||||
github.com/huin/goupnp v1.2.0 // indirect
|
github.com/inconshreveable/log15 v2.16.0+incompatible // indirect
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
github.com/ipfs/bbloom v0.0.4 // indirect
|
github.com/ipfs/bbloom v0.0.4 // indirect
|
||||||
github.com/ipfs/go-bitfield v1.0.0 // indirect
|
github.com/ipfs/go-bitfield v1.1.0 // indirect
|
||||||
github.com/ipfs/go-bitswap v0.11.0 // indirect
|
github.com/ipfs/go-block-format v0.2.0 // indirect
|
||||||
github.com/ipfs/go-block-format v0.0.3 // indirect
|
|
||||||
github.com/ipfs/go-cidutil v0.1.0 // indirect
|
github.com/ipfs/go-cidutil v0.1.0 // indirect
|
||||||
github.com/ipfs/go-datastore v0.6.0 // indirect
|
github.com/ipfs/go-datastore v0.6.0 // indirect
|
||||||
github.com/ipfs/go-delegated-routing v0.7.0 // indirect
|
|
||||||
github.com/ipfs/go-ds-measure v0.2.0 // indirect
|
github.com/ipfs/go-ds-measure v0.2.0 // indirect
|
||||||
github.com/ipfs/go-fetcher v1.6.1 // indirect
|
|
||||||
github.com/ipfs/go-filestore v1.2.0 //indirect
|
|
||||||
github.com/ipfs/go-fs-lock v0.0.7 // indirect
|
github.com/ipfs/go-fs-lock v0.0.7 // indirect
|
||||||
github.com/ipfs/go-graphsync v0.14.1 // indirect
|
|
||||||
github.com/ipfs/go-ipfs-blockstore v1.2.0 // indirect
|
|
||||||
github.com/ipfs/go-ipfs-chunker v0.0.5 // indirect
|
|
||||||
github.com/ipfs/go-ipfs-delay v0.0.1 // indirect
|
github.com/ipfs/go-ipfs-delay v0.0.1 // indirect
|
||||||
github.com/ipfs/go-ipfs-ds-help v1.1.0 // indirect
|
github.com/ipfs/go-ipfs-ds-help v1.1.0 // indirect
|
||||||
github.com/ipfs/go-ipfs-exchange-interface v0.2.0 // indirect
|
github.com/ipfs/go-ipfs-pq v0.0.3 // indirect
|
||||||
github.com/ipfs/go-ipfs-exchange-offline v0.3.0 // indirect
|
github.com/ipfs/go-ipfs-redirects-file v0.1.1 // indirect
|
||||||
github.com/ipfs/go-ipfs-keystore v0.1.0 // indirect
|
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
|
||||||
github.com/ipfs/go-ipfs-pinner v0.2.1 // indirect
|
github.com/ipfs/go-ipld-cbor v0.1.0 // indirect
|
||||||
github.com/ipfs/go-ipfs-posinfo v0.0.1 // indirect
|
github.com/ipfs/go-ipld-format v0.6.0 // indirect
|
||||||
github.com/ipfs/go-ipfs-pq v0.0.2 // indirect
|
github.com/ipfs/go-ipld-legacy v0.2.1 // indirect
|
||||||
github.com/ipfs/go-ipfs-provider v0.8.1 // indirect
|
|
||||||
github.com/ipfs/go-ipfs-routing v0.3.0 // indirect
|
|
||||||
github.com/ipfs/go-ipfs-util v0.0.2 // indirect
|
|
||||||
github.com/ipfs/go-ipld-cbor v0.0.6 // indirect
|
|
||||||
github.com/ipfs/go-ipld-format v0.4.0 // indirect
|
|
||||||
github.com/ipfs/go-ipld-legacy v0.1.1 // indirect
|
|
||||||
github.com/ipfs/go-ipns v0.3.0 // indirect
|
|
||||||
github.com/ipfs/go-libipfs v0.2.0 // indirect
|
|
||||||
github.com/ipfs/go-log v1.0.5 // indirect
|
github.com/ipfs/go-log v1.0.5 // indirect
|
||||||
github.com/ipfs/go-log/v2 v2.5.1 // indirect
|
github.com/ipfs/go-log/v2 v2.5.1 // indirect
|
||||||
github.com/ipfs/go-merkledag v0.9.0 // indirect
|
|
||||||
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
|
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
|
||||||
github.com/ipfs/go-mfs v0.2.1 // indirect
|
github.com/ipfs/go-peertaskqueue v0.8.1 // indirect
|
||||||
github.com/ipfs/go-namesys v0.6.0 // indirect
|
github.com/ipfs/go-unixfsnode v1.9.0 // indirect
|
||||||
github.com/ipfs/go-path v0.3.0 // indirect
|
github.com/ipld/go-car/v2 v2.13.1 // indirect
|
||||||
github.com/ipfs/go-peertaskqueue v0.8.0 // indirect
|
github.com/ipld/go-codec-dagpb v1.6.0 // indirect
|
||||||
github.com/ipfs/go-unixfs v0.4.2 // indirect
|
github.com/ipld/go-ipld-prime v0.21.0 // indirect
|
||||||
github.com/ipfs/go-unixfsnode v1.5.1 // indirect
|
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
|
||||||
github.com/ipfs/go-verifcid v0.0.2 // indirect
|
github.com/jackc/pgconn v1.14.3 // indirect
|
||||||
github.com/ipfs/interface-go-ipfs-core v0.8.2 // indirect
|
github.com/jackc/pgio v1.0.0 // indirect
|
||||||
github.com/ipld/edelweiss v0.2.0 // indirect
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||||
github.com/ipld/go-codec-dagpb v1.5.0 // indirect
|
github.com/jackc/pgproto3/v2 v2.3.3 // indirect
|
||||||
github.com/ipld/go-ipld-prime v0.19.0 // indirect
|
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
|
||||||
|
github.com/jackc/pgtype v1.14.0 // indirect
|
||||||
|
github.com/jackc/pgx/v4 v4.18.3 // indirect
|
||||||
|
github.com/jackc/puddle v1.3.0 // indirect
|
||||||
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
|
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
|
||||||
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
|
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
|
||||||
github.com/jbenet/goprocess v0.1.4 // indirect
|
github.com/jbenet/goprocess v0.1.4 // indirect
|
||||||
github.com/klauspost/compress v1.16.7 // indirect
|
github.com/klauspost/compress v1.17.6 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
|
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
|
||||||
github.com/koron/go-ssdp v0.0.3 // indirect
|
github.com/koron/go-ssdp v0.0.4 // indirect
|
||||||
github.com/kr/pretty v0.3.1 // indirect
|
github.com/kr/pretty v0.3.1 // indirect
|
||||||
github.com/kr/text v0.2.0 // indirect
|
github.com/kr/text v0.2.0 // indirect
|
||||||
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
|
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
|
||||||
github.com/libp2p/go-cidranger v1.1.0 // indirect
|
github.com/libp2p/go-cidranger v1.1.0 // indirect
|
||||||
github.com/libp2p/go-doh-resolver v0.4.0 // indirect
|
github.com/libp2p/go-doh-resolver v0.4.0 // indirect
|
||||||
github.com/libp2p/go-flow-metrics v0.1.0 // indirect
|
github.com/libp2p/go-flow-metrics v0.1.0 // indirect
|
||||||
github.com/libp2p/go-libp2p v0.24.2 // indirect
|
github.com/libp2p/go-libp2p v0.33.0 // indirect
|
||||||
github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect
|
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
|
||||||
github.com/libp2p/go-libp2p-kad-dht v0.20.0 // indirect
|
github.com/libp2p/go-libp2p-kad-dht v0.24.4 // indirect
|
||||||
github.com/libp2p/go-libp2p-kbucket v0.5.0 // indirect
|
github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect
|
||||||
github.com/libp2p/go-libp2p-pubsub v0.8.3 // indirect
|
github.com/libp2p/go-libp2p-pubsub v0.10.0 // indirect
|
||||||
github.com/libp2p/go-libp2p-pubsub-router v0.6.0 // indirect
|
github.com/libp2p/go-libp2p-pubsub-router v0.6.0 // indirect
|
||||||
github.com/libp2p/go-libp2p-record v0.2.0 // indirect
|
github.com/libp2p/go-libp2p-record v0.2.0 // indirect
|
||||||
github.com/libp2p/go-libp2p-routing-helpers v0.6.0 // indirect
|
github.com/libp2p/go-libp2p-routing-helpers v0.7.3 // indirect
|
||||||
github.com/libp2p/go-libp2p-xor v0.1.0 // indirect
|
github.com/libp2p/go-libp2p-xor v0.1.0 // indirect
|
||||||
github.com/libp2p/go-mplex v0.7.0 // indirect
|
github.com/libp2p/go-msgio v0.3.0 // indirect
|
||||||
github.com/libp2p/go-msgio v0.2.0 // indirect
|
github.com/libp2p/go-nat v0.2.0 // indirect
|
||||||
github.com/libp2p/go-nat v0.1.0 // indirect
|
|
||||||
github.com/libp2p/go-netroute v0.2.1 // indirect
|
github.com/libp2p/go-netroute v0.2.1 // indirect
|
||||||
github.com/libp2p/go-openssl v0.1.0 // indirect
|
github.com/libp2p/go-reuseport v0.4.0 // indirect
|
||||||
github.com/libp2p/go-reuseport v0.2.0 // indirect
|
github.com/libp2p/go-yamux/v4 v4.0.1 // indirect
|
||||||
github.com/libp2p/go-yamux/v4 v4.0.0 // indirect
|
|
||||||
github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
|
github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
|
||||||
github.com/lucas-clemente/quic-go v0.31.1 // indirect
|
github.com/magiconair/properties v1.8.7 // indirect
|
||||||
github.com/magiconair/properties v1.8.6 // indirect
|
|
||||||
github.com/marten-seemann/qpack v0.3.0 // indirect
|
|
||||||
github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect
|
|
||||||
github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect
|
|
||||||
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
|
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
|
||||||
github.com/marten-seemann/webtransport-go v0.4.3 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.19 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-pointer v0.0.1 // indirect
|
|
||||||
github.com/mattn/go-runewidth v0.0.14 // indirect
|
github.com/mattn/go-runewidth v0.0.14 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
github.com/miekg/dns v1.1.58 // indirect
|
||||||
github.com/miekg/dns v1.1.50 // indirect
|
|
||||||
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
|
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
|
||||||
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
|
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
|
||||||
github.com/minio/sha256-simd v1.0.1 // indirect
|
github.com/minio/sha256-simd v1.0.1 // indirect
|
||||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
|
github.com/mmcloughlin/addchain v0.4.0 // indirect
|
||||||
github.com/mr-tron/base58 v1.2.0 // indirect
|
github.com/mr-tron/base58 v1.2.0 // indirect
|
||||||
github.com/multiformats/go-base32 v0.1.0 // indirect
|
github.com/multiformats/go-base32 v0.1.0 // indirect
|
||||||
github.com/multiformats/go-base36 v0.2.0 // indirect
|
github.com/multiformats/go-base36 v0.2.0 // indirect
|
||||||
github.com/multiformats/go-multiaddr v0.8.0 // indirect
|
github.com/multiformats/go-multiaddr v0.12.2 // indirect
|
||||||
github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect
|
github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect
|
||||||
github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
|
github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
|
||||||
github.com/multiformats/go-multibase v0.2.0 // indirect
|
github.com/multiformats/go-multibase v0.2.0 // indirect
|
||||||
github.com/multiformats/go-multicodec v0.7.0 // indirect
|
github.com/multiformats/go-multicodec v0.9.0 // indirect
|
||||||
github.com/multiformats/go-multistream v0.3.3 // indirect
|
github.com/multiformats/go-multistream v0.5.0 // indirect
|
||||||
github.com/multiformats/go-varint v0.0.7 // indirect
|
github.com/multiformats/go-varint v0.0.7 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||||
github.com/opencontainers/runtime-spec v1.0.2 // indirect
|
github.com/opencontainers/runtime-spec v1.2.0 // indirect
|
||||||
github.com/openrelayxyz/plugeth-utils v1.2.0 // indirect
|
github.com/openrelayxyz/plugeth-utils v1.5.0 // indirect
|
||||||
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
||||||
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
|
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
|
||||||
github.com/pelletier/go-toml v1.9.4 // indirect
|
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
|
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect
|
||||||
|
github.com/pganalyze/pg_query_go/v4 v4.2.1 // indirect
|
||||||
|
github.com/pion/datachannel v1.5.5 // indirect
|
||||||
|
github.com/pion/dtls/v2 v2.2.8 // indirect
|
||||||
|
github.com/pion/ice/v2 v2.3.11 // indirect
|
||||||
|
github.com/pion/interceptor v0.1.25 // indirect
|
||||||
|
github.com/pion/logging v0.2.2 // indirect
|
||||||
|
github.com/pion/mdns v0.0.9 // indirect
|
||||||
|
github.com/pion/randutil v0.1.0 // indirect
|
||||||
|
github.com/pion/rtcp v1.2.13 // indirect
|
||||||
|
github.com/pion/rtp v1.8.3 // indirect
|
||||||
|
github.com/pion/sctp v1.8.9 // indirect
|
||||||
|
github.com/pion/sdp/v3 v3.0.6 // indirect
|
||||||
|
github.com/pion/srtp/v2 v2.0.18 // indirect
|
||||||
|
github.com/pion/stun v0.6.1 // indirect
|
||||||
|
github.com/pion/transport/v2 v2.2.4 // indirect
|
||||||
|
github.com/pion/turn/v2 v2.1.4 // indirect
|
||||||
|
github.com/pion/webrtc/v3 v3.2.23 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e // indirect
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
github.com/prometheus/client_golang v1.16.0 // indirect
|
github.com/polydawn/refmt v0.89.0 // indirect
|
||||||
github.com/prometheus/client_model v0.4.0 // indirect
|
github.com/prometheus/client_golang v1.18.0 // indirect
|
||||||
github.com/prometheus/common v0.44.0 // indirect
|
github.com/prometheus/client_model v0.6.0 // indirect
|
||||||
github.com/prometheus/procfs v0.11.0 // indirect
|
github.com/prometheus/common v0.47.0 // indirect
|
||||||
|
github.com/prometheus/procfs v0.12.0 // indirect
|
||||||
|
github.com/quic-go/qpack v0.4.0 // indirect
|
||||||
|
github.com/quic-go/quic-go v0.41.0 // indirect
|
||||||
|
github.com/quic-go/webtransport-go v0.6.0 // indirect
|
||||||
github.com/raulk/go-watchdog v1.3.0 // indirect
|
github.com/raulk/go-watchdog v1.3.0 // indirect
|
||||||
github.com/rivo/uniseg v0.4.4 // indirect
|
github.com/rivo/uniseg v0.4.4 // indirect
|
||||||
github.com/rogpeppe/go-internal v1.11.0 // indirect
|
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
||||||
github.com/samber/lo v1.36.0 // indirect
|
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||||
|
github.com/samber/lo v1.39.0 // indirect
|
||||||
github.com/segmentio/fasthash v1.0.3 // indirect
|
github.com/segmentio/fasthash v1.0.3 // indirect
|
||||||
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
|
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
|
||||||
github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect
|
github.com/shopspring/decimal v1.2.0 // indirect
|
||||||
|
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||||
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
||||||
github.com/spf13/afero v1.8.2 // indirect
|
github.com/spf13/afero v1.11.0 // indirect
|
||||||
github.com/spf13/cast v1.4.1 // indirect
|
github.com/spf13/cast v1.6.0 // indirect
|
||||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/subosito/gotenv v1.2.0 // indirect
|
github.com/stretchr/objx v0.5.2 // indirect
|
||||||
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
|
github.com/stretchr/testify v1.9.0 // indirect
|
||||||
github.com/tklauser/go-sysconf v0.3.11 // indirect
|
github.com/subosito/gotenv v1.6.0 // indirect
|
||||||
|
github.com/supranational/blst v0.3.11 // indirect
|
||||||
|
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect
|
||||||
|
github.com/thoas/go-funk v0.9.3 // indirect
|
||||||
|
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
||||||
github.com/tklauser/numcpus v0.6.1 // indirect
|
github.com/tklauser/numcpus v0.6.1 // indirect
|
||||||
github.com/urfave/cli/v2 v2.25.7 // indirect
|
github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
|
||||||
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
|
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
|
||||||
github.com/whyrusleeping/cbor-gen v0.0.0-20221220214510-0333c149dec0 // indirect
|
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect
|
||||||
|
github.com/whyrusleeping/cbor-gen v0.0.0-20240109153615-66e95c3e8a87 // indirect
|
||||||
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect
|
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect
|
||||||
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
|
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
|
||||||
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect
|
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect
|
||||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
|
|
||||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.opentelemetry.io/otel v1.7.0 // indirect
|
go.opentelemetry.io/otel v1.25.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.7.0 // indirect
|
go.opentelemetry.io/otel/metric v1.25.0 // indirect
|
||||||
go.uber.org/atomic v1.10.0 // indirect
|
go.opentelemetry.io/otel/trace v1.25.0 // indirect
|
||||||
go.uber.org/dig v1.15.0 // indirect
|
go.uber.org/dig v1.17.1 // indirect
|
||||||
go.uber.org/fx v1.18.2 // indirect
|
go.uber.org/fx v1.20.1 // indirect
|
||||||
go.uber.org/multierr v1.9.0 // indirect
|
go.uber.org/mock v0.4.0 // indirect
|
||||||
go.uber.org/zap v1.24.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
go4.org v0.0.0-20200411211856-f5505b9728dd // indirect
|
go.uber.org/zap v1.27.0 // indirect
|
||||||
golang.org/x/crypto v0.11.0 // indirect
|
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
|
||||||
golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect
|
golang.org/x/crypto v0.22.0 // indirect
|
||||||
golang.org/x/mod v0.11.0 // indirect
|
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 // indirect
|
||||||
golang.org/x/net v0.10.0 // indirect
|
golang.org/x/mod v0.17.0 // indirect
|
||||||
golang.org/x/sys v0.10.0 // indirect
|
golang.org/x/net v0.24.0 // indirect
|
||||||
golang.org/x/text v0.11.0 // indirect
|
golang.org/x/sys v0.19.0 // indirect
|
||||||
golang.org/x/tools v0.7.0 // indirect
|
golang.org/x/term v0.19.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
google.golang.org/protobuf v1.31.0 // indirect
|
golang.org/x/tools v0.20.0 // indirect
|
||||||
|
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
|
||||||
|
gonum.org/v1/gonum v0.14.0 // indirect
|
||||||
|
google.golang.org/protobuf v1.32.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
lukechampine.com/blake3 v1.2.1 // indirect
|
lukechampine.com/blake3 v1.2.2 // indirect
|
||||||
)
|
rsc.io/tmplfunc v0.0.3 // indirect
|
||||||
|
|
||||||
replace (
|
|
||||||
github.com/cerc-io/eth-iterator-utils => git.vdb.to/cerc-io/eth-iterator-utils v0.1.2
|
|
||||||
github.com/cerc-io/eth-testing => git.vdb.to/cerc-io/eth-testing v0.3.1
|
|
||||||
github.com/cerc-io/ipld-eth-statedb => git.vdb.to/cerc-io/ipld-eth-statedb v0.0.6-alpha
|
|
||||||
github.com/cerc-io/plugeth-statediff => git.vdb.to/cerc-io/plugeth-statediff v0.1.4
|
|
||||||
github.com/ethereum/go-ethereum => git.vdb.to/cerc-io/plugeth v0.0.0-20230808125822-691dc334fab1
|
|
||||||
)
|
)
|
||||||
|
@ -19,7 +19,7 @@ package validator
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/ipfs/go-blockservice"
|
"github.com/ipfs/boxo/blockservice"
|
||||||
"github.com/ipfs/kubo/core"
|
"github.com/ipfs/kubo/core"
|
||||||
"github.com/ipfs/kubo/repo/fsrepo"
|
"github.com/ipfs/kubo/repo/fsrepo"
|
||||||
)
|
)
|
||||||
|
@ -25,14 +25,12 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/viper"
|
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
"github.com/ipfs/go-blockservice"
|
"github.com/ipfs/boxo/blockservice"
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
"github.com/mailgun/groupcache/v2"
|
"github.com/mailgun/groupcache/v2"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
@ -44,12 +42,13 @@ import (
|
|||||||
pgipfsethdb "github.com/cerc-io/ipfs-ethdb/v5/postgres/v0"
|
pgipfsethdb "github.com/cerc-io/ipfs-ethdb/v5/postgres/v0"
|
||||||
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/state"
|
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/state"
|
||||||
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/trie"
|
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/trie"
|
||||||
|
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/triedb"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Validator is used for validating Ethereum state and storage tries on PG-IPFS
|
// Validator is used for validating Ethereum state and storage tries on PG-IPFS
|
||||||
type Validator struct {
|
type Validator struct {
|
||||||
kvs ethdb.KeyValueStore
|
kvs ethdb.KeyValueStore
|
||||||
trieDB *trie.Database
|
trieDB *triedb.Database
|
||||||
stateDatabase state.Database
|
stateDatabase state.Database
|
||||||
db *pgipfsethdb.Database
|
db *pgipfsethdb.Database
|
||||||
|
|
||||||
@ -94,7 +93,7 @@ func NewPGIPFSValidator(db *sqlx.DB, par Params) *Validator {
|
|||||||
normalizeParams(&par)
|
normalizeParams(&par)
|
||||||
return &Validator{
|
return &Validator{
|
||||||
kvs: kvs,
|
kvs: kvs,
|
||||||
trieDB: trie.NewDatabase(NewKVSDatabaseWithAncient(kvs)),
|
trieDB: triedb.NewDatabase(NewKVSDatabaseWithAncient(kvs), nil),
|
||||||
stateDatabase: state.NewDatabase(database),
|
stateDatabase: state.NewDatabase(database),
|
||||||
db: database.(*pgipfsethdb.Database),
|
db: database.(*pgipfsethdb.Database),
|
||||||
params: par,
|
params: par,
|
||||||
@ -112,7 +111,7 @@ func NewIPFSValidator(bs blockservice.BlockService, par Params) *Validator {
|
|||||||
normalizeParams(&par)
|
normalizeParams(&par)
|
||||||
return &Validator{
|
return &Validator{
|
||||||
kvs: kvs,
|
kvs: kvs,
|
||||||
trieDB: trie.NewDatabase(NewKVSDatabaseWithAncient(kvs)),
|
trieDB: triedb.NewDatabase(NewKVSDatabaseWithAncient(kvs), nil),
|
||||||
stateDatabase: state.NewDatabase(database),
|
stateDatabase: state.NewDatabase(database),
|
||||||
params: par,
|
params: par,
|
||||||
}
|
}
|
||||||
@ -124,7 +123,7 @@ func NewIPFSValidator(bs blockservice.BlockService, par Params) *Validator {
|
|||||||
func NewValidator(kvs ethdb.KeyValueStore, database ethdb.Database) *Validator {
|
func NewValidator(kvs ethdb.KeyValueStore, database ethdb.Database) *Validator {
|
||||||
return &Validator{
|
return &Validator{
|
||||||
kvs: kvs,
|
kvs: kvs,
|
||||||
trieDB: trie.NewDatabase(NewKVSDatabaseWithAncient(kvs)),
|
trieDB: triedb.NewDatabase(NewKVSDatabaseWithAncient(kvs), nil),
|
||||||
stateDatabase: state.NewDatabase(database),
|
stateDatabase: state.NewDatabase(database),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -146,7 +145,7 @@ func (v *Validator) ValidateTrie(stateRoot common.Hash) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
iterate := func(ctx context.Context, it trie.NodeIterator) error { return v.iterate(ctx, it, true) }
|
iterate := func(ctx context.Context, it trie.NodeIterator) error { return v.iterate(ctx, stateRoot, it, true) }
|
||||||
return iterateTracked(t, fmt.Sprintf(v.params.RecoveryFormat, fullTraversal), v.params.Workers, iterate)
|
return iterateTracked(t, fmt.Sprintf(v.params.RecoveryFormat, fullTraversal), v.params.Workers, iterate)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,7 +157,7 @@ func (v *Validator) ValidateStateTrie(stateRoot common.Hash) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
iterate := func(ctx context.Context, it trie.NodeIterator) error { return v.iterate(ctx, it, false) }
|
iterate := func(ctx context.Context, it trie.NodeIterator) error { return v.iterate(ctx, stateRoot, it, false) }
|
||||||
return iterateTracked(t, fmt.Sprintf(v.params.RecoveryFormat, stateTraversal), v.params.Workers, iterate)
|
return iterateTracked(t, fmt.Sprintf(v.params.RecoveryFormat, stateTraversal), v.params.Workers, iterate)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,12 +165,13 @@ func (v *Validator) ValidateStateTrie(stateRoot common.Hash) error {
|
|||||||
func (v *Validator) ValidateStorageTrie(stateRoot common.Hash, address common.Address, storageRoot common.Hash) error {
|
func (v *Validator) ValidateStorageTrie(stateRoot common.Hash, address common.Address, storageRoot common.Hash) error {
|
||||||
// Generate the state.NodeIterator for this root
|
// Generate the state.NodeIterator for this root
|
||||||
addrHash := crypto.Keccak256Hash(address.Bytes())
|
addrHash := crypto.Keccak256Hash(address.Bytes())
|
||||||
t, err := v.stateDatabase.OpenStorageTrie(stateRoot, addrHash, storageRoot)
|
// Note: the last argument is the redundant state trie, but will be needed for Verkle tries
|
||||||
|
storage, err := v.stateDatabase.OpenStorageTrie(stateRoot, addrHash, storageRoot, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
iterate := func(ctx context.Context, it trie.NodeIterator) error { return v.iterate(ctx, it, false) }
|
iterate := func(ctx context.Context, it trie.NodeIterator) error { return v.iterate(ctx, stateRoot, it, false) }
|
||||||
return iterateTracked(t, fmt.Sprintf(v.params.RecoveryFormat, storageTraversal), v.params.Workers, iterate)
|
return iterateTracked(storage, fmt.Sprintf(v.params.RecoveryFormat, storageTraversal), v.params.Workers, iterate)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close implements io.Closer
|
// Close implements io.Closer
|
||||||
@ -184,7 +184,7 @@ func (v *Validator) Close() error {
|
|||||||
|
|
||||||
// Traverses one iterator fully
|
// Traverses one iterator fully
|
||||||
// If storage = true, also traverse storage tries for each leaf.
|
// If storage = true, also traverse storage tries for each leaf.
|
||||||
func (v *Validator) iterate(ctx context.Context, it trie.NodeIterator, storage bool) error {
|
func (v *Validator) iterate(ctx context.Context, stateRoot common.Hash, it trie.NodeIterator, storage bool) error {
|
||||||
// Iterate through entire state trie. it.Next() will return false when we have
|
// Iterate through entire state trie. it.Next() will return false when we have
|
||||||
// either completed iteration of the entire trie or run into an error (e.g. a
|
// either completed iteration of the entire trie or run into an error (e.g. a
|
||||||
// missing node). If we are able to iterate through the entire trie without error
|
// missing node). If we are able to iterate through the entire trie without error
|
||||||
@ -206,13 +206,18 @@ func (v *Validator) iterate(ctx context.Context, it trie.NodeIterator, storage b
|
|||||||
if err := rlp.Decode(bytes.NewReader(it.LeafBlob()), &account); err != nil {
|
if err := rlp.Decode(bytes.NewReader(it.LeafBlob()), &account); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
dataTrie, err := v.stateDatabase.OpenStorageTrie(common.HexToHash(viper.GetString("validator.stateRoot")), common.BytesToHash(it.LeafKey()), account.Root)
|
// Note: the last argument is the redundant state trie, but will be needed for Verkle tries
|
||||||
|
dataTrie, err := v.stateDatabase.OpenStorageTrie(stateRoot, common.BytesToHash(it.LeafKey()), account.Root, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
dataIt := dataTrie.NodeIterator(nil)
|
dataIt, err := dataTrie.NodeIterator(nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if !bytes.Equal(account.CodeHash, emptyCodeHash) {
|
if !bytes.Equal(account.CodeHash, emptyCodeHash) {
|
||||||
_, err := v.stateDatabase.ContractCode(common.BytesToHash(account.CodeHash))
|
_, err := v.stateDatabase.ContractCode(common.Address{}, common.BytesToHash(account.CodeHash))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("code hash %x: %w (path %x)", account.CodeHash, err, iterutils.HexToKeyBytes(it.Path()))
|
return fmt.Errorf("code hash %x: %w (path %x)", account.CodeHash, err, iterutils.HexToKeyBytes(it.Path()))
|
||||||
}
|
}
|
||||||
@ -236,7 +241,6 @@ func iterateTracked(
|
|||||||
) error {
|
) error {
|
||||||
tracker := tracker.New(recoveryFile, iterCount)
|
tracker := tracker.New(recoveryFile, iterCount)
|
||||||
halt := func() {
|
halt := func() {
|
||||||
log.Errorf("writing recovery file: %s", recoveryFile)
|
|
||||||
if err := tracker.CloseAndSave(); err != nil {
|
if err := tracker.CloseAndSave(); err != nil {
|
||||||
log.Errorf("failed to write recovery file: %v", err)
|
log.Errorf("failed to write recovery file: %v", err)
|
||||||
}
|
}
|
||||||
@ -252,7 +256,10 @@ func iterateTracked(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if iters == nil { // nothing restored
|
if iters == nil { // nothing restored
|
||||||
iters = iterutils.SubtrieIterators(tree.NodeIterator, iterCount)
|
iters, err = iterutils.SubtrieIterators(tree.NodeIterator, iterCount)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
for i, it := range iters {
|
for i, it := range iters {
|
||||||
iters[i] = tracker.Tracked(it)
|
iters[i] = tracker.Tracked(it)
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
package validator_test
|
package validator_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math/big"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
@ -25,6 +24,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"github.com/holiman/uint256"
|
||||||
cid "github.com/ipfs/go-cid/_rsrch/cidiface"
|
cid "github.com/ipfs/go-cid/_rsrch/cidiface"
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
"github.com/multiformats/go-multihash"
|
"github.com/multiformats/go-multihash"
|
||||||
@ -69,7 +69,7 @@ var (
|
|||||||
codePath = common.Hex2Bytes("6114658a74d9cc9f7acf2c5cd696c3494d7c344d78bfec3add0d91ec4e8d1c45")
|
codePath = common.Hex2Bytes("6114658a74d9cc9f7acf2c5cd696c3494d7c344d78bfec3add0d91ec4e8d1c45")
|
||||||
contractAccount, _ = rlp.EncodeToBytes(&types.StateAccount{
|
contractAccount, _ = rlp.EncodeToBytes(&types.StateAccount{
|
||||||
Nonce: 1,
|
Nonce: 1,
|
||||||
Balance: big.NewInt(0),
|
Balance: uint256.NewInt(0),
|
||||||
CodeHash: codeHash.Bytes(),
|
CodeHash: codeHash.Bytes(),
|
||||||
Root: crypto.Keccak256Hash(storageBranchRootNode),
|
Root: crypto.Keccak256Hash(storageBranchRootNode),
|
||||||
})
|
})
|
||||||
@ -80,7 +80,7 @@ var (
|
|||||||
|
|
||||||
minerAccount, _ = rlp.EncodeToBytes(&types.StateAccount{
|
minerAccount, _ = rlp.EncodeToBytes(&types.StateAccount{
|
||||||
Nonce: 0,
|
Nonce: 0,
|
||||||
Balance: big.NewInt(1000),
|
Balance: uint256.NewInt(1000),
|
||||||
CodeHash: nullCodeHash.Bytes(),
|
CodeHash: nullCodeHash.Bytes(),
|
||||||
Root: emptyContractRoot,
|
Root: emptyContractRoot,
|
||||||
})
|
})
|
||||||
@ -91,7 +91,7 @@ var (
|
|||||||
|
|
||||||
account1, _ = rlp.EncodeToBytes(&types.StateAccount{
|
account1, _ = rlp.EncodeToBytes(&types.StateAccount{
|
||||||
Nonce: 2,
|
Nonce: 2,
|
||||||
Balance: big.NewInt(1000),
|
Balance: uint256.NewInt(1000),
|
||||||
CodeHash: nullCodeHash.Bytes(),
|
CodeHash: nullCodeHash.Bytes(),
|
||||||
Root: emptyContractRoot,
|
Root: emptyContractRoot,
|
||||||
})
|
})
|
||||||
@ -102,7 +102,7 @@ var (
|
|||||||
|
|
||||||
account2, _ = rlp.EncodeToBytes(&types.StateAccount{
|
account2, _ = rlp.EncodeToBytes(&types.StateAccount{
|
||||||
Nonce: 0,
|
Nonce: 0,
|
||||||
Balance: big.NewInt(1000),
|
Balance: uint256.NewInt(1000),
|
||||||
CodeHash: nullCodeHash.Bytes(),
|
CodeHash: nullCodeHash.Bytes(),
|
||||||
Root: emptyContractRoot,
|
Root: emptyContractRoot,
|
||||||
})
|
})
|
||||||
@ -113,7 +113,7 @@ var (
|
|||||||
|
|
||||||
bankAccount, _ = rlp.EncodeToBytes(&types.StateAccount{
|
bankAccount, _ = rlp.EncodeToBytes(&types.StateAccount{
|
||||||
Nonce: 2,
|
Nonce: 2,
|
||||||
Balance: big.NewInt(1000),
|
Balance: uint256.NewInt(1000),
|
||||||
CodeHash: nullCodeHash.Bytes(),
|
CodeHash: nullCodeHash.Bytes(),
|
||||||
Root: emptyContractRoot,
|
Root: emptyContractRoot,
|
||||||
})
|
})
|
||||||
@ -249,14 +249,14 @@ var _ = Describe("PG-IPFS Validator", func() {
|
|||||||
err = v.ValidateTrie(stateRoot)
|
err = v.ValidateTrie(stateRoot)
|
||||||
Expect(err).To(HaveOccurred())
|
Expect(err).To(HaveOccurred())
|
||||||
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
||||||
Expect(err.Error()).To(ContainSubstring("%x", missingStateNodePath))
|
Expect(err.Error()).To(ContainSubstring("path %x", missingStateNodePath))
|
||||||
})
|
})
|
||||||
It("Returns an error if the storage trie is missing node(s)", func() {
|
It("Returns an error if the storage trie is missing node(s)", func() {
|
||||||
loadTrie(trieStateNodes, missingNodeStorageNodes, mockCode)
|
loadTrie(trieStateNodes, missingNodeStorageNodes, mockCode)
|
||||||
err = v.ValidateTrie(stateRoot)
|
err = v.ValidateTrie(stateRoot)
|
||||||
Expect(err).To(HaveOccurred())
|
Expect(err).To(HaveOccurred())
|
||||||
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
||||||
Expect(err.Error()).To(ContainSubstring("%x", missingStorageNodePath))
|
Expect(err.Error()).To(ContainSubstring("path %x", missingStorageNodePath))
|
||||||
})
|
})
|
||||||
It("Returns an error if contract code is missing", func() {
|
It("Returns an error if contract code is missing", func() {
|
||||||
loadTrie(trieStateNodes, trieStorageNodes)
|
loadTrie(trieStateNodes, trieStorageNodes)
|
||||||
@ -288,6 +288,7 @@ var _ = Describe("PG-IPFS Validator", func() {
|
|||||||
err = v.ValidateStateTrie(stateRoot)
|
err = v.ValidateStateTrie(stateRoot)
|
||||||
Expect(err).To(HaveOccurred())
|
Expect(err).To(HaveOccurred())
|
||||||
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
||||||
|
Expect(err.Error()).To(ContainSubstring("path %x", missingStateNodePath))
|
||||||
})
|
})
|
||||||
It("Returns no error if the entire state trie can be validated", func() {
|
It("Returns no error if the entire state trie can be validated", func() {
|
||||||
loadTrie(trieStateNodes, nil)
|
loadTrie(trieStateNodes, nil)
|
||||||
@ -301,21 +302,22 @@ var _ = Describe("PG-IPFS Validator", func() {
|
|||||||
err = ResetTestDB(db)
|
err = ResetTestDB(db)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
})
|
})
|
||||||
It("Returns an error the storage root node is missing", func() {
|
It("Returns an error if the storage root node is missing", func() {
|
||||||
loadTrie(nil, missingRootStorageNodes)
|
loadTrie(nil, missingRootStorageNodes)
|
||||||
err = v.ValidateStorageTrie(stateRoot, contractAddr, storageRoot)
|
err = v.ValidateStorageTrie(common.Hash{}, contractAddr, storageRoot)
|
||||||
Expect(err).To(HaveOccurred())
|
Expect(err).To(HaveOccurred())
|
||||||
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
||||||
})
|
})
|
||||||
It("Returns an error if the entire storage trie cannot be validated", func() {
|
It("Returns an error if the entire storage trie cannot be validated", func() {
|
||||||
loadTrie(nil, missingNodeStorageNodes)
|
loadTrie(nil, missingNodeStorageNodes)
|
||||||
err = v.ValidateStorageTrie(stateRoot, contractAddr, storageRoot)
|
err = v.ValidateStorageTrie(common.Hash{}, contractAddr, storageRoot)
|
||||||
Expect(err).To(HaveOccurred())
|
Expect(err).To(HaveOccurred())
|
||||||
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
Expect(err.Error()).To(ContainSubstring("missing trie node"))
|
||||||
|
Expect(err.Error()).To(ContainSubstring("path %x", missingStorageNodePath))
|
||||||
})
|
})
|
||||||
It("Returns no error if the entire storage trie can be validated", func() {
|
It("Returns no error if the entire storage trie can be validated", func() {
|
||||||
loadTrie(nil, trieStorageNodes)
|
loadTrie(nil, trieStorageNodes)
|
||||||
err = v.ValidateStorageTrie(stateRoot, contractAddr, storageRoot)
|
err = v.ValidateStorageTrie(common.Hash{}, contractAddr, storageRoot)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -5,7 +5,7 @@ services:
|
|||||||
restart: on-failure
|
restart: on-failure
|
||||||
depends_on:
|
depends_on:
|
||||||
- ipld-eth-db
|
- ipld-eth-db
|
||||||
image: git.vdb.to/cerc-io/ipld-eth-db/ipld-eth-db:v5.0.5-alpha
|
image: git.vdb.to/cerc-io/ipld-eth-db/ipld-eth-db:v5.2.1-alpha
|
||||||
environment:
|
environment:
|
||||||
DATABASE_USER: "vdbm"
|
DATABASE_USER: "vdbm"
|
||||||
DATABASE_NAME: "cerc_testing"
|
DATABASE_NAME: "cerc_testing"
|
||||||
|
Loading…
Reference in New Issue
Block a user