// accountDelete represents an operation for deleting an Ethereum account.
typeaccountDeletestruct{
addresscommon.Address// address is the unique account identifier
origin[]byte// origin is the original value of account data in slim-RLP encoding.
storagesmap[common.Hash][]byte// storages stores mutated slots, the value should be nil.
storagesOriginmap[common.Hash][]byte// storagesOrigin stores the original values of mutated slots in prefix-zero-trimmed RLP format.
addresscommon.Address// address is the unique account identifier
origin[]byte// origin is the original value of account data in slim-RLP encoding.
// storages stores mutated slots, the value should be nil.
storagesmap[common.Hash][]byte
// storagesOrigin stores the original values of mutated slots in
// prefix-zero-trimmed RLP format. The map key refers to the **HASH**
// of the raw storage slot key.
storagesOriginmap[common.Hash][]byte
}
// accountUpdate represents an operation for updating an Ethereum account.
typeaccountUpdatestruct{
addresscommon.Address// address is the unique account identifier
data[]byte// data is the slim-RLP encoded account data.
origin[]byte// origin is the original value of account data in slim-RLP encoding.
code*contractCode// code represents mutated contract code; nil means it's not modified.
storagesmap[common.Hash][]byte// storages stores mutated slots in prefix-zero-trimmed RLP format.
storagesOriginmap[common.Hash][]byte// storagesOrigin stores the original values of mutated slots in prefix-zero-trimmed RLP format.
addresscommon.Address// address is the unique account identifier
data[]byte// data is the slim-RLP encoded account data.
origin[]byte// origin is the original value of account data in slim-RLP encoding.
code*contractCode// code represents mutated contract code; nil means it's not modified.
storagesmap[common.Hash][]byte// storages stores mutated slots in prefix-zero-trimmed RLP format.
// storagesOriginByKey and storagesOriginByHash both store the original values
// of mutated slots in prefix-zero-trimmed RLP format. The difference is that
// storagesOriginByKey uses the **raw** storage slot key as the map ID, while
// storagesOriginByHash uses the **hash** of the storage slot key instead.
storagesOriginByKeymap[common.Hash][]byte
storagesOriginByHashmap[common.Hash][]byte
}
// stateUpdate represents the difference between two states resulting from state
// execution. It contains information about mutated contract codes, accounts,
// and storage slots, along with their original values.
typestateUpdatestruct{
originRootcommon.Hash// hash of the state before applying mutation
rootcommon.Hash// hash of the state after applying mutation
accountsmap[common.Hash][]byte// accounts stores mutated accounts in 'slim RLP' encoding
accountsOriginmap[common.Address][]byte// accountsOrigin stores the original values of mutated accounts in 'slim RLP' encoding
storagesmap[common.Hash]map[common.Hash][]byte// storages stores mutated slots in 'prefix-zero-trimmed' RLP format
storagesOriginmap[common.Address]map[common.Hash][]byte// storagesOrigin stores the original values of mutated slots in 'prefix-zero-trimmed' RLP format
codesmap[common.Address]contractCode// codes contains the set of dirty codes
nodes*trienode.MergedNodeSet// Aggregated dirty nodes caused by state changes
originRootcommon.Hash// hash of the state before applying mutation
rootcommon.Hash// hash of the state after applying mutation
accountsmap[common.Hash][]byte// accounts stores mutated accounts in 'slim RLP' encoding
accountsOriginmap[common.Address][]byte// accountsOrigin stores the original values of mutated accounts in 'slim RLP' encoding
// storages stores mutated slots in 'prefix-zero-trimmed' RLP format.
// The value is keyed by account hash and **storage slot key hash**.
storagesmap[common.Hash]map[common.Hash][]byte
// storagesOrigin stores the original values of mutated slots in
// 'prefix-zero-trimmed' RLP format.
// (a) the value is keyed by account hash and **storage slot key** if rawStorageKey is true;
// (b) the value is keyed by account hash and **storage slot key hash** if rawStorageKey is false;
@ -9,6 +9,14 @@ All notable changes to the tracing interface will be documented in this file.
- `GasChangeReason` has been extended with the following reasons which will be enabled only post-Verkle. There shouldn't be any gas changes with those reasons prior to the fork.
- `GasChangeWitnessContractCollisionCheck` flags the event of adding to the witness when checking for contract address collision.
## [v1.14.12]
This release contains a change in behavior for `OnCodeChange` hook.
### `OnCodeChange` change
The `OnCodeChange` hook is now called when the code of a contract is removed due to a selfdestruct. Previously, no code change was emitted on such occasions.
## [v1.14.4]
This release contained only minor extensions to the tracing interface.
@ -727,6 +730,9 @@ func (api *ConsensusAPI) NewPayloadWithWitnessV4(params engine.ExecutableData, v
returnengine.PayloadStatusV1{Status:engine.INVALID},engine.UnsupportedFork.With(errors.New("newPayloadWithWitnessV4 must only be called for prague payloads"))
accountListSorted[]common.Hash// List of account for iteration. If it exists, it's sorted, otherwise it's nil
storageListSortedmap[common.Hash][]common.Hash// List of storage slots for iterated retrievals, one per account. Any existing lists are sorted if non-nil
rawStorageKeybool// indicates whether the storage set uses the raw slot key or the hash
// Lock for guarding the two lists above. These lists might be accessed
// concurrently and lock protection is essential to avoid concurrent
// slice or map read/write.
@ -72,7 +74,7 @@ type stateSet struct {
}
// newStates constructs the state set with the provided account and storage data.