mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 06:59:41 +00:00 
			
		
		
		
	bug: fix invalid accumulation time genesis validation (#1550)
* bug: increase valid accumulation time to 5 years * add changelog entry * resolve test failures * update validation to only check that value is set
This commit is contained in:
		
							parent
							
								
									22231db05a
								
							
						
					
					
						commit
						79eaad6660
					
				@ -55,6 +55,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
 | 
			
		||||
- [#1477] Remove legacy REST endpoints.
 | 
			
		||||
- [#1519] Remove required denom path parameter from hard grpc query endpoints.
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
- (x/incentive) [#1550] Fix validation on genesis reward accumulation time.
 | 
			
		||||
 | 
			
		||||
## [v0.16.1]
 | 
			
		||||
 | 
			
		||||
### State Machine Breaking
 | 
			
		||||
 | 
			
		||||
@ -10,12 +10,6 @@ import (
 | 
			
		||||
	"github.com/kava-labs/kava/x/incentive/types"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const year = 365 * 24 * time.Hour
 | 
			
		||||
 | 
			
		||||
// EarliestValidAccumulationTime is how far behind the genesis time an accumulation time can be for it to be valid.
 | 
			
		||||
// It's a safety check to ensure rewards aren't accidentally accumulated for many years on the first block (eg since Jan 1970).
 | 
			
		||||
var EarliestValidAccumulationTime time.Duration = year
 | 
			
		||||
 | 
			
		||||
// InitGenesis initializes the store state from a genesis state.
 | 
			
		||||
func InitGenesis(
 | 
			
		||||
	ctx sdk.Context,
 | 
			
		||||
@ -49,7 +43,7 @@ func InitGenesis(
 | 
			
		||||
		k.SetUSDXMintingClaim(ctx, claim)
 | 
			
		||||
	}
 | 
			
		||||
	for _, gat := range gs.USDXRewardState.AccumulationTimes {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime, ctx.BlockTime()); err != nil {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime); err != nil {
 | 
			
		||||
			panic(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
		k.SetPreviousUSDXMintingAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
 | 
			
		||||
@ -67,7 +61,7 @@ func InitGenesis(
 | 
			
		||||
		k.SetHardLiquidityProviderClaim(ctx, claim)
 | 
			
		||||
	}
 | 
			
		||||
	for _, gat := range gs.HardSupplyRewardState.AccumulationTimes {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime, ctx.BlockTime()); err != nil {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime); err != nil {
 | 
			
		||||
			panic(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
		k.SetPreviousHardSupplyRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
 | 
			
		||||
@ -76,7 +70,7 @@ func InitGenesis(
 | 
			
		||||
		k.SetHardSupplyRewardIndexes(ctx, mri.CollateralType, mri.RewardIndexes)
 | 
			
		||||
	}
 | 
			
		||||
	for _, gat := range gs.HardBorrowRewardState.AccumulationTimes {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime, ctx.BlockTime()); err != nil {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime); err != nil {
 | 
			
		||||
			panic(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
		k.SetPreviousHardBorrowRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
 | 
			
		||||
@ -90,7 +84,7 @@ func InitGenesis(
 | 
			
		||||
		k.SetDelegatorClaim(ctx, claim)
 | 
			
		||||
	}
 | 
			
		||||
	for _, gat := range gs.DelegatorRewardState.AccumulationTimes {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime, ctx.BlockTime()); err != nil {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime); err != nil {
 | 
			
		||||
			panic(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
		k.SetPreviousDelegatorRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
 | 
			
		||||
@ -104,7 +98,7 @@ func InitGenesis(
 | 
			
		||||
		k.SetSwapClaim(ctx, claim)
 | 
			
		||||
	}
 | 
			
		||||
	for _, gat := range gs.SwapRewardState.AccumulationTimes {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime, ctx.BlockTime()); err != nil {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime); err != nil {
 | 
			
		||||
			panic(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
		k.SetSwapRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
 | 
			
		||||
@ -118,7 +112,7 @@ func InitGenesis(
 | 
			
		||||
		k.SetSavingsClaim(ctx, claim)
 | 
			
		||||
	}
 | 
			
		||||
	for _, gat := range gs.SavingsRewardState.AccumulationTimes {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime, ctx.BlockTime()); err != nil {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime); err != nil {
 | 
			
		||||
			panic(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
		k.SetSavingsRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
 | 
			
		||||
@ -132,7 +126,7 @@ func InitGenesis(
 | 
			
		||||
		k.SetEarnClaim(ctx, claim)
 | 
			
		||||
	}
 | 
			
		||||
	for _, gat := range gs.EarnRewardState.AccumulationTimes {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime, ctx.BlockTime()); err != nil {
 | 
			
		||||
		if err := ValidateAccumulationTime(gat.PreviousAccumulationTime); err != nil {
 | 
			
		||||
			panic(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
		k.SetEarnRewardAccrualTime(ctx, gat.CollateralType, gat.PreviousAccumulationTime)
 | 
			
		||||
@ -292,14 +286,9 @@ func getEarnGenesisRewardState(ctx sdk.Context, keeper keeper.Keeper) types.Gene
 | 
			
		||||
	return types.NewGenesisRewardState(ats, mris)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ValidateAccumulationTime(previousAccumulationTime, genesisTime time.Time) error {
 | 
			
		||||
	if previousAccumulationTime.Before(genesisTime.Add(-1 * EarliestValidAccumulationTime)) {
 | 
			
		||||
		return fmt.Errorf(
 | 
			
		||||
			"found accumulation time '%s' more than '%s' behind genesis time '%s'",
 | 
			
		||||
			previousAccumulationTime,
 | 
			
		||||
			EarliestValidAccumulationTime,
 | 
			
		||||
			genesisTime,
 | 
			
		||||
		)
 | 
			
		||||
func ValidateAccumulationTime(previousAccumulationTime time.Time) error {
 | 
			
		||||
	if previousAccumulationTime.Equal(time.Time{}) {
 | 
			
		||||
		return fmt.Errorf("accumulation time is not set")
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -305,13 +305,13 @@ func (suite *GenesisTestSuite) TestExportedGenesisMatchesImported() {
 | 
			
		||||
	suite.Equal(genesisState, exportedGenesisState)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *GenesisTestSuite) TestInitGenesisPanicsWhenAccumulationTimesToLongAgo() {
 | 
			
		||||
func (suite *GenesisTestSuite) TestInitGenesisPanicsWhenAccumulationTimesTooLongAgo() {
 | 
			
		||||
	genesisTime := time.Date(1998, 1, 1, 0, 0, 0, 0, time.UTC)
 | 
			
		||||
	invalidRewardState := types.NewGenesisRewardState(
 | 
			
		||||
		types.AccumulationTimes{
 | 
			
		||||
			types.NewAccumulationTime(
 | 
			
		||||
				"bnb",
 | 
			
		||||
				genesisTime.Add(-23*incentive.EarliestValidAccumulationTime).Add(-time.Nanosecond),
 | 
			
		||||
				time.Time{},
 | 
			
		||||
			),
 | 
			
		||||
		},
 | 
			
		||||
		types.MultiRewardIndexes{},
 | 
			
		||||
@ -373,7 +373,7 @@ func (suite *GenesisTestSuite) TestInitGenesisPanicsWhenAccumulationTimesToLongA
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		suite.PanicsWithValue(
 | 
			
		||||
			"found accumulation time '1975-01-06 23:59:59.999999999 +0000 UTC' more than '8760h0m0s' behind genesis time '1998-01-01 00:00:00 +0000 UTC'",
 | 
			
		||||
			"accumulation time is not set",
 | 
			
		||||
			func() {
 | 
			
		||||
				incentive.InitGenesis(
 | 
			
		||||
					ctx, tApp.GetIncentiveKeeper(),
 | 
			
		||||
@ -388,13 +388,12 @@ func (suite *GenesisTestSuite) TestInitGenesisPanicsWhenAccumulationTimesToLongA
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *GenesisTestSuite) TestValidateAccumulationTime() {
 | 
			
		||||
	genTime := time.Date(1998, 1, 1, 0, 0, 0, 0, time.UTC)
 | 
			
		||||
	// valid when set
 | 
			
		||||
	accTime := time.Date(1998, 1, 1, 0, 0, 0, 0, time.UTC)
 | 
			
		||||
	suite.NoError(incentive.ValidateAccumulationTime(accTime))
 | 
			
		||||
 | 
			
		||||
	err := incentive.ValidateAccumulationTime(
 | 
			
		||||
		genTime.Add(-incentive.EarliestValidAccumulationTime).Add(-time.Nanosecond),
 | 
			
		||||
		genTime,
 | 
			
		||||
	)
 | 
			
		||||
	suite.Error(err)
 | 
			
		||||
	// invalid when nil value
 | 
			
		||||
	suite.Error(incentive.ValidateAccumulationTime(time.Time{}))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestGenesisTestSuite(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user