-
Notifications
You must be signed in to change notification settings - Fork 70
/
formatToVestingVaultPendingRewardGroup.ts
85 lines (68 loc) · 2.36 KB
/
formatToVestingVaultPendingRewardGroup.ts
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
import type BigNumber from 'bignumber.js';
import type { Token } from 'types';
import convertDollarsToCents from 'utilities/convertDollarsToCents';
import convertMantissaToTokens from 'utilities/convertMantissaToTokens';
import findTokenByAddress from 'utilities/findTokenByAddress';
import type { XvsVestingVaultPendingRewardGroup } from '../types';
const formatToVestingVaultPendingRewardGroup = ({
poolIndex,
isDisabled,
userPendingRewardsAmountMantissa,
userPendingWithdrawalsBeforeUpgradeAmountMantissa,
tokenPriceMapping,
tokens,
stakedTokenAddress,
}: {
poolIndex: number;
isDisabled: boolean;
userPendingRewardsAmountMantissa: BigNumber;
userPendingWithdrawalsBeforeUpgradeAmountMantissa: BigNumber;
tokenPriceMapping: Record<string, BigNumber>;
tokens: Token[];
stakedTokenAddress: string;
}) => {
const userHasPendingWithdrawalsFromBeforeUpgrade =
userPendingWithdrawalsBeforeUpgradeAmountMantissa.toNumber() > 0;
// Return undefined if user has pending withdrawal requests from before the contract upgrade,
// meaning they first need to execute their withdrawals before they can do anything with this
// vault
if (userHasPendingWithdrawalsFromBeforeUpgrade) {
return;
}
const rewardToken = tokens.find(token => token.symbol === 'XVS');
if (!rewardToken) {
return;
}
const stakedToken = findTokenByAddress({
address: stakedTokenAddress,
tokens,
});
if (!stakedToken) {
return;
}
const rewardTokenPriceDollars = tokenPriceMapping[rewardToken.address.toLowerCase()];
// Return if there is no available reward token price
if (!rewardTokenPriceDollars) {
return;
}
const rewardTokenPriceCents = convertDollarsToCents(rewardTokenPriceDollars);
const pendingRewardAmountTokens = convertMantissaToTokens({
value: userPendingRewardsAmountMantissa,
token: rewardToken,
});
const pendingRewardAmountCents = pendingRewardAmountTokens.multipliedBy(rewardTokenPriceCents);
if (pendingRewardAmountTokens.isEqualTo(0)) {
return;
}
const vaiVaultRewardGroup: XvsVestingVaultPendingRewardGroup = {
type: 'xvsVestingVault',
isDisabled,
poolIndex,
stakedToken,
rewardToken,
rewardAmountMantissa: userPendingRewardsAmountMantissa,
rewardAmountCents: pendingRewardAmountCents,
};
return vaiVaultRewardGroup;
};
export default formatToVestingVaultPendingRewardGroup;