mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
trie: avoid intermediate copies of balance
This commit is contained in:
parent
f42e55053e
commit
1733ea4d7b
1 changed files with 7 additions and 6 deletions
|
|
@ -96,10 +96,9 @@ func (t *VerkleTrie) GetAccount(addr common.Address) (*types.StateAccount, error
|
||||||
if values == nil {
|
if values == nil {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
acc.Nonce = binary.BigEndian.Uint64(values[utils.BasicDataLeafKey][utils.BasicDataNonceOffset:])
|
basicData := values[utils.BasicDataLeafKey]
|
||||||
var balance [16]byte
|
acc.Nonce = binary.BigEndian.Uint64(basicData[utils.BasicDataNonceOffset:])
|
||||||
copy(balance[:], values[utils.BasicDataLeafKey][utils.BasicDataBalanceOffset:])
|
acc.Balance = new(uint256.Int).SetBytes(basicData[utils.BasicDataBalanceOffset : utils.BasicDataBalanceOffset+16])
|
||||||
acc.Balance = new(uint256.Int).SetBytes(balance[:])
|
|
||||||
acc.CodeHash = values[utils.CodeHashLeafKey]
|
acc.CodeHash = values[utils.CodeHashLeafKey]
|
||||||
|
|
||||||
// TODO account.Root is leave as empty. How should we handle the legacy account?
|
// TODO account.Root is leave as empty. How should we handle the legacy account?
|
||||||
|
|
@ -133,8 +132,10 @@ func (t *VerkleTrie) UpdateAccount(addr common.Address, acc *types.StateAccount,
|
||||||
// 4 bytes, so we need to shift the offset 1 byte to the left.
|
// 4 bytes, so we need to shift the offset 1 byte to the left.
|
||||||
binary.BigEndian.PutUint32(basicData[utils.BasicDataCodeSizeOffset-1:], uint32(codeLen))
|
binary.BigEndian.PutUint32(basicData[utils.BasicDataCodeSizeOffset-1:], uint32(codeLen))
|
||||||
binary.BigEndian.PutUint64(basicData[utils.BasicDataNonceOffset:], acc.Nonce)
|
binary.BigEndian.PutUint64(basicData[utils.BasicDataNonceOffset:], acc.Nonce)
|
||||||
balanceBytes := acc.Balance.Bytes()
|
if acc.Balance.ByteLen() > 16 {
|
||||||
copy(basicData[32-len(balanceBytes):], balanceBytes[:])
|
panic("balance too large")
|
||||||
|
}
|
||||||
|
acc.Balance.WriteToSlice(basicData[utils.BasicDataBalanceOffset : utils.BasicDataBalanceOffset+16])
|
||||||
values[utils.BasicDataLeafKey] = basicData[:]
|
values[utils.BasicDataLeafKey] = basicData[:]
|
||||||
values[utils.CodeHashLeafKey] = acc.CodeHash[:]
|
values[utils.CodeHashLeafKey] = acc.CodeHash[:]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue