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) }