-
Notifications
You must be signed in to change notification settings - Fork 40
/
query.go
126 lines (99 loc) · 3.88 KB
/
query.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package keeper
import (
"context"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/elys-network/elys/x/masterchef/types"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
var _ types.QueryServer = Keeper{}
func (k Keeper) ExternalIncentive(goCtx context.Context, req *types.QueryExternalIncentiveRequest) (*types.QueryExternalIncentiveResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
externalIncentive, found := k.GetExternalIncentive(ctx, req.Id)
if !found {
return nil, status.Error(codes.InvalidArgument, "invalid external incentive id")
}
return &types.QueryExternalIncentiveResponse{ExternalIncentive: externalIncentive}, nil
}
func (k Keeper) PoolInfo(goCtx context.Context, req *types.QueryPoolInfoRequest) (*types.QueryPoolInfoResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
poolInfo, found := k.GetPool(ctx, req.PoolId)
if !found {
return nil, status.Error(codes.InvalidArgument, "invalid pool id")
}
return &types.QueryPoolInfoResponse{PoolInfo: poolInfo}, nil
}
func (k Keeper) PoolRewardInfo(goCtx context.Context, req *types.QueryPoolRewardInfoRequest) (*types.QueryPoolRewardInfoResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
poolRewardInfo, found := k.GetPoolRewardInfo(ctx, req.PoolId, req.RewardDenom)
if !found {
return nil, status.Error(codes.InvalidArgument, "invalid pool id")
}
return &types.QueryPoolRewardInfoResponse{PoolRewardInfo: poolRewardInfo}, nil
}
func (k Keeper) UserRewardInfo(goCtx context.Context, req *types.QueryUserRewardInfoRequest) (*types.QueryUserRewardInfoResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
userRewardInfo, found := k.GetUserRewardInfo(ctx, req.User, req.PoolId, req.RewardDenom)
if !found {
return nil, status.Error(codes.InvalidArgument, "invalid pool id or denom")
}
return &types.QueryUserRewardInfoResponse{UserRewardInfo: userRewardInfo}, nil
}
func (k Keeper) UserPoolPendingReward(ctx sdk.Context, user sdk.AccAddress, poolId uint64) sdk.Coins {
k.AfterWithdraw(ctx, poolId, user.String(), sdk.ZeroInt())
poolRewards := sdk.NewCoins()
for _, rewardDenom := range k.GetRewardDenoms(ctx, poolId) {
userRewardInfo, found := k.GetUserRewardInfo(ctx, user.String(), poolId, rewardDenom)
if found && userRewardInfo.RewardPending.IsPositive() {
poolRewards = poolRewards.Add(
sdk.NewCoin(
rewardDenom,
userRewardInfo.RewardPending.TruncateInt(),
),
)
}
}
return poolRewards
}
func (k Keeper) UserPendingReward(goCtx context.Context, req *types.QueryUserPendingRewardRequest) (*types.QueryUserPendingRewardResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
user, err := sdk.AccAddressFromBech32(req.User)
if err != nil {
return nil, err
}
totalRewards := sdk.NewCoins()
rewardsInfos := []*types.RewardInfo{}
for _, pool := range k.GetAllPools(ctx) {
poolRewards := k.UserPoolPendingReward(ctx, user, pool.PoolId)
rewardsInfos = append(rewardsInfos,
&types.RewardInfo{
PoolId: pool.PoolId,
Reward: poolRewards,
},
)
totalRewards = totalRewards.Add(poolRewards...)
}
return &types.QueryUserPendingRewardResponse{
Rewards: rewardsInfos,
TotalRewards: totalRewards,
}, nil
}
func (k Keeper) StableStakeApr(goCtx context.Context, req *types.QueryStableStakeAprRequest) (*types.QueryStableStakeAprResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "invalid request")
}
ctx := sdk.UnwrapSDKContext(goCtx)
apr, err := k.CalculateStableStakeApr(ctx, req)
if err != nil {
return nil, err
}
return &types.QueryStableStakeAprResponse{Apr: apr}, nil
}
func (k Keeper) PoolAprs(goCtx context.Context, req *types.QueryPoolAprsRequest) (*types.QueryPoolAprsResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "invalid request")
}
ctx := sdk.UnwrapSDKContext(goCtx)
data := k.CalculatePoolAprs(ctx, req.PoolIds)
return &types.QueryPoolAprsResponse{Data: data}, nil
}