Documentation ¶
Overview ¶
Defines the interface for the configuration and execution of a precompile contract
Package contract is a generated GoMock package.
Index ¶
- Constants
- func CalculateFunctionSelector(functionSignature string) []byte
- func DeductGas(suppliedGas uint64, requiredGas uint64) (uint64, error)
- func IsDurangoActivated(evm AccessibleState) bool
- func PackOrderedHashes(dst []byte, hashes []common.Hash) error
- func PackOrderedHashesWithSelector(dst []byte, functionSelector []byte, hashes []common.Hash) error
- func PackedHash(packed []byte, index int) []byte
- func ParseABI(rawABI string) abi.ABI
- type AccessibleState
- type ActivationFunc
- type BlockContext
- type ConfigurationBlockContext
- type Configurator
- type MockAccessibleState
- func (m *MockAccessibleState) EXPECT() *MockAccessibleStateMockRecorder
- func (m *MockAccessibleState) GetBlockContext() BlockContext
- func (m *MockAccessibleState) GetChainConfig() precompileconfig.ChainConfig
- func (m *MockAccessibleState) GetSnowContext() *snow.Context
- func (m *MockAccessibleState) GetStateDB() StateDB
- type MockAccessibleStateMockRecorder
- type MockBlockContext
- type MockBlockContextMockRecorder
- type RunStatefulPrecompileFunc
- type StateDB
- type StatefulPrecompileFunction
- type StatefulPrecompiledContract
Constants ¶
const ( WriteGasCostPerSlot = 20_000 ReadGasCostPerSlot = 5_000 // Per LOG operation. LogGas uint64 = 375 // from params/protocol_params.go // Gas cost of single topic of the LOG. Should be multiplied by the number of topics. LogTopicGas uint64 = 375 // from params/protocol_params.go // Per byte cost in a LOG operation's data. Should be multiplied by the byte size of the data. LogDataGas uint64 = 8 // from params/protocol_params.go )
Gas costs for stateful precompiles
const (
SelectorLen = 4
)
Variables ¶
This section is empty.
Functions ¶
func CalculateFunctionSelector ¶
CalculateFunctionSelector returns the 4 byte function selector that results from [functionSignature] Ex. the function setBalance(addr address, balance uint256) should be passed in as the string: "setBalance(address,uint256)" TODO: remove this after moving to ABI based function selectors.
func DeductGas ¶
DeductGas checks if [suppliedGas] is sufficient against [requiredGas] and deducts [requiredGas] from [suppliedGas].
func IsDurangoActivated ¶ added in v0.5.11
func IsDurangoActivated(evm AccessibleState) bool
func PackOrderedHashes ¶
PackOrderedHashes packs the ordered list of [hashes] into the [dst] byte buffer. assumes that [dst] has sufficient space to pack [hashes] or else this function will panic. Kept for testing backwards compatibility.
func PackOrderedHashesWithSelector ¶
PackOrderedHashesWithSelector packs the function selector and ordered list of hashes into [dst] byte slice. assumes that [dst] has sufficient room for [functionSelector] and [hashes]. Kept for testing backwards compatibility.
func PackedHash ¶
PackedHash returns packed the byte slice with common.HashLength from [packed] at the given [index]. Assumes that [packed] is composed entirely of packed 32 byte segments. Kept for testing backwards compatibility.
Types ¶
type AccessibleState ¶
type AccessibleState interface { GetStateDB() StateDB GetBlockContext() BlockContext GetSnowContext() *snow.Context GetChainConfig() precompileconfig.ChainConfig }
AccessibleState defines the interface exposed to stateful precompile contracts
type ActivationFunc ¶ added in v0.5.4
type ActivationFunc func(AccessibleState) bool
ActivationFunc defines a function that is used to determine if a function is active The return value is whether or not the function is active
type BlockContext ¶
type ConfigurationBlockContext ¶ added in v0.5.6
ConfigurationBlockContext defines the interface required to configure a precompile.
type Configurator ¶
type Configurator interface { MakeConfig() precompileconfig.Config Configure( chainConfig precompileconfig.ChainConfig, precompileconfig precompileconfig.Config, state StateDB, blockContext ConfigurationBlockContext, ) error }
type MockAccessibleState ¶ added in v0.5.4
type MockAccessibleState struct {
// contains filtered or unexported fields
}
MockAccessibleState is a mock of AccessibleState interface.
func NewMockAccessibleState ¶
func NewMockAccessibleState(ctrl *gomock.Controller) *MockAccessibleState
NewMockAccessibleState creates a new mock instance.
func (*MockAccessibleState) EXPECT ¶ added in v0.5.4
func (m *MockAccessibleState) EXPECT() *MockAccessibleStateMockRecorder
EXPECT returns an object that allows the caller to indicate expected use.
func (*MockAccessibleState) GetBlockContext ¶ added in v0.5.4
func (m *MockAccessibleState) GetBlockContext() BlockContext
GetBlockContext mocks base method.
func (*MockAccessibleState) GetChainConfig ¶ added in v0.5.6
func (m *MockAccessibleState) GetChainConfig() precompileconfig.ChainConfig
GetChainConfig mocks base method.
func (*MockAccessibleState) GetSnowContext ¶ added in v0.5.4
func (m *MockAccessibleState) GetSnowContext() *snow.Context
GetSnowContext mocks base method.
func (*MockAccessibleState) GetStateDB ¶ added in v0.5.4
func (m *MockAccessibleState) GetStateDB() StateDB
GetStateDB mocks base method.
type MockAccessibleStateMockRecorder ¶ added in v0.5.4
type MockAccessibleStateMockRecorder struct {
// contains filtered or unexported fields
}
MockAccessibleStateMockRecorder is the mock recorder for MockAccessibleState.
func (*MockAccessibleStateMockRecorder) GetBlockContext ¶ added in v0.5.4
func (mr *MockAccessibleStateMockRecorder) GetBlockContext() *gomock.Call
GetBlockContext indicates an expected call of GetBlockContext.
func (*MockAccessibleStateMockRecorder) GetChainConfig ¶ added in v0.5.6
func (mr *MockAccessibleStateMockRecorder) GetChainConfig() *gomock.Call
GetChainConfig indicates an expected call of GetChainConfig.
func (*MockAccessibleStateMockRecorder) GetSnowContext ¶ added in v0.5.4
func (mr *MockAccessibleStateMockRecorder) GetSnowContext() *gomock.Call
GetSnowContext indicates an expected call of GetSnowContext.
func (*MockAccessibleStateMockRecorder) GetStateDB ¶ added in v0.5.4
func (mr *MockAccessibleStateMockRecorder) GetStateDB() *gomock.Call
GetStateDB indicates an expected call of GetStateDB.
type MockBlockContext ¶ added in v0.5.4
type MockBlockContext struct {
// contains filtered or unexported fields
}
MockBlockContext is a mock of BlockContext interface.
func NewMockBlockContext ¶
func NewMockBlockContext(ctrl *gomock.Controller) *MockBlockContext
NewMockBlockContext creates a new mock instance.
func (*MockBlockContext) EXPECT ¶ added in v0.5.4
func (m *MockBlockContext) EXPECT() *MockBlockContextMockRecorder
EXPECT returns an object that allows the caller to indicate expected use.
func (*MockBlockContext) GetPredicateResults ¶ added in v0.5.4
GetPredicateResults mocks base method.
func (*MockBlockContext) Number ¶ added in v0.5.4
func (m *MockBlockContext) Number() *big.Int
Number mocks base method.
func (*MockBlockContext) Timestamp ¶ added in v0.5.4
func (m *MockBlockContext) Timestamp() uint64
Timestamp mocks base method.
type MockBlockContextMockRecorder ¶ added in v0.5.4
type MockBlockContextMockRecorder struct {
// contains filtered or unexported fields
}
MockBlockContextMockRecorder is the mock recorder for MockBlockContext.
func (*MockBlockContextMockRecorder) GetPredicateResults ¶ added in v0.5.4
func (mr *MockBlockContextMockRecorder) GetPredicateResults(arg0, arg1 any) *gomock.Call
GetPredicateResults indicates an expected call of GetPredicateResults.
func (*MockBlockContextMockRecorder) Number ¶ added in v0.5.4
func (mr *MockBlockContextMockRecorder) Number() *gomock.Call
Number indicates an expected call of Number.
func (*MockBlockContextMockRecorder) Timestamp ¶ added in v0.5.4
func (mr *MockBlockContextMockRecorder) Timestamp() *gomock.Call
Timestamp indicates an expected call of Timestamp.
type StateDB ¶
type StateDB interface { GetState(common.Address, common.Hash) common.Hash SetState(common.Address, common.Hash, common.Hash) SetNonce(common.Address, uint64) GetNonce(common.Address) uint64 GetBalance(common.Address) *big.Int AddBalance(common.Address, *big.Int) CreateAccount(common.Address) Exist(common.Address) bool AddLog(addr common.Address, topics []common.Hash, data []byte, blockNumber uint64) GetLogData() (topics [][]common.Hash, data [][]byte) GetPredicateStorageSlots(address common.Address, index int) ([]byte, bool) SetPredicateStorageSlots(address common.Address, predicates [][]byte) GetTxHash() common.Hash Suicide(common.Address) bool Finalise(deleteEmptyObjects bool) Snapshot() int RevertToSnapshot(int) }
StateDB is the interface for accessing EVM state
type StatefulPrecompileFunction ¶
type StatefulPrecompileFunction struct {
// contains filtered or unexported fields
}
StatefulPrecompileFunction defines a function implemented by a stateful precompile
func NewStatefulPrecompileFunction ¶
func NewStatefulPrecompileFunction(selector []byte, execute RunStatefulPrecompileFunc) *StatefulPrecompileFunction
NewStatefulPrecompileFunction creates a stateful precompile function with the given arguments
func NewStatefulPrecompileFunctionWithActivator ¶ added in v0.5.4
func NewStatefulPrecompileFunctionWithActivator(selector []byte, execute RunStatefulPrecompileFunc, activation ActivationFunc) *StatefulPrecompileFunction
func (*StatefulPrecompileFunction) IsActivated ¶ added in v0.5.4
func (f *StatefulPrecompileFunction) IsActivated(accessibleState AccessibleState) bool
type StatefulPrecompiledContract ¶
type StatefulPrecompiledContract interface { // Run executes the precompiled contract. Run(accessibleState AccessibleState, caller common.Address, addr common.Address, input []byte, suppliedGas uint64, readOnly bool) (ret []byte, remainingGas uint64, err error) }
StatefulPrecompiledContract is the interface for executing a precompiled contract
func NewStatefulPrecompileContract ¶
func NewStatefulPrecompileContract(fallback RunStatefulPrecompileFunc, functions []*StatefulPrecompileFunction) (StatefulPrecompiledContract, error)
NewStatefulPrecompileContract generates new StatefulPrecompile using [functions] as the available functions and [fallback] as an optional fallback if there is no input data. Note: the selector of [fallback] will be ignored, so it is required to be left empty.