@stake-dao/reader 0.4.37 → 0.4.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/lockers/fetch/index.js +7 -2
- package/dist/esm/lockers/fetch/index.js.map +1 -1
- package/dist/esm/lockers/fetch/parseBoost.js +32 -2
- package/dist/esm/lockers/fetch/parseBoost.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/lockers/fetch/index.d.ts +1 -0
- package/dist/types/lockers/fetch/index.d.ts.map +1 -1
- package/dist/types/lockers/fetch/parseBoost.d.ts +1 -0
- package/dist/types/lockers/fetch/parseBoost.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/lockers/fetch/index.ts +15 -3
- package/src/lockers/fetch/parseBoost.ts +48 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lockers/fetch/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAK5C,OAA6B,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAuB5F,UAAU,aAAa;IACrB,QAAQ,EAAE,GAAG,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,eAAO,MAAM,YAAY,oDAA2D,aAAa
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lockers/fetch/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAK5C,OAA6B,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAuB5F,UAAU,aAAa;IACrB,QAAQ,EAAE,GAAG,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,eAAO,MAAM,YAAY,oDAA2D,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkShG,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { type Locker } from '@stake-dao/constants';
|
|
2
2
|
export declare const parseBoost: (locker: Locker, chunkedRawLockersData: any) => string;
|
|
3
|
+
export declare const parseVeBoostApr: (provider: any, tokenAddress: string, veBoostDelegator: string, tokenPriceInUsd: number, totalDelegatedVeBoost: number) => Promise<number>;
|
|
3
4
|
//# sourceMappingURL=parseBoost.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseBoost.d.ts","sourceRoot":"","sources":["../../../../src/lockers/fetch/parseBoost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"parseBoost.d.ts","sourceRoot":"","sources":["../../../../src/lockers/fetch/parseBoost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAA4B,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,UAAU,WAAY,MAAM,yBAAyB,GAAG,WASpE,CAAA;AAED,eAAO,MAAM,eAAe,aAChB,GAAG,gBACC,MAAM,oBACF,MAAM,mBACP,MAAM,yBACA,MAAM,oBAqC9B,CAAA"}
|
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@ import getFees from '../utils/getFees.js'
|
|
|
14
14
|
import getHttpCalls from '../utils/getHttpCalls.js'
|
|
15
15
|
import { lockedAmountCallSideChain } from '../utils/index.js'
|
|
16
16
|
import substractFees from '../utils/substractFees.js'
|
|
17
|
-
import { parseBoost } from './parseBoost.js'
|
|
17
|
+
import { parseBoost, parseVeBoostApr } from './parseBoost.js'
|
|
18
18
|
import { parsePeg } from './parsePeg.js'
|
|
19
19
|
import { parseVoteBoosterData } from './parseVoteBoosterData.js'
|
|
20
20
|
|
|
@@ -145,8 +145,6 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
145
145
|
const veTokenRate =
|
|
146
146
|
locker.id === 'mav' ? formatUnits(chunkedRawLockersData[11].result[0], locker.token.decimals) : '4'
|
|
147
147
|
|
|
148
|
-
const veBoostTotalSupply = parseBoost(locker, chunkedRawLockersData)
|
|
149
|
-
|
|
150
148
|
const sideChains = locker.extensions.sideChains?.map((sideChain) => {
|
|
151
149
|
const rewards =
|
|
152
150
|
sideChain.rewards?.map((reward) => {
|
|
@@ -179,6 +177,19 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
179
177
|
|
|
180
178
|
const tvl = totalSupplyStaked ? Number(totalSupplyStaked) * sdTokenPriceInUsd : 0
|
|
181
179
|
|
|
180
|
+
const veBoostTotalSupply = parseBoost(locker, chunkedRawLockersData)
|
|
181
|
+
const veBoostApr = locker.veBoost
|
|
182
|
+
? await parseVeBoostApr(
|
|
183
|
+
provider,
|
|
184
|
+
locker.token.address,
|
|
185
|
+
locker.veBoost.delegator,
|
|
186
|
+
tokenPriceInUsd,
|
|
187
|
+
Number(veBoostTotalSupply),
|
|
188
|
+
)
|
|
189
|
+
: 0
|
|
190
|
+
|
|
191
|
+
console.log(veBoostApr)
|
|
192
|
+
|
|
182
193
|
// Rewards APR
|
|
183
194
|
const rewardsData = locker.rewards.map((r) => {
|
|
184
195
|
const rawData = rawLockersRewardsData.shift().result
|
|
@@ -301,6 +312,7 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
301
312
|
...(locker.id === 'cake' ? { airdropGraph } : {}),
|
|
302
313
|
},
|
|
303
314
|
veBoostTotalSupply,
|
|
315
|
+
veBoostApr,
|
|
304
316
|
}
|
|
305
317
|
})
|
|
306
318
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { type Locker } from '@stake-dao/constants'
|
|
2
|
-
import {
|
|
1
|
+
import { type Locker, ONE_WEEK, ONE_YEAR, Zero } from '@stake-dao/constants'
|
|
2
|
+
import { range } from 'lodash-es'
|
|
3
|
+
import { formatUnits, parseAbi } from 'viem'
|
|
4
|
+
import { multicall } from '../../utils.js'
|
|
3
5
|
|
|
4
6
|
export const parseBoost = (locker: Locker, chunkedRawLockersData: any) => {
|
|
5
7
|
let boost = '0'
|
|
@@ -11,3 +13,47 @@ export const parseBoost = (locker: Locker, chunkedRawLockersData: any) => {
|
|
|
11
13
|
|
|
12
14
|
return boost
|
|
13
15
|
}
|
|
16
|
+
|
|
17
|
+
export const parseVeBoostApr = async (
|
|
18
|
+
provider: any,
|
|
19
|
+
tokenAddress: string,
|
|
20
|
+
veBoostDelegator: string,
|
|
21
|
+
tokenPriceInUsd: number,
|
|
22
|
+
totalDelegatedVeBoost: number,
|
|
23
|
+
) => {
|
|
24
|
+
let amountPerYear = 0
|
|
25
|
+
|
|
26
|
+
const now = Math.floor(Date.now() / 1000)
|
|
27
|
+
const lastWeek = Math.floor(now / ONE_WEEK) * ONE_WEEK
|
|
28
|
+
const lastFiveWeeks = range(0, 5).map((i) => lastWeek - i * ONE_WEEK)
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
const rawWeeklyRewards = await multicall(
|
|
32
|
+
provider,
|
|
33
|
+
lastFiveWeeks.map((weekTimestamp) => ({
|
|
34
|
+
address: veBoostDelegator,
|
|
35
|
+
name: 'weeklyRewards',
|
|
36
|
+
params: [tokenAddress, weekTimestamp],
|
|
37
|
+
})),
|
|
38
|
+
parseAbi(['function weeklyRewards(address token, uint256 weekTimestamp) external view returns (uint256)']),
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
const weeklyRewardsWithoutNull = rawWeeklyRewards
|
|
42
|
+
.filter((el) => el.status === 'success' && el.result && typeof el.result === 'bigint' && el.result > Zero)
|
|
43
|
+
.map((el) => Number(formatUnits(el.result as bigint, 18)))
|
|
44
|
+
|
|
45
|
+
if (weeklyRewardsWithoutNull.length > 0) {
|
|
46
|
+
amountPerYear =
|
|
47
|
+
(weeklyRewardsWithoutNull.reduce((total, x) => (total += x)) / (weeklyRewardsWithoutNull.length * ONE_WEEK)) *
|
|
48
|
+
ONE_YEAR
|
|
49
|
+
}
|
|
50
|
+
} catch (e) {
|
|
51
|
+
console.error(e)
|
|
52
|
+
amountPerYear = 0
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const tvl = totalDelegatedVeBoost * tokenPriceInUsd
|
|
56
|
+
const apr = tvl > 0 ? ((amountPerYear * tokenPriceInUsd) / tvl) * 100 : 0
|
|
57
|
+
|
|
58
|
+
return apr
|
|
59
|
+
}
|