@@ -6,6 +6,17 @@ import (
6
6
"github.com/sideprotocol/side/x/incentive/types"
7
7
)
8
8
9
+ // GetReward gets the reward of the given address
10
+ func (k Keeper ) GetReward (ctx sdk.Context , address string ) * types.Reward {
11
+ store := ctx .KVStore (k .storeKey )
12
+
13
+ var reward types.Reward
14
+ bz := store .Get (types .RewardKey (address ))
15
+ k .cdc .MustUnmarshal (bz , & reward )
16
+
17
+ return & reward
18
+ }
19
+
9
20
// SetReward sets the given reward
10
21
func (k Keeper ) SetReward (ctx sdk.Context , reward * types.Reward ) {
11
22
store := ctx .KVStore (k .storeKey )
@@ -15,35 +26,46 @@ func (k Keeper) SetReward(ctx sdk.Context, reward *types.Reward) {
15
26
store .Set (types .RewardKey (reward .Address ), bz )
16
27
}
17
28
18
- // GetReward gets the reward of the given address
19
- func (k Keeper ) GetReward (ctx sdk.Context , address string ) * types. Reward {
20
- store := ctx . KVStore ( k . storeKey )
29
+ // AddDepositReward adds the deposit reward for the specified address by the given amount
30
+ func (k Keeper ) AddDepositReward (ctx sdk.Context , address string , amount sdk. Coin ) {
31
+ reward := k . GetReward ( ctx , address )
21
32
22
- var reward types. Reward
23
- bz := store . Get ( types . RewardKey ( address ))
24
- k . cdc . MustUnmarshal ( bz , & reward )
33
+ reward . Address = address
34
+ reward . DepositCount += 1
35
+ reward . TotalAmount = amount . AddAmount ( reward . TotalAmount . Amount )
25
36
26
- return & reward
37
+ k . SetReward ( ctx , reward )
27
38
}
28
39
29
- // SetTotalRewards sets the total rewards
30
- func (k Keeper ) SetTotalRewards (ctx sdk.Context , totalRewards sdk.Coin ) {
31
- store := ctx . KVStore ( k . storeKey )
40
+ // AddWithdrawReward adds the withdrawal reward for the specified address by the given amount
41
+ func (k Keeper ) AddWithdrawReward (ctx sdk.Context , address string , amount sdk.Coin ) {
42
+ reward := k . GetReward ( ctx , address )
32
43
33
- bz := k .cdc .MustMarshal (& totalRewards )
44
+ reward .Address = address
45
+ reward .WithdrawCount += 1
46
+ reward .TotalAmount = amount .AddAmount (reward .TotalAmount .Amount )
34
47
35
- store . Set ( types . TotalRewardsKey , bz )
48
+ k . SetReward ( ctx , reward )
36
49
}
37
50
38
51
// GetTotalRewards gets the total rewards
39
52
func (k Keeper ) GetTotalRewards (ctx sdk.Context ) sdk.Coin {
40
53
store := ctx .KVStore (k .storeKey )
41
54
42
- var rewards sdk.Coin
55
+ var totalRewards sdk.Coin
43
56
bz := store .Get (types .TotalRewardsKey )
44
- k .cdc .MustUnmarshal (bz , & rewards )
57
+ k .cdc .MustUnmarshal (bz , & totalRewards )
58
+
59
+ return totalRewards
60
+ }
61
+
62
+ // SetTotalRewards sets the total rewards
63
+ func (k Keeper ) SetTotalRewards (ctx sdk.Context , totalRewards sdk.Coin ) {
64
+ store := ctx .KVStore (k .storeKey )
45
65
46
- return rewards
66
+ bz := k .cdc .MustMarshal (& totalRewards )
67
+
68
+ store .Set (types .TotalRewardsKey , bz )
47
69
}
48
70
49
71
// UpdateTotalRewards updates the total rewards by delta
@@ -57,45 +79,35 @@ func (k Keeper) UpdateTotalRewards(ctx sdk.Context, delta sdk.Coin) {
57
79
// DistributeDepositReward distributes reward for deposit
58
80
func (k Keeper ) DistributeDepositReward (ctx sdk.Context , address string ) error {
59
81
if ! k .IncentiveEnabled (ctx ) {
60
- return nil
82
+ return types . ErrIncentiveNotEnabled
61
83
}
62
84
63
- if err := k .bankKeeper .SendCoinsFromModuleToAccount (ctx , types .ModuleName , sdk .MustAccAddressFromBech32 (address ), sdk .NewCoins (k .RewardPerDeposit (ctx ))); err != nil {
64
- // ignore error
65
- return nil
66
- }
85
+ rewardAmount := k .RewardPerDeposit (ctx )
67
86
68
- reward := k .GetReward (ctx , address )
69
-
70
- reward .Address = address
71
- reward .DepositCount += 1
72
- reward .TotalAmount = k .RewardPerDeposit (ctx ).AddAmount (reward .TotalAmount .Amount )
87
+ if err := k .bankKeeper .SendCoinsFromModuleToAccount (ctx , types .ModuleName , sdk .MustAccAddressFromBech32 (address ), sdk .NewCoins (rewardAmount )); err != nil {
88
+ return err
89
+ }
73
90
74
- k .SetReward (ctx , reward )
75
- k .UpdateTotalRewards (ctx , k . RewardPerDeposit ( ctx ) )
91
+ k .AddDepositReward (ctx , address , rewardAmount )
92
+ k .UpdateTotalRewards (ctx , rewardAmount )
76
93
77
94
return nil
78
95
}
79
96
80
97
// DistributeWithdrawReward distributes reward for withdrawal
81
98
func (k Keeper ) DistributeWithdrawReward (ctx sdk.Context , address string ) error {
82
99
if ! k .IncentiveEnabled (ctx ) {
83
- return nil
100
+ return types . ErrIncentiveNotEnabled
84
101
}
85
102
86
- if err := k .bankKeeper .SendCoinsFromModuleToAccount (ctx , types .ModuleName , sdk .MustAccAddressFromBech32 (address ), sdk .NewCoins (k .RewardPerWithdraw (ctx ))); err != nil {
87
- // ignore error
88
- return nil
89
- }
103
+ rewardAmount := k .RewardPerWithdraw (ctx )
90
104
91
- reward := k .GetReward (ctx , address )
92
-
93
- reward .Address = address
94
- reward .WithdrawCount += 1
95
- reward .TotalAmount = k .RewardPerWithdraw (ctx ).AddAmount (reward .TotalAmount .Amount )
105
+ if err := k .bankKeeper .SendCoinsFromModuleToAccount (ctx , types .ModuleName , sdk .MustAccAddressFromBech32 (address ), sdk .NewCoins (rewardAmount )); err != nil {
106
+ return err
107
+ }
96
108
97
- k .SetReward (ctx , reward )
98
- k .UpdateTotalRewards (ctx , k . RewardPerWithdraw ( ctx ) )
109
+ k .AddWithdrawReward (ctx , address , rewardAmount )
110
+ k .UpdateTotalRewards (ctx , rewardAmount )
99
111
100
112
return nil
101
113
}
0 commit comments