github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/bank/internal/keeperadapter/bankkeeper_adapter.go (about)

     1  package keeperadapter
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  	sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors"
     6  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank/internal/keeper"
     7  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank/internal/types"
     8  )
     9  
    10  var (
    11  	_ CM40ViewKeeper = BankKeeperAdapter{}
    12  )
    13  
    14  type CM40ViewKeeper interface {
    15  	IsSendEnabledCoins(ctx sdk.Context, coins ...sdk.Coin) error
    16  	GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
    17  	BlockedAddr(addr sdk.AccAddress) bool
    18  	HasBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coin) bool
    19  	GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
    20  }
    21  
    22  // BankKeeperAdapter is used in wasm module
    23  type BankKeeperAdapter struct {
    24  	keeper.Keeper
    25  }
    26  
    27  func NewBankKeeperAdapter(bankKeeper keeper.Keeper) *BankKeeperAdapter {
    28  	return &BankKeeperAdapter{Keeper: bankKeeper}
    29  }
    30  
    31  func (adapter BankKeeperAdapter) BlockedAddr(addr sdk.AccAddress) bool {
    32  	return adapter.Keeper.BlacklistedAddr(addr)
    33  }
    34  
    35  func (adapter BankKeeperAdapter) IsSendEnabledCoins(ctx sdk.Context, coins ...sdk.Coin) error {
    36  	if !adapter.Keeper.GetSendEnabled(ctx) {
    37  		return sdkerrors.Wrapf(types.ErrSendDisabled, "transfers are currently disabled")
    38  	}
    39  	// todo weather allow different form fibo coin send enable
    40  	return nil
    41  }
    42  
    43  func (adapter BankKeeperAdapter) GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins {
    44  	return adapter.Keeper.GetCoins(ctx, addr)
    45  }
    46  
    47  func (adapter BankKeeperAdapter) GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin {
    48  	coins := adapter.Keeper.GetCoins(ctx, addr)
    49  	return sdk.Coin{
    50  		Amount: coins.AmountOf(denom),
    51  		Denom:  denom,
    52  	}
    53  }
    54  
    55  func (adapter BankKeeperAdapter) HasBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coin) bool {
    56  	return adapter.GetBalance(ctx, addr, amt.Denom).IsGTE(amt)
    57  }