github.com/Finschia/finschia-sdk@v0.49.1/x/bankplus/keeper/inactive.go (about)

     1  package keeper
     2  
     3  import (
     4  	sdk "github.com/Finschia/finschia-sdk/types"
     5  	"github.com/Finschia/finschia-sdk/x/bankplus/types"
     6  )
     7  
     8  // Keys for bankplus store but this prefix must not be overlap with bank key prefix.
     9  var inactiveAddrsKeyPrefix = []byte{0xa0}
    10  
    11  // inactiveAddrKey key of a specific inactiveAddr from store
    12  func inactiveAddrKey(addr sdk.AccAddress) []byte {
    13  	return append(inactiveAddrsKeyPrefix, addr.Bytes()...)
    14  }
    15  
    16  // isStoredInactiveAddr checks if the address is stored or not as blocked address
    17  func (keeper BaseKeeper) isStoredInactiveAddr(ctx sdk.Context, address sdk.AccAddress) bool {
    18  	store := ctx.KVStore(keeper.storeKey)
    19  	bz := store.Get(inactiveAddrKey(address))
    20  	return bz != nil
    21  }
    22  
    23  // addToInactiveAddr adds a blocked address to the store.
    24  func (keeper BaseKeeper) addToInactiveAddr(ctx sdk.Context, address sdk.AccAddress) {
    25  	store := ctx.KVStore(keeper.storeKey)
    26  	blockedCAddr := types.InactiveAddr{Address: address.String()}
    27  	bz := keeper.cdc.MustMarshal(&blockedCAddr)
    28  	store.Set(inactiveAddrKey(address), bz)
    29  }
    30  
    31  // deleteFromInactiveAddr deletes blocked address from store
    32  func (keeper BaseKeeper) deleteFromInactiveAddr(ctx sdk.Context, address sdk.AccAddress) {
    33  	store := ctx.KVStore(keeper.storeKey)
    34  	store.Delete(inactiveAddrKey(address))
    35  }
    36  
    37  // loadAllInactiveAddrs loads all blocked address and set to `inactiveAddr`.
    38  // This function is executed when the app is initiated and save all inactive address in caches
    39  // in order to prevent to query to store in every time to send
    40  func (keeper BaseKeeper) loadAllInactiveAddrs(ctx sdk.Context) {
    41  	store := ctx.KVStore(keeper.storeKey)
    42  	iterator := sdk.KVStorePrefixIterator(store, inactiveAddrsKeyPrefix)
    43  
    44  	defer iterator.Close()
    45  	for ; iterator.Valid(); iterator.Next() {
    46  		var bAddr types.InactiveAddr
    47  		keeper.cdc.MustUnmarshal(iterator.Value(), &bAddr)
    48  
    49  		keeper.inactiveAddrs[bAddr.Address] = true
    50  	}
    51  }