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  }