Skip to content

Commit 374a398

Browse files
committed
use decCoin for reward debts
1 parent ee6f443 commit 374a398

File tree

12 files changed

+84
-85
lines changed

12 files changed

+84
-85
lines changed

proto/restake/v1beta1/types.proto

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,15 @@ message Lock {
6464

6565
// PosRewardDebts is a list of reward debt for each reward (only the positive side).
6666
// Note: Coin and DecCoin can't have negative amounts. so, we split it into two numbers.
67-
repeated cosmos.base.v1beta1.Coin pos_reward_debts = 4 [
68-
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins",
67+
repeated cosmos.base.v1beta1.DecCoin pos_reward_debts = 4 [
68+
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins",
6969
(gogoproto.nullable) = false,
7070
(amino.dont_omitempty) = true
7171
];
7272

7373
// NegRewardDebts is a list of reward debt for each reward (only negative side).
74-
repeated cosmos.base.v1beta1.Coin neg_reward_debts = 5 [
75-
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins",
74+
repeated cosmos.base.v1beta1.DecCoin neg_reward_debts = 5 [
75+
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins",
7676
(gogoproto.nullable) = false,
7777
(amino.dont_omitempty) = true
7878
];

x/restake/client/cli/tx.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ func GetTxCmdClaimRewards() *cobra.Command {
100100
msgs = append(msgs, msg)
101101
}
102102

103+
if len(msgs) == 0 {
104+
return fmt.Errorf("no rewards to claim")
105+
}
106+
103107
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msgs...)
104108
},
105109
}

x/restake/keeper/grpc_query.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func (k Querier) Locks(
105105
keyStore,
106106
req.Pagination,
107107
func(key []byte, s *types.Lock) (*types.LockResponse, error) {
108-
if !k.IsActiveKey(ctx, s.Key) {
108+
if !k.IsActiveKey(ctx, s.Key) || s.Amount.IsZero() {
109109
return nil, nil
110110
}
111111

x/restake/keeper/keeper_key.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (k Keeper) AddRewards(ctx sdk.Context, sender sdk.AccAddress, keyName strin
4343
}
4444

4545
if key.TotalPower.IsZero() {
46-
return types.ErrTotalLockZero
46+
return types.ErrTotalPowerZero
4747
}
4848

4949
err = k.bankKeeper.SendCoins(ctx, sender, sdk.MustAccAddressFromBech32(key.PoolAddress), rewards)

x/restake/keeper/keeper_lock.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ func (k Keeper) SetLockedPower(ctx sdk.Context, lockerAddr sdk.AccAddress, keyNa
3737
LockerAddress: lockerAddr.String(),
3838
Key: keyName,
3939
Amount: sdkmath.NewInt(0),
40-
PosRewardDebts: sdk.NewCoins(),
41-
NegRewardDebts: sdk.NewCoins(),
40+
PosRewardDebts: sdk.NewDecCoins(),
41+
NegRewardDebts: sdk.NewDecCoins(),
4242
}
4343
}
4444

@@ -48,12 +48,10 @@ func (k Keeper) SetLockedPower(ctx sdk.Context, lockerAddr sdk.AccAddress, keyNa
4848
k.SetKey(ctx, key)
4949

5050
addtionalDebts := key.RewardPerPowers.MulDecTruncate(sdkmath.LegacyNewDecFromInt(diffAmount.Abs()))
51-
truncatedAdditionalDebts, _ := addtionalDebts.TruncateDecimal()
52-
truncatedAdditionalDebts = truncatedAdditionalDebts.Sort()
5351
if diffAmount.IsPositive() {
54-
lock.PosRewardDebts = lock.PosRewardDebts.Add(truncatedAdditionalDebts...)
52+
lock.PosRewardDebts = lock.PosRewardDebts.Add(addtionalDebts...)
5553
} else {
56-
lock.NegRewardDebts = lock.NegRewardDebts.Add(truncatedAdditionalDebts...)
54+
lock.NegRewardDebts = lock.NegRewardDebts.Add(addtionalDebts...)
5755
}
5856
lock.Amount = amount
5957
k.SetLock(ctx, lock)
@@ -99,9 +97,8 @@ func (k Keeper) getReward(ctx sdk.Context, lock types.Lock) types.Reward {
9997
totalRewards := k.getTotalRewards(ctx, lock)
10098

10199
return types.Reward{
102-
Key: lock.Key,
103-
Rewards: totalRewards.Add(sdk.NewDecCoinsFromCoins(lock.NegRewardDebts...)...).
104-
Sub(sdk.NewDecCoinsFromCoins(lock.PosRewardDebts...)),
100+
Key: lock.Key,
101+
Rewards: totalRewards.Add(lock.NegRewardDebts...).Sub(lock.PosRewardDebts),
105102
}
106103
}
107104

x/restake/keeper/keeper_lock_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ func (suite *KeeperTestSuite) TestSetLockedPower() {
117117
LockerAddress: ValidAddress1.String(),
118118
Key: ValidKey1,
119119
Amount: sdkmath.NewInt(100),
120-
PosRewardDebts: sdk.NewCoins(
121-
sdk.NewCoin("aaaa", sdkmath.NewInt(0)),
122-
sdk.NewCoin("bbbb", sdkmath.NewInt(1)),
120+
PosRewardDebts: sdk.NewDecCoins(
121+
sdk.NewDecCoinFromDec("aaaa", sdkmath.LegacyNewDecWithPrec(1, 1)),
122+
sdk.NewDecCoinFromDec("bbbb", sdkmath.LegacyNewDecWithPrec(1, 0)),
123123
),
124124
NegRewardDebts: nil,
125125
},
@@ -154,9 +154,9 @@ func (suite *KeeperTestSuite) TestSetLockedPower() {
154154
LockerAddress: ValidAddress1.String(),
155155
Key: ValidKey1,
156156
Amount: sdkmath.NewInt(1000),
157-
PosRewardDebts: sdk.NewCoins(
158-
sdk.NewCoin("aaaa", sdkmath.NewInt(0)),
159-
sdk.NewCoin("bbbb", sdkmath.NewInt(9)),
157+
PosRewardDebts: sdk.NewDecCoins(
158+
sdk.NewDecCoinFromDec("aaaa", sdkmath.LegacyNewDecWithPrec(9, 1)),
159+
sdk.NewDecCoinFromDec("bbbb", sdkmath.LegacyNewDecWithPrec(9, 0)),
160160
),
161161
NegRewardDebts: nil,
162162
},
@@ -192,9 +192,9 @@ func (suite *KeeperTestSuite) TestSetLockedPower() {
192192
Key: ValidKey1,
193193
Amount: sdkmath.NewInt(100),
194194
PosRewardDebts: nil,
195-
NegRewardDebts: sdk.NewCoins(
196-
sdk.NewCoin("aaaa", sdkmath.NewInt(0)),
197-
sdk.NewCoin("bbbb", sdkmath.NewInt(9)),
195+
NegRewardDebts: sdk.NewDecCoins(
196+
sdk.NewDecCoinFromDec("aaaa", sdkmath.LegacyNewDecWithPrec(9, 1)),
197+
sdk.NewDecCoinFromDec("bbbb", sdkmath.LegacyNewDecWithPrec(9, 0)),
198198
),
199199
},
200200
},

x/restake/keeper/msg_server.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,12 @@ func (k msgServer) ClaimRewards(
4242
return nil, err
4343
}
4444

45-
totalRewards := k.getTotalRewards(ctx, lock)
46-
truncatedTotalRewards, remainders := totalRewards.TruncateDecimal()
47-
finalRewards := truncatedTotalRewards.Add(lock.NegRewardDebts...).Sub(lock.PosRewardDebts...)
45+
reward := k.getReward(ctx, lock)
46+
finalRewards, remainders := reward.Rewards.TruncateDecimal()
4847

4948
if !finalRewards.IsZero() {
50-
lock.PosRewardDebts = truncatedTotalRewards
51-
lock.NegRewardDebts = sdk.NewCoins()
49+
lock.PosRewardDebts = sdk.NewDecCoins()
50+
lock.NegRewardDebts = remainders
5251
k.SetLock(ctx, lock)
5352

5453
err = k.bankKeeper.SendCoins(ctx, sdk.MustAccAddressFromBech32(key.PoolAddress), address, finalRewards)

x/restake/keeper/msg_server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func (suite *KeeperTestSuite) TestMsgClaimRewards() {
4949
postCheck: func() {
5050
lock, err := suite.restakeKeeper.GetLock(ctx, ValidAddress1, ValidKey1)
5151
suite.Require().NoError(err)
52-
suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("uband", sdkmath.NewInt(1))), lock.PosRewardDebts)
52+
suite.Require().Equal(sdk.NewDecCoins(sdk.NewDecCoin("uband", sdkmath.NewInt(1))), lock.PosRewardDebts)
5353
},
5454
},
5555
}

x/restake/types/errors.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var (
1313
ErrLockNotFound = errorsmod.Register(ModuleName, 6, "lock not found")
1414
ErrDelegationNotEnough = errorsmod.Register(ModuleName, 7, "delegation not enough")
1515
ErrInvalidAmount = errorsmod.Register(ModuleName, 8, "invalid amount")
16-
ErrTotalLockZero = errorsmod.Register(ModuleName, 9, "total lock is zero")
16+
ErrTotalPowerZero = errorsmod.Register(ModuleName, 9, "total power is zero")
1717
ErrAccountAlreadyExist = errorsmod.Register(ModuleName, 10, "account already exist")
1818
ErrInvalidLength = errorsmod.Register(ModuleName, 11, "invalid length")
1919
)

x/restake/types/genesis_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ func TestGenesisStateValidate(t *testing.T) {
4040
LockerAddress: "address1",
4141
Key: "key",
4242
Amount: sdkmath.NewInt(4),
43-
PosRewardDebts: sdk.NewCoins(),
44-
NegRewardDebts: sdk.NewCoins(),
43+
PosRewardDebts: sdk.NewDecCoins(),
44+
NegRewardDebts: sdk.NewDecCoins(),
4545
},
4646
{
4747
LockerAddress: "address2",
4848
Key: "key",
4949
Amount: sdkmath.NewInt(6),
50-
PosRewardDebts: sdk.NewCoins(),
51-
NegRewardDebts: sdk.NewCoins(),
50+
PosRewardDebts: sdk.NewDecCoins(),
51+
NegRewardDebts: sdk.NewDecCoins(),
5252
},
5353
},
5454
},
@@ -72,15 +72,15 @@ func TestGenesisStateValidate(t *testing.T) {
7272
LockerAddress: "address1",
7373
Key: "key",
7474
Amount: sdkmath.NewInt(4),
75-
PosRewardDebts: sdk.NewCoins(),
76-
NegRewardDebts: sdk.NewCoins(),
75+
PosRewardDebts: sdk.NewDecCoins(),
76+
NegRewardDebts: sdk.NewDecCoins(),
7777
},
7878
{
7979
LockerAddress: "address2",
8080
Key: "key",
8181
Amount: sdkmath.NewInt(6),
82-
PosRewardDebts: sdk.NewCoins(),
83-
NegRewardDebts: sdk.NewCoins(),
82+
PosRewardDebts: sdk.NewDecCoins(),
83+
NegRewardDebts: sdk.NewDecCoins(),
8484
},
8585
},
8686
},

0 commit comments

Comments
 (0)