@stake-dao/reader 0.1.0 → 0.1.2
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/batches/buildYearnStrats.js +39 -0
- package/dist/esm/batches/buildYearnStrats.js.map +1 -0
- package/dist/esm/batches/curveStrats.js +4 -6
- package/dist/esm/batches/curveStrats.js.map +1 -1
- package/dist/esm/batches/fetchYearnGauges.js +76 -0
- package/dist/esm/batches/fetchYearnGauges.js.map +1 -0
- package/dist/esm/batches/index.js +2 -0
- package/dist/esm/batches/index.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lockers/abis/MulticallLockers.json +591 -0
- package/dist/esm/lockers/fetch/index.js +306 -0
- package/dist/esm/lockers/fetch/index.js.map +1 -0
- package/dist/esm/lockers/utils/cakeLockerAirdrop.js +46 -0
- package/dist/esm/lockers/utils/cakeLockerAirdrop.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/depositorCalls.js +20 -0
- package/dist/esm/lockers/utils/callsForLockers/depositorCalls.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/feeCalls.js +94 -0
- package/dist/esm/lockers/utils/callsForLockers/feeCalls.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/gaugeCalls.js +6 -0
- package/dist/esm/lockers/utils/callsForLockers/gaugeCalls.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/gaugeControllerCalls.js +8 -0
- package/dist/esm/lockers/utils/callsForLockers/gaugeControllerCalls.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/index.js +29 -0
- package/dist/esm/lockers/utils/callsForLockers/index.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/pegCalls.js +38 -0
- package/dist/esm/lockers/utils/callsForLockers/pegCalls.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/veCalls.js +26 -0
- package/dist/esm/lockers/utils/callsForLockers/veCalls.js.map +1 -0
- package/dist/esm/lockers/utils/callsForLockers/veSdtCalls.js +14 -0
- package/dist/esm/lockers/utils/callsForLockers/veSdtCalls.js.map +1 -0
- package/dist/esm/lockers/utils/endpoints.js +23 -0
- package/dist/esm/lockers/utils/endpoints.js.map +1 -0
- package/dist/esm/lockers/utils/getBribesRewardsData.js +46 -0
- package/dist/esm/lockers/utils/getBribesRewardsData.js.map +1 -0
- package/dist/esm/lockers/utils/getCherriesLeaderBoard.js +22 -0
- package/dist/esm/lockers/utils/getCherriesLeaderBoard.js.map +1 -0
- package/dist/esm/lockers/utils/getFees.js +30 -0
- package/dist/esm/lockers/utils/getFees.js.map +1 -0
- package/dist/esm/lockers/utils/getHttpCalls.js +44 -0
- package/dist/esm/lockers/utils/getHttpCalls.js.map +1 -0
- package/dist/esm/lockers/utils/getSdtInflationData.js +38 -0
- package/dist/esm/lockers/utils/getSdtInflationData.js.map +1 -0
- package/dist/esm/lockers/utils/index.js +157 -0
- package/dist/esm/lockers/utils/index.js.map +1 -0
- package/dist/esm/lockers/utils/substractFees.js +22 -0
- package/dist/esm/lockers/utils/substractFees.js.map +1 -0
- package/dist/esm/strategies/curve/build.js +10 -7
- package/dist/esm/strategies/curve/build.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/abi.js +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/abi.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/bytecode.js +3 -3
- package/dist/esm/strategies/curve/fetch/curveApiData/bytecode.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/config.js +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/getCurveApiData.js +3 -6
- package/dist/esm/strategies/curve/fetch/curveApiData/getCurveApiData.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesWeights.js +1 -0
- package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesWeights.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/getStratsWithApr.js +26 -58
- package/dist/esm/strategies/curve/fetch/getStratsWithApr.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/index.js +7 -23
- package/dist/esm/strategies/curve/fetch/index.js.map +1 -1
- package/dist/esm/strategies/curve/httpCalls.js +8 -24
- package/dist/esm/strategies/curve/httpCalls.js.map +1 -1
- package/dist/esm/strategies/utils/abis/MulticallYearnStratsAbi.json +107 -0
- package/dist/esm/strategies/{curve/fetch → utils}/getAprBreakdown.js +18 -8
- package/dist/esm/strategies/utils/getAprBreakdown.js.map +1 -0
- package/dist/esm/strategies/utils/index.js +1 -0
- package/dist/esm/strategies/utils/index.js.map +1 -1
- package/dist/esm/strategies/utils/sdt.js +17 -0
- package/dist/esm/strategies/utils/sdt.js.map +1 -1
- package/dist/esm/strategies/yearn/build.js +97 -0
- package/dist/esm/strategies/yearn/build.js.map +1 -0
- package/dist/esm/strategies/yearn/fetch/computeYearnApr.js +28 -0
- package/dist/esm/strategies/yearn/fetch/computeYearnApr.js.map +1 -0
- package/dist/esm/strategies/yearn/fetch/fetchAllYearnGauges.js +61 -0
- package/dist/esm/strategies/yearn/fetch/fetchAllYearnGauges.js.map +1 -0
- package/dist/esm/strategies/yearn/fetch/index.js +169 -0
- package/dist/esm/strategies/yearn/fetch/index.js.map +1 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/utils.js +33 -1
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/batches/buildYearnStrats.d.ts +4 -0
- package/dist/types/batches/buildYearnStrats.d.ts.map +1 -0
- package/dist/types/batches/curveStrats.d.ts.map +1 -1
- package/dist/types/batches/fetchYearnGauges.d.ts +4 -0
- package/dist/types/batches/fetchYearnGauges.d.ts.map +1 -0
- package/dist/types/batches/index.d.ts +2 -0
- package/dist/types/batches/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lockers/fetch/index.d.ts +11 -0
- package/dist/types/lockers/fetch/index.d.ts.map +1 -0
- package/dist/types/lockers/utils/cakeLockerAirdrop.d.ts +8 -0
- package/dist/types/lockers/utils/cakeLockerAirdrop.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/depositorCalls.d.ts +3 -0
- package/dist/types/lockers/utils/callsForLockers/depositorCalls.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/feeCalls.d.ts +11 -0
- package/dist/types/lockers/utils/callsForLockers/feeCalls.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/gaugeCalls.d.ts +6 -0
- package/dist/types/lockers/utils/callsForLockers/gaugeCalls.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/gaugeControllerCalls.d.ts +11 -0
- package/dist/types/lockers/utils/callsForLockers/gaugeControllerCalls.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/index.d.ts +3 -0
- package/dist/types/lockers/utils/callsForLockers/index.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/pegCalls.d.ts +15 -0
- package/dist/types/lockers/utils/callsForLockers/pegCalls.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/veCalls.d.ts +3 -0
- package/dist/types/lockers/utils/callsForLockers/veCalls.d.ts.map +1 -0
- package/dist/types/lockers/utils/callsForLockers/veSdtCalls.d.ts +11 -0
- package/dist/types/lockers/utils/callsForLockers/veSdtCalls.d.ts.map +1 -0
- package/dist/types/lockers/utils/endpoints.d.ts +3 -0
- package/dist/types/lockers/utils/endpoints.d.ts.map +1 -0
- package/dist/types/lockers/utils/getBribesRewardsData.d.ts +18 -0
- package/dist/types/lockers/utils/getBribesRewardsData.d.ts.map +1 -0
- package/dist/types/lockers/utils/getCherriesLeaderBoard.d.ts +2 -0
- package/dist/types/lockers/utils/getCherriesLeaderBoard.d.ts.map +1 -0
- package/dist/types/lockers/utils/getFees.d.ts +4 -0
- package/dist/types/lockers/utils/getFees.d.ts.map +1 -0
- package/dist/types/lockers/utils/getHttpCalls.d.ts +11 -0
- package/dist/types/lockers/utils/getHttpCalls.d.ts.map +1 -0
- package/dist/types/lockers/utils/getSdtInflationData.d.ts +8 -0
- package/dist/types/lockers/utils/getSdtInflationData.d.ts.map +1 -0
- package/dist/types/lockers/utils/index.d.ts +30 -0
- package/dist/types/lockers/utils/index.d.ts.map +1 -0
- package/dist/types/lockers/utils/substractFees.d.ts +3 -0
- package/dist/types/lockers/utils/substractFees.d.ts.map +1 -0
- package/dist/types/strategies/curve/build.d.ts +2 -31
- package/dist/types/strategies/curve/build.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/abi.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/bytecode.d.ts +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/bytecode.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/config.d.ts +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/getCurveApiData.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/getGaugesWeights.d.ts +1 -0
- package/dist/types/strategies/curve/fetch/curveApiData/getGaugesWeights.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/getStratsWithApr.d.ts +0 -4
- package/dist/types/strategies/curve/fetch/getStratsWithApr.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/index.d.ts +2 -7
- package/dist/types/strategies/curve/fetch/index.d.ts.map +1 -1
- package/dist/types/strategies/curve/httpCalls.d.ts +3 -6
- package/dist/types/strategies/curve/httpCalls.d.ts.map +1 -1
- package/dist/types/strategies/types.d.ts +49 -6
- package/dist/types/strategies/types.d.ts.map +1 -1
- package/dist/types/strategies/utils/getAprBreakdown.d.ts +15 -0
- package/dist/types/strategies/utils/getAprBreakdown.d.ts.map +1 -0
- package/dist/types/strategies/utils/index.d.ts +1 -0
- package/dist/types/strategies/utils/index.d.ts.map +1 -1
- package/dist/types/strategies/utils/sdt.d.ts +1 -0
- package/dist/types/strategies/utils/sdt.d.ts.map +1 -1
- package/dist/types/strategies/yearn/build.d.ts +8 -0
- package/dist/types/strategies/yearn/build.d.ts.map +1 -0
- package/dist/types/strategies/yearn/fetch/computeYearnApr.d.ts +9 -0
- package/dist/types/strategies/yearn/fetch/computeYearnApr.d.ts.map +1 -0
- package/dist/types/strategies/yearn/fetch/fetchAllYearnGauges.d.ts +2 -0
- package/dist/types/strategies/yearn/fetch/fetchAllYearnGauges.d.ts.map +1 -0
- package/dist/types/strategies/yearn/fetch/index.d.ts +5 -0
- package/dist/types/strategies/yearn/fetch/index.d.ts.map +1 -0
- package/dist/types/utils.d.ts +5 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/batches/buildYearnStrats.ts +41 -0
- package/src/batches/curveStrats.ts +4 -6
- package/src/batches/fetchYearnGauges.ts +78 -0
- package/src/batches/index.ts +2 -0
- package/src/index.ts +2 -0
- package/src/lockers/fetch/index.ts +407 -0
- package/src/lockers/utils/cakeLockerAirdrop.ts +73 -0
- package/src/lockers/utils/callsForLockers/depositorCalls.ts +25 -0
- package/src/lockers/utils/callsForLockers/feeCalls.ts +118 -0
- package/src/lockers/utils/callsForLockers/gaugeCalls.ts +6 -0
- package/src/lockers/utils/callsForLockers/gaugeControllerCalls.ts +8 -0
- package/src/lockers/utils/callsForLockers/index.ts +44 -0
- package/src/lockers/utils/callsForLockers/pegCalls.ts +40 -0
- package/src/lockers/utils/callsForLockers/veCalls.ts +31 -0
- package/src/lockers/utils/callsForLockers/veSdtCalls.ts +15 -0
- package/src/lockers/utils/endpoints.ts +24 -0
- package/src/lockers/utils/getBribesRewardsData.ts +64 -0
- package/src/lockers/utils/getCherriesLeaderBoard.ts +34 -0
- package/src/lockers/utils/getFees.ts +34 -0
- package/src/lockers/utils/getHttpCalls.ts +55 -0
- package/src/lockers/utils/getSdtInflationData.ts +54 -0
- package/src/lockers/utils/index.ts +200 -0
- package/src/lockers/utils/substractFees.ts +26 -0
- package/src/strategies/curve/build.ts +49 -44
- package/src/strategies/curve/fetch/curveApiData/abi.ts +1 -1
- package/src/strategies/curve/fetch/curveApiData/bytecode.ts +3 -3
- package/src/strategies/curve/fetch/curveApiData/config.ts +1 -1
- package/src/strategies/curve/fetch/curveApiData/getCurveApiData.ts +2 -2
- package/src/strategies/curve/fetch/curveApiData/getGaugesWeights.ts +2 -0
- package/src/strategies/curve/fetch/getStratsWithApr.ts +27 -81
- package/src/strategies/curve/fetch/index.ts +10 -29
- package/src/strategies/curve/httpCalls.ts +8 -24
- package/src/strategies/types.ts +52 -6
- package/src/strategies/{curve/fetch → utils}/getAprBreakdown.ts +26 -9
- package/src/strategies/utils/index.ts +1 -0
- package/src/strategies/utils/sdt.ts +24 -0
- package/src/strategies/yearn/build.ts +156 -0
- package/src/strategies/yearn/fetch/computeYearnApr.ts +47 -0
- package/src/strategies/yearn/fetch/fetchAllYearnGauges.ts +78 -0
- package/src/strategies/yearn/fetch/index.ts +225 -0
- package/src/utils.ts +43 -1
- package/dist/esm/strategies/curve/fetch/getAprBreakdown.js.map +0 -1
- package/dist/esm/strategies/curve/fetch/types.js +0 -2
- package/dist/esm/strategies/curve/fetch/types.js.map +0 -1
- package/dist/types/strategies/curve/fetch/getAprBreakdown.d.ts +0 -17
- package/dist/types/strategies/curve/fetch/getAprBreakdown.d.ts.map +0 -1
- package/dist/types/strategies/curve/fetch/types.d.ts +0 -11
- package/dist/types/strategies/curve/fetch/types.d.ts.map +0 -1
- package/src/strategies/curve/fetch/types.ts +0 -11
|
@@ -1,12 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { STRAT_FEES } from '@stake-dao/constants'
|
|
2
|
+
import { mainnet } from 'viem/chains'
|
|
3
|
+
import { equalTlc } from '../../../utils.js'
|
|
4
|
+
|
|
5
|
+
const getConvexPool = (apisData: any, chainId: number, isLending: boolean, stratLpAddress: string) => {
|
|
6
|
+
if (chainId === mainnet.id) {
|
|
7
|
+
if (isLending) {
|
|
8
|
+
return apisData.convexLendingVaults.find((pool: any) => equalTlc(pool.address, stratLpAddress))
|
|
9
|
+
}
|
|
10
|
+
return apisData.convexPools.find((pool: any) => equalTlc(pool.lpTokenAddress, stratLpAddress))
|
|
11
|
+
}
|
|
12
|
+
return undefined
|
|
13
|
+
}
|
|
2
14
|
|
|
3
|
-
|
|
4
|
-
|
|
15
|
+
const getName = (s: any) => {
|
|
16
|
+
if (s.isLending) {
|
|
17
|
+
return s.coins[0].symbol
|
|
18
|
+
}
|
|
19
|
+
return (s.isMetapool ? s.underlyingCoins : s.coins)
|
|
20
|
+
.reduce((res: string, current: any) => `${res}/${current.symbol}`, '')
|
|
21
|
+
.slice(1)
|
|
22
|
+
}
|
|
5
23
|
|
|
6
24
|
export const getCurveStratsWithApr = (chainId: number, curveStrats: any[], apisData: any) => {
|
|
7
25
|
const curveStratsDataCalls: any[] = []
|
|
8
26
|
|
|
9
|
-
const strats = curveStrats.filter((s) => s.key && s.chainId === chainId
|
|
27
|
+
const strats = curveStrats.filter((s) => s.key && s.chainId === chainId)
|
|
10
28
|
|
|
11
29
|
const curveStratsWithApr = strats.map((s) => {
|
|
12
30
|
const curveApiData = apisData.curveApiData.find((el) => equalTlc(el.lp, s.lpToken.address))
|
|
@@ -18,12 +36,7 @@ export const getCurveStratsWithApr = (chainId: number, curveStrats: any[], apisD
|
|
|
18
36
|
apr: extra.apr,
|
|
19
37
|
}))
|
|
20
38
|
: []
|
|
21
|
-
const convexPool =
|
|
22
|
-
s.chainId === 1
|
|
23
|
-
? apisData.convexPools.find(
|
|
24
|
-
(pool: any) => pool.lpTokenAddress.toLowerCase() === s.lpToken.address.toLowerCase(),
|
|
25
|
-
)
|
|
26
|
-
: undefined
|
|
39
|
+
const convexPool = getConvexPool(apisData, s.chainId, s.isLending, s.lpToken.address)
|
|
27
40
|
|
|
28
41
|
curveStratsDataCalls.push({
|
|
29
42
|
vault: s.vault,
|
|
@@ -34,9 +47,10 @@ export const getCurveStratsWithApr = (chainId: number, curveStrats: any[], apisD
|
|
|
34
47
|
|
|
35
48
|
return {
|
|
36
49
|
...s,
|
|
37
|
-
name: (s
|
|
38
|
-
|
|
39
|
-
|
|
50
|
+
name: getName(s),
|
|
51
|
+
// TODO LENDING
|
|
52
|
+
// subname: curveApiData?.assets ? `${curveApiData.assets.collateral.symbol} collateral` : '',
|
|
53
|
+
// tradingApy: curveApiData?.rates ? curveApiData.rates.lendApyPcent : 0,
|
|
40
54
|
tradingApy: subgraphData?.latestWeeklyApy || 0,
|
|
41
55
|
gaugesProjectedApr,
|
|
42
56
|
minApr: curveApiData?.crvApr ? curveApiData.crvApr[0] * ((100 - STRAT_FEES) / 100) : 0,
|
|
@@ -48,71 +62,3 @@ export const getCurveStratsWithApr = (chainId: number, curveStrats: any[], apisD
|
|
|
48
62
|
|
|
49
63
|
return { curveStratsWithApr, curveStratsDataCalls }
|
|
50
64
|
}
|
|
51
|
-
|
|
52
|
-
export const getCurveLendingWithApr = async (provider: any, chainId: number, curveStrats: any[], apisData: any) => {
|
|
53
|
-
const curveLendingDataCalls: any[] = []
|
|
54
|
-
|
|
55
|
-
const strats = curveStrats.filter((s) => s.key && s.chainId === chainId && s.isLending)
|
|
56
|
-
|
|
57
|
-
const gaugesData = await multicall(
|
|
58
|
-
provider,
|
|
59
|
-
strats.flatMap((s) => [
|
|
60
|
-
{ address: s.gaugeAddress, name: 'inflation_rate' },
|
|
61
|
-
{ address: s.gaugeAddress, name: 'working_supply' },
|
|
62
|
-
{ address: contract('curveGaugeController', chainId), name: 'gauge_relative_weight', params: [s.gaugeAddress] },
|
|
63
|
-
]),
|
|
64
|
-
parseAbi([
|
|
65
|
-
'function inflation_rate() external view returns (uint256)',
|
|
66
|
-
'function working_supply() external view returns (uint256)',
|
|
67
|
-
'function gauge_relative_weight(address gauge) external view returns (uint256)',
|
|
68
|
-
]),
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
const triCrvPool = apisData.curveApiData.find((el) => equalTlc(el.lp, '0x4eBdF703948ddCEA3B11f675B4D1Fba9d2414A14'))
|
|
72
|
-
const triCrvPoolCrvData = triCrvPool.coins.find((c) => equalTlc(c.coinAddress, tokenWithId('crv')?.address as string))
|
|
73
|
-
const crvPriceInUsd = triCrvPoolCrvData.usdBalance / Number(triCrvPoolCrvData.balance)
|
|
74
|
-
|
|
75
|
-
const curveLendingWithApr = strats.map((s) => {
|
|
76
|
-
const curveApiData = apisData.curveApiData.find((el) => equalTlc(el.lp, s.lpToken.address))
|
|
77
|
-
|
|
78
|
-
const convexPool =
|
|
79
|
-
s.chainId === 1
|
|
80
|
-
? apisData.convexLendingVaults.find(
|
|
81
|
-
(pool: any) => pool.address.toLowerCase() === s.lpToken.address.toLowerCase(),
|
|
82
|
-
)
|
|
83
|
-
: undefined
|
|
84
|
-
const lpPriceInUsd = curveApiData?.lpPriceInUsd || 0
|
|
85
|
-
|
|
86
|
-
curveLendingDataCalls.push({
|
|
87
|
-
vault: s.vault,
|
|
88
|
-
token: s.lpToken.address,
|
|
89
|
-
liquidityGauge: s.gaugeAddress,
|
|
90
|
-
sdtLiquidityGauge: s.sdGauge,
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
const inflationRate = Number(formatUnits(gaugesData.shift().result as any as bigint, 18))
|
|
94
|
-
const workingSupply = Number(formatUnits(gaugesData.shift().result as any as bigint, 18))
|
|
95
|
-
const gaugeRelativeWeight = Number(formatUnits(gaugesData.shift().result as any as bigint, 18))
|
|
96
|
-
|
|
97
|
-
const crvBaseApr =
|
|
98
|
-
((((inflationRate * gaugeRelativeWeight * ONE_YEAR) / workingSupply) * 0.4 * crvPriceInUsd) / lpPriceInUsd) * 100
|
|
99
|
-
|
|
100
|
-
const gaugesProjectedApr = undefined
|
|
101
|
-
const minApr = crvBaseApr * ((100 - STRAT_FEES) / 100)
|
|
102
|
-
const maxApr = crvBaseApr * 2.5 * ((100 - STRAT_FEES) / 100)
|
|
103
|
-
|
|
104
|
-
return {
|
|
105
|
-
...s,
|
|
106
|
-
name: s.coins[0].symbol,
|
|
107
|
-
// subname: curveApiData?.assets ? `${curveApiData.assets.collateral.symbol} collateral` : '',
|
|
108
|
-
// tradingApy: curveApiData?.rates ? curveApiData.rates.lendApyPcent : 0,
|
|
109
|
-
gaugesProjectedApr,
|
|
110
|
-
minApr,
|
|
111
|
-
maxApr,
|
|
112
|
-
lpPriceInUsd,
|
|
113
|
-
convexPool: convexPool ? convexPool.convexPoolData : undefined,
|
|
114
|
-
}
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
return { curveLendingWithApr, curveLendingDataCalls }
|
|
118
|
-
}
|
|
@@ -2,20 +2,19 @@ import { formatUnits } from 'viem'
|
|
|
2
2
|
|
|
3
3
|
import { ONE_YEAR, curveStrats, mainnet, tokenWithId } from '@stake-dao/constants'
|
|
4
4
|
import { equalTlc } from '../../../utils.js'
|
|
5
|
-
import type { OnlyBoostData, RewardsData,
|
|
5
|
+
import type { CurveGlobalData, OnlyBoostData, RewardsData, StrategyData } from '../../types.js'
|
|
6
6
|
import { getBoost } from '../../utils/boost.js'
|
|
7
7
|
import decodeEtherscanFactoryEvent, { decodeNewFactoryEvent } from '../../utils/decodeEtherscanFactoryEvent.js'
|
|
8
|
+
import { getAprBreakdown } from '../../utils/getAprBreakdown.js'
|
|
8
9
|
import { OneEther, Zero } from '../../utils/index.js'
|
|
9
|
-
import { type SdtEmissionData,
|
|
10
|
+
import { type SdtEmissionData, getSdtApr } from '../../utils/sdt.js'
|
|
10
11
|
import { buildCurveStrategies } from '../build.js'
|
|
11
12
|
import { getCurveHttpCalls } from '../httpCalls.js'
|
|
12
13
|
import { getOnChainSdCurveData } from '../onChainCalls.js'
|
|
13
14
|
import type { GaugesWeightsData } from './curveApiData/getGaugesWeights.js'
|
|
14
|
-
import { getAprBreakdown } from './getAprBreakdown.js'
|
|
15
15
|
import { getCvxApr } from './getCvxApr.js'
|
|
16
16
|
import getOnlyboostData from './getOnlyboostData.js'
|
|
17
|
-
import {
|
|
18
|
-
import type { StratGlobalData } from './types.js'
|
|
17
|
+
import { getCurveStratsWithApr } from './getStratsWithApr.js'
|
|
19
18
|
|
|
20
19
|
export const fetchCurve = async (
|
|
21
20
|
prices: any, // TODO Type
|
|
@@ -27,7 +26,7 @@ export const fetchCurve = async (
|
|
|
27
26
|
lastBlockNumber: number,
|
|
28
27
|
sdtEmissionData: SdtEmissionData,
|
|
29
28
|
gaugesWeights: GaugesWeightsData,
|
|
30
|
-
) => {
|
|
29
|
+
): Promise<StrategyData> => {
|
|
31
30
|
const apisData = await getCurveHttpCalls(explorerApiKey, explorer, rpc, chainId, lastBlockNumber, gaugesWeights)
|
|
32
31
|
|
|
33
32
|
const newVaultAndLp =
|
|
@@ -39,20 +38,15 @@ export const fetchCurve = async (
|
|
|
39
38
|
|
|
40
39
|
const strats: any[] = await buildCurveStrategies(provider, allVaultAndLp, chainId, apisData.curveApiData)
|
|
41
40
|
|
|
42
|
-
const { curveStratsWithApr, curveStratsDataCalls } = getCurveStratsWithApr(
|
|
43
|
-
const { curveLendingWithApr, curveLendingDataCalls } = await getCurveLendingWithApr(
|
|
44
|
-
provider,
|
|
41
|
+
const { curveStratsWithApr: stratsWithApr, curveStratsDataCalls: stratsDataCalls } = getCurveStratsWithApr(
|
|
45
42
|
chainId,
|
|
46
43
|
strats,
|
|
47
44
|
apisData,
|
|
48
45
|
)
|
|
49
46
|
|
|
50
|
-
const stratsWithApr = [...curveStratsWithApr, ...curveLendingWithApr]
|
|
51
|
-
const stratsDataCalls = [...curveStratsDataCalls, ...curveLendingDataCalls]
|
|
52
|
-
|
|
53
47
|
const decodedPromise = await getOnChainSdCurveData(chainId, rpc, stratsDataCalls)
|
|
54
48
|
|
|
55
|
-
const global:
|
|
49
|
+
const global: CurveGlobalData = {
|
|
56
50
|
totalGaugeWeights: '0',
|
|
57
51
|
nextEffectiveTimestamp: '0',
|
|
58
52
|
cvxTotalSupply: '0',
|
|
@@ -148,7 +142,7 @@ export const fetchCurve = async (
|
|
|
148
142
|
return {
|
|
149
143
|
token: rewardToken,
|
|
150
144
|
price: rewardPrice ? rewardPrice.usdPrice : 0,
|
|
151
|
-
apr: rewardApr,
|
|
145
|
+
apr: rewardApr * 100,
|
|
152
146
|
streaming,
|
|
153
147
|
periodFinish,
|
|
154
148
|
rate: formatUnits(r.rate, 0),
|
|
@@ -162,19 +156,7 @@ export const fetchCurve = async (
|
|
|
162
156
|
}
|
|
163
157
|
})
|
|
164
158
|
|
|
165
|
-
|
|
166
|
-
sdtUserApr: 0,
|
|
167
|
-
sdtFuturUserApr: 0,
|
|
168
|
-
sdtMinApr: 0,
|
|
169
|
-
sdtFuturMinApr: 0,
|
|
170
|
-
sdtMaxApr: 0,
|
|
171
|
-
sdtFuturMaxApr: 0,
|
|
172
|
-
sdtBoost: 1,
|
|
173
|
-
}
|
|
174
|
-
const sdtRewards = rewardsData.find((r) => r.token.symbol === 'SDT')
|
|
175
|
-
if (sdtRewards) {
|
|
176
|
-
sdtApr = computeSdtApr(sdtEmissionData, sdtRewards, undefined, sdGauge, strat.lpPriceInUsd)
|
|
177
|
-
}
|
|
159
|
+
const sdtApr = getSdtApr(rewardsData, sdtEmissionData, sdGauge, strat.lpPriceInUsd, undefined)
|
|
178
160
|
|
|
179
161
|
let convexCrvProjectedApr = 0
|
|
180
162
|
let cvxApr = 0
|
|
@@ -193,7 +175,7 @@ export const fetchCurve = async (
|
|
|
193
175
|
: 0
|
|
194
176
|
}
|
|
195
177
|
|
|
196
|
-
const apr = getAprBreakdown(strat, rewardsData, boost,
|
|
178
|
+
const apr = getAprBreakdown(strat, rewardsData, boost, sdtApr, cvxApr)
|
|
197
179
|
|
|
198
180
|
return {
|
|
199
181
|
...strat,
|
|
@@ -225,7 +207,6 @@ export const fetchCurve = async (
|
|
|
225
207
|
totalSupply,
|
|
226
208
|
strategyHoldings: formatUnits(v.strategyHoldings, 0),
|
|
227
209
|
workingBalance: formatUnits(v.workingBalance, 0),
|
|
228
|
-
workingSupplyStaked: formatUnits(v.workingSupplyStaked, 0),
|
|
229
210
|
sdGauge,
|
|
230
211
|
vaultFees:
|
|
231
212
|
chainId === mainnet.id
|
|
@@ -66,12 +66,9 @@ export const getCurveHttpCalls = async (
|
|
|
66
66
|
FACTORY_EXPLORER_EVENTS(explorerApiKey, explorer, contract('curveVaultFactory', chainId), lastBlockNumber),
|
|
67
67
|
)
|
|
68
68
|
).json(),
|
|
69
|
-
// Curve
|
|
70
|
-
(
|
|
71
|
-
|
|
72
|
-
(await fetch(`${CURVE_API_URL}/getPools/arbitrum/crypto`)).json(),
|
|
73
|
-
(await fetch(`${CURVE_API_URL}/getPools/arbitrum/factory-stable-ng`)).json(),
|
|
74
|
-
(await fetch(`${CURVE_API_URL}/getPools/arbitrum/factory-tricrypto`)).json(),
|
|
69
|
+
// Curve Data (replace APIs calls)
|
|
70
|
+
fetchCurveBase(rpc, chainId, gaugesWeights.gauges),
|
|
71
|
+
// Curve Trading Apy API
|
|
75
72
|
(await fetch(`${CURVE_API_URL}/getSubgraphData/arbitrum`)).json(),
|
|
76
73
|
]
|
|
77
74
|
|
|
@@ -80,30 +77,17 @@ export const getCurveHttpCalls = async (
|
|
|
80
77
|
)
|
|
81
78
|
|
|
82
79
|
const arbiscanData = arbitrumHttpResponses[0]
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
const arbitrumCurveFactoryStableNg = arbitrumHttpResponses[4].success
|
|
87
|
-
? arbitrumHttpResponses[4].data.poolData
|
|
88
|
-
: undefined
|
|
89
|
-
const arbitrumCurveFactoryTriCrypto = arbitrumHttpResponses[5].success
|
|
90
|
-
? arbitrumHttpResponses[5].data.poolData
|
|
91
|
-
: undefined
|
|
92
|
-
const arbitrumCurveSubgraph = arbitrumHttpResponses[6].success
|
|
93
|
-
? arbitrumHttpResponses[6].data.poolList
|
|
80
|
+
const arbitrumCurveData = arbitrumHttpResponses[1]
|
|
81
|
+
const arbitrumCurveSubgraph = arbitrumHttpResponses[2].success
|
|
82
|
+
? arbitrumHttpResponses[2].data.poolList
|
|
94
83
|
: undefined
|
|
95
84
|
|
|
96
85
|
return {
|
|
97
86
|
explorerData: arbiscanData,
|
|
98
87
|
curveSubgraphData: arbitrumCurveSubgraph,
|
|
99
88
|
convexPools: [],
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
{ type: 'factory', value: arbitrumCurveFactory },
|
|
103
|
-
{ type: 'main', value: arbitrumCurveMain },
|
|
104
|
-
{ type: 'crypto', value: arbitrumCurveCrypto },
|
|
105
|
-
{ type: 'factory-stable-ng', value: arbitrumCurveFactoryStableNg },
|
|
106
|
-
],
|
|
89
|
+
convexLendingVaults: [],
|
|
90
|
+
curveApiData: arbitrumCurveData,
|
|
107
91
|
}
|
|
108
92
|
}
|
|
109
93
|
}
|
package/src/strategies/types.ts
CHANGED
|
@@ -65,7 +65,7 @@ export type Fees = {
|
|
|
65
65
|
|
|
66
66
|
export type VaultFees = {
|
|
67
67
|
keeper: number
|
|
68
|
-
accumulated:
|
|
68
|
+
accumulated: string
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
export type SdtApr = {
|
|
@@ -94,15 +94,18 @@ export type Strategy = {
|
|
|
94
94
|
type: string
|
|
95
95
|
protocol: string
|
|
96
96
|
chainId: number
|
|
97
|
-
isMetapool
|
|
98
|
-
isLending
|
|
97
|
+
isMetapool?: boolean
|
|
98
|
+
isLending?: boolean
|
|
99
99
|
vault: string
|
|
100
100
|
lpToken: Coin
|
|
101
101
|
gaugeAddress: string
|
|
102
|
+
gaugeToken?: Coin & { version: number }
|
|
102
103
|
coins: Coin[]
|
|
103
104
|
underlyingCoins?: Coin[]
|
|
104
105
|
rewards: RewardsData[]
|
|
105
106
|
name: string
|
|
107
|
+
tradingApy: number
|
|
108
|
+
underlyingApy?: number
|
|
106
109
|
minApr: number
|
|
107
110
|
maxApr: number
|
|
108
111
|
lpPriceInUsd: number
|
|
@@ -120,18 +123,61 @@ export type Strategy = {
|
|
|
120
123
|
boost: number
|
|
121
124
|
current: AprDetail
|
|
122
125
|
projected: AprDetail
|
|
123
|
-
onlyboost
|
|
126
|
+
onlyboost?: {
|
|
124
127
|
convex: OnlyBoostAprDetail
|
|
125
128
|
optimal: OnlyBoostAprDetail
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
|
-
sdtApr
|
|
131
|
+
sdtApr?: SdtApr
|
|
129
132
|
vaultHoldings: string
|
|
130
133
|
totalSupply: string
|
|
131
134
|
strategyHoldings: string
|
|
132
135
|
workingBalance: string
|
|
133
|
-
workingSupplyStaked: string
|
|
134
136
|
sdGauge: SdGauge
|
|
135
137
|
vaultFees: VaultFees
|
|
136
138
|
onlyboost?: OnlyBoostData | { active: boolean }
|
|
137
139
|
}
|
|
140
|
+
|
|
141
|
+
// GLOBAL DATA TYPE
|
|
142
|
+
|
|
143
|
+
export type CurveGlobalData = {
|
|
144
|
+
totalGaugeWeights: string
|
|
145
|
+
nextEffectiveTimestamp: string
|
|
146
|
+
cvxTotalSupply: string
|
|
147
|
+
veCrvTotalSupply: string
|
|
148
|
+
stakeDaoVeBoost: string
|
|
149
|
+
convexVeBoost: string
|
|
150
|
+
fees: Fees
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export type YearnGlobalData = {
|
|
154
|
+
totalGaugeWeights: string
|
|
155
|
+
fees: Fees
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export type Global = CurveGlobalData | YearnGlobalData
|
|
159
|
+
|
|
160
|
+
export type StrategyData = {
|
|
161
|
+
global?: Global
|
|
162
|
+
deployed: Strategy[]
|
|
163
|
+
notDeployed: any
|
|
164
|
+
fetched: boolean
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export type BuiltStrat = {
|
|
168
|
+
key: string
|
|
169
|
+
type: string
|
|
170
|
+
protocol: string
|
|
171
|
+
chainId: number
|
|
172
|
+
isMetapool?: boolean
|
|
173
|
+
isLending?: boolean
|
|
174
|
+
vault: string
|
|
175
|
+
lpToken: Coin
|
|
176
|
+
gaugeAddress: string
|
|
177
|
+
gaugeToken?: Coin & { version: number }
|
|
178
|
+
coins: Coin[]
|
|
179
|
+
underlyingCoins?: Coin[]
|
|
180
|
+
sdGauge: string
|
|
181
|
+
rewards: Coin[]
|
|
182
|
+
underlyingReward?: Coin
|
|
183
|
+
}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import { getBreakdownLabel, isProtocolToken } from '
|
|
2
|
-
import type { RewardsData } from '
|
|
1
|
+
import { getBreakdownLabel, isProtocolToken } from '../../utils.js'
|
|
2
|
+
import type { RewardsData } from '../types.js'
|
|
3
3
|
|
|
4
4
|
type Breakdown = {
|
|
5
5
|
label: string
|
|
6
6
|
value: number[]
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export const getAprBreakdown = (
|
|
9
|
+
export const getAprBreakdown = (
|
|
10
|
+
strat: any,
|
|
11
|
+
rewardsData: RewardsData[],
|
|
12
|
+
boost: number,
|
|
13
|
+
sdtApr: any,
|
|
14
|
+
cvxApr: number = 0,
|
|
15
|
+
) => {
|
|
10
16
|
// Base Rewards
|
|
11
17
|
// Trading Fees for LP
|
|
12
18
|
// Supply APY for lending
|
|
@@ -15,9 +21,16 @@ export const getAprBreakdown = (strat: any, rewardsData: RewardsData[], boost: n
|
|
|
15
21
|
value: [strat?.tradingApy || 0],
|
|
16
22
|
}
|
|
17
23
|
|
|
24
|
+
const underlyingReward = strat.underlyingReward
|
|
25
|
+
? {
|
|
26
|
+
label: `Underlying Yield (${strat.underlyingReward.symbol})`,
|
|
27
|
+
value: [strat.underlyingReward.apy],
|
|
28
|
+
}
|
|
29
|
+
: { label: '', value: [0] }
|
|
30
|
+
|
|
18
31
|
// Current streaming APRs from the Stake DAO gauge
|
|
19
32
|
const currentAprBreakdown: Breakdown[] = rewardsData.map((r) => {
|
|
20
|
-
const value = r.token.symbol === 'SDT' ? [sdtApr.sdtMinApr, sdtApr.sdtMaxApr] : [r.apr
|
|
33
|
+
const value = r.token.symbol === 'SDT' ? [sdtApr.sdtMinApr, sdtApr.sdtMaxApr] : [r.apr]
|
|
21
34
|
|
|
22
35
|
return {
|
|
23
36
|
label: getBreakdownLabel(strat, r, false, boost, sdtApr),
|
|
@@ -25,10 +38,10 @@ export const getAprBreakdown = (strat: any, rewardsData: RewardsData[], boost: n
|
|
|
25
38
|
}
|
|
26
39
|
})
|
|
27
40
|
|
|
28
|
-
// Projected CRV APR
|
|
41
|
+
// Projected Protocol Token (CRV, dYFI, CAKE, ...) APR
|
|
29
42
|
const projectedCrvApr = strat ? boost * strat.minApr : 0
|
|
30
43
|
|
|
31
|
-
// Projected CVX APR
|
|
44
|
+
// Projected CVX APR - for Onlyboost Convex only
|
|
32
45
|
const projectedCvxApr = { label: 'CVX APR', value: [cvxApr] }
|
|
33
46
|
|
|
34
47
|
// Format SDT and CRV rewards APR for breakdown
|
|
@@ -64,11 +77,14 @@ export const getAprBreakdown = (strat: any, rewardsData: RewardsData[], boost: n
|
|
|
64
77
|
|
|
65
78
|
// Compute total current APR
|
|
66
79
|
const currentTotal =
|
|
67
|
-
baseReward.value[0]! +
|
|
80
|
+
baseReward.value[0]! +
|
|
81
|
+
underlyingReward.value[0] +
|
|
82
|
+
currentAprBreakdown.reduce((total: number, curr) => total + curr.value[0]!, 0)
|
|
68
83
|
|
|
69
84
|
// Compute total projected APR
|
|
70
85
|
const projectedTotal =
|
|
71
86
|
baseReward.value[0]! +
|
|
87
|
+
underlyingReward.value[0] +
|
|
72
88
|
projectedAprBreakdown.reduce((total: number, curr) => total + curr.value[0]!, 0) +
|
|
73
89
|
cvxApr +
|
|
74
90
|
(strat.gaugesProjectedApr ? strat.gaugesProjectedApr.reduce((total: number, y: any) => total + y.apr, 0) : 0) +
|
|
@@ -77,12 +93,13 @@ export const getAprBreakdown = (strat: any, rewardsData: RewardsData[], boost: n
|
|
|
77
93
|
return {
|
|
78
94
|
current: {
|
|
79
95
|
total: currentTotal,
|
|
80
|
-
details: [baseReward, ...currentAprBreakdown].filter((r) => r
|
|
96
|
+
details: [baseReward, underlyingReward, ...currentAprBreakdown].filter((r) => r?.value[0] > 0 || false),
|
|
81
97
|
},
|
|
82
98
|
projected: {
|
|
83
99
|
total: projectedTotal,
|
|
84
100
|
details: [
|
|
85
101
|
baseReward,
|
|
102
|
+
underlyingReward,
|
|
86
103
|
...projectedAprBreakdown,
|
|
87
104
|
...(strat?.gaugesProjectedApr
|
|
88
105
|
? strat.gaugesProjectedApr.map((r: any) => ({
|
|
@@ -92,7 +109,7 @@ export const getAprBreakdown = (strat: any, rewardsData: RewardsData[], boost: n
|
|
|
92
109
|
: []),
|
|
93
110
|
...extraTokensAprBreakdown,
|
|
94
111
|
projectedCvxApr,
|
|
95
|
-
].filter((r) => r
|
|
112
|
+
].filter((r) => r?.value[0] > 0 || false),
|
|
96
113
|
},
|
|
97
114
|
}
|
|
98
115
|
}
|
|
@@ -204,3 +204,27 @@ export const computeSdtApr = (
|
|
|
204
204
|
sdtBoost: sdtRangeApr?.sdtBoost || 1,
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
|
+
|
|
208
|
+
export const getSdtApr = (
|
|
209
|
+
rewardsData: any, // TODO Type
|
|
210
|
+
sdtEmissionData: SdtEmissionData,
|
|
211
|
+
sdGauge: any,
|
|
212
|
+
lpPriceInUsd: number,
|
|
213
|
+
userData: any,
|
|
214
|
+
): SdtApr => {
|
|
215
|
+
let sdtApr: SdtApr = {
|
|
216
|
+
sdtUserApr: 0,
|
|
217
|
+
sdtFuturUserApr: 0,
|
|
218
|
+
sdtMinApr: 0,
|
|
219
|
+
sdtFuturMinApr: 0,
|
|
220
|
+
sdtMaxApr: 0,
|
|
221
|
+
sdtFuturMaxApr: 0,
|
|
222
|
+
sdtBoost: 1,
|
|
223
|
+
}
|
|
224
|
+
const sdtRewards = rewardsData.find((r) => r.token.symbol === 'SDT')
|
|
225
|
+
if (sdtRewards) {
|
|
226
|
+
sdtApr = computeSdtApr(sdtEmissionData, sdtRewards, userData, sdGauge, lpPriceInUsd)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return sdtApr
|
|
230
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { chunk, remove, uniq } from 'lodash-es'
|
|
2
|
+
import { decodeAbiParameters, encodeAbiParameters, parseAbiParameters } from 'viem'
|
|
3
|
+
|
|
4
|
+
import { contracts, tokens } from '@stake-dao/constants'
|
|
5
|
+
import type { FetchedToken, Token } from '@stake-dao/constants'
|
|
6
|
+
import { batchSdtGaugeRewards, batchTokenData, buildYearnStrats } from '../../batches/index.js'
|
|
7
|
+
import { equalTlc, getTokenInfo } from '../../utils.js'
|
|
8
|
+
import type { BuiltStrat } from '../types.js'
|
|
9
|
+
|
|
10
|
+
interface VaultAndLp {
|
|
11
|
+
vault: string
|
|
12
|
+
lpToken: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const buildYearnStrategies = async (
|
|
16
|
+
provider: any,
|
|
17
|
+
stratsList: VaultAndLp[],
|
|
18
|
+
chainId: number,
|
|
19
|
+
): Promise<BuiltStrat[]> => {
|
|
20
|
+
const tokensToFetch: string[] = []
|
|
21
|
+
|
|
22
|
+
const inputArgsChunks = chunk(stratsList, 30)
|
|
23
|
+
const stratsPromise = await Promise.allSettled(
|
|
24
|
+
inputArgsChunks.map(async (inputArgs) => {
|
|
25
|
+
const inputData = encodeAbiParameters(parseAbiParameters(buildYearnStrats.inputType![chainId]!) as any, [
|
|
26
|
+
contracts.yearnGaugeFactory![chainId],
|
|
27
|
+
inputArgs,
|
|
28
|
+
])
|
|
29
|
+
const contractCreationCode = buildYearnStrats.bytecode![chainId]!.concat(inputData.slice(2))
|
|
30
|
+
const returnedData = await provider.call({
|
|
31
|
+
data: contractCreationCode,
|
|
32
|
+
})
|
|
33
|
+
return decodeAbiParameters(buildYearnStrats.outputType![chainId]! as any, returnedData.data)
|
|
34
|
+
}),
|
|
35
|
+
)
|
|
36
|
+
const fetchedStrats = stratsPromise.flatMap((d) => (d.status === 'fulfilled' ? d.value[0].yearnStrats : [])).flat()
|
|
37
|
+
|
|
38
|
+
const strats = stratsList.map((data, index) => {
|
|
39
|
+
const vault = data.vault
|
|
40
|
+
const lpToken = data.lpToken
|
|
41
|
+
const gaugeAddress = fetchedStrats[index].gauge
|
|
42
|
+
const sdGauge = fetchedStrats[index].sdGauge
|
|
43
|
+
|
|
44
|
+
const coins = fetchedStrats[index].coins
|
|
45
|
+
const rewards = fetchedStrats[index].rewardsTokens
|
|
46
|
+
const underlyingReward = fetchedStrats[index].underlyingReward
|
|
47
|
+
const gaugeVersion = Number(fetchedStrats[index].gaugeVersion)
|
|
48
|
+
|
|
49
|
+
for (const c of coins) tokensToFetch.push(c)
|
|
50
|
+
for (const c of rewards) tokensToFetch.push(c)
|
|
51
|
+
tokensToFetch.push(lpToken)
|
|
52
|
+
tokensToFetch.push(gaugeAddress)
|
|
53
|
+
tokensToFetch.push(underlyingReward)
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
key: vault,
|
|
57
|
+
vault,
|
|
58
|
+
gaugeAddress,
|
|
59
|
+
sdGauge,
|
|
60
|
+
lpToken,
|
|
61
|
+
coins,
|
|
62
|
+
rewards,
|
|
63
|
+
underlyingReward,
|
|
64
|
+
gaugeVersion,
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
// Fetch tokens infos
|
|
69
|
+
const tokensInputArgsChunks = chunk(
|
|
70
|
+
remove(uniq(tokensToFetch), (t) => !tokens.find((token: Token) => token.address === t)),
|
|
71
|
+
40,
|
|
72
|
+
)
|
|
73
|
+
const decodedPromise = await Promise.allSettled(
|
|
74
|
+
tokensInputArgsChunks.map(async (inputArgs) => {
|
|
75
|
+
const inputData = encodeAbiParameters(parseAbiParameters(batchTokenData.inputType[chainId] || []) as any, [
|
|
76
|
+
inputArgs,
|
|
77
|
+
])
|
|
78
|
+
const contractCreationCode = batchTokenData.bytecode[chainId]?.concat(inputData.slice(2))
|
|
79
|
+
const returnedData = await provider.call({
|
|
80
|
+
data: contractCreationCode,
|
|
81
|
+
})
|
|
82
|
+
return decodeAbiParameters(
|
|
83
|
+
parseAbiParameters(batchTokenData.outputTypeHr[chainId] || []) as any,
|
|
84
|
+
returnedData.data,
|
|
85
|
+
)
|
|
86
|
+
}),
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
const fetchedTokenData = decodedPromise.flatMap((d) => (d.status === 'fulfilled' ? d.value : [])).flat()
|
|
90
|
+
|
|
91
|
+
// Fetch Sdt Gauge rewards tokens infos
|
|
92
|
+
const sdtGaugeInputArgsChunks = chunk(
|
|
93
|
+
stratsList.map((data) => data.vault),
|
|
94
|
+
30,
|
|
95
|
+
)
|
|
96
|
+
const sdtGaugedecodedPromise = await Promise.allSettled(
|
|
97
|
+
sdtGaugeInputArgsChunks.map(async (inputArgs) => {
|
|
98
|
+
const inputData = encodeAbiParameters(parseAbiParameters(batchSdtGaugeRewards.inputType[chainId] || []) as any, [
|
|
99
|
+
inputArgs,
|
|
100
|
+
])
|
|
101
|
+
const contractCreationCode = batchSdtGaugeRewards.bytecode[chainId]?.concat(inputData.slice(2))
|
|
102
|
+
const returnedData = await provider.call({
|
|
103
|
+
data: contractCreationCode,
|
|
104
|
+
})
|
|
105
|
+
return decodeAbiParameters(
|
|
106
|
+
parseAbiParameters(batchSdtGaugeRewards.outputTypeHr[chainId] || []) as any,
|
|
107
|
+
returnedData.data,
|
|
108
|
+
)
|
|
109
|
+
}),
|
|
110
|
+
)
|
|
111
|
+
const fetchedSdtGaugeData = sdtGaugedecodedPromise.flatMap((d) => (d.status === 'fulfilled' ? d.value : [])).flat()
|
|
112
|
+
|
|
113
|
+
const stratsData = strats.map((s, index) => {
|
|
114
|
+
const coinsData = s.coins.map((c) =>
|
|
115
|
+
getTokenInfo(
|
|
116
|
+
fetchedTokenData.find((t) => equalTlc(t.tokenAddress, c)),
|
|
117
|
+
c,
|
|
118
|
+
chainId,
|
|
119
|
+
),
|
|
120
|
+
)
|
|
121
|
+
const stakeTokenData = getTokenInfo(
|
|
122
|
+
fetchedTokenData.find((t) => equalTlc(t.tokenAddress, s.lpToken)),
|
|
123
|
+
s.lpToken,
|
|
124
|
+
chainId,
|
|
125
|
+
)
|
|
126
|
+
const gaugeTokenData = getTokenInfo(
|
|
127
|
+
fetchedTokenData.find((t) => equalTlc(t.tokenAddress, s.gaugeAddress)),
|
|
128
|
+
s.gaugeAddress,
|
|
129
|
+
chainId,
|
|
130
|
+
)
|
|
131
|
+
const underlyingRewardData = getTokenInfo(
|
|
132
|
+
fetchedTokenData.find((t) => equalTlc(t.tokenAddress, s.underlyingReward)),
|
|
133
|
+
s.underlyingReward,
|
|
134
|
+
chainId,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
key: s.key,
|
|
139
|
+
type: 'veyfi-gauge',
|
|
140
|
+
protocol: 'yearn',
|
|
141
|
+
chainId: chainId,
|
|
142
|
+
vault: s.vault,
|
|
143
|
+
gaugeAddress: s.gaugeAddress,
|
|
144
|
+
lpToken: stakeTokenData,
|
|
145
|
+
gaugeToken: { ...gaugeTokenData, version: s.gaugeVersion },
|
|
146
|
+
coins: coinsData,
|
|
147
|
+
sdGauge: fetchedSdtGaugeData[index]?.gauge || undefined,
|
|
148
|
+
rewards: fetchedSdtGaugeData[index]?.rewards.map((tokenInfo: FetchedToken) =>
|
|
149
|
+
getTokenInfo(tokenInfo, tokenInfo.tokenAddress, chainId),
|
|
150
|
+
),
|
|
151
|
+
underlyingReward: underlyingRewardData,
|
|
152
|
+
}
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
return stratsData
|
|
156
|
+
}
|