Skip to content

Commit 68a1d19

Browse files
committed
optimize incentive
1 parent c013008 commit 68a1d19

File tree

8 files changed

+65
-18
lines changed

8 files changed

+65
-18
lines changed

x/btcbridge/keeper/deposit.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ func (k Keeper) ProcessBitcoinDepositTransaction(ctx sdk.Context, msg *types.Msg
2525
return nil, nil, err
2626
}
2727

28-
// distribute deposit reward
29-
if k.incentiveKeeper.IncentiveEnabled(ctx) {
30-
_ = k.incentiveKeeper.DistributeDepositReward(ctx, recipient.EncodeAddress())
28+
// hook
29+
if err := k.AfterDeposit(ctx, recipient.EncodeAddress()); err != nil {
30+
return nil, nil, err
3131
}
3232

3333
return tx.Hash(), recipient, nil

x/btcbridge/keeper/hooks.go

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package keeper
2+
3+
import (
4+
sdk "github.com/cosmos/cosmos-sdk/types"
5+
)
6+
7+
// AfterDeposit performs the extended logic after deposit
8+
func (k Keeper) AfterDeposit(ctx sdk.Context, addr string) error {
9+
// distribute deposit reward
10+
if k.incentiveKeeper.DepositIncentiveEnabled(ctx) {
11+
_ = k.incentiveKeeper.DistributeDepositReward(ctx, addr)
12+
}
13+
14+
return nil
15+
}
16+
17+
// AfterWithdraw performs the extended logic after withdrawal
18+
func (k Keeper) AfterWithdraw(ctx sdk.Context, txHash string) error {
19+
// distribute rewards for all withdrawals
20+
if k.incentiveKeeper.WithdrawIncentiveEnabled(ctx) {
21+
withdrawRequests := k.GetWithdrawRequestsByTxHash(ctx, txHash)
22+
for _, req := range withdrawRequests {
23+
_ = k.incentiveKeeper.DistributeWithdrawReward(ctx, req.Address)
24+
}
25+
}
26+
27+
return nil
28+
}

x/btcbridge/keeper/withdraw.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -606,12 +606,9 @@ func (k Keeper) ProcessBitcoinWithdrawTransaction(ctx sdk.Context, msg *types.Ms
606606
// unlock the change utxos
607607
k.unlockChangeUTXOs(ctx, txHash.String())
608608

609-
// distribute rewards for all withdrawals
610-
if k.incentiveKeeper.IncentiveEnabled(ctx) {
611-
withdrawRequests := k.GetWithdrawRequestsByTxHash(ctx, txHash.String())
612-
for _, req := range withdrawRequests {
613-
_ = k.incentiveKeeper.DistributeWithdrawReward(ctx, req.Address)
614-
}
609+
// hook
610+
if err := k.AfterWithdraw(ctx, txHash.String()); err != nil {
611+
return nil, err
615612
}
616613

617614
return txHash, nil

x/btcbridge/types/expected_keepers.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ type StakingKeeper interface {
4242

4343
// IncentiveKeeper defines the expected incentive keeper
4444
type IncentiveKeeper interface {
45-
IncentiveEnabled(ctx sdk.Context) bool
45+
DepositIncentiveEnabled(ctx sdk.Context) bool
46+
WithdrawIncentiveEnabled(ctx sdk.Context) bool
4647

4748
DistributeDepositReward(ctx sdk.Context, addr string) error
4849
DistributeWithdrawReward(ctx sdk.Context, addr string) error

x/incentive/keeper/params.go

+20
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ func (k Keeper) IncentiveEnabled(ctx sdk.Context) bool {
1212
return k.GetParams(ctx).Enabled && !k.bankKeeper.SpendableCoins(ctx, authtypes.NewModuleAddress(types.ModuleName)).IsZero()
1313
}
1414

15+
// DepositIncentiveEnabled returns true if the incentive is enabled for deposit, false otherwise
16+
func (k Keeper) DepositIncentiveEnabled(ctx sdk.Context) bool {
17+
return k.IncentiveEnabled(ctx) && k.RewardPerDeposit(ctx).IsPositive() && k.bankKeeper.GetBalance(ctx, authtypes.NewModuleAddress(types.ModuleName), k.DepositRewardDenom(ctx)).IsPositive()
18+
}
19+
20+
// WithdrawIncentiveEnabled returns true if the incentive is enabled for withdrawal, false otherwise
21+
func (k Keeper) WithdrawIncentiveEnabled(ctx sdk.Context) bool {
22+
return k.IncentiveEnabled(ctx) && k.RewardPerWithdraw(ctx).IsPositive() && k.bankKeeper.GetBalance(ctx, authtypes.NewModuleAddress(types.ModuleName), k.WithdrawRewardDenom(ctx)).IsPositive()
23+
}
24+
1525
// RewardPerDeposit returns the reward amount for each deposit
1626
func (k Keeper) RewardPerDeposit(ctx sdk.Context) sdk.Coin {
1727
return k.GetParams(ctx).RewardPerDeposit
@@ -21,3 +31,13 @@ func (k Keeper) RewardPerDeposit(ctx sdk.Context) sdk.Coin {
2131
func (k Keeper) RewardPerWithdraw(ctx sdk.Context) sdk.Coin {
2232
return k.GetParams(ctx).RewardPerWithdraw
2333
}
34+
35+
// DepositRewardDenom returns the denom for deposit reward
36+
func (k Keeper) DepositRewardDenom(ctx sdk.Context) string {
37+
return k.GetParams(ctx).RewardPerDeposit.Denom
38+
}
39+
40+
// WithdrawRewardDenom returns the denom for withdrawal reward
41+
func (k Keeper) WithdrawRewardDenom(ctx sdk.Context) string {
42+
return k.GetParams(ctx).RewardPerWithdraw.Denom
43+
}

x/incentive/keeper/reward.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ func (k Keeper) UpdateTotalRewards(ctx sdk.Context, delta sdk.Coin) {
7878

7979
// DistributeDepositReward distributes reward for deposit
8080
func (k Keeper) DistributeDepositReward(ctx sdk.Context, address string) error {
81-
if !k.IncentiveEnabled(ctx) {
82-
return types.ErrIncentiveNotEnabled
81+
if !k.DepositIncentiveEnabled(ctx) {
82+
return types.ErrDepositIncentiveNotEnabled
8383
}
8484

8585
rewardAmount := k.RewardPerDeposit(ctx)
@@ -96,8 +96,8 @@ func (k Keeper) DistributeDepositReward(ctx sdk.Context, address string) error {
9696

9797
// DistributeWithdrawReward distributes reward for withdrawal
9898
func (k Keeper) DistributeWithdrawReward(ctx sdk.Context, address string) error {
99-
if !k.IncentiveEnabled(ctx) {
100-
return types.ErrIncentiveNotEnabled
99+
if !k.WithdrawIncentiveEnabled(ctx) {
100+
return types.ErrWithdrawIncentiveNotEnabled
101101
}
102102

103103
rewardAmount := k.RewardPerWithdraw(ctx)

x/incentive/types/errors.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
// x/incentive module sentinel errors
1010
var (
11-
ErrIncentiveNotEnabled = errorsmod.Register(ModuleName, 1001, "incentive not enabled")
12-
ErrInvalidParams = errorsmod.Register(ModuleName, 1002, "invalid params")
11+
ErrDepositIncentiveNotEnabled = errorsmod.Register(ModuleName, 1001, "incentive not enabled for deposit")
12+
ErrWithdrawIncentiveNotEnabled = errorsmod.Register(ModuleName, 1002, "incentive not enabled for withdrawal")
13+
ErrInvalidParams = errorsmod.Register(ModuleName, 1003, "invalid params")
1314
)

x/incentive/types/params.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ func DefaultParams() Params {
2929

3030
// Validate validates the set of params
3131
func (p Params) Validate() error {
32-
if !p.RewardPerDeposit.IsValid() || !p.RewardPerDeposit.IsPositive() {
32+
if !p.RewardPerDeposit.IsValid() {
3333
return errorsmod.Wrap(ErrInvalidParams, "invalid deposit reward")
3434
}
3535

36-
if !p.RewardPerDeposit.IsValid() || !p.RewardPerDeposit.IsPositive() {
36+
if !p.RewardPerWithdraw.IsValid() {
3737
return errorsmod.Wrap(ErrInvalidParams, "invalid withdrawal reward")
3838
}
3939

0 commit comments

Comments
 (0)