github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/keeper/keeper_test.go (about) 1 package keeper 2 3 import ( 4 "testing" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 "github.com/fibonacci-chain/fbc/x/distribution/types" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestSetWithdrawAddr(t *testing.T) { 12 ctx, _, keeper, _, _ := CreateTestInputDefault(t, false, 1000) 13 keeper.SetDistributionType(ctx, types.DistributionTypeOffChain) 14 keeper.SetWithdrawRewardEnabled(ctx, true) 15 keeper.SetRewardTruncatePrecision(ctx, 0) 16 17 params := keeper.GetParams(ctx) 18 params.WithdrawAddrEnabled = false 19 keeper.SetParams(ctx, params) 20 21 err := keeper.SetWithdrawAddr(ctx, delAddr1, delAddr2) 22 require.NotNil(t, err) 23 24 params.WithdrawAddrEnabled = true 25 keeper.SetParams(ctx, params) 26 27 err = keeper.SetWithdrawAddr(ctx, delAddr1, delAddr2) 28 require.Nil(t, err) 29 30 keeper.blacklistedAddrs[distrAcc.GetAddress().String()] = true 31 require.Error(t, keeper.SetWithdrawAddr(ctx, delAddr1, distrAcc.GetAddress())) 32 } 33 34 func TestWithdrawValidatorCommission(t *testing.T) { 35 ctx, ak, keeper, sk, _ := CreateTestInputDefault(t, false, 1000) 36 37 valCommission := sdk.DecCoins{ 38 sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), 39 sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(3).Quo(sdk.NewDec(2))), 40 } 41 42 // set module account coins 43 distrAcc := keeper.GetDistributionAccount(ctx) 44 distrAcc.SetCoins(sdk.NewCoins( 45 sdk.NewCoin("mytoken", sdk.NewInt(2)), 46 sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2)), 47 )) 48 keeper.supplyKeeper.SetModuleAccount(ctx, distrAcc) 49 50 // check initial balance 51 balance := ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins() 52 expTokens := sdk.TokensFromConsensusPower(1000) 53 subMsdCoin := sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sk.ParamsMinSelfDelegation(ctx)) 54 expCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, expTokens).Sub(subMsdCoin)) 55 require.Equal(t, expCoins, balance) 56 57 // withdraw commission error 58 _, err := keeper.WithdrawValidatorCommission(ctx, valOpAddr3) 59 require.Equal(t, err, types.ErrNoValidatorCommission()) 60 61 // set outstanding rewards 62 keeper.SetValidatorOutstandingRewards(ctx, valOpAddr3, valCommission) 63 64 // set commission 65 keeper.SetValidatorAccumulatedCommission(ctx, valOpAddr3, valCommission) 66 67 // withdraw commission 68 _, err = keeper.WithdrawValidatorCommission(ctx, valOpAddr3) 69 require.Equal(t, err, nil) 70 71 // check balance increase 72 balance = ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins() 73 require.Equal(t, sdk.NewCoins( 74 sdk.NewCoin("mytoken", sdk.NewInt(1)), 75 sdk.NewCoin(sdk.DefaultBondDenom, expTokens.AddRaw(1)).Sub(subMsdCoin), 76 ), balance) 77 78 // check remainder 79 remainder := keeper.GetValidatorAccumulatedCommission(ctx, valOpAddr3) 80 require.Equal(t, sdk.DecCoins{ 81 sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(1).Quo(sdk.NewDec(2))), 82 sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(1).Quo(sdk.NewDec(4))), 83 }, remainder) 84 85 require.True(t, true) 86 } 87 88 func TestGetTotalRewards(t *testing.T) { 89 ctx, _, keeper, _, _ := CreateTestInputDefault(t, false, 1000) 90 91 valCommission := sdk.DecCoins{ 92 sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), 93 sdk.NewDecCoinFromDec("stake", sdk.NewDec(3).Quo(sdk.NewDec(2))), 94 } 95 96 keeper.SetValidatorOutstandingRewards(ctx, valOpAddr1, valCommission) 97 keeper.SetValidatorOutstandingRewards(ctx, valOpAddr2, valCommission) 98 99 expectedRewards := valCommission.MulDec(sdk.NewDec(2)) 100 totalRewards := keeper.GetTotalRewards(ctx) 101 102 require.Equal(t, expectedRewards, totalRewards) 103 }