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 }