contract

package
v0.13.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2024 License: GPL-3.0, LGPL-3.0 Imports: 12 Imported by: 0

Documentation

Overview

Defines the interface for the configuration and execution of a precompile contract

Package contract is a generated GoMock package.

Index

Constants

View Source
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

View Source
const (
	SelectorLen = 4
)

Variables

This section is empty.

Functions

func CalculateFunctionSelector

func CalculateFunctionSelector(functionSignature string) []byte

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

func DeductGas(suppliedGas uint64, requiredGas uint64) (uint64, error)

DeductGas checks if [suppliedGas] is sufficient against [requiredGas] and deducts [requiredGas] from [suppliedGas].

func ParseABI

func ParseABI(rawABI string) abi.ABI

ParseABI parses the given ABI string and returns the parsed ABI. If the ABI is invalid, it panics.

Types

type AccessibleState

type AccessibleState interface {
	GetStateDB() StateDB
	GetBlockContext() BlockContext
	GetSnowContext() *snow.Context
	GetChainConfig() precompileconfig.ChainConfig
	NativeAssetCall(caller common.Address, input []byte, suppliedGas uint64, gasCost uint64, readOnly bool) (ret []byte, remainingGas uint64, err error)
}

AccessibleState defines the interface exposed to stateful precompile contracts

type ActivationFunc

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 BlockContext interface {
	ConfigurationBlockContext
	// GetResults returns an arbitrary byte array result of verifying the predicates
	// of the given transaction, precompile address pair.
	GetPredicateResults(txHash common.Hash, precompileAddress common.Address) []byte
}

type ConfigurationBlockContext

type ConfigurationBlockContext interface {
	Number() *big.Int
	Timestamp() uint64
}

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

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

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockAccessibleState) GetBlockContext

func (m *MockAccessibleState) GetBlockContext() BlockContext

GetBlockContext mocks base method.

func (*MockAccessibleState) GetChainConfig

func (m *MockAccessibleState) GetChainConfig() precompileconfig.ChainConfig

GetChainConfig mocks base method.

func (*MockAccessibleState) GetSnowContext

func (m *MockAccessibleState) GetSnowContext() *snow.Context

GetSnowContext mocks base method.

func (*MockAccessibleState) GetStateDB

func (m *MockAccessibleState) GetStateDB() StateDB

GetStateDB mocks base method.

func (*MockAccessibleState) NativeAssetCall

func (m *MockAccessibleState) NativeAssetCall(arg0 common.Address, arg1 []byte, arg2, arg3 uint64, arg4 bool) ([]byte, uint64, error)

NativeAssetCall mocks base method.

type MockAccessibleStateMockRecorder

type MockAccessibleStateMockRecorder struct {
	// contains filtered or unexported fields
}

MockAccessibleStateMockRecorder is the mock recorder for MockAccessibleState.

func (*MockAccessibleStateMockRecorder) GetBlockContext

func (mr *MockAccessibleStateMockRecorder) GetBlockContext() *gomock.Call

GetBlockContext indicates an expected call of GetBlockContext.

func (*MockAccessibleStateMockRecorder) GetChainConfig

func (mr *MockAccessibleStateMockRecorder) GetChainConfig() *gomock.Call

GetChainConfig indicates an expected call of GetChainConfig.

func (*MockAccessibleStateMockRecorder) GetSnowContext

func (mr *MockAccessibleStateMockRecorder) GetSnowContext() *gomock.Call

GetSnowContext indicates an expected call of GetSnowContext.

func (*MockAccessibleStateMockRecorder) GetStateDB

func (mr *MockAccessibleStateMockRecorder) GetStateDB() *gomock.Call

GetStateDB indicates an expected call of GetStateDB.

func (*MockAccessibleStateMockRecorder) NativeAssetCall

func (mr *MockAccessibleStateMockRecorder) NativeAssetCall(arg0, arg1, arg2, arg3, arg4 any) *gomock.Call

NativeAssetCall indicates an expected call of NativeAssetCall.

type MockBlockContext

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

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockBlockContext) GetPredicateResults

func (m *MockBlockContext) GetPredicateResults(arg0 common.Hash, arg1 common.Address) []byte

GetPredicateResults mocks base method.

func (*MockBlockContext) Number

func (m *MockBlockContext) Number() *big.Int

Number mocks base method.

func (*MockBlockContext) Timestamp

func (m *MockBlockContext) Timestamp() uint64

Timestamp mocks base method.

type MockBlockContextMockRecorder

type MockBlockContextMockRecorder struct {
	// contains filtered or unexported fields
}

MockBlockContextMockRecorder is the mock recorder for MockBlockContext.

func (*MockBlockContextMockRecorder) GetPredicateResults

func (mr *MockBlockContextMockRecorder) GetPredicateResults(arg0, arg1 any) *gomock.Call

GetPredicateResults indicates an expected call of GetPredicateResults.

func (*MockBlockContextMockRecorder) Number

Number indicates an expected call of Number.

func (*MockBlockContextMockRecorder) Timestamp

func (mr *MockBlockContextMockRecorder) Timestamp() *gomock.Call

Timestamp indicates an expected call of Timestamp.

type MockStateDB

type MockStateDB struct {
	// contains filtered or unexported fields
}

MockStateDB is a mock of StateDB interface.

func NewMockStateDB

func NewMockStateDB(ctrl *gomock.Controller) *MockStateDB

NewMockStateDB creates a new mock instance.

func (*MockStateDB) AddBalance

func (m *MockStateDB) AddBalance(arg0 common.Address, arg1 *big.Int)

AddBalance mocks base method.

func (*MockStateDB) AddLog

func (m *MockStateDB) AddLog(arg0 common.Address, arg1 []common.Hash, arg2 []byte, arg3 uint64)

AddLog mocks base method.

func (*MockStateDB) CreateAccount

func (m *MockStateDB) CreateAccount(arg0 common.Address)

CreateAccount mocks base method.

func (*MockStateDB) EXPECT

func (m *MockStateDB) EXPECT() *MockStateDBMockRecorder

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockStateDB) Exist

func (m *MockStateDB) Exist(arg0 common.Address) bool

Exist mocks base method.

func (*MockStateDB) GetBalance

func (m *MockStateDB) GetBalance(arg0 common.Address) *big.Int

GetBalance mocks base method.

func (*MockStateDB) GetBalanceMultiCoin

func (m *MockStateDB) GetBalanceMultiCoin(arg0 common.Address, arg1 common.Hash) *big.Int

GetBalanceMultiCoin mocks base method.

func (*MockStateDB) GetLogData

func (m *MockStateDB) GetLogData() ([][]common.Hash, [][]byte)

GetLogData mocks base method.

func (*MockStateDB) GetNonce

func (m *MockStateDB) GetNonce(arg0 common.Address) uint64

GetNonce mocks base method.

func (*MockStateDB) GetPredicateStorageSlots

func (m *MockStateDB) GetPredicateStorageSlots(arg0 common.Address, arg1 int) ([]byte, bool)

GetPredicateStorageSlots mocks base method.

func (*MockStateDB) GetState

func (m *MockStateDB) GetState(arg0 common.Address, arg1 common.Hash) common.Hash

GetState mocks base method.

func (*MockStateDB) GetTxHash

func (m *MockStateDB) GetTxHash() common.Hash

GetTxHash mocks base method.

func (*MockStateDB) RevertToSnapshot

func (m *MockStateDB) RevertToSnapshot(arg0 int)

RevertToSnapshot mocks base method.

func (*MockStateDB) SetNonce

func (m *MockStateDB) SetNonce(arg0 common.Address, arg1 uint64)

SetNonce mocks base method.

func (*MockStateDB) SetPredicateStorageSlots

func (m *MockStateDB) SetPredicateStorageSlots(arg0 common.Address, arg1 [][]byte)

SetPredicateStorageSlots mocks base method.

func (*MockStateDB) SetState

func (m *MockStateDB) SetState(arg0 common.Address, arg1, arg2 common.Hash)

SetState mocks base method.

func (*MockStateDB) Snapshot

func (m *MockStateDB) Snapshot() int

Snapshot mocks base method.

type MockStateDBMockRecorder

type MockStateDBMockRecorder struct {
	// contains filtered or unexported fields
}

MockStateDBMockRecorder is the mock recorder for MockStateDB.

func (*MockStateDBMockRecorder) AddBalance

func (mr *MockStateDBMockRecorder) AddBalance(arg0, arg1 any) *gomock.Call

AddBalance indicates an expected call of AddBalance.

func (*MockStateDBMockRecorder) AddLog

func (mr *MockStateDBMockRecorder) AddLog(arg0, arg1, arg2, arg3 any) *gomock.Call

AddLog indicates an expected call of AddLog.

func (*MockStateDBMockRecorder) CreateAccount

func (mr *MockStateDBMockRecorder) CreateAccount(arg0 any) *gomock.Call

CreateAccount indicates an expected call of CreateAccount.

func (*MockStateDBMockRecorder) Exist

func (mr *MockStateDBMockRecorder) Exist(arg0 any) *gomock.Call

Exist indicates an expected call of Exist.

func (*MockStateDBMockRecorder) GetBalance

func (mr *MockStateDBMockRecorder) GetBalance(arg0 any) *gomock.Call

GetBalance indicates an expected call of GetBalance.

func (*MockStateDBMockRecorder) GetBalanceMultiCoin

func (mr *MockStateDBMockRecorder) GetBalanceMultiCoin(arg0, arg1 any) *gomock.Call

GetBalanceMultiCoin indicates an expected call of GetBalanceMultiCoin.

func (*MockStateDBMockRecorder) GetLogData

func (mr *MockStateDBMockRecorder) GetLogData() *gomock.Call

GetLogData indicates an expected call of GetLogData.

func (*MockStateDBMockRecorder) GetNonce

func (mr *MockStateDBMockRecorder) GetNonce(arg0 any) *gomock.Call

GetNonce indicates an expected call of GetNonce.

func (*MockStateDBMockRecorder) GetPredicateStorageSlots

func (mr *MockStateDBMockRecorder) GetPredicateStorageSlots(arg0, arg1 any) *gomock.Call

GetPredicateStorageSlots indicates an expected call of GetPredicateStorageSlots.

func (*MockStateDBMockRecorder) GetState

func (mr *MockStateDBMockRecorder) GetState(arg0, arg1 any) *gomock.Call

GetState indicates an expected call of GetState.

func (*MockStateDBMockRecorder) GetTxHash

func (mr *MockStateDBMockRecorder) GetTxHash() *gomock.Call

GetTxHash indicates an expected call of GetTxHash.

func (*MockStateDBMockRecorder) RevertToSnapshot

func (mr *MockStateDBMockRecorder) RevertToSnapshot(arg0 any) *gomock.Call

RevertToSnapshot indicates an expected call of RevertToSnapshot.

func (*MockStateDBMockRecorder) SetNonce

func (mr *MockStateDBMockRecorder) SetNonce(arg0, arg1 any) *gomock.Call

SetNonce indicates an expected call of SetNonce.

func (*MockStateDBMockRecorder) SetPredicateStorageSlots

func (mr *MockStateDBMockRecorder) SetPredicateStorageSlots(arg0, arg1 any) *gomock.Call

SetPredicateStorageSlots indicates an expected call of SetPredicateStorageSlots.

func (*MockStateDBMockRecorder) SetState

func (mr *MockStateDBMockRecorder) SetState(arg0, arg1, arg2 any) *gomock.Call

SetState indicates an expected call of SetState.

func (*MockStateDBMockRecorder) Snapshot

func (mr *MockStateDBMockRecorder) Snapshot() *gomock.Call

Snapshot indicates an expected call of Snapshot.

type RunStatefulPrecompileFunc

type RunStatefulPrecompileFunc func(accessibleState AccessibleState, caller common.Address, addr common.Address, input []byte, suppliedGas uint64, readOnly bool) (ret []byte, remainingGas uint64, err error)

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)
	GetBalanceMultiCoin(common.Address, common.Hash) *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

	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

func NewStatefulPrecompileFunctionWithActivator(selector []byte, execute RunStatefulPrecompileFunc, activation ActivationFunc) *StatefulPrecompileFunction

func (*StatefulPrecompileFunction) IsActivated

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL