@stake-dao/reader 0.4.37 → 0.4.39
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 +6 -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 +2 -2
- package/src/lockers/fetch/index.ts +13 -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgShG,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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stake-dao/reader",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.39",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"graphql-request": "^6.0.0",
|
|
37
37
|
"lodash-es": "^4.17.21",
|
|
38
38
|
"viem": "^2.9.31",
|
|
39
|
-
"@stake-dao/constants": "0.4.
|
|
39
|
+
"@stake-dao/constants": "0.4.19"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/lodash-es": "^4.17.12"
|
|
@@ -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,17 @@ 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
|
+
|
|
182
191
|
// Rewards APR
|
|
183
192
|
const rewardsData = locker.rewards.map((r) => {
|
|
184
193
|
const rawData = rawLockersRewardsData.shift().result
|
|
@@ -301,6 +310,7 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
301
310
|
...(locker.id === 'cake' ? { airdropGraph } : {}),
|
|
302
311
|
},
|
|
303
312
|
veBoostTotalSupply,
|
|
313
|
+
veBoostApr,
|
|
304
314
|
}
|
|
305
315
|
})
|
|
306
316
|
|
|
@@ -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
|
+
}
|