1
- import { Contract } from 'ethers'
2
- import { formatUnits } from 'ethers/lib/utils'
3
1
import { RewardToken , MIN_IN_MS } from '../constants'
4
- import { RewardSchedule , RewardTokenInfo , SignerOrProvider } from '../types'
5
- import { UFRAGMENTS_ABI } from './abis/UFragments'
6
- import { UFRAGMENTS_POLICY_ABI } from './abis/UFragmentsPolicy'
7
- import { XC_AMPLE_ABI } from './abis/XCAmple'
8
- import { XC_CONTROLLER_ABI } from './abis/XCController'
9
- import { computeAMPLRewardShares } from './ampleforth'
2
+ import { RewardTokenInfo , SignerOrProvider } from '../types'
10
3
import { defaultTokenInfo , getTokenInfo } from './token'
11
4
import { getCurrentPrice } from './price'
12
5
import * as ls from './cache'
13
6
14
7
const cacheTimeMs = 30 * MIN_IN_MS
15
8
16
- const nowInSeconds = ( ) => Math . round ( Date . now ( ) / 1000 )
17
- function filterActiveRewardSchedules ( rewardSchedules ) {
18
- const now = nowInSeconds ( )
19
- return rewardSchedules . filter ( ( s ) => parseInt ( s . start , 10 ) + parseInt ( s . duration , 10 ) > now )
20
- }
21
-
22
9
export const defaultRewardTokenInfo = ( ) : RewardTokenInfo => ( {
23
10
...defaultTokenInfo ( ) ,
24
11
price : 1 ,
25
- getTotalRewards : async ( ) => 0 ,
26
12
} )
27
13
28
14
export const getRewardTokenInfo = async (
@@ -36,7 +22,7 @@ export const getRewardTokenInfo = async (
36
22
case RewardToken . AMPL :
37
23
return getAMPLToken ( tokenAddress , signerOrProvider )
38
24
case RewardToken . XCAMPLE :
39
- return getXCAMPLToken ( tokenAddress , signerOrProvider )
25
+ return getAMPLToken ( tokenAddress , signerOrProvider )
40
26
case RewardToken . WAMPL :
41
27
return getBasicToken ( tokenAddress , signerOrProvider )
42
28
case RewardToken . SPOT :
@@ -48,8 +34,8 @@ export const getRewardTokenInfo = async (
48
34
}
49
35
}
50
36
51
- const getBasicToken = async ( tokenAddress : string , signerOrProvider : SignerOrProvider ) : Promise < RewardTokenInfo > => {
52
- const rewardTokenInfo = await ls . computeAndCache < RewardTokenInfo > (
37
+ const getBasicToken = async ( tokenAddress : string , signerOrProvider : SignerOrProvider ) : Promise < RewardTokenInfo > =>
38
+ ls . computeAndCache < RewardTokenInfo > (
53
39
async function ( ) {
54
40
const tokenInfo = await getTokenInfo ( tokenAddress , signerOrProvider )
55
41
const price = await getCurrentPrice ( tokenInfo . symbol )
@@ -58,95 +44,14 @@ const getBasicToken = async (tokenAddress: string, signerOrProvider: SignerOrPro
58
44
`rewardTokenInfo:${ tokenAddress } ` ,
59
45
cacheTimeMs ,
60
46
)
61
- rewardTokenInfo . getTotalRewards = async ( rewardSchedules : RewardSchedule [ ] ) =>
62
- filterActiveRewardSchedules ( rewardSchedules ) . reduce (
63
- ( acc , schedule ) => acc + parseFloat ( formatUnits ( schedule . rewardAmount , 0 ) ) ,
64
- 0 ,
65
- )
66
- return rewardTokenInfo
67
- }
68
-
69
- // TODO: use subgraph to get AMPL supply history
70
- const getAMPLToken = async ( tokenAddress : string , signerOrProvider : SignerOrProvider ) : Promise < RewardTokenInfo > => {
71
- const rewardTokenInfo = await ls . computeAndCache < RewardTokenInfo > (
72
- async function ( ) {
73
- const tokenInfo = await getTokenInfo ( tokenAddress , signerOrProvider )
74
- const price = await getCurrentPrice ( 'AMPL' )
75
- return { price, ...tokenInfo }
76
- } ,
77
- `rewardTokenInfo:${ tokenAddress } ` ,
78
- cacheTimeMs ,
79
- )
80
-
81
- rewardTokenInfo . amplInfo = await ls . computeAndCache < any > (
82
- async function ( ) {
83
- const contract = new Contract ( tokenAddress , UFRAGMENTS_ABI , signerOrProvider )
84
- const policyAddress : string = await contract . monetaryPolicy ( )
85
- const policy = new Contract ( policyAddress , UFRAGMENTS_POLICY_ABI , signerOrProvider )
86
- const totalSupply = await contract . totalSupply ( )
87
- const epoch = await policy . epoch ( )
88
- return { policyAddress, epoch, totalSupply }
89
- } ,
90
- `amplRewardTokenInfo:${ tokenAddress } ` ,
91
- cacheTimeMs ,
92
- )
93
-
94
- rewardTokenInfo . getTotalRewards = async ( rewardSchedules : RewardSchedule [ ] ) => {
95
- const tokenInfo = rewardTokenInfo
96
- const ampl = rewardTokenInfo . amplInfo
97
- const totalRewardShares = await computeAMPLRewardShares (
98
- filterActiveRewardSchedules ( rewardSchedules ) ,
99
- tokenAddress ,
100
- ampl . policyAddress ,
101
- false ,
102
- parseInt ( ampl . epoch , 10 ) ,
103
- tokenInfo . decimals ,
104
- signerOrProvider ,
105
- )
106
- return totalRewardShares * formatUnits ( ampl . totalSupply , tokenInfo . decimals )
107
- }
108
-
109
- return rewardTokenInfo
110
- }
111
47
112
- const getXCAMPLToken = async ( tokenAddress : string , signerOrProvider : SignerOrProvider ) : Promise < RewardTokenInfo > => {
113
- const rewardTokenInfo = await ls . computeAndCache < RewardTokenInfo > (
48
+ const getAMPLToken = async ( tokenAddress : string , signerOrProvider : SignerOrProvider ) : Promise < RewardTokenInfo > =>
49
+ ls . computeAndCache < RewardTokenInfo > (
114
50
async function ( ) {
115
51
const tokenInfo = await getTokenInfo ( tokenAddress , signerOrProvider )
116
52
const price = await getCurrentPrice ( 'AMPL' )
117
53
return { price, ...tokenInfo }
118
54
} ,
119
55
`rewardTokenInfo:${ tokenAddress } ` ,
120
- 0 ,
121
- )
122
-
123
- rewardTokenInfo . amplInfo = await ls . computeAndCache < any > (
124
- async function ( ) {
125
- const token = new Contract ( tokenAddress , XC_AMPLE_ABI , signerOrProvider )
126
- const controllerAddress : string = await token . controller ( )
127
- const controller = new Contract ( controllerAddress , XC_CONTROLLER_ABI , signerOrProvider )
128
- const totalSupply = await token . globalAMPLSupply ( )
129
- const epoch = await controller . globalAmpleforthEpoch ( )
130
- return { epoch, totalSupply }
131
- } ,
132
- `xcAmplRewardTokenInfo:${ tokenAddress } ` ,
133
56
cacheTimeMs ,
134
57
)
135
-
136
- rewardTokenInfo . getTotalRewards = async ( rewardSchedules : RewardSchedule [ ] ) => {
137
- const tokenInfo = rewardTokenInfo
138
- const ampl = rewardTokenInfo . amplInfo
139
- const totalRewardShares = await computeAMPLRewardShares (
140
- filterActiveRewardSchedules ( rewardSchedules ) ,
141
- tokenAddress ,
142
- controllerAddress ,
143
- true ,
144
- parseInt ( ampl . epoch , 10 ) ,
145
- tokenInfo . decimals ,
146
- signerOrProvider ,
147
- )
148
- return totalRewardShares * formatUnits ( ampl . totalSupply , tokenInfo . decimals )
149
- }
150
-
151
- return rewardTokenInfo
152
- }
0 commit comments