From 976c209c8bd9e6625f5f36e784ad330b6c4f3317 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Wed, 18 Mar 2020 09:40:01 +0100 Subject: [PATCH] tests: validate snapshot after test --- tests/block_test_util.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/block_test_util.go b/tests/block_test_util.go index 1ae986e3ca..93811ab5a2 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -22,6 +22,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + "github.com/ethereum/go-ethereum/core/state/snapshot" "math/big" "github.com/ethereum/go-ethereum/common" @@ -144,6 +145,19 @@ func (t *BlockTest) Run(snapshotter bool) error { if err = t.validatePostState(newDB); err != nil { return fmt.Errorf("post state validation failed: %v", err) } + // Cross-check the snapshot-to-hash against the trie hash + if snapshotter { + snapTree := chain.Snapshot() + root := chain.CurrentBlock().Root() + it, err := snapTree.AccountIterator(root, common.Hash{}) + if err != nil { + return fmt.Errorf("Could not create iterator for root %x: %v", root, err) + } + generatedRoot := snapshot.GenerateTrieRoot(it) + if generatedRoot != root { + return fmt.Errorf("Snapshot corruption, got %d exp %d", generatedRoot, root) + } + } return t.validateImportedHeaders(chain, validBlocks) }