2020-04-24 15:20:34 +00:00
|
|
|
package incentive
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
2020-04-30 14:13:31 +00:00
|
|
|
|
2020-04-24 15:20:34 +00:00
|
|
|
"github.com/kava-labs/kava/x/incentive/keeper"
|
|
|
|
"github.com/kava-labs/kava/x/incentive/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
// InitGenesis initializes the store state from a genesis state.
|
2021-01-20 05:42:50 +00:00
|
|
|
func InitGenesis(ctx sdk.Context, k keeper.Keeper, supplyKeeper types.SupplyKeeper, cdpKeeper types.CdpKeeper, gs types.GenesisState) {
|
2020-04-24 15:20:34 +00:00
|
|
|
|
|
|
|
// check if the module account exists
|
|
|
|
moduleAcc := supplyKeeper.GetModuleAccount(ctx, types.IncentiveMacc)
|
|
|
|
if moduleAcc == nil {
|
|
|
|
panic(fmt.Sprintf("%s module account has not been set", types.IncentiveMacc))
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := gs.Validate(); err != nil {
|
|
|
|
panic(fmt.Sprintf("failed to validate %s genesis state: %s", types.ModuleName, err))
|
|
|
|
}
|
|
|
|
|
2021-01-21 13:52:09 +00:00
|
|
|
for _, rp := range gs.Params.USDXMintingRewardPeriods {
|
2021-01-20 05:42:50 +00:00
|
|
|
_, found := cdpKeeper.GetCollateral(ctx, rp.CollateralType)
|
|
|
|
if !found {
|
|
|
|
panic(fmt.Sprintf("usdx minting collateral type %s not found in cdp collateral types", rp.CollateralType))
|
|
|
|
}
|
2021-02-09 00:32:54 +00:00
|
|
|
k.SetUSDXMintingRewardFactor(ctx, rp.CollateralType, sdk.ZeroDec())
|
2021-01-20 05:42:50 +00:00
|
|
|
}
|
|
|
|
|
2021-02-09 00:32:54 +00:00
|
|
|
for _, mrp := range gs.Params.HardSupplyRewardPeriods {
|
|
|
|
newRewardIndexes := types.RewardIndexes{}
|
|
|
|
for _, rc := range mrp.RewardsPerSecond {
|
|
|
|
ri := types.NewRewardIndex(rc.Denom, sdk.ZeroDec())
|
|
|
|
newRewardIndexes = append(newRewardIndexes, ri)
|
|
|
|
}
|
|
|
|
k.SetHardSupplyRewardIndexes(ctx, mrp.CollateralType, newRewardIndexes)
|
|
|
|
}
|
2020-04-24 15:20:34 +00:00
|
|
|
|
2021-02-09 00:32:54 +00:00
|
|
|
for _, mrp := range gs.Params.HardBorrowRewardPeriods {
|
|
|
|
newRewardIndexes := types.RewardIndexes{}
|
|
|
|
for _, rc := range mrp.RewardsPerSecond {
|
|
|
|
ri := types.NewRewardIndex(rc.Denom, sdk.ZeroDec())
|
|
|
|
newRewardIndexes = append(newRewardIndexes, ri)
|
|
|
|
}
|
|
|
|
k.SetHardBorrowRewardIndexes(ctx, mrp.CollateralType, newRewardIndexes)
|
|
|
|
}
|
|
|
|
|
2021-07-05 22:01:25 +00:00
|
|
|
for _, drp := range gs.Params.HardDelegatorRewardPeriods {
|
|
|
|
newRewardIndexes := types.RewardIndexes{}
|
|
|
|
for _, rc := range drp.RewardsPerSecond {
|
|
|
|
ri := types.NewRewardIndex(rc.Denom, sdk.ZeroDec())
|
|
|
|
newRewardIndexes = append(newRewardIndexes, ri)
|
|
|
|
}
|
|
|
|
k.SetHardDelegatorRewardIndexes(ctx, drp.CollateralType, newRewardIndexes)
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
k.SetParams(ctx, gs.Params)
|
2021-01-21 13:52:09 +00:00
|
|
|
|
2021-02-08 20:47:29 +00:00
|
|
|
for _, gat := range gs.USDXAccumulationTimes {
|
2021-01-21 13:52:09 +00:00
|
|
|
k.SetPreviousUSDXMintingAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
|
2020-04-24 15:20:34 +00:00
|
|
|
}
|
|
|
|
|
2021-02-08 20:47:29 +00:00
|
|
|
for _, gat := range gs.HardSupplyAccumulationTimes {
|
|
|
|
k.SetPreviousHardSupplyRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, gat := range gs.HardBorrowAccumulationTimes {
|
|
|
|
k.SetPreviousHardBorrowRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, gat := range gs.HardDelegatorAccumulationTimes {
|
|
|
|
k.SetPreviousHardDelegatorRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
|
|
|
|
}
|
2021-07-07 13:23:06 +00:00
|
|
|
for _, gat := range gs.SwapAccumulationTimes {
|
|
|
|
k.SetSwapRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
|
|
|
|
}
|
2021-02-08 20:47:29 +00:00
|
|
|
|
2021-02-23 19:41:30 +00:00
|
|
|
for i, claim := range gs.USDXMintingClaims {
|
|
|
|
for j, ri := range claim.RewardIndexes {
|
2021-02-09 00:32:54 +00:00
|
|
|
if ri.RewardFactor != sdk.ZeroDec() {
|
2021-02-23 19:41:30 +00:00
|
|
|
gs.USDXMintingClaims[i].RewardIndexes[j].RewardFactor = sdk.ZeroDec()
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
}
|
2021-01-21 13:52:09 +00:00
|
|
|
k.SetUSDXMintingClaim(ctx, claim)
|
2020-04-24 15:20:34 +00:00
|
|
|
}
|
|
|
|
|
2021-02-23 19:41:30 +00:00
|
|
|
for i, claim := range gs.HardLiquidityProviderClaims {
|
|
|
|
for j, mri := range claim.SupplyRewardIndexes {
|
|
|
|
for k, ri := range mri.RewardIndexes {
|
2021-02-09 00:32:54 +00:00
|
|
|
if ri.RewardFactor != sdk.ZeroDec() {
|
2021-02-23 19:41:30 +00:00
|
|
|
gs.HardLiquidityProviderClaims[i].SupplyRewardIndexes[j].RewardIndexes[k].RewardFactor = sdk.ZeroDec()
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-02-23 19:41:30 +00:00
|
|
|
for j, mri := range claim.BorrowRewardIndexes {
|
|
|
|
for k, ri := range mri.RewardIndexes {
|
2021-02-09 00:32:54 +00:00
|
|
|
if ri.RewardFactor != sdk.ZeroDec() {
|
2021-02-23 19:41:30 +00:00
|
|
|
gs.HardLiquidityProviderClaims[i].BorrowRewardIndexes[j].RewardIndexes[k].RewardFactor = sdk.ZeroDec()
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-07-05 22:01:25 +00:00
|
|
|
for j, dri := range claim.DelegatorRewardIndexes {
|
|
|
|
for k, ri := range dri.RewardIndexes {
|
|
|
|
if ri.RewardFactor != sdk.ZeroDec() {
|
|
|
|
gs.HardLiquidityProviderClaims[i].DelegatorRewardIndexes[j].RewardIndexes[k].RewardFactor = sdk.ZeroDec()
|
|
|
|
}
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
k.SetHardLiquidityProviderClaim(ctx, claim)
|
|
|
|
}
|
2020-04-24 15:20:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// ExportGenesis export genesis state for incentive module
|
|
|
|
func ExportGenesis(ctx sdk.Context, k keeper.Keeper) types.GenesisState {
|
|
|
|
params := k.GetParams(ctx)
|
|
|
|
|
2021-02-08 20:47:29 +00:00
|
|
|
usdxClaims := k.GetAllUSDXMintingClaims(ctx)
|
|
|
|
hardClaims := k.GetAllHardLiquidityProviderClaims(ctx)
|
2020-04-24 15:20:34 +00:00
|
|
|
|
2021-02-09 00:32:54 +00:00
|
|
|
synchronizedUsdxClaims := types.USDXMintingClaims{}
|
|
|
|
synchronizedHardClaims := types.HardLiquidityProviderClaims{}
|
|
|
|
|
|
|
|
for _, usdxClaim := range usdxClaims {
|
|
|
|
claim, err := k.SynchronizeUSDXMintingClaim(ctx, usdxClaim)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2021-02-23 19:41:30 +00:00
|
|
|
for i := range claim.RewardIndexes {
|
|
|
|
claim.RewardIndexes[i].RewardFactor = sdk.ZeroDec()
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
synchronizedUsdxClaims = append(synchronizedUsdxClaims, claim)
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, hardClaim := range hardClaims {
|
|
|
|
k.SynchronizeHardLiquidityProviderClaim(ctx, hardClaim.Owner)
|
|
|
|
claim, found := k.GetHardLiquidityProviderClaim(ctx, hardClaim.Owner)
|
|
|
|
if !found {
|
|
|
|
panic("hard liquidity provider claim should always be found after synchronization")
|
|
|
|
}
|
2021-02-23 19:41:30 +00:00
|
|
|
for i, bri := range claim.BorrowRewardIndexes {
|
|
|
|
for j := range bri.RewardIndexes {
|
|
|
|
claim.BorrowRewardIndexes[i].RewardIndexes[j].RewardFactor = sdk.ZeroDec()
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
}
|
2021-02-23 19:41:30 +00:00
|
|
|
for i, sri := range claim.SupplyRewardIndexes {
|
|
|
|
for j := range sri.RewardIndexes {
|
|
|
|
claim.SupplyRewardIndexes[i].RewardIndexes[j].RewardFactor = sdk.ZeroDec()
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
}
|
2021-07-05 22:01:25 +00:00
|
|
|
for i, dri := range claim.DelegatorRewardIndexes {
|
|
|
|
for j := range dri.RewardIndexes {
|
|
|
|
claim.DelegatorRewardIndexes[i].RewardIndexes[j].RewardFactor = sdk.ZeroDec()
|
|
|
|
}
|
2021-02-09 00:32:54 +00:00
|
|
|
}
|
|
|
|
synchronizedHardClaims = append(synchronizedHardClaims, claim)
|
|
|
|
}
|
|
|
|
|
2021-03-11 04:32:35 +00:00
|
|
|
var usdxMintingGats GenesisAccumulationTimes
|
2021-01-21 13:52:09 +00:00
|
|
|
for _, rp := range params.USDXMintingRewardPeriods {
|
|
|
|
pat, found := k.GetPreviousUSDXMintingAccrualTime(ctx, rp.CollateralType)
|
2021-01-18 19:12:37 +00:00
|
|
|
if !found {
|
2021-03-11 04:32:35 +00:00
|
|
|
panic(fmt.Sprintf("expected previous usdx minting reward accrual time to be set in state for %s", rp.CollateralType))
|
|
|
|
}
|
|
|
|
gat := types.NewGenesisAccumulationTime(rp.CollateralType, pat)
|
|
|
|
usdxMintingGats = append(usdxMintingGats, gat)
|
|
|
|
}
|
|
|
|
|
|
|
|
var hardSupplyGats GenesisAccumulationTimes
|
|
|
|
for _, rp := range params.HardSupplyRewardPeriods {
|
|
|
|
pat, found := k.GetPreviousHardSupplyRewardAccrualTime(ctx, rp.CollateralType)
|
|
|
|
if !found {
|
|
|
|
panic(fmt.Sprintf("expected previous hard supply reward accrual time to be set in state for %s", rp.CollateralType))
|
2021-01-18 19:12:37 +00:00
|
|
|
}
|
2021-03-11 04:32:35 +00:00
|
|
|
gat := types.NewGenesisAccumulationTime(rp.CollateralType, pat)
|
|
|
|
hardSupplyGats = append(hardSupplyGats, gat)
|
|
|
|
}
|
|
|
|
|
|
|
|
var hardBorrowGats GenesisAccumulationTimes
|
|
|
|
for _, rp := range params.HardBorrowRewardPeriods {
|
|
|
|
pat, found := k.GetPreviousHardBorrowRewardAccrualTime(ctx, rp.CollateralType)
|
|
|
|
if !found {
|
|
|
|
panic(fmt.Sprintf("expected previous hard borrow reward accrual time to be set in state for %s", rp.CollateralType))
|
|
|
|
}
|
|
|
|
gat := types.NewGenesisAccumulationTime(rp.CollateralType, pat)
|
|
|
|
hardBorrowGats = append(hardBorrowGats, gat)
|
|
|
|
}
|
|
|
|
|
|
|
|
var hardDelegatorGats GenesisAccumulationTimes
|
|
|
|
for _, rp := range params.HardDelegatorRewardPeriods {
|
|
|
|
pat, found := k.GetPreviousHardDelegatorRewardAccrualTime(ctx, rp.CollateralType)
|
2021-01-18 19:12:37 +00:00
|
|
|
if !found {
|
2021-03-11 04:32:35 +00:00
|
|
|
panic(fmt.Sprintf("expected previous hard delegator reward accrual time to be set in state for %s", rp.CollateralType))
|
2021-01-18 19:12:37 +00:00
|
|
|
}
|
2021-03-11 04:32:35 +00:00
|
|
|
gat := types.NewGenesisAccumulationTime(rp.CollateralType, pat)
|
|
|
|
hardDelegatorGats = append(hardDelegatorGats, gat)
|
2021-01-18 19:12:37 +00:00
|
|
|
}
|
|
|
|
|
2021-07-07 13:23:06 +00:00
|
|
|
var swapGats GenesisAccumulationTimes
|
|
|
|
for _, rp := range params.SwapRewardPeriods {
|
|
|
|
pat, found := k.GetSwapRewardAccrualTime(ctx, rp.CollateralType)
|
|
|
|
if !found {
|
|
|
|
panic(fmt.Sprintf("expected previous swap reward accrual time to be set in state for %s", rp.CollateralType))
|
|
|
|
}
|
|
|
|
gat := types.NewGenesisAccumulationTime(rp.CollateralType, pat)
|
|
|
|
swapGats = append(swapGats, gat)
|
|
|
|
}
|
|
|
|
|
2021-03-11 04:32:35 +00:00
|
|
|
return types.NewGenesisState(params, usdxMintingGats, hardSupplyGats,
|
2021-07-07 13:23:06 +00:00
|
|
|
hardBorrowGats, hardDelegatorGats, swapGats, synchronizedUsdxClaims, synchronizedHardClaims)
|
2020-04-24 15:20:34 +00:00
|
|
|
}
|