// Copyright 2023 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . // Package utesting provides a standalone replacement for package testing. // // This package exists because package testing cannot easily be embedded into a // standalone go program. It provides an API that mirrors the standard library // testing API. package blocktest import ( "hash" "github.com/ethereum/go-ethereum/common" "golang.org/x/crypto/sha3" ) // testHasher is the helper tool for transaction/receipt list hashing. // The original hasher is trie, in order to get rid of import cycle, // use the testing hasher instead. type testHasher struct { hasher hash.Hash } // NewHasher returns a new testHasher instance. func NewHasher() *testHasher { return &testHasher{hasher: sha3.NewLegacyKeccak256()} } // Reset resets the hash state. func (h *testHasher) Reset() { h.hasher.Reset() } // Update updates the hash state with the given key and value. func (h *testHasher) Update(key, val []byte) error { h.hasher.Write(key) h.hasher.Write(val) return nil } // Hash returns the hash value. func (h *testHasher) Hash() common.Hash { return common.BytesToHash(h.hasher.Sum(nil)) }