mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-26 16:25:21 +00:00
38a98ac4fc
* split up payout.go file * extract genesis builders to new testutil package * move claim integration tests out of keeper * convert claim integration tests to handler tests * combine claim usdx minting keeper methods * combine hard claim keeper methods * combine delegator claim keeper methods * add multiply coins helper method * rename file to better match contents * add basic claiming unit tests * add claiming subset of delegator reward denoms * refactor msg tests * add msg ValidateBasic tests * connect swap hooks into keeper methods * tidy up delegator handler tests * add swap claiming msgs and keeper method * add swap claiming to client * add subset claiming to other msg types * split up handler test file * connect up subset claiming for swap * make multiplier name validation more strict * fix: struct tag typo in swap incentives * connect up subset claiming for hard * connect up subset claiming for delegator * fix: register cli tx routes for swp claiming * fix claim amount in claim event * fix token name in cli help docs * remove unused field in msg tests * tidy up swap and delegator handler tests * refactor hard handler tests * refactor usdx handler tests * remove unused constant Co-authored-by: karzak <kjydavis3@gmail.com>
71 lines
2.8 KiB
Go
71 lines
2.8 KiB
Go
package keeper_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
|
|
"github.com/kava-labs/kava/app"
|
|
"github.com/kava-labs/kava/x/incentive/testutil"
|
|
"github.com/kava-labs/kava/x/incentive/types"
|
|
)
|
|
|
|
func TestRiskyCDPsAccumulateRewards(t *testing.T) {
|
|
genesisTime := time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC)
|
|
_, addrs := app.GeneratePrivKeyAddressPairs(5)
|
|
|
|
initialCollateral := c("bnb", 1_000_000_000)
|
|
user := addrs[0]
|
|
authBuilder := app.NewAuthGenesisBuilder().
|
|
WithSimpleAccount(user, cs(initialCollateral))
|
|
|
|
collateralType := "bnb-a"
|
|
rewardsPerSecond := c(types.USDXMintingRewardDenom, 1_000_000)
|
|
|
|
incentBuilder := testutil.NewIncentiveGenesisBuilder().
|
|
WithGenesisTime(genesisTime).
|
|
WithSimpleUSDXRewardPeriod(collateralType, rewardsPerSecond)
|
|
|
|
tApp := app.NewTestApp()
|
|
tApp.InitializeFromGenesisStates(
|
|
authBuilder.BuildMarshalled(),
|
|
NewPricefeedGenStateMultiFromTime(genesisTime),
|
|
NewCDPGenStateMulti(),
|
|
incentBuilder.BuildMarshalled(),
|
|
)
|
|
ctx := tApp.NewContext(true, abci.Header{Height: 1, Time: genesisTime})
|
|
|
|
// Setup cdp state containing one CDP
|
|
cdpKeeper := tApp.GetCDPKeeper()
|
|
err := cdpKeeper.AddCdp(ctx, user, initialCollateral, c("usdx", 100_000_000), collateralType)
|
|
require.NoError(t, err)
|
|
|
|
// Skip ahead two blocks to accumulate both interest and usdx reward for the cdp
|
|
// Two blocks are required because the cdp begin blocker runs before incentive begin blocker.
|
|
// In the first begin block the cdp is synced, which triggers its claim to sync. But no global rewards have accumulated yet so the sync does nothing.
|
|
// Global rewards accumulate immediately after during the incentive begin blocker.
|
|
// Rewards are added to the cdp's claim in the next block when the cdp is synced.
|
|
_ = tApp.EndBlocker(ctx, abci.RequestEndBlock{})
|
|
ctx = ctx.WithBlockTime(ctx.BlockTime().Add(10 * time.Minute))
|
|
_ = tApp.BeginBlocker(ctx, abci.RequestBeginBlock{}) // height and time in header are ignored by module begin blockers
|
|
|
|
_ = tApp.EndBlocker(ctx, abci.RequestEndBlock{})
|
|
ctx = ctx.WithBlockTime(ctx.BlockTime().Add(10 * time.Minute))
|
|
_ = tApp.BeginBlocker(ctx, abci.RequestBeginBlock{})
|
|
|
|
// check cdp rewards
|
|
cdp, found := cdpKeeper.GetCdpByOwnerAndCollateralType(ctx, user, collateralType)
|
|
require.True(t, found)
|
|
// This additional sync adds the rewards accumulated at the end of the last begin block.
|
|
// They weren't added during the begin blocker as the incentive BB runs after the CDP BB.
|
|
incentiveKeeper := tApp.GetIncentiveKeeper()
|
|
incentiveKeeper.SynchronizeUSDXMintingReward(ctx, cdp)
|
|
claim, found := incentiveKeeper.GetUSDXMintingClaim(ctx, user)
|
|
require.True(t, found)
|
|
|
|
// rewards are roughly rewardsPerSecond * secondsElapsed (10mins) * num blocks (2)
|
|
require.Equal(t, c(types.USDXMintingRewardDenom, 1_200_000_557), claim.Reward)
|
|
}
|