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  }