common

package
v0.4.1 Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2025 License: Apache-2.0 Imports: 22 Imported by: 24

Documentation

Index

Constants

View Source
const (
	// ErrNotRunInEvm is raised when a function is not called inside the EVM.
	ErrNotRunInEvm = "not run in EVM"
	// ErrRequesterIsNotMsgSender is raised when the requester address is not the same as the msg.sender.
	ErrRequesterIsNotMsgSender = "msg.sender address %s does not match the requester address %s"
	// ErrInvalidABI is raised when the ABI cannot be parsed.
	ErrInvalidABI = "invalid ABI: %w"
	// ErrInvalidAmount is raised when the amount cannot be cast to a big.Int.
	ErrInvalidAmount = "invalid amount: %v"
	// ErrInvalidHexAddress is raised when the hex address is not valid.
	ErrInvalidHexAddress = "invalid hex address address: %s"
	// ErrInvalidDelegator is raised when the delegator address is not valid.
	ErrInvalidDelegator = "invalid delegator address: %s"
	// ErrInvalidValidator is raised when the validator address is not valid.
	ErrInvalidValidator = "invalid validator address: %s"
	// ErrInvalidDenom is raised when the denom is not valid.
	ErrInvalidDenom = "invalid denom: %s"
	// ErrInvalidMsgType is raised when the transaction type is not valid for the given precompile.
	ErrInvalidMsgType = "invalid %s transaction type: %s"
	// ErrInvalidNumberOfArgs is raised when the number of arguments is not what is expected.
	ErrInvalidNumberOfArgs = "invalid number of arguments; expected %d; got: %d"
	// ErrUnknownMethod is raised when the method is not known.
	ErrUnknownMethod = "unknown method: %s"
	// ErrIntegerOverflow is raised when an integer overflow occurs.
	ErrIntegerOverflow = "integer overflow when increasing allowance"
	// ErrNegativeAmount is raised when an amount is negative.
	ErrNegativeAmount = "negative amount when decreasing allowance"
	// ErrInvalidType is raised when the provided type is different than the expected.
	ErrInvalidType = "invalid type for %s: expected %T, received %T"
	// ErrInvalidDescription is raised when the input description cannot be cast to stakingtypes.Description{}.
	ErrInvalidDescription = "invalid description: %v"
	// ErrInvalidCommission is raised when the input commission cannot be cast to stakingtypes.CommissionRates{}.
	ErrInvalidCommission = "invalid commission: %v"
)

Variables

View Source
var TrueValue = []byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}

TrueValue is the byte array representing a true value in solidity.

Functions

func HandleGasError

func HandleGasError(ctx sdk.Context, contract *vm.Contract, initialGas storetypes.Gas, err *error) func()

HandleGasError handles the out of gas panic by resetting the gas meter and returning an error. This is used in order to avoid panics and to allow for the EVM to continue cleanup if the tx or query run out of gas.

func LoadABI

func LoadABI(fs embed.FS, path string) (abi.ABI, error)

LoadABI read the ABI file described by the path and parse it as JSON.

func MakeTopic

func MakeTopic(rule interface{}) (common.Hash, error)

MakeTopic converts a filter query argument into a filter topic. NOTE: This was copied from accounts/abi/topics.go

func NewSdkCoinsFromCoins added in v0.3.0

func NewSdkCoinsFromCoins(coins []Coin) (sdk.Coins, error)

NewSdkCoinsFromCoins converts a slice of Coin to sdk.Coins.

func PackNum

func PackNum(value reflect.Value) []byte

PackNum packs the given number (using the reflect value) and will cast it to appropriate number representation.

func ParseAmount added in v0.3.0

func ParseAmount(event sdk.Event) (*uint256.Int, error)

func ParseHexAddress added in v0.3.0

func ParseHexAddress(event sdk.Event, key string) (common.Address, error)

func ReturnRevertError added in v0.3.0

func ReturnRevertError(evm *vm.EVM, err error) ([]byte, error)

ReturnRevertError returns a ExecutionReverted error with revert reason that should align with the behavior of go-ethereum implementation.

In the EVM interpreter, an opCall error is reported as ExecutionReverted, and its revert reason is stored in EVM memory and then returned by opRevert. Since precompiles are also invoked via opCall, they should be handled the same way. Therefore, the returned error must be ABI-encoded and returned, and the error type changed to ErrExecutionReverted.

related issue: https://github.com/cosmos/evm/issues/223

func SafeAdd

func SafeAdd(a, b math.Int) (res *big.Int, overflow bool)

SafeAdd adds two integers and returns a boolean if an overflow occurs to avoid panic. TODO: Upstream this to the SDK math package.

func UnpackLog

func UnpackLog(contractABI abi.ABI, out interface{}, event string, log ethtypes.Log) error

UnpackLog unpacks a retrieved log into the provided output structure.

Types

type BalanceChangeEntry added in v0.3.0

type BalanceChangeEntry struct {
	Account common.Address
	Amount  *uint256.Int
	Op      Operation
}

func NewBalanceChangeEntry

func NewBalanceChangeEntry(acc common.Address, amt *uint256.Int, op Operation) BalanceChangeEntry

type BalanceHandler added in v0.3.0

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

BalanceHandler is a struct that handles balance changes in the Cosmos SDK context.

func NewBalanceHandler added in v0.3.0

func NewBalanceHandler() *BalanceHandler

NewBalanceHandler creates a new BalanceHandler instance.

func (*BalanceHandler) AfterBalanceChange added in v0.3.0

func (bh *BalanceHandler) AfterBalanceChange(ctx sdk.Context, stateDB *statedb.StateDB) error

AfterBalanceChange processes the recorded events and updates the stateDB accordingly. It handles the bank events for coin spent and coin received, updating the balances of the spender and receiver addresses respectively.

func (*BalanceHandler) BeforeBalanceChange added in v0.3.0

func (bh *BalanceHandler) BeforeBalanceChange(ctx sdk.Context)

BeforeBalanceChange is called before any balance changes by precompile methods. It records the current number of events in the context to later process balance changes using the recorded events.

type BankKeeper added in v0.2.0

type BankKeeper interface {
	IterateAccountBalances(ctx context.Context, account sdk.AccAddress, cb func(coin sdk.Coin) bool)
	IterateTotalSupply(ctx context.Context, cb func(coin sdk.Coin) bool)
	GetSupply(ctx context.Context, denom string) sdk.Coin
	GetDenomMetaData(ctx context.Context, denom string) (banktypes.Metadata, bool)
	SetDenomMetaData(ctx context.Context, denomMetaData banktypes.Metadata)
	GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin
	SendCoins(ctx context.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error
	SpendableCoin(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin
}

type Coin

type Coin struct {
	Denom  string
	Amount *big.Int
}

Coin defines a struct that stores all needed information about a coin in types native to the EVM.

func NewCoinsResponse

func NewCoinsResponse(amount sdk.Coins) []Coin

NewCoinsResponse converts a response to an array of Coin.

func ToCoins added in v0.3.0

func ToCoins(v interface{}) ([]Coin, error)

ToCoins converts a value returned from the ABI to a slice of Coin.

func (Coin) ToSDKType

func (c Coin) ToSDKType() sdk.Coin

ToSDKType converts the Coin to the Cosmos SDK representation.

type Dec

type Dec struct {
	Value     *big.Int
	Precision uint8
}

Dec defines a struct that represents a decimal number of a given precision in types native to the EVM.

type DecCoin

type DecCoin struct {
	Denom     string
	Amount    *big.Int
	Precision uint8
}

DecCoin defines a struct that stores all needed information about a decimal coin in types native to the EVM.

func NewDecCoinsResponse

func NewDecCoinsResponse(amount sdk.DecCoins) []DecCoin

NewDecCoinsResponse converts a response to an array of DecCoin.

type ICS20Allocation

type ICS20Allocation struct {
	SourcePort        string
	SourceChannel     string
	SpendLimit        []Coin
	AllowList         []string
	AllowedPacketData []string
}

ICS20Allocation defines the spend limit for a particular port and channel. We need this to be able to unpack to big.Int instead of math.Int.

type Operation

type Operation int8

Operation is a type that defines if the precompile call produced an addition or subtraction of an account's balance

const (
	Sub Operation = iota
	Add
)

type Precompile

type Precompile struct {
	abi.ABI
	KvGasConfig          storetypes.GasConfig
	TransientKVGasConfig storetypes.GasConfig
	// contains filtered or unexported fields
}

Precompile is a common struct for all precompiles that holds the common data each precompile needs to run which includes the ABI, Gas config.

func (Precompile) Address

func (p Precompile) Address() common.Address

func (*Precompile) GetBalanceHandler added in v0.3.0

func (p *Precompile) GetBalanceHandler() *BalanceHandler

func (Precompile) RequiredGas

func (p Precompile) RequiredGas(input []byte, isTransaction bool) uint64

RequiredGas calculates the base minimum required gas for a transaction or a query. It uses the method ID to determine if the input is a transaction or a query and uses the Cosmos SDK gas config flat cost and the flat per byte cost * len(argBz) to calculate the gas.

func (Precompile) RunSetup

func (p Precompile) RunSetup(
	evm *vm.EVM,
	contract *vm.Contract,
	readOnly bool,
	isTransaction func(name *abi.Method) bool,
) (ctx sdk.Context, stateDB *statedb.StateDB, method *abi.Method, gasConfig storetypes.Gas, args []interface{}, err error)

RunSetup runs the initial setup required to run a transaction or a query. It returns the sdk Context, EVM stateDB, ABI method, initial gas and calling arguments.

func (*Precompile) SetAddress

func (p *Precompile) SetAddress(addr common.Address)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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