Search Apps Documentation Source Content File Folder Download Copy Actions Download

reward_state.gno

1.95 Kb ยท 74 lines
 1package v1
 2
 3import (
 4	"gno.land/r/gnoswap/launchpad"
 5
 6	u256 "gno.land/p/gnoswap/uint256"
 7)
 8
 9// Helper functions for RewardState
10
11func isRewardStateClaimable(r *launchpad.RewardState, currentTime int64) bool {
12	return currentTime >= r.ClaimableTime()
13}
14
15// calculateReward calculates the total reward amount based on
16// the accumulated reward per deposit.
17// Returns the total reward amount.
18func calculateReward(r *launchpad.RewardState, accumRewardPerDepositX128 *u256.Uint) int64 {
19	if accumRewardPerDepositX128 == nil || r.PriceDebtX128() == nil {
20		return 0
21	}
22
23	actualRewardPerDepositX128 := u256.Zero().Sub(accumRewardPerDepositX128, r.PriceDebtX128())
24	if actualRewardPerDepositX128.IsZero() {
25		return 0
26	}
27
28	reward, overflow := u256.Zero().MulOverflow(actualRewardPerDepositX128, u256.NewUintFromInt64(r.DepositAmount()))
29	if overflow {
30		panic(errOverflow)
31	}
32	reward = reward.Rsh(reward, 128)
33	return safeConvertToInt64(reward)
34}
35
36// calculateClaimableReward calculates the amount of reward that can be claimed
37// based on the current accumulated reward per deposit.
38// Returns the amount of reward that can be claimed.
39func calculateClaimableReward(r *launchpad.RewardState, accumRewardPerDepositX128 *u256.Uint) int64 {
40	if accumRewardPerDepositX128 == nil {
41		return 0
42	}
43
44	// Return 0 if accumulated reward is less than price debt
45	if accumRewardPerDepositX128.Lt(r.PriceDebtX128()) {
46		return 0
47	}
48
49	reward := calculateReward(r, accumRewardPerDepositX128)
50	claimedAmount := r.ClaimedAmount()
51
52	if reward <= claimedAmount {
53		return 0
54	}
55
56	return reward - claimedAmount
57}
58
59// NewRewardState returns a pointer to a new RewardState with the given values.
60func newRewardState(
61	accumulatedRewardPerDepositX128 *u256.Uint,
62	depositAmount,
63	distributeStartTime,
64	distributeEndTime int64,
65	claimableTime int64,
66) *launchpad.RewardState {
67	return launchpad.NewRewardState(
68		accumulatedRewardPerDepositX128,
69		depositAmount,
70		distributeStartTime,
71		distributeEndTime,
72		claimableTime,
73	)
74}