41 lines
1.7 KiB
Nim
41 lines
1.7 KiB
Nim
# Nimbus
|
|
# Copyright (c) 2023-2024 Status Research & Development GmbH
|
|
# Licensed under either of
|
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
|
|
# http://www.apache.org/licenses/LICENSE-2.0)
|
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
|
|
# http://opensource.org/licenses/MIT)
|
|
# at your option. This file may not be copied, modified, or distributed except
|
|
# according to those terms.
|
|
|
|
import
|
|
../../nimbus/common/common,
|
|
../../nimbus/[evm/state, evm/types],
|
|
../../nimbus/db/ledger
|
|
|
|
proc coinbaseStateClearing*(vmState: BaseVMState,
|
|
miner: Address,
|
|
touched = true) =
|
|
# This is necessary due to the manner in which the state tests are
|
|
# generated. State tests are generated from the BlockChainTest tests
|
|
# in which these transactions are included in the larger context of a
|
|
# block and thus, the mechanisms which would touch/create/clear the
|
|
# coinbase account based on the mining reward are present during test
|
|
# generation, but not part of the execution, thus we must artificially
|
|
# create the account in VMs prior to the state clearing rules,
|
|
# as well as conditionally cleaning up the coinbase account when left
|
|
# empty in VMs after the state clearing rules came into effect.
|
|
|
|
vmState.mutateStateDB:
|
|
if touched:
|
|
db.addBalance(miner, 0.u256)
|
|
|
|
# db.persist is an important step when using `db/ledger`
|
|
# it will affect the account storage's location
|
|
# during the next call to `getComittedStorage`
|
|
# and the result of getStateRoot
|
|
|
|
# do not clear cache, we need the cache when constructing
|
|
# post state
|
|
db.persist(clearEmptyAccount = vmState.fork >= FkSpurious)
|