keeper

package
v0.26.1 Latest Latest
Warning

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

Go to latest
Published: Jun 4, 2024 License: Apache-2.0 Imports: 28 Imported by: 4

Documentation

Index

Constants

View Source
const (
	// EvmDenom is the gas denom used by the evm
	EvmDenom = "akava"

	// CosmosDenom is the gas denom used by the kava app
	CosmosDenom = "ukava"
)

Variables

View Source
var ConversionMultiplier = sdkmath.NewInt(1_000_000_000_000)

ConversionMultiplier is the conversion multiplier between akava and ukava

Functions

func AllInvariants

func AllInvariants(bankK types.BankKeeper, k Keeper) sdk.Invariant

AllInvariants runs all invariants of the swap module

func BackedCoinsInvariant added in v0.19.0

func BackedCoinsInvariant(_ types.BankKeeper, k Keeper) sdk.Invariant

BackedCoinsInvariant iterates all conversion pairs and asserts that the sdk.Coin balances are less than the module ERC20 balance. **Note:** This compares <= and not == as anyone can send tokens to the ERC20 contract address and break the invariant if a strict equal check.

func CosmosCoinsFullyBackedInvariant added in v0.24.0

func CosmosCoinsFullyBackedInvariant(bankK types.BankKeeper, k Keeper) sdk.Invariant

CosmosCoinsFullyBackedInvariant ensures the total supply of ERC20 representations of sdk.Coins match the balances in the module account.

This invariant depends on the fact that coins can only become part of the balance through conversion to ERC20s. If in the future sdk.Coins can be sent directly to the module account, or the module account balance can be increased in any other way, this invariant should be changed from checking that the balance equals the total supply, to check that the balance is greater than or equal to the total supply.

func FullyBackedInvariant

func FullyBackedInvariant(bankK types.BankKeeper, k Keeper) sdk.Invariant

FullyBackedInvariant ensures all minor balances are backed by the coins in the module account.

The module balance can be greater than the sum of all minor balances. This can happen in rare cases where the evm module burns tokens.

func NewMsgServerImpl added in v0.19.0

func NewMsgServerImpl(keeper Keeper) types.MsgServer

NewMsgServerImpl returns an implementation of the evmutil MsgServer interface for the provided Keeper.

func NewQueryServerImpl added in v0.19.0

func NewQueryServerImpl(k Keeper) types.QueryServer

NewQueryServerImpl creates a new server for handling gRPC queries.

func RegisterInvariants

func RegisterInvariants(ir sdk.InvariantRegistry, bankK types.BankKeeper, k Keeper)

RegisterInvariants registers the swap module invariants

func SmallBalancesInvariant

func SmallBalancesInvariant(_ types.BankKeeper, k Keeper) sdk.Invariant

SmallBalancesInvariant ensures all minor balances are less than the overflow amount, beyond this they should be converted to the major denom.

func SplitAkavaCoins

func SplitAkavaCoins(coins sdk.Coins) (sdk.Coin, sdkmath.Int, error)

SplitAkavaCoins splits akava coins to the equivalent ukava coins and any remaining akava balance. An error will be returned if the coins are not valid or if the coins are not the akava denom.

func ValidateEvmCoins

func ValidateEvmCoins(coins sdk.Coins) error

ValidateEvmCoins validates the coins from evm is valid and is the EvmDenom (akava).

Types

type EvmBankKeeper

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

EvmBankKeeper is a BankKeeper wrapper for the x/evm module to allow the use of the 18 decimal akava coin on the evm. x/evm consumes gas and send coins by minting and burning akava coins in its module account and then sending the funds to the target account. This keeper uses both the ukava coin and a separate akava balance to manage the extra percision needed by the evm.

func NewEvmBankKeeper

func NewEvmBankKeeper(akavaKeeper Keeper, bk types.BankKeeper, ak types.AccountKeeper) EvmBankKeeper

func (EvmBankKeeper) BurnCoins

func (k EvmBankKeeper) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error

BurnCoins burns akava coins by burning the equivalent ukava coins and any remaining akava coins. It will panic if the module account does not exist or is unauthorized.

func (EvmBankKeeper) ConvertAkavaToUkava

func (k EvmBankKeeper) ConvertAkavaToUkava(ctx sdk.Context, addr sdk.AccAddress) error

ConvertAkavaToUkava converts all available akava to ukava for a given AccAddress.

func (EvmBankKeeper) ConvertOneUkavaToAkavaIfNeeded

func (k EvmBankKeeper) ConvertOneUkavaToAkavaIfNeeded(ctx sdk.Context, addr sdk.AccAddress, akavaNeeded sdkmath.Int) error

ConvertOneUkavaToAkavaIfNeeded converts 1 ukava to akava for an address if its akava balance is smaller than the akavaNeeded amount.

func (EvmBankKeeper) GetBalance

func (k EvmBankKeeper) GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin

GetBalance returns the total **spendable** balance of akava for a given account by address.

func (EvmBankKeeper) GetModuleAddress

func (k EvmBankKeeper) GetModuleAddress(moduleName string) sdk.AccAddress

func (EvmBankKeeper) IsSendEnabledCoins added in v0.26.0

func (k EvmBankKeeper) IsSendEnabledCoins(ctx sdk.Context, coins ...sdk.Coin) error

IsSendEnabledCoins checks the coins provided and returns an ErrSendDisabled if any of the coins are not configured for sending. Returns nil if sending is enabled for all provided coins.

func (EvmBankKeeper) MintCoins

func (k EvmBankKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error

MintCoins mints akava coins by minting the equivalent ukava coins and any remaining akava coins. It will panic if the module account does not exist or is unauthorized.

func (EvmBankKeeper) SendCoins added in v0.23.0

func (k EvmBankKeeper) SendCoins(ctx sdk.Context, senderAddr sdk.AccAddress, recipientAddr sdk.AccAddress, amt sdk.Coins) error

SendCoins transfers akava coins from a AccAddress to an AccAddress.

func (EvmBankKeeper) SendCoinsFromAccountToModule

func (k EvmBankKeeper) SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error

SendCoinsFromAccountToModule transfers akava coins from an AccAddress to a ModuleAccount. It will panic if the module account does not exist.

func (EvmBankKeeper) SendCoinsFromModuleToAccount

func (k EvmBankKeeper) SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error

SendCoinsFromModuleToAccount transfers akava coins from a ModuleAccount to an AccAddress. It will panic if the module account does not exist. An error is returned if the recipient address is black-listed or if sending the tokens fails.

type Keeper

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

Keeper of the evmutil store. This keeper stores additional data related to evm accounts.

func NewKeeper

func NewKeeper(
	cdc codec.Codec,
	storeKey storetypes.StoreKey,
	params paramtypes.Subspace,
	bk types.BankKeeper,
	ak types.AccountKeeper,
) Keeper

NewKeeper creates an evmutil keeper.

func (Keeper) AddBalance

func (k Keeper) AddBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdkmath.Int) error

AddBalance increments the akava balance of an address.

func (Keeper) BurnConversionPairCoin added in v0.19.0

func (k Keeper) BurnConversionPairCoin(
	ctx sdk.Context,
	pair types.ConversionPair,
	coin sdk.Coin,
	account sdk.AccAddress,
) error

BurnConversionPairCoin transfers the provided amount to the module account then burns it.

func (Keeper) BurnERC20 added in v0.24.0

func (k Keeper) BurnERC20(
	ctx sdk.Context,
	contractAddr types.InternalEVMAddress,
	initiator types.InternalEVMAddress,
	amount *big.Int,
) error

BurnERC20 burns the token amount from the initiator's balance.

func (Keeper) CallEVM added in v0.19.0

func (k Keeper) CallEVM(
	ctx sdk.Context,
	abi abi.ABI,
	from common.Address,
	contract types.InternalEVMAddress,
	method string,
	args ...interface{},
) (*evmtypes.MsgEthereumTxResponse, error)

CallEVM performs a smart contract method call using given args

func (Keeper) CallEVMWithData added in v0.19.0

func (k Keeper) CallEVMWithData(
	ctx sdk.Context,
	from common.Address,
	contract *types.InternalEVMAddress,
	data []byte,
) (*evmtypes.MsgEthereumTxResponse, error)

CallEVMWithData performs a smart contract method call using contract data Derived from tharsis/evmos https://github.com/tharsis/evmos/blob/ee54f496551df937915ff6f74a94732a35abc505/x/erc20/keeper/evm.go

func (Keeper) ConvertCoinToERC20 added in v0.19.0

func (k Keeper) ConvertCoinToERC20(
	ctx sdk.Context,
	initiatorAccount sdk.AccAddress,
	receiverAccount types.InternalEVMAddress,
	coin sdk.Coin,
) error

ConvertCoinToERC20 converts an sdk.Coin from the originating account to an ERC20 to the receiver account.

func (*Keeper) ConvertCosmosCoinFromERC20 added in v0.24.0

func (k *Keeper) ConvertCosmosCoinFromERC20(
	ctx sdk.Context,
	initiator types.InternalEVMAddress,
	receiver sdk.AccAddress,
	coin sdk.Coin,
) error

ConvertCosmosCoinFromERC20 burns the ERC20 wrapper of the cosmos coin and sends the underlying sdk coin form the module account to the receiver.

func (*Keeper) ConvertCosmosCoinToERC20 added in v0.24.0

func (k *Keeper) ConvertCosmosCoinToERC20(
	ctx sdk.Context,
	initiator sdk.AccAddress,
	receiver types.InternalEVMAddress,
	amount sdk.Coin,
) error

ConvertCosmosCoinToERC20 locks the initiator's sdk.Coin in the module account and mints the receiver a corresponding amount of an ERC20 representing the Coin. If a conversion has never been made before and no contract exists, one will be deployed. Only denoms registered to the AllowedCosmosDenoms param may be converted.

func (Keeper) ConvertERC20ToCoin added in v0.19.0

func (k Keeper) ConvertERC20ToCoin(
	ctx sdk.Context,
	initiator types.InternalEVMAddress,
	receiver sdk.AccAddress,
	contractAddr types.InternalEVMAddress,
	amount sdkmath.Int,
) error

ConvertERC20ToCoin converts an ERC20 coin from the originating account to an sdk.Coin to the receiver account.

func (Keeper) DeployKavaWrappedCosmosCoinERC20Contract added in v0.24.0

func (k Keeper) DeployKavaWrappedCosmosCoinERC20Contract(
	ctx sdk.Context,
	token types.AllowedCosmosCoinERC20Token,
) (types.InternalEVMAddress, error)

DeployKavaWrappedCosmosCoinERC20Contract validates token details and then deploys an ERC20 contract with the token metadata. This method does NOT check if a token for the provided SdkDenom has already been deployed.

func (Keeper) DeployTestMintableERC20Contract added in v0.19.0

func (k Keeper) DeployTestMintableERC20Contract(
	ctx sdk.Context,
	name string,
	symbol string,
	decimals uint8,
) (types.InternalEVMAddress, error)

DeployTestMintableERC20Contract deploys an ERC20 contract on the EVM as the module account and returns the address of the contract. This contract has minting permissions for the module account. Derived from tharsis/evmos https://github.com/tharsis/evmos/blob/ee54f496551df937915ff6f74a94732a35abc505/x/erc20/keeper/evm.go

func (Keeper) GetAccount

func (k Keeper) GetAccount(ctx sdk.Context, addr sdk.AccAddress) *types.Account

GetAccount returns the account for a given address.

func (Keeper) GetAllAccounts

func (k Keeper) GetAllAccounts(ctx sdk.Context) (accounts []types.Account)

GetAllAccounts returns all accounts.

func (Keeper) GetAllowedTokenMetadata added in v0.24.0

func (k Keeper) GetAllowedTokenMetadata(ctx sdk.Context, cosmosDenom string) (types.AllowedCosmosCoinERC20Token, bool)

GetAllowedTokenMetadata gets the token metadata for the given cosmosDenom if it is allowed. Returns the metadata if allowed, and a bool indicating if the denom was in the allow list or not.

func (Keeper) GetBalance

func (k Keeper) GetBalance(ctx sdk.Context, addr sdk.AccAddress) sdkmath.Int

GetBalance returns the total balance of akava for a given account by address.

func (*Keeper) GetDeployedCosmosCoinContract added in v0.24.0

func (k *Keeper) GetDeployedCosmosCoinContract(ctx sdk.Context, cosmosDenom string) (types.InternalEVMAddress, bool)

SetDeployedCosmosCoinContract gets a deployed ERC20KavaWrappedCosmosCoin contract address by cosmos denom Returns the stored address and a bool indicating if it was found or not

func (Keeper) GetEnabledConversionPairFromDenom added in v0.19.0

func (k Keeper) GetEnabledConversionPairFromDenom(
	ctx sdk.Context,
	denom string,
) (types.ConversionPair, error)

GetEnabledConversionPairFromDenom returns an ConversionPair from the sdk.Coin denom.

func (Keeper) GetEnabledConversionPairFromERC20Address added in v0.19.0

func (k Keeper) GetEnabledConversionPairFromERC20Address(
	ctx sdk.Context,
	address types.InternalEVMAddress,
) (types.ConversionPair, error)

GetEnabledConversionPairFromERC20Address returns an ConversionPair from the internal contract address.

func (*Keeper) GetOrDeployCosmosCoinERC20Contract added in v0.24.0

func (k *Keeper) GetOrDeployCosmosCoinERC20Contract(
	ctx sdk.Context,
	tokenInfo types.AllowedCosmosCoinERC20Token,
) (types.InternalEVMAddress, error)

GetOrDeployCosmosCoinERC20Contract checks the module store for a deployed contract for the given token info and returns it if preset. Otherwise, it deploys and registers the contract.

func (Keeper) GetParams added in v0.19.0

func (k Keeper) GetParams(ctx sdk.Context) (params types.Params)

GetParams returns the total set of evm parameters.

func (Keeper) IterateAllAccounts

func (k Keeper) IterateAllAccounts(ctx sdk.Context, cb func(types.Account) bool)

IterateAllAccounts iterates over all accounts. If true is returned from the callback, iteration is halted.

func (Keeper) IterateAllDeployedCosmosCoinContracts added in v0.24.0

func (k Keeper) IterateAllDeployedCosmosCoinContracts(ctx sdk.Context, cb func(types.DeployedCosmosCoinContract) bool)

IterateAllDeployedCosmosCoinContracts iterates through all the deployed ERC20 contracts representing cosmos-sdk coins. If true is returned from the callback, iteration is halted.

func (Keeper) LockERC20Tokens added in v0.19.0

func (k Keeper) LockERC20Tokens(
	ctx sdk.Context,
	pair types.ConversionPair,
	amount *big.Int,
	initiator types.InternalEVMAddress,
) error

LockERC20Tokens transfers the given amount of a conversion pair ERC20 token from the initiator account to the module account.

func (Keeper) MintConversionPairCoin added in v0.19.0

func (k Keeper) MintConversionPairCoin(
	ctx sdk.Context,
	pair types.ConversionPair,
	amount *big.Int,
	recipient sdk.AccAddress,
) (sdk.Coin, error)

MintConversionPairCoin mints the given amount of a ConversionPair denom and sends it to the provided address.

func (Keeper) MintERC20 added in v0.19.0

func (k Keeper) MintERC20(
	ctx sdk.Context,
	contractAddr types.InternalEVMAddress,
	receiver types.InternalEVMAddress,
	amount *big.Int,
) error

MintERC20 mints the given amount of an ERC20 token to an address. This is unchecked and should only be called after permission and enabled ERC20 checks.

func (Keeper) QueryERC20BalanceOf added in v0.19.0

func (k Keeper) QueryERC20BalanceOf(
	ctx sdk.Context,
	contractAddr types.InternalEVMAddress,
	account types.InternalEVMAddress,
) (*big.Int, error)

QueryERC20BalanceOf makes a contract call to the balanceOf method of the ERC20 contract to get the ERC20 balance of the given account.

func (Keeper) QueryERC20TotalSupply added in v0.24.0

func (k Keeper) QueryERC20TotalSupply(
	ctx sdk.Context,
	contractAddr types.InternalEVMAddress,
) (*big.Int, error)

QueryERC20TotalSupply makes a contract call to the totalSupply method of the ERC20 contract to get the total supply of the token.

func (Keeper) RemoveBalance

func (k Keeper) RemoveBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdkmath.Int) error

RemoveBalance decrements the akava balance of an address.

func (Keeper) SendBalance

func (k Keeper) SendBalance(ctx sdk.Context, senderAddr sdk.AccAddress, recipientAddr sdk.AccAddress, amt sdkmath.Int) error

SendBalance transfers the akava balance from sender addr to recipient addr.

func (Keeper) SetAccount

func (k Keeper) SetAccount(ctx sdk.Context, account types.Account) error

SetAccount sets the account for a given address.

func (Keeper) SetBalance

func (k Keeper) SetBalance(ctx sdk.Context, addr sdk.AccAddress, bal sdkmath.Int) error

SetBalance sets the total balance of akava for a given account by address.

func (*Keeper) SetDeployedCosmosCoinContract added in v0.24.0

func (k *Keeper) SetDeployedCosmosCoinContract(ctx sdk.Context, cosmosDenom string, contractAddress types.InternalEVMAddress) error

SetDeployedCosmosCoinContract stores a single deployed ERC20KavaWrappedCosmosCoin contract address

func (*Keeper) SetEvmKeeper added in v0.19.0

func (k *Keeper) SetEvmKeeper(evmKeeper types.EvmKeeper)

func (Keeper) SetParams added in v0.19.0

func (k Keeper) SetParams(ctx sdk.Context, params types.Params)

SetParams sets the evm parameters to the param space.

func (Keeper) UnlockERC20Tokens added in v0.19.0

func (k Keeper) UnlockERC20Tokens(
	ctx sdk.Context,
	pair types.ConversionPair,
	amount *big.Int,
	receiver types.InternalEVMAddress,
) error

UnlockERC20Tokens transfers the given amount of a conversion pair ERC20 token to the provided account.

type Migrator added in v0.19.0

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

Migrator is a struct for handling in-place store migrations.

func NewMigrator added in v0.19.0

func NewMigrator(keeper Keeper) Migrator

NewMigrator returns a new Migrator.

func (Migrator) Migrate1to2 added in v0.19.0

func (m Migrator) Migrate1to2(ctx sdk.Context) error

Migrate1to2 migrates from version 1 to 2.

Jump to

Keyboard shortcuts

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