mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 17:31:39 +00:00
130 lines
5.0 KiB
Go
130 lines
5.0 KiB
Go
package ante
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
|
||
|
|
addresscodec "cosmossdk.io/core/address"
|
||
|
|
errorsmod "cosmossdk.io/errors"
|
||
|
|
storetypes "cosmossdk.io/store/types"
|
||
|
|
circuitkeeper "cosmossdk.io/x/circuit/keeper"
|
||
|
|
txsigning "cosmossdk.io/x/tx/signing"
|
||
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
||
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||
|
|
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
|
||
|
|
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||
|
|
"github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||
|
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||
|
|
anteinterfaces "github.com/cosmos/evm/ante/interfaces"
|
||
|
|
ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper"
|
||
|
|
)
|
||
|
|
|
||
|
|
// WebAuthnKeeperInterface defines the required methods from the DID keeper for WebAuthn gasless processing
|
||
|
|
type WebAuthnKeeperInterface interface {
|
||
|
|
// HasExistingCredential checks if this credential ID already exists
|
||
|
|
HasExistingCredential(ctx sdk.Context, credentialId string) bool
|
||
|
|
}
|
||
|
|
|
||
|
|
// BankKeeper defines the contract needed for supply related APIs.
|
||
|
|
// It provides methods for checking send permissions and transferring coins
|
||
|
|
// between accounts and modules.
|
||
|
|
type BankKeeper interface {
|
||
|
|
IsSendEnabledCoins(ctx context.Context, coins ...sdk.Coin) error
|
||
|
|
SendCoins(ctx context.Context, from, to sdk.AccAddress, amt sdk.Coins) error
|
||
|
|
SendCoinsFromAccountToModule(
|
||
|
|
ctx context.Context,
|
||
|
|
senderAddr sdk.AccAddress,
|
||
|
|
recipientModule string,
|
||
|
|
amt sdk.Coins,
|
||
|
|
) error
|
||
|
|
}
|
||
|
|
|
||
|
|
// AccountKeeper defines the account management interface required by ante handlers.
|
||
|
|
// It provides methods for account creation, retrieval, modification, and
|
||
|
|
// sequence number management.
|
||
|
|
type AccountKeeper interface {
|
||
|
|
NewAccountWithAddress(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
|
||
|
|
GetModuleAddress(moduleName string) sdk.AccAddress
|
||
|
|
GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
|
||
|
|
SetAccount(ctx context.Context, account sdk.AccountI)
|
||
|
|
RemoveAccount(ctx context.Context, account sdk.AccountI)
|
||
|
|
GetParams(ctx context.Context) (params authtypes.Params)
|
||
|
|
GetSequence(ctx context.Context, addr sdk.AccAddress) (uint64, error)
|
||
|
|
AddressCodec() addresscodec.Codec
|
||
|
|
}
|
||
|
|
|
||
|
|
// HandlerOptions defines the list of module keepers and configurations required
|
||
|
|
// to run the ante handler decorators. It includes both standard Cosmos SDK
|
||
|
|
// keepers and EVM-specific components for processing different transaction types.
|
||
|
|
type HandlerOptions struct {
|
||
|
|
Cdc codec.BinaryCodec
|
||
|
|
AccountKeeper AccountKeeper
|
||
|
|
BankKeeper BankKeeper
|
||
|
|
FeegrantKeeper ante.FeegrantKeeper
|
||
|
|
ExtensionOptionChecker ante.ExtensionOptionChecker
|
||
|
|
SignModeHandler *txsigning.HandlerMap
|
||
|
|
SigGasConsumer func(meter storetypes.GasMeter, sig signing.SignatureV2, params authtypes.Params) error
|
||
|
|
TxFeeChecker ante.TxFeeChecker // safe to be nil
|
||
|
|
|
||
|
|
MaxTxGasWanted uint64
|
||
|
|
FeeMarketKeeper anteinterfaces.FeeMarketKeeper
|
||
|
|
EvmKeeper anteinterfaces.EVMKeeper
|
||
|
|
ControlPanelKeeper anteinterfaces.ControlPanelKeeper
|
||
|
|
|
||
|
|
IBCKeeper *ibckeeper.Keeper
|
||
|
|
CircuitKeeper *circuitkeeper.Keeper
|
||
|
|
|
||
|
|
// WebAuthn gasless transaction support
|
||
|
|
DidKeeper WebAuthnKeeperInterface
|
||
|
|
EnableEnhancedGasless bool // Enable enhanced gasless mode for true onboarding without pre-existing accounts
|
||
|
|
|
||
|
|
// UCAN module keepers for permission validation
|
||
|
|
DwnKeeper interface{} // Will be cast to proper type in decorator
|
||
|
|
DexKeeper interface{} // Will be cast to proper type in decorator
|
||
|
|
SvcKeeper interface{} // Will be cast to proper type in decorator
|
||
|
|
}
|
||
|
|
|
||
|
|
// Validate checks if all required keepers and handlers are properly initialized.
|
||
|
|
// It ensures that the HandlerOptions struct has all necessary components to
|
||
|
|
// process transactions without nil pointer errors.
|
||
|
|
func (options HandlerOptions) Validate() error {
|
||
|
|
if options.Cdc == nil {
|
||
|
|
return errorsmod.Wrap(errortypes.ErrLogic, "codec is required for AnteHandler")
|
||
|
|
}
|
||
|
|
if options.AccountKeeper == nil {
|
||
|
|
return errorsmod.Wrap(errortypes.ErrLogic, "account keeper is required for AnteHandler")
|
||
|
|
}
|
||
|
|
if options.BankKeeper == nil {
|
||
|
|
return errorsmod.Wrap(errortypes.ErrLogic, "bank keeper is required for AnteHandler")
|
||
|
|
}
|
||
|
|
if options.SigGasConsumer == nil {
|
||
|
|
return errorsmod.Wrap(
|
||
|
|
errortypes.ErrLogic,
|
||
|
|
"signature gas consumer is required for AnteHandler",
|
||
|
|
)
|
||
|
|
}
|
||
|
|
if options.SignModeHandler == nil {
|
||
|
|
return errorsmod.Wrap(errortypes.ErrLogic, "sign mode handler is required for AnteHandler")
|
||
|
|
}
|
||
|
|
if options.CircuitKeeper == nil {
|
||
|
|
return errorsmod.Wrap(errortypes.ErrLogic, "circuit keeper is required for ante builder")
|
||
|
|
}
|
||
|
|
|
||
|
|
if options.TxFeeChecker == nil {
|
||
|
|
return errorsmod.Wrap(errortypes.ErrLogic, "tx fee checker is required for AnteHandler")
|
||
|
|
}
|
||
|
|
if options.FeeMarketKeeper == nil {
|
||
|
|
return errorsmod.Wrap(errortypes.ErrLogic, "fee market keeper is required for AnteHandler")
|
||
|
|
}
|
||
|
|
if options.EvmKeeper == nil {
|
||
|
|
return errorsmod.Wrap(errortypes.ErrLogic, "evm keeper is required for AnteHandler")
|
||
|
|
}
|
||
|
|
if options.ControlPanelKeeper == nil {
|
||
|
|
return errorsmod.Wrap(
|
||
|
|
errortypes.ErrLogic,
|
||
|
|
"control panel keeper is required for AnteHandler",
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|