Documentation ¶
Overview ¶
Package ante defines the SDK auth module's AnteHandler as well as an internal AnteHandler for an Ethereum transaction (i.e MsgEthereumTx).
During CheckTx, the transaction is passed through a series of pre-message execution validation checks such as signature and account verification in addition to minimum fees being checked. Otherwise, during DeliverTx, the transaction is simply passed to the EVM which will also perform the same series of checks. The distinction is made in CheckTx to prevent spam and DoS attacks.
Index ¶
- func DefaultSigVerificationGasConsumer(meter sdk.GasMeter, sig signing.SignatureV2, params authtypes.Params) error
- func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error)
- func Recover(logger tmlog.Logger, err *error)
- func VerifySignature(pubKey cryptotypes.PubKey, signerData authsigning.SignerData, ...) error
- type CanTransferDecorator
- type EVMKeeper
- type Eip712SigVerificationDecorator
- type EthAccountVerificationDecorator
- type EthEmitEventDecorator
- type EthGasConsumeDecorator
- type EthIncrementSenderSequenceDecorator
- type EthMempoolFeeDecorator
- type EthMinGasPriceDecorator
- type EthSetupContextDecorator
- type EthSigVerificationDecorator
- type EthValidateBasicDecorator
- type EthVestingTransactionDecorator
- type FeeMarketKeeper
- type GasWantedDecorator
- type HandlerOptions
- type MinGasPriceDecorator
- type RejectMessagesDecorator
- type VestingDelegationDecorator
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DefaultSigVerificationGasConsumer ¶
func DefaultSigVerificationGasConsumer( meter sdk.GasMeter, sig signing.SignatureV2, params authtypes.Params, ) error
DefaultSigVerificationGasConsumer is the default implementation of SignatureVerificationGasConsumer. It consumes gas for signature verification based upon the public key type. The cost is fetched from the given params and is matched by the concrete type.
func NewAnteHandler ¶
func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error)
NewAnteHandler returns an ante handler responsible for attempting to route an Ethereum or SDK transaction to an internal ante handler for performing transaction-level processing (e.g. fee payment, signature verification) before being passed onto it's respective handler.
func VerifySignature ¶
func VerifySignature( pubKey cryptotypes.PubKey, signerData authsigning.SignerData, sigData signing.SignatureData, _ authsigning.SignModeHandler, tx authsigning.Tx, ) error
VerifySignature verifies a transaction signature contained in SignatureData abstracting over different signing modes and single vs multi-signatures.
Types ¶
type CanTransferDecorator ¶
type CanTransferDecorator struct {
// contains filtered or unexported fields
}
CanTransferDecorator checks if the sender is allowed to transfer funds according to the EVM block context rules.
func NewCanTransferDecorator ¶
func NewCanTransferDecorator(evmKeeper EVMKeeper) CanTransferDecorator
NewCanTransferDecorator creates a new CanTransferDecorator instance.
func (CanTransferDecorator) AnteHandle ¶
func (ctd CanTransferDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error)
AnteHandle creates an EVM from the message and calls the BlockContext CanTransfer function to see if the address can execute the transaction.
type EVMKeeper ¶
type EVMKeeper interface { statedb.Keeper ChainID() *big.Int GetParams(ctx sdk.Context) evmtypes.Params NewEVM(ctx sdk.Context, msg core.Message, cfg *evmtypes.EVMConfig, tracer vm.EVMLogger, stateDB vm.StateDB) *vm.EVM DeductTxCostsFromUserBalance( ctx sdk.Context, msgEthTx evmtypes.MsgEthereumTx, txData evmtypes.TxData, denom string, homestead, istanbul, london bool, ) (sdk.Coins, error) GetBaseFee(ctx sdk.Context, ethCfg *params.ChainConfig) *big.Int GetBalance(ctx sdk.Context, addr common.Address) *big.Int ResetTransientGasUsed(ctx sdk.Context) GetTxIndexTransient(ctx sdk.Context) uint64 }
EVMKeeper defines the expected keeper interface used on the Eth AnteHandler
type Eip712SigVerificationDecorator ¶
type Eip712SigVerificationDecorator struct {
// contains filtered or unexported fields
}
Eip712SigVerificationDecorator Verify all signatures for a tx and return an error if any are invalid. Note, the Eip712SigVerificationDecorator decorator will not get executed on ReCheck.
CONTRACT: Pubkeys are set in context for all signers before this decorator runs CONTRACT: Tx must implement SigVerifiableTx interface
func NewEip712SigVerificationDecorator ¶
func NewEip712SigVerificationDecorator(ak evmtypes.AccountKeeper, signModeHandler authsigning.SignModeHandler) Eip712SigVerificationDecorator
NewEip712SigVerificationDecorator creates a new Eip712SigVerificationDecorator
func (Eip712SigVerificationDecorator) AnteHandle ¶
func (svd Eip712SigVerificationDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle handles validation of EIP712 signed cosmos txs. it is not run on RecheckTx
type EthAccountVerificationDecorator ¶
type EthAccountVerificationDecorator struct {
// contains filtered or unexported fields
}
EthAccountVerificationDecorator validates an account balance checks
func NewEthAccountVerificationDecorator ¶
func NewEthAccountVerificationDecorator(ak evmtypes.AccountKeeper, ek EVMKeeper) EthAccountVerificationDecorator
NewEthAccountVerificationDecorator creates a new EthAccountVerificationDecorator
func (EthAccountVerificationDecorator) AnteHandle ¶
func (avd EthAccountVerificationDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle validates checks that the sender balance is greater than the total transaction cost. The account will be set to store if it doesn't exis, i.e cannot be found on store. This AnteHandler decorator will fail if: - any of the msgs is not a MsgEthereumTx - from address is empty - account balance is lower than the transaction cost
type EthEmitEventDecorator ¶
type EthEmitEventDecorator struct {
// contains filtered or unexported fields
}
EthEmitEventDecorator emit events in ante handler in case of tx execution failed (out of block gas limit).
func NewEthEmitEventDecorator ¶
func NewEthEmitEventDecorator(evmKeeper EVMKeeper) EthEmitEventDecorator
NewEthEmitEventDecorator creates a new EthEmitEventDecorator
func (EthEmitEventDecorator) AnteHandle ¶
func (eeed EthEmitEventDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle emits some basic events for the eth messages
type EthGasConsumeDecorator ¶
type EthGasConsumeDecorator struct {
// contains filtered or unexported fields
}
EthGasConsumeDecorator validates enough intrinsic gas for the transaction and gas consumption.
func NewEthGasConsumeDecorator ¶
func NewEthGasConsumeDecorator( evmKeeper EVMKeeper, maxGasWanted uint64, ) EthGasConsumeDecorator
NewEthGasConsumeDecorator creates a new EthGasConsumeDecorator
func (EthGasConsumeDecorator) AnteHandle ¶
func (egcd EthGasConsumeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle validates that the Ethereum tx message has enough to cover intrinsic gas (during CheckTx only) and that the sender has enough balance to pay for the gas cost.
Intrinsic gas for a transaction is the amount of gas that the transaction uses before the transaction is executed. The gas is a constant value plus any cost inccured by additional bytes of data supplied with the transaction.
This AnteHandler decorator will fail if: - the message is not a MsgEthereumTx - sender account cannot be found - transaction's gas limit is lower than the intrinsic gas - user doesn't have enough balance to deduct the transaction fees (gas_limit * gas_price) - transaction or block gas meter runs out of gas - sets the gas meter limit
type EthIncrementSenderSequenceDecorator ¶
type EthIncrementSenderSequenceDecorator struct {
// contains filtered or unexported fields
}
EthIncrementSenderSequenceDecorator increments the sequence of the signers.
func NewEthIncrementSenderSequenceDecorator ¶
func NewEthIncrementSenderSequenceDecorator(ak evmtypes.AccountKeeper) EthIncrementSenderSequenceDecorator
NewEthIncrementSenderSequenceDecorator creates a new EthIncrementSenderSequenceDecorator.
func (EthIncrementSenderSequenceDecorator) AnteHandle ¶
func (issd EthIncrementSenderSequenceDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error)
AnteHandle handles incrementing the sequence of the signer (i.e sender). If the transaction is a contract creation, the nonce will be incremented during the transaction execution and not within this AnteHandler decorator.
type EthMempoolFeeDecorator ¶
type EthMempoolFeeDecorator struct {
// contains filtered or unexported fields
}
EthMempoolFeeDecorator will check if the transaction's effective fee is at least as large as the local validator's minimum gasFee (defined in validator config). If fee is too low, decorator returns error and tx is rejected from mempool. Note this only applies when ctx.CheckTx = true If fee is high enough or not CheckTx, then call next AnteHandler CONTRACT: Tx must implement FeeTx to use MempoolFeeDecorator
func NewEthMempoolFeeDecorator ¶
func NewEthMempoolFeeDecorator(ek EVMKeeper) EthMempoolFeeDecorator
func (EthMempoolFeeDecorator) AnteHandle ¶
func (mfd EthMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle ensures that the provided fees meet a minimum threshold for the validator, if this is a CheckTx. This is only for local mempool purposes, and thus is only ran on check tx. It only do the check if london hardfork not enabled or feemarket not enabled, because in that case feemarket will take over the task.
type EthMinGasPriceDecorator ¶
type EthMinGasPriceDecorator struct {
// contains filtered or unexported fields
}
EthMinGasPriceDecorator will check if the transaction's fee is at least as large as the MinGasPrices param. If fee is too low, decorator returns error and tx is rejected. This applies to both CheckTx and DeliverTx and regardless if London hard fork or fee market params (EIP-1559) are enabled. If fee is high enough, then call next AnteHandler
func NewEthMinGasPriceDecorator ¶
func NewEthMinGasPriceDecorator(fk FeeMarketKeeper, ek EVMKeeper) EthMinGasPriceDecorator
func (EthMinGasPriceDecorator) AnteHandle ¶
type EthSetupContextDecorator ¶
type EthSetupContextDecorator struct {
// contains filtered or unexported fields
}
EthSetupContextDecorator is adapted from SetUpContextDecorator from cosmos-sdk, it ignores gas consumption by setting the gas meter to infinite
func NewEthSetUpContextDecorator ¶
func NewEthSetUpContextDecorator(evmKeeper EVMKeeper) EthSetupContextDecorator
func (EthSetupContextDecorator) AnteHandle ¶
type EthSigVerificationDecorator ¶
type EthSigVerificationDecorator struct {
// contains filtered or unexported fields
}
EthSigVerificationDecorator validates an ethereum signatures
func NewEthSigVerificationDecorator ¶
func NewEthSigVerificationDecorator(ek EVMKeeper) EthSigVerificationDecorator
NewEthSigVerificationDecorator creates a new EthSigVerificationDecorator
func (EthSigVerificationDecorator) AnteHandle ¶
func (esvd EthSigVerificationDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle validates checks that the registered chain id is the same as the one on the message, and that the signer address matches the one defined on the message. It's not skipped for RecheckTx, because it set `From` address which is critical from other ante handler to work. Failure in RecheckTx will prevent tx to be included into block, especially when CheckTx succeed, in which case user won't see the error message.
type EthValidateBasicDecorator ¶
type EthValidateBasicDecorator struct {
// contains filtered or unexported fields
}
EthValidateBasicDecorator is adapted from ValidateBasicDecorator from cosmos-sdk, it ignores ErrNoSignatures
func NewEthValidateBasicDecorator ¶
func NewEthValidateBasicDecorator(ek EVMKeeper) EthValidateBasicDecorator
NewEthValidateBasicDecorator creates a new EthValidateBasicDecorator
func (EthValidateBasicDecorator) AnteHandle ¶
func (vbd EthValidateBasicDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error)
AnteHandle handles basic validation of tx
type EthVestingTransactionDecorator ¶
type EthVestingTransactionDecorator struct {
// contains filtered or unexported fields
}
EthVestingTransactionDecorator validates if clawback vesting accounts are permitted to perform Ethereum Tx.
func NewEthVestingTransactionDecorator ¶
func NewEthVestingTransactionDecorator(ak evmtypes.AccountKeeper) EthVestingTransactionDecorator
func (EthVestingTransactionDecorator) AnteHandle ¶
func (vtd EthVestingTransactionDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle validates that a clawback vesting account has surpassed the vesting cliff and lockup period.
This AnteHandler decorator will fail if:
- the message is not a MsgEthereumTx
- sender account cannot be found
- sender account is not a ClawbackvestingAccount
- blocktime is before surpassing vesting cliff end (with zero vested coins) AND
- blocktime is before surpassing all lockup periods (with non-zero locked coins)
type FeeMarketKeeper ¶
type FeeMarketKeeper interface { GetParams(ctx sdk.Context) (params feemarkettypes.Params) AddTransientGasWanted(ctx sdk.Context, gasWanted uint64) (uint64, error) }
FeeMarketKeeper defines the expected keeper interface used on the AnteHandler
type GasWantedDecorator ¶
type GasWantedDecorator struct {
// contains filtered or unexported fields
}
GasWantedDecorator keeps track of the gasWanted amount on the current block in transient store for BaseFee calculation. NOTE: This decorator does not perform any validation
func NewGasWantedDecorator ¶
func NewGasWantedDecorator( evmKeeper EVMKeeper, feeMarketKeeper FeeMarketKeeper, ) GasWantedDecorator
NewGasWantedDecorator creates a new NewGasWantedDecorator
func (GasWantedDecorator) AnteHandle ¶
type HandlerOptions ¶
type HandlerOptions struct { AccountKeeper evmtypes.AccountKeeper BankKeeper evmtypes.BankKeeper IBCKeeper *ibckeeper.Keeper FeeMarketKeeper evmtypes.FeeMarketKeeper EvmKeeper EVMKeeper FeegrantKeeper ante.FeegrantKeeper SignModeHandler authsigning.SignModeHandler SigGasConsumer func(meter sdk.GasMeter, sig signing.SignatureV2, params authtypes.Params) error MaxTxGasWanted uint64 }
HandlerOptions extend the SDK's AnteHandler options by requiring the IBC channel keeper, EVM Keeper and Fee Market Keeper.
type MinGasPriceDecorator ¶
type MinGasPriceDecorator struct {
// contains filtered or unexported fields
}
MinGasPriceDecorator will check if the transaction's fee is at least as large as the MinGasPrices param. If fee is too low, decorator returns error and tx is rejected. This applies for both CheckTx and DeliverTx If fee is high enough, then call next AnteHandler CONTRACT: Tx must implement FeeTx to use MinGasPriceDecorator
func NewMinGasPriceDecorator ¶
func NewMinGasPriceDecorator(fk FeeMarketKeeper, ek EVMKeeper) MinGasPriceDecorator
func (MinGasPriceDecorator) AnteHandle ¶
type RejectMessagesDecorator ¶
type RejectMessagesDecorator struct{}
RejectMessagesDecorator prevents invalid msg types from being executed
func (RejectMessagesDecorator) AnteHandle ¶
func (rmd RejectMessagesDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle rejects messages that requires ethereum-specific authentication. For example `MsgEthereumTx` requires fee to be deducted in the antehandler in order to perform the refund.
type VestingDelegationDecorator ¶
type VestingDelegationDecorator struct {
// contains filtered or unexported fields
}
VestingDelegationDecorator validates delegation of vested coins
func NewVestingDelegationDecorator ¶
func NewVestingDelegationDecorator(ak evmtypes.AccountKeeper, sk vestingtypes.StakingKeeper, cdc codec.BinaryCodec) VestingDelegationDecorator
NewVestingDelegationDecorator creates a new VestingDelegationDecorator
func (VestingDelegationDecorator) AnteHandle ¶
func (vdd VestingDelegationDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error)
AnteHandle checks if the tx contains a staking delegation. It errors if the coins are still locked or the bond amount is greater than the coins already vested