mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-20 13:44:31 +00:00
* feat: pseudo-generic extra payloads in `params.ChainConfig` and `params.Rules` * feat: `params.ExtraPayloadGetter` for end-user type safety * refactor: payloads only available through `params.ExtraPayloadGetter` * chore: make `libevm/examples/extraparams` a `params` testable example * doc: `libevm/pseudo` package comments and improved readability * doc: `params.*Extra*` comments and improved readability * doc: `params.ExtraPayloadGetter` comments and improved readability * doc: `params/config.libevm_test.go` comments and improved readability * refactor: simplify `params.ChainConfig.UnmarshalJSON()` * refactor: abstract new/nil-pointer creation into `pseudo.Constructor`s * feat: precompile override via `params.Extras` hooks * doc: flesh out `PrecompileOverride()` in example * doc: complete commentary and improve readability * refactor: `ChainConfig.Hooks()` + `Rules` equivalent * chore: rename precompiles test file in keeping with geth equivalent * feat: stateful precompiles + allowlist hooks The allowlist hooks are included in this commit because they allow for the same functionality as stateful precompiles in `ava-labs/coreth` and `ava-labs/subnet-evm`. * fix: `StateTransition.canExecuteTransaction()` used `msg.From` instead of `To` * test: `params.RulesHooks.CanCreateContract` integration * test: `params.RulesHooks.CanExecuteTransaction` integration * test: `vm.NewStatefulPrecompile()` integration * refactor: simplify test of `CanCreateContract` * refactor: abstract generation of random `Address`/`Hash` values * doc: full documentation + readability refactoring/renaming * fix: remove circular dependency in tests
52 lines
1.6 KiB
Go
52 lines
1.6 KiB
Go
package libevm
|
|
|
|
import (
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/holiman/uint256"
|
|
)
|
|
|
|
// PrecompiledContract is an exact copy of vm.PrecompiledContract, mirrored here
|
|
// for instances where importing that package would result in a circular
|
|
// dependency.
|
|
type PrecompiledContract interface {
|
|
RequiredGas(input []byte) uint64
|
|
Run(input []byte) ([]byte, error)
|
|
}
|
|
|
|
// StateReader is a subset of vm.StateDB, exposing only methods that read from
|
|
// but do not modify state. See method comments in vm.StateDB, which aren't
|
|
// copied here as they risk becoming outdated.
|
|
type StateReader interface {
|
|
GetBalance(common.Address) *uint256.Int
|
|
GetNonce(common.Address) uint64
|
|
|
|
GetCodeHash(common.Address) common.Hash
|
|
GetCode(common.Address) []byte
|
|
GetCodeSize(common.Address) int
|
|
|
|
GetRefund() uint64
|
|
|
|
GetCommittedState(common.Address, common.Hash) common.Hash
|
|
GetState(common.Address, common.Hash) common.Hash
|
|
|
|
GetTransientState(addr common.Address, key common.Hash) common.Hash
|
|
|
|
HasSelfDestructed(common.Address) bool
|
|
|
|
Exist(common.Address) bool
|
|
Empty(common.Address) bool
|
|
|
|
AddressInAccessList(addr common.Address) bool
|
|
SlotInAccessList(addr common.Address, slot common.Hash) (addressOk bool, slotOk bool)
|
|
}
|
|
|
|
// AddressContext carries addresses available to contexts such as calls and
|
|
// contract creation.
|
|
//
|
|
// With respect to contract creation, the Self address MAY be the predicted
|
|
// address of the contract about to be deployed, which may not exist yet.
|
|
type AddressContext struct {
|
|
Origin common.Address // equivalent to vm.ORIGIN op code
|
|
Caller common.Address // equivalent to vm.CALLER op code
|
|
Self common.Address // equivalent to vm.ADDRESS op code
|
|
}
|