github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/farm/keeper/historical_reward.go (about)

     1  package keeper
     2  
     3  import (
     4  	"encoding/binary"
     5  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     6  	"github.com/fibonacci-chain/fbc/x/farm/types"
     7  )
     8  
     9  func (k Keeper) GetPoolHistoricalRewards(
    10  	ctx sdk.Context, poolName string, period uint64,
    11  ) (rewards types.PoolHistoricalRewards) {
    12  	store := ctx.KVStore(k.StoreKey())
    13  	bz := store.Get(types.GetPoolHistoricalRewardsKey(poolName, period))
    14  	k.cdc.MustUnmarshalBinaryLengthPrefixed(bz, &rewards)
    15  	return rewards
    16  }
    17  
    18  func (k Keeper) SetPoolHistoricalRewards(
    19  	ctx sdk.Context, poolName string, period uint64, rewards types.PoolHistoricalRewards,
    20  ) {
    21  	store := ctx.KVStore(k.StoreKey())
    22  	store.Set(types.GetPoolHistoricalRewardsKey(poolName, period), k.cdc.MustMarshalBinaryLengthPrefixed(rewards))
    23  	return
    24  }
    25  
    26  // DeletePoolHistoricalReward deletes a historical reward
    27  func (k Keeper) DeletePoolHistoricalReward(ctx sdk.Context, poolName string, period uint64) {
    28  	store := ctx.KVStore(k.storeKey)
    29  	store.Delete(types.GetPoolHistoricalRewardsKey(poolName, period))
    30  }
    31  
    32  // IteratePoolHistoricalRewards deletes historical rewards for a pool
    33  func (k Keeper) IteratePoolHistoricalRewards(
    34  	ctx sdk.Context, poolName string, handler func(store sdk.KVStore, key []byte, value []byte) (stop bool),
    35  ) {
    36  	store := ctx.KVStore(k.storeKey)
    37  	iter := sdk.KVStorePrefixIterator(store, types.GetPoolHistoricalRewardsPrefix(poolName))
    38  	defer iter.Close()
    39  	for ; iter.Valid(); iter.Next() {
    40  		if handler(store, iter.Key(), iter.Value()) {
    41  			break
    42  		}
    43  	}
    44  }
    45  
    46  func (k Keeper) GetPoolCurrentRewards(ctx sdk.Context, poolName string) (period types.PoolCurrentRewards) {
    47  	store := ctx.KVStore(k.StoreKey())
    48  	bz := store.Get(types.GetPoolCurrentRewardsKey(poolName))
    49  	k.cdc.MustUnmarshalBinaryLengthPrefixed(bz, &period)
    50  	return period
    51  }
    52  
    53  func (k Keeper) SetPoolCurrentRewards(ctx sdk.Context, poolName string, rewards types.PoolCurrentRewards) {
    54  	store := ctx.KVStore(k.StoreKey())
    55  	store.Set(types.GetPoolCurrentRewardsKey(poolName), k.cdc.MustMarshalBinaryLengthPrefixed(rewards))
    56  	return
    57  }
    58  
    59  // delete current rewards for a pool
    60  func (k Keeper) DeletePoolCurrentRewards(ctx sdk.Context, poolName string) {
    61  	store := ctx.KVStore(k.storeKey)
    62  	store.Delete(types.GetPoolCurrentRewardsKey(poolName))
    63  }
    64  
    65  // HasPoolCurrentRewards check existence of the pool_current_period associated with a pool_name
    66  func (k Keeper) HasPoolCurrentRewards(ctx sdk.Context, poolName string) bool {
    67  	store := ctx.KVStore(k.storeKey)
    68  	return store.Has(types.GetPoolCurrentRewardsKey(poolName))
    69  }
    70  
    71  // Iterate over historical rewards
    72  func (k Keeper) IterateAllPoolHistoricalRewards(
    73  	ctx sdk.Context, handler func(poolName string, period uint64, rewards types.PoolHistoricalRewards) (stop bool),
    74  ) {
    75  	store := ctx.KVStore(k.storeKey)
    76  	iter := sdk.KVStorePrefixIterator(store, types.PoolHistoricalRewardsPrefix)
    77  	defer iter.Close()
    78  	for ; iter.Valid(); iter.Next() {
    79  		var rewards types.PoolHistoricalRewards
    80  		k.cdc.MustUnmarshalBinaryLengthPrefixed(iter.Value(), &rewards)
    81  		poolName, period := GetPoolHistoricalRewardsPoolNamePeriod(iter.Key())
    82  		if handler(poolName, period, rewards) {
    83  			break
    84  		}
    85  	}
    86  }
    87  
    88  // gets the address & period from a validator's historical rewards key
    89  func GetPoolHistoricalRewardsPoolNamePeriod(key []byte) (poolName string, period uint64) {
    90  	name := key[1 : len(key)-types.PeriodByteArrayLength]
    91  	if len(name) > types.MaxPoolNameLength {
    92  		panic("unexpected key length")
    93  	}
    94  
    95  	if len(key) <= types.PeriodByteArrayLength+len(types.PoolHistoricalRewardsPrefix) {
    96  		panic("unexpected key length")
    97  	}
    98  	b := key[len(key)-types.PeriodByteArrayLength:]
    99  	period = binary.LittleEndian.Uint64(b)
   100  	return string(name), period
   101  }
   102  
   103  // Iterate over current rewards
   104  func (k Keeper) IterateAllPoolCurrentRewards(
   105  	ctx sdk.Context, handler func(poolName string, curRewards types.PoolCurrentRewards) (stop bool),
   106  ) {
   107  	store := ctx.KVStore(k.storeKey)
   108  	iter := sdk.KVStorePrefixIterator(store, types.PoolCurrentRewardsPrefix)
   109  	defer iter.Close()
   110  	for ; iter.Valid(); iter.Next() {
   111  		var rewards types.PoolCurrentRewards
   112  		k.cdc.MustUnmarshalBinaryLengthPrefixed(iter.Value(), &rewards)
   113  		poolName := string(iter.Key()[1:])
   114  		if handler(poolName, rewards) {
   115  			break
   116  		}
   117  	}
   118  }