From 7129044eae6fc44e395c056c7e6fe083683cf60f Mon Sep 17 00:00:00 2001 From: Ashwin Phatak Date: Thu, 26 May 2022 15:50:42 +0530 Subject: [PATCH 1/8] Log progress info --- .gitignore | 2 ++ Makefile | 5 ++++- README.md | 5 +++++ cmd/stateSnapshot.go | 2 +- pkg/snapshot/service.go | 21 ++++++++++++++++++++- 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 5d7a86c..385c906 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .idea/ +.vscode/ ipld-eth-state-snapshot +mocks/ diff --git a/Makefile b/Makefile index eebd422..b612d53 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ MOCKS_DIR = $(CURDIR)/mocks mockgen_cmd=mockgen -.PHONY: mocks +.PHONY: mocks test mocks: mocks/snapshot/publisher.go @@ -14,3 +14,6 @@ clean: build: go fmt ./... go build + +test: mocks + go clean -testcache && go test -v ./... diff --git a/README.md b/README.md index ca4744e..ac67170 100644 --- a/README.md +++ b/README.md @@ -52,3 +52,8 @@ Config format: chainID = "1" # $ETH_CHAIN_ID genesisBlock = "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3" # $ETH_GENESIS_BLOCK ``` + +## Tests + +* Install [mockgen](https://github.com/golang/mock#installation) +* `make test` diff --git a/cmd/stateSnapshot.go b/cmd/stateSnapshot.go index c44d84e..cc4e88a 100644 --- a/cmd/stateSnapshot.go +++ b/cmd/stateSnapshot.go @@ -44,7 +44,7 @@ func stateSnapshot() { mode := snapshot.SnapshotMode(modeStr) config, err := snapshot.NewConfig(mode) if err != nil { - logWithCommand.Fatal("unable to initialize config: %v", err) + logWithCommand.Fatalf("unable to initialize config: %v", err) } logWithCommand.Infof("opening levelDB and ancient data at %s and %s", config.Eth.LevelDBPath, config.Eth.AncientDBPath) diff --git a/pkg/snapshot/service.go b/pkg/snapshot/service.go index 3e269a9..be7d903 100644 --- a/pkg/snapshot/service.go +++ b/pkg/snapshot/service.go @@ -81,6 +81,8 @@ type SnapshotParams struct { } func (s *Service) CreateSnapshot(params SnapshotParams) error { + log.Infof("createSnapshot BEGIN %v", params) + // extract header from lvldb and publish to PG-IPFS // hold onto the headerID so that we can link the state nodes to this header log.Infof("Creating snapshot at height %d", params.Height) @@ -92,12 +94,16 @@ func (s *Service) CreateSnapshot(params SnapshotParams) error { log.Infof("head hash: %s head height: %d", hash.Hex(), params.Height) + log.Infof("publish header") err := s.ipfsPublisher.PublishHeader(header) if err != nil { return err } + log.Infof("opening trie...") tree, err := s.stateDB.OpenTrie(header.Root) + log.Infof("opened trie") + if err != nil { return err } @@ -106,13 +112,19 @@ func (s *Service) CreateSnapshot(params SnapshotParams) error { go s.tracker.run() go s.tracker.captureSignal() + log.Infof("after goroutines start") + var iters []trie.NodeIterator // attempt to restore from recovery file if it exists + log.Infof("restoring iterators from recovery file...") iters, err = s.tracker.restore(tree) + if err != nil { + log.Errorf("restore error: %s", err.Error()) return err } if iters != nil { + log.Infof("restored iterators; count: %d", len(iters)) if params.Workers < uint(len(iters)) { return fmt.Errorf( "number of recovered workers (%d) is greater than number configured (%d)", @@ -120,12 +132,17 @@ func (s *Service) CreateSnapshot(params SnapshotParams) error { ) } } else { // nothing to restore + log.Infof("no iterators to restore") if params.Workers > 1 { + log.Infof("creating %d subtrie iterators...", params.Workers) iters = iter.SubtrieIterators(tree, params.Workers) + log.Infof("created %d subtrie iterators", params.Workers) } else { + log.Infof("creating node iterators") iters = []trie.NodeIterator{tree.NodeIterator(nil)} } for i, it := range iters { + log.Infof("tracked iterator %d", i) iters[i] = s.tracker.tracked(it) } } @@ -133,10 +150,12 @@ func (s *Service) CreateSnapshot(params SnapshotParams) error { defer func() { err := s.tracker.haltAndDump() if err != nil { - log.Error("failed to write recovery file: ", err) + log.Errorf("failed to write recovery file: %v", err) } }() + log.Infof("num iters %d", len(iters)) + if len(iters) > 0 { return s.createSnapshotAsync(iters, headerID) } else { From 3e24972a898563d94cb27b9f67fa353ef21bcf84 Mon Sep 17 00:00:00 2001 From: Roy Crihfield Date: Tue, 31 May 2022 23:34:02 +0800 Subject: [PATCH 2/8] try to fix hanging iterator --- pkg/snapshot/service_test.go | 3 ++- pkg/snapshot/tracker.go | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/snapshot/service_test.go b/pkg/snapshot/service_test.go index f1263fe..7fdfda3 100644 --- a/pkg/snapshot/service_test.go +++ b/pkg/snapshot/service_test.go @@ -44,7 +44,8 @@ func TestCreateSnapshot(t *testing.T) { pub.EXPECT().PrepareTxForBatch(gomock.Any(), gomock.Any()).Return(tx, nil). AnyTimes() pub.EXPECT().PublishStateNode(gomock.Any(), gomock.Any(), gomock.Any()). - Times(len(fixt.Block1_StateNodePaths)) + // Use MinTimes as duplicate nodes are expected at boundaries + MinTimes(len(fixt.Block1_StateNodePaths)) // TODO: fixtures for storage node // pub.EXPECT().PublishStorageNode(gomock.Eq(fixt.StorageNode), gomock.Eq(int64(0)), gomock.Any()) diff --git a/pkg/snapshot/tracker.go b/pkg/snapshot/tracker.go index 1e5fbdf..8ca9b34 100644 --- a/pkg/snapshot/tracker.go +++ b/pkg/snapshot/tracker.go @@ -137,7 +137,11 @@ func (tr *iteratorTracker) restore(tree state.Trie) ([]trie.NodeIterator, error) } } - it := iter.NewPrefixBoundIterator(tree, paths[0], paths[1]) + // Force the lower bound path to an even length + if len(paths[0])&0b1 == 1 { + paths[0] = append(paths[0], 0) + } + it := iter.NewPrefixBoundIterator(tree.NodeIterator(iter.HexToKeyBytes(paths[0])), paths[1]) ret = append(ret, tr.tracked(it)) } return ret, nil From 74f82a641daa2e4dd473acf8be81dc89140aca83 Mon Sep 17 00:00:00 2001 From: Ashwin Phatak Date: Wed, 1 Jun 2022 11:01:23 +0530 Subject: [PATCH 3/8] Fix dependency --- go.mod | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 871dab4..ac69517 100644 --- a/go.mod +++ b/go.mod @@ -114,4 +114,6 @@ require ( lukechampine.com/blake3 v1.1.7 // indirect ) -replace github.com/ethereum/go-ethereum v1.10.18 => github.com/vulcanize/go-ethereum v1.10.18-statediff-3.2.2 +replace github.com/ethereum/go-ethereum v1.10.17 => github.com/vulcanize/go-ethereum v1.10.17-statediff-3.2.1 + +replace github.com/vulcanize/go-eth-state-node-iterator => github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220531152907-bfd1bc31af52 From 8572c36ee7fc2e53f8d1b40344298d9ac89bb5e8 Mon Sep 17 00:00:00 2001 From: Roy Crihfield Date: Mon, 6 Jun 2022 20:08:38 +0800 Subject: [PATCH 4/8] decrement path from restored iterator to cover node gaps --- pkg/snapshot/tracker.go | 1 + pkg/snapshot/util.go | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/pkg/snapshot/tracker.go b/pkg/snapshot/tracker.go index 8ca9b34..3bbdec6 100644 --- a/pkg/snapshot/tracker.go +++ b/pkg/snapshot/tracker.go @@ -139,6 +139,7 @@ func (tr *iteratorTracker) restore(tree state.Trie) ([]trie.NodeIterator, error) // Force the lower bound path to an even length if len(paths[0])&0b1 == 1 { + decrementPath(paths[0]) // decrement first to avoid skipped nodes paths[0] = append(paths[0], 0) } it := iter.NewPrefixBoundIterator(tree.NodeIterator(iter.HexToKeyBytes(paths[0])), paths[1]) diff --git a/pkg/snapshot/util.go b/pkg/snapshot/util.go index a2ca7ee..e9db47d 100644 --- a/pkg/snapshot/util.go +++ b/pkg/snapshot/util.go @@ -28,3 +28,26 @@ func NewPublisher(mode SnapshotMode, config *Config) (snapt.Publisher, error) { } return nil, fmt.Errorf("invalid snapshot mode: %s", mode) } + +// Subtracts 1 from the last byte in a path slice, carrying if needed. +// Does nothing, returning false, for all-zero inputs. +func decrementPath(path []byte) bool { + // check for all zeros + allzero := true + for i := 0; i < len(path); i++ { + allzero = allzero && path[i] == 0 + } + if allzero { + return false + } + for i := len(path) - 1; i >= 0; i-- { + val := path[i] + path[i]-- + if val == 0 { + path[i] = 0xf + } else { + return true + } + } + return true +} From 838dabcba6b3e1a83ea2596eed7d203683301fd3 Mon Sep 17 00:00:00 2001 From: Roy Crihfield Date: Wed, 8 Jun 2022 20:03:44 +0800 Subject: [PATCH 5/8] update iterator mod --- go.mod | 6 ++++-- go.sum | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index ac69517..51d7979 100644 --- a/go.mod +++ b/go.mod @@ -114,6 +114,8 @@ require ( lukechampine.com/blake3 v1.1.7 // indirect ) -replace github.com/ethereum/go-ethereum v1.10.17 => github.com/vulcanize/go-ethereum v1.10.17-statediff-3.2.1 +replace ( + github.com/ethereum/go-ethereum => github.com/vulcanize/go-ethereum v1.10.18-statediff-3.2.2 -replace github.com/vulcanize/go-eth-state-node-iterator => github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220531152907-bfd1bc31af52 + github.com/vulcanize/go-eth-state-node-iterator => github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220608100444-4fbaa45d8ede +) \ No newline at end of file diff --git a/go.sum b/go.sum index da3136d..77143d5 100644 --- a/go.sum +++ b/go.sum @@ -691,6 +691,10 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220531152907-bfd1bc31af52 h1:TlAsgpvEimLhvYlo+OWW9S9v7ZS+SjvOUaDNKaCNhRE= +github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220531152907-bfd1bc31af52/go.mod h1:uWhleTvUEZ+cEkNRIAmBpZ14KilTP71OxY5NZDrpNlo= +github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220608100444-4fbaa45d8ede h1:oOY015isx8UKw3q9zV+2/jDVYGTvJGvxxnDhIVtymZk= +github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220608100444-4fbaa45d8ede/go.mod h1:a1aRW1/fEmcpY8AAU47p9TNL3QNjpeqCJd/hLtFKVL8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= @@ -776,8 +780,6 @@ github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/X github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vulcanize/go-eth-state-node-iterator v1.0.3 h1:gtkU0aP7aW0tPBfzxVSymRhX9eyIQv7HiGkGVGwoh8I= -github.com/vulcanize/go-eth-state-node-iterator v1.0.3/go.mod h1:a1aRW1/fEmcpY8AAU47p9TNL3QNjpeqCJd/hLtFKVL8= github.com/vulcanize/go-ethereum v1.10.18-statediff-3.2.2 h1:hAZFOtnfdHtVgiwtcNFZDxCEN01c4W5Xsw+1K/IlHBA= github.com/vulcanize/go-ethereum v1.10.18-statediff-3.2.2/go.mod h1:HelXH7UT1uWdb+St6UAj4pPf93GOggjIV7pVbrWIZ3o= github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= From ef391d8d3176e020bf8fabaf6bbcccdfd591da58 Mon Sep 17 00:00:00 2001 From: Roy Crihfield Date: Wed, 8 Jun 2022 20:02:43 +0800 Subject: [PATCH 6/8] simplify tracker, prevent send to closed chan --- pkg/snapshot/service.go | 3 +-- pkg/snapshot/tracker.go | 34 +++++++++------------------------- 2 files changed, 10 insertions(+), 27 deletions(-) diff --git a/pkg/snapshot/service.go b/pkg/snapshot/service.go index be7d903..bba80e8 100644 --- a/pkg/snapshot/service.go +++ b/pkg/snapshot/service.go @@ -109,8 +109,7 @@ func (s *Service) CreateSnapshot(params SnapshotParams) error { } headerID := header.Hash().String() s.tracker = newTracker(s.recoveryFile, int(params.Workers)) - go s.tracker.run() - go s.tracker.captureSignal() + s.tracker.captureSignal() log.Infof("after goroutines start") diff --git a/pkg/snapshot/tracker.go b/pkg/snapshot/tracker.go index 3bbdec6..e66b8d0 100644 --- a/pkg/snapshot/tracker.go +++ b/pkg/snapshot/tracker.go @@ -22,7 +22,11 @@ type trackedIter struct { func (it *trackedIter) Next(descend bool) bool { ret := it.NodeIterator.Next(descend) if !ret { - it.tracker.stopChan <- it + if it.tracker.running { + it.tracker.stopChan <- it + } else { + log.Errorf("iterator stopped after tracker halted: path=%x", it.Path()) + } } return ret } @@ -34,9 +38,7 @@ type iteratorTracker struct { stopChan chan *trackedIter started map[*trackedIter]struct{} stopped []*trackedIter - - haltChan chan struct{} - done chan struct{} + running bool } func newTracker(file string, buf int) iteratorTracker { @@ -45,8 +47,7 @@ func newTracker(file string, buf int) iteratorTracker { startChan: make(chan *trackedIter, buf), stopChan: make(chan *trackedIter, buf), started: map[*trackedIter]struct{}{}, - haltChan: make(chan struct{}), - done: make(chan struct{}), + running: true, } } @@ -62,23 +63,7 @@ func (tr *iteratorTracker) captureSignal() { }() } -// listens for starts/stops and manages current state -func (tr *iteratorTracker) run() { -loop: - for { - select { - case start := <-tr.startChan: - tr.started[start] = struct{}{} - case stop := <-tr.stopChan: - tr.stopped = append(tr.stopped, stop) - case <-tr.haltChan: - break loop - default: - } - } - tr.done <- struct{}{} -} - +// Wraps an iterator in a trackedIter. This should not be called once halts are possible. func (tr *iteratorTracker) tracked(it trie.NodeIterator) (ret *trackedIter) { ret = &trackedIter{it, tr} tr.startChan <- ret @@ -149,8 +134,7 @@ func (tr *iteratorTracker) restore(tree state.Trie) ([]trie.NodeIterator, error) } func (tr *iteratorTracker) haltAndDump() error { - tr.haltChan <- struct{}{} - <-tr.done + tr.running = false // drain any pending events close(tr.startChan) From 8371344756f26e4d7b6e48025287b32c22ff49aa Mon Sep 17 00:00:00 2001 From: Roy Crihfield Date: Wed, 8 Jun 2022 20:08:17 +0800 Subject: [PATCH 7/8] clean up logging --- cmd/stateSnapshot.go | 2 +- pkg/snapshot/service.go | 22 ++++------------------ pkg/snapshot/tracker.go | 3 ++- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/cmd/stateSnapshot.go b/cmd/stateSnapshot.go index cc4e88a..72a51fe 100644 --- a/cmd/stateSnapshot.go +++ b/cmd/stateSnapshot.go @@ -56,7 +56,7 @@ func stateSnapshot() { recoveryFile := viper.GetString(snapshot.SNAPSHOT_RECOVERY_FILE_TOML) if recoveryFile == "" { recoveryFile = fmt.Sprintf("./%d_snapshot_recovery", height) - logWithCommand.Infof("no recovery file set, creating default: %s", recoveryFile) + logWithCommand.Infof("no recovery file set, using default: %s", recoveryFile) } pub, err := snapshot.NewPublisher(mode, config) diff --git a/pkg/snapshot/service.go b/pkg/snapshot/service.go index bba80e8..ac759b7 100644 --- a/pkg/snapshot/service.go +++ b/pkg/snapshot/service.go @@ -81,8 +81,6 @@ type SnapshotParams struct { } func (s *Service) CreateSnapshot(params SnapshotParams) error { - log.Infof("createSnapshot BEGIN %v", params) - // extract header from lvldb and publish to PG-IPFS // hold onto the headerID so that we can link the state nodes to this header log.Infof("Creating snapshot at height %d", params.Height) @@ -94,36 +92,30 @@ func (s *Service) CreateSnapshot(params SnapshotParams) error { log.Infof("head hash: %s head height: %d", hash.Hex(), params.Height) - log.Infof("publish header") err := s.ipfsPublisher.PublishHeader(header) if err != nil { return err } - log.Infof("opening trie...") tree, err := s.stateDB.OpenTrie(header.Root) - log.Infof("opened trie") - if err != nil { return err } + headerID := header.Hash().String() s.tracker = newTracker(s.recoveryFile, int(params.Workers)) s.tracker.captureSignal() - log.Infof("after goroutines start") - var iters []trie.NodeIterator // attempt to restore from recovery file if it exists - log.Infof("restoring iterators from recovery file...") iters, err = s.tracker.restore(tree) - if err != nil { log.Errorf("restore error: %s", err.Error()) return err } + if iters != nil { - log.Infof("restored iterators; count: %d", len(iters)) + log.Debugf("restored iterators; count: %d", len(iters)) if params.Workers < uint(len(iters)) { return fmt.Errorf( "number of recovered workers (%d) is greater than number configured (%d)", @@ -131,17 +123,13 @@ func (s *Service) CreateSnapshot(params SnapshotParams) error { ) } } else { // nothing to restore - log.Infof("no iterators to restore") + log.Debugf("no iterators to restore") if params.Workers > 1 { - log.Infof("creating %d subtrie iterators...", params.Workers) iters = iter.SubtrieIterators(tree, params.Workers) - log.Infof("created %d subtrie iterators", params.Workers) } else { - log.Infof("creating node iterators") iters = []trie.NodeIterator{tree.NodeIterator(nil)} } for i, it := range iters { - log.Infof("tracked iterator %d", i) iters[i] = s.tracker.tracked(it) } } @@ -153,8 +141,6 @@ func (s *Service) CreateSnapshot(params SnapshotParams) error { } }() - log.Infof("num iters %d", len(iters)) - if len(iters) > 0 { return s.createSnapshotAsync(iters, headerID) } else { diff --git a/pkg/snapshot/tracker.go b/pkg/snapshot/tracker.go index e66b8d0..7192eec 100644 --- a/pkg/snapshot/tracker.go +++ b/pkg/snapshot/tracker.go @@ -72,7 +72,7 @@ func (tr *iteratorTracker) tracked(it trie.NodeIterator) (ret *trackedIter) { // dumps iterator path and bounds to a text file so it can be restored later func (tr *iteratorTracker) dump() error { - log.Info("Dumping recovery state to: ", tr.recoveryFile) + log.Debug("Dumping recovery state to: ", tr.recoveryFile) var rows [][]string for it, _ := range tr.started { var endPath []byte @@ -103,6 +103,7 @@ func (tr *iteratorTracker) restore(tree state.Trie) ([]trie.NodeIterator, error) } return nil, err } + log.Debug("Restoring recovery state from: ", tr.recoveryFile) defer file.Close() in := csv.NewReader(file) in.FieldsPerRecord = 2 From 59011cba3c11425d69b1516d19f400079d181ffc Mon Sep 17 00:00:00 2001 From: nabarun Date: Fri, 10 Jun 2022 14:02:13 +0530 Subject: [PATCH 8/8] Update go-eth-state-node-iterator version --- go.mod | 8 ++------ go.sum | 6 ++---- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 51d7979..0897521 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/sirupsen/logrus v1.6.0 github.com/spf13/cobra v1.0.0 github.com/spf13/viper v1.7.0 - github.com/vulcanize/go-eth-state-node-iterator v1.0.3 + github.com/vulcanize/go-eth-state-node-iterator v1.1.0 ) require ( @@ -114,8 +114,4 @@ require ( lukechampine.com/blake3 v1.1.7 // indirect ) -replace ( - github.com/ethereum/go-ethereum => github.com/vulcanize/go-ethereum v1.10.18-statediff-3.2.2 - - github.com/vulcanize/go-eth-state-node-iterator => github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220608100444-4fbaa45d8ede -) \ No newline at end of file +replace github.com/ethereum/go-ethereum v1.10.18 => github.com/vulcanize/go-ethereum v1.10.18-statediff-3.2.2 diff --git a/go.sum b/go.sum index 77143d5..5b0ce2a 100644 --- a/go.sum +++ b/go.sum @@ -691,10 +691,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220531152907-bfd1bc31af52 h1:TlAsgpvEimLhvYlo+OWW9S9v7ZS+SjvOUaDNKaCNhRE= -github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220531152907-bfd1bc31af52/go.mod h1:uWhleTvUEZ+cEkNRIAmBpZ14KilTP71OxY5NZDrpNlo= -github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220608100444-4fbaa45d8ede h1:oOY015isx8UKw3q9zV+2/jDVYGTvJGvxxnDhIVtymZk= -github.com/roysc/go-eth-state-node-iterator v0.0.1-alpha.0.20220608100444-4fbaa45d8ede/go.mod h1:a1aRW1/fEmcpY8AAU47p9TNL3QNjpeqCJd/hLtFKVL8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= @@ -780,6 +776,8 @@ github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/X github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/vulcanize/go-eth-state-node-iterator v1.1.0 h1:wbOpP9BnqDcN8OWbuOw/QvR7Mde5JuuI15SGfLil0ZE= +github.com/vulcanize/go-eth-state-node-iterator v1.1.0/go.mod h1:a1aRW1/fEmcpY8AAU47p9TNL3QNjpeqCJd/hLtFKVL8= github.com/vulcanize/go-ethereum v1.10.18-statediff-3.2.2 h1:hAZFOtnfdHtVgiwtcNFZDxCEN01c4W5Xsw+1K/IlHBA= github.com/vulcanize/go-ethereum v1.10.18-statediff-3.2.2/go.mod h1:HelXH7UT1uWdb+St6UAj4pPf93GOggjIV7pVbrWIZ3o= github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM=