github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/evm/keeper/evm2cm.go (about) 1 package keeper 2 3 import ( 4 ethermint "github.com/fibonacci-chain/fbc/app/types" 5 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 6 "github.com/fibonacci-chain/fbc/x/evm/types" 7 ) 8 9 // SetSysContractAddress set system contract address to store 10 func (k *Keeper) SetSysContractAddress(ctx sdk.Context, addr sdk.AccAddress) sdk.Error { 11 store := k.paramSpace.CustomKVStore(ctx) 12 key := types.GetSysContractAddressKey() 13 store.Set(key, addr) 14 return nil 15 } 16 17 // DelSysContractAddress del system contract address to store 18 func (k *Keeper) DelSysContractAddress(ctx sdk.Context) sdk.Error { 19 store := k.paramSpace.CustomKVStore(ctx) 20 key := types.GetSysContractAddressKey() 21 store.Delete(key) 22 return nil 23 } 24 25 func (k *Keeper) GetSysContractAddress(ctx sdk.Context) (sdk.AccAddress, sdk.Error) { 26 store := k.paramSpace.CustomKVStore(ctx) 27 key := types.GetSysContractAddressKey() 28 value := store.Get(key) 29 if value == nil { 30 return nil, types.ErrSysContractAddressIsNotExist(types.ErrKeyNotFound) 31 } 32 return value, nil 33 } 34 35 func (k *Keeper) IsMatchSysContractAddress(ctx sdk.Context, addr sdk.AccAddress) bool { 36 iaddr, err := k.GetSysContractAddress(ctx) 37 if err != nil { 38 return false 39 } 40 return iaddr.Equals(addr) 41 } 42 43 func (k Keeper) IsContractAccount(ctx sdk.Context, addr sdk.AccAddress) bool { 44 acct := k.accountKeeper.GetAccount(ctx, addr) 45 if acct == nil { 46 return false 47 } 48 ethAcct, ok := acct.(*ethermint.EthAccount) 49 if !ok { 50 return false 51 } 52 return ethAcct.IsContract() 53 } 54 55 func querySysContractAddress(ctx sdk.Context, keeper Keeper) ([]byte, sdk.Error) { 56 res, err := keeper.GetSysContractAddress(ctx) 57 if err != nil { 58 return nil, err 59 } 60 return res, nil 61 }