mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 06:36:43 +00:00
crypto: do not use hasher pool for NewKeccakState
This commit is contained in:
parent
80ccc0e322
commit
c84f999c9e
10 changed files with 7 additions and 23 deletions
|
|
@ -645,7 +645,6 @@ func SafeDeleteRange(db ethdb.KeyValueStore, start, end []byte, hashScheme bool,
|
|||
buff = crypto.NewKeccakState()
|
||||
startTime = time.Now()
|
||||
)
|
||||
defer crypto.ReturnKeccakState(buff)
|
||||
|
||||
batch := db.NewBatch()
|
||||
it := db.NewIterator(nil, start)
|
||||
|
|
|
|||
|
|
@ -386,7 +386,6 @@ func (s *stateObject) commitStorage(op *accountUpdate) {
|
|||
return blob
|
||||
}
|
||||
)
|
||||
defer crypto.ReturnKeccakState(buf)
|
||||
for key, val := range s.pendingStorage {
|
||||
// Skip the noop storage changes, it might be possible the value
|
||||
// of tracked slot is same in originStorage and pendingStorage
|
||||
|
|
|
|||
|
|
@ -1067,7 +1067,6 @@ func (s *StateDB) handleDestruction(noStorageWiping bool) (map[common.Hash]*acco
|
|||
buf = crypto.NewKeccakState()
|
||||
deletes = make(map[common.Hash]*accountDelete)
|
||||
)
|
||||
defer crypto.ReturnKeccakState(buf)
|
||||
for addr, prevObj := range s.stateObjectsDestruct {
|
||||
prev := prevObj.origin
|
||||
|
||||
|
|
|
|||
|
|
@ -141,7 +141,6 @@ func Bloom9(data []byte) []byte {
|
|||
// bloomValues returns the bytes (index-value pairs) to set for the given data
|
||||
func bloomValues(data []byte, hashbuf []byte) (uint, byte, uint, byte, uint, byte) {
|
||||
sha := crypto.NewKeccakState()
|
||||
defer crypto.ReturnKeccakState(sha)
|
||||
sha.Reset()
|
||||
sha.Write(data)
|
||||
sha.Read(hashbuf)
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@ func getPooledBuffer(size uint64) ([]byte, *bytes.Buffer, error) {
|
|||
// rlpHash encodes x and hashes the encoded bytes.
|
||||
func rlpHash(x interface{}) (h common.Hash) {
|
||||
sha := crypto.NewKeccakState()
|
||||
defer crypto.ReturnKeccakState(sha)
|
||||
sha.Reset()
|
||||
rlp.Encode(sha, x)
|
||||
sha.Read(h[:])
|
||||
|
|
@ -62,7 +61,6 @@ func rlpHash(x interface{}) (h common.Hash) {
|
|||
// It's used for typed transactions.
|
||||
func prefixedRlpHash(prefix byte, x interface{}) (h common.Hash) {
|
||||
sha := crypto.NewKeccakState()
|
||||
defer crypto.ReturnKeccakState(sha)
|
||||
sha.Reset()
|
||||
sha.Write([]byte{prefix})
|
||||
rlp.Encode(sha, x)
|
||||
|
|
|
|||
|
|
@ -71,9 +71,7 @@ type KeccakState interface {
|
|||
|
||||
// NewKeccakState creates a new KeccakState
|
||||
func NewKeccakState() KeccakState {
|
||||
state := hasherPool.Get().(KeccakState)
|
||||
state.Reset()
|
||||
return state
|
||||
return sha3.NewLegacyKeccak256().(KeccakState)
|
||||
}
|
||||
|
||||
var hasherPool = sync.Pool{
|
||||
|
|
@ -82,10 +80,6 @@ var hasherPool = sync.Pool{
|
|||
},
|
||||
}
|
||||
|
||||
func ReturnKeccakState(state KeccakState) {
|
||||
hasherPool.Put(state)
|
||||
}
|
||||
|
||||
// HashData hashes the provided data using the KeccakState and returns a 32 byte hash
|
||||
func HashData(kh KeccakState, data []byte) (h common.Hash) {
|
||||
kh.Reset()
|
||||
|
|
@ -97,24 +91,26 @@ func HashData(kh KeccakState, data []byte) (h common.Hash) {
|
|||
// Keccak256 calculates and returns the Keccak256 hash of the input data.
|
||||
func Keccak256(data ...[]byte) []byte {
|
||||
b := make([]byte, 32)
|
||||
d := NewKeccakState()
|
||||
d := hasherPool.Get().(KeccakState)
|
||||
d.Reset()
|
||||
for _, b := range data {
|
||||
d.Write(b)
|
||||
}
|
||||
d.Read(b)
|
||||
ReturnKeccakState(d)
|
||||
hasherPool.Put(d)
|
||||
return b
|
||||
}
|
||||
|
||||
// Keccak256Hash calculates and returns the Keccak256 hash of the input data,
|
||||
// converting it to an internal Hash data structure.
|
||||
func Keccak256Hash(data ...[]byte) (h common.Hash) {
|
||||
d := NewKeccakState()
|
||||
d := hasherPool.Get().(KeccakState)
|
||||
d.Reset()
|
||||
for _, b := range data {
|
||||
d.Write(b)
|
||||
}
|
||||
d.Read(h[:])
|
||||
ReturnKeccakState(d)
|
||||
hasherPool.Put(d)
|
||||
return h
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -488,7 +488,6 @@ func (h *handler) BroadcastTransactions(txs types.Transactions) {
|
|||
hasher = crypto.NewKeccakState()
|
||||
hash = make([]byte, 32)
|
||||
)
|
||||
defer crypto.ReturnKeccakState(hasher)
|
||||
for _, tx := range txs {
|
||||
var maybeDirect bool
|
||||
switch {
|
||||
|
|
|
|||
|
|
@ -2655,7 +2655,6 @@ func (s *Syncer) onByteCodes(peer SyncPeer, id uint64, bytecodes [][]byte) error
|
|||
// Cross reference the requested bytecodes with the response to find gaps
|
||||
// that the serving node is missing
|
||||
hasher := crypto.NewKeccakState()
|
||||
defer crypto.ReturnKeccakState(hasher)
|
||||
hash := make([]byte, 32)
|
||||
|
||||
codes := make([][]byte, len(req.hashes))
|
||||
|
|
@ -2908,7 +2907,6 @@ func (s *Syncer) OnTrieNodes(peer SyncPeer, id uint64, trienodes [][]byte) error
|
|||
nodes = make([][]byte, len(req.hashes))
|
||||
fills uint64
|
||||
)
|
||||
defer crypto.ReturnKeccakState(hasher)
|
||||
for i, j := 0, 0; i < len(trienodes); i++ {
|
||||
// Find the next hash that we've been served, leaving misses with nils
|
||||
hasher.Reset()
|
||||
|
|
|
|||
|
|
@ -87,7 +87,6 @@ func updateAccount(ctx *context, db database.NodeDatabase, addr common.Address)
|
|||
// The account was present in prev-state, decode it from the
|
||||
// 'slim-rlp' format bytes.
|
||||
h := crypto.NewKeccakState()
|
||||
defer crypto.ReturnKeccakState(h)
|
||||
|
||||
addrHash := crypto.HashData(h, addr.Bytes())
|
||||
prev, err := types.FullAccount(ctx.accounts[addr])
|
||||
|
|
@ -151,7 +150,6 @@ func updateAccount(ctx *context, db database.NodeDatabase, addr common.Address)
|
|||
func deleteAccount(ctx *context, db database.NodeDatabase, addr common.Address) error {
|
||||
// The account must be existent in post-state, load the account.
|
||||
h := crypto.NewKeccakState()
|
||||
defer crypto.ReturnKeccakState(h)
|
||||
|
||||
addrHash := crypto.HashData(h, addr.Bytes())
|
||||
blob, err := ctx.accountTrie.Get(addrHash.Bytes())
|
||||
|
|
|
|||
|
|
@ -282,7 +282,6 @@ func (h *history) stateSet() (map[common.Hash][]byte, map[common.Hash]map[common
|
|||
accounts = make(map[common.Hash][]byte)
|
||||
storages = make(map[common.Hash]map[common.Hash][]byte)
|
||||
)
|
||||
defer crypto.ReturnKeccakState(buff)
|
||||
for addr, blob := range h.accounts {
|
||||
addrHash := crypto.HashData(buff, addr.Bytes())
|
||||
accounts[addrHash] = blob
|
||||
|
|
|
|||
Loading…
Reference in a new issue