@stake-dao/reader 0.1.4 → 0.2.1
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/bytecodes/index.js +16 -0
- package/dist/esm/bytecodes/index.js.map +1 -0
- package/dist/esm/bytecodes/strategies/batches/batchBalancerStrats.js +68 -0
- package/dist/esm/bytecodes/strategies/batches/batchBalancerStrats.js.map +1 -0
- package/dist/esm/{batches/curveStrats.js → bytecodes/strategies/batches/batchCurveStrats.js} +3 -3
- package/dist/esm/bytecodes/strategies/batches/batchCurveStrats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.js +61 -0
- package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapPositions.js +44 -0
- package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapPositions.js.map +1 -0
- package/dist/esm/bytecodes/strategies/batches/batchPancakeswapStrats.js +48 -0
- package/dist/esm/bytecodes/strategies/batches/batchPancakeswapStrats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/batches/batchPendleStrats.js +63 -0
- package/dist/esm/bytecodes/strategies/batches/batchPendleStrats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/builds/buildBalancerStrats.js +54 -0
- package/dist/esm/bytecodes/strategies/builds/buildBalancerStrats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.js +64 -0
- package/dist/esm/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/builds/buildPancakeSwapStrats.js +51 -0
- package/dist/esm/bytecodes/strategies/builds/buildPancakeSwapStrats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.js +54 -0
- package/dist/esm/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/builds/buildPendleStrats.js +39 -0
- package/dist/esm/bytecodes/strategies/builds/buildPendleStrats.js.map +1 -0
- package/dist/esm/{batches → bytecodes/strategies/builds}/buildYearnStrats.js +2 -2
- package/dist/esm/bytecodes/strategies/builds/buildYearnStrats.js.map +1 -0
- package/dist/esm/bytecodes/strategies/fetchYearnGauges.js.map +1 -0
- package/dist/esm/bytecodes/strategies/sdtGaugeRewards.js.map +1 -0
- package/dist/esm/bytecodes/tokenData.js.map +1 -0
- package/dist/esm/{batches → bytecodes}/types.js.map +1 -1
- package/dist/esm/index.js +33 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lockers/utils/endpoints.js +1 -1
- package/dist/esm/lockers/utils/endpoints.js.map +1 -1
- package/dist/esm/prices.js +39 -3
- package/dist/esm/prices.js.map +1 -1
- package/dist/esm/strategies/balancer/build.js +4 -11
- package/dist/esm/strategies/balancer/build.js.map +1 -1
- package/dist/esm/strategies/balancer/fetch.js +190 -0
- package/dist/esm/strategies/balancer/fetch.js.map +1 -0
- package/dist/esm/strategies/curve/build.js +4 -4
- package/dist/esm/strategies/curve/build.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/bytecode.js +0 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/bytecode.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/getCurveApiData.js +3 -2
- package/dist/esm/strategies/curve/fetch/curveApiData/getCurveApiData.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.js +3 -2
- package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesWeights.js +2 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesWeights.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.js +2 -1
- package/dist/esm/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.js.map +1 -1
- package/dist/esm/strategies/curve/fetch/index.js +22 -4
- package/dist/esm/strategies/curve/fetch/index.js.map +1 -1
- package/dist/esm/strategies/curve/httpCalls.js +3 -3
- package/dist/esm/strategies/curve/httpCalls.js.map +1 -1
- package/dist/esm/strategies/curve/onChainCalls.js +3 -2
- package/dist/esm/strategies/curve/onChainCalls.js.map +1 -1
- package/dist/esm/strategies/pancakeswap/abis/PancakeSwapMasterchef.json +1575 -0
- package/dist/esm/strategies/pancakeswap/build.js +48 -0
- package/dist/esm/strategies/pancakeswap/build.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/buildErc20.js +63 -0
- package/dist/esm/strategies/pancakeswap/buildErc20.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/config.js +7 -0
- package/dist/esm/strategies/pancakeswap/config.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/endpoints.js +10 -0
- package/dist/esm/strategies/pancakeswap/endpoints.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeApisData.js +24 -0
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeApisData.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeErc20Vaults.js +134 -0
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeErc20Vaults.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeNotDeployed.js +102 -0
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeNotDeployed.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeV3Vaults.js +142 -0
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeV3Vaults.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/fetch/index.js +25 -0
- package/dist/esm/strategies/pancakeswap/fetch/index.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/fetch/pancakePositions.js +87 -0
- package/dist/esm/strategies/pancakeswap/fetch/pancakePositions.js.map +1 -0
- package/dist/esm/strategies/pancakeswap/fetch/pancakeswapMath.js +199 -0
- package/dist/esm/strategies/pancakeswap/fetch/pancakeswapMath.js.map +1 -0
- package/dist/esm/strategies/pendle/abis/MulticallPendleStratsAbi.json +103 -0
- package/dist/esm/strategies/pendle/build.js +70 -0
- package/dist/esm/strategies/pendle/build.js.map +1 -0
- package/dist/esm/strategies/pendle/fetch.js +267 -0
- package/dist/esm/strategies/pendle/fetch.js.map +1 -0
- package/dist/esm/strategies/pendle/getPendleApiData.js +15 -0
- package/dist/esm/strategies/pendle/getPendleApiData.js.map +1 -0
- package/dist/esm/strategies/pendle/pendlePoints.js +71 -0
- package/dist/esm/strategies/pendle/pendlePoints.js.map +1 -0
- package/dist/esm/strategies/utils/getAprBreakdown.js +9 -9
- package/dist/esm/strategies/utils/getAprBreakdown.js.map +1 -1
- package/dist/esm/strategies/utils/index.js +10 -1
- package/dist/esm/strategies/utils/index.js.map +1 -1
- package/dist/esm/strategies/yearn/build.js +5 -4
- package/dist/esm/strategies/yearn/build.js.map +1 -1
- package/dist/esm/strategies/yearn/fetch/fetchAllYearnGauges.js +3 -2
- package/dist/esm/strategies/yearn/fetch/fetchAllYearnGauges.js.map +1 -1
- package/dist/esm/strategies/yearn/fetch/index.js +1 -1
- package/dist/esm/strategies/yearn/fetch/index.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/utils.js +1 -1
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/bytecodes/index.d.ts +16 -0
- package/dist/types/bytecodes/index.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/batches/batchBalancerStrats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/batches/batchBalancerStrats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/batches/batchCurveStrats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/batches/batchCurveStrats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/batches/batchPancakeSwapPositions.d.ts +4 -0
- package/dist/types/bytecodes/strategies/batches/batchPancakeSwapPositions.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/batches/batchPancakeswapStrats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/batches/batchPancakeswapStrats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/batches/batchPendleStrats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/batches/batchPendleStrats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/builds/buildBalancerStrats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/builds/buildBalancerStrats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/builds/buildPancakeSwapStrats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/builds/buildPancakeSwapStrats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/builds/buildPendleStrats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/builds/buildPendleStrats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/builds/buildYearnStrats.d.ts +4 -0
- package/dist/types/bytecodes/strategies/builds/buildYearnStrats.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/fetchYearnGauges.d.ts +4 -0
- package/dist/types/bytecodes/strategies/fetchYearnGauges.d.ts.map +1 -0
- package/dist/types/bytecodes/strategies/sdtGaugeRewards.d.ts +4 -0
- package/dist/types/bytecodes/strategies/sdtGaugeRewards.d.ts.map +1 -0
- package/dist/types/bytecodes/tokenData.d.ts.map +1 -0
- package/dist/types/bytecodes/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +15 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lockers/utils/endpoints.d.ts +1 -1
- package/dist/types/lockers/utils/endpoints.d.ts.map +1 -1
- package/dist/types/prices.d.ts +8 -1
- package/dist/types/prices.d.ts.map +1 -1
- package/dist/types/strategies/balancer/build.d.ts +0 -1
- package/dist/types/strategies/balancer/build.d.ts.map +1 -1
- package/dist/types/strategies/balancer/fetch.d.ts +11 -0
- package/dist/types/strategies/balancer/fetch.d.ts.map +1 -0
- package/dist/types/strategies/curve/build.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/bytecode.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/getCurveApiData.d.ts +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/getCurveApiData.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/getGaugesWeights.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.d.ts.map +1 -1
- package/dist/types/strategies/curve/fetch/index.d.ts +15 -2
- package/dist/types/strategies/curve/fetch/index.d.ts.map +1 -1
- package/dist/types/strategies/curve/onChainCalls.d.ts.map +1 -1
- package/dist/types/strategies/pancakeswap/build.d.ts +2 -0
- package/dist/types/strategies/pancakeswap/build.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/buildErc20.d.ts +7 -0
- package/dist/types/strategies/pancakeswap/buildErc20.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/config.d.ts +7 -0
- package/dist/types/strategies/pancakeswap/config.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/endpoints.d.ts +8 -0
- package/dist/types/strategies/pancakeswap/endpoints.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/fetch/getPancakeApisData.d.ts +10 -0
- package/dist/types/strategies/pancakeswap/fetch/getPancakeApisData.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/fetch/getPancakeErc20Vaults.d.ts +44 -0
- package/dist/types/strategies/pancakeswap/fetch/getPancakeErc20Vaults.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/fetch/getPancakeNotDeployed.d.ts +3 -0
- package/dist/types/strategies/pancakeswap/fetch/getPancakeNotDeployed.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/fetch/getPancakeV3Vaults.d.ts +7 -0
- package/dist/types/strategies/pancakeswap/fetch/getPancakeV3Vaults.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/fetch/index.d.ts +17 -0
- package/dist/types/strategies/pancakeswap/fetch/index.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/fetch/pancakePositions.d.ts +11 -0
- package/dist/types/strategies/pancakeswap/fetch/pancakePositions.d.ts.map +1 -0
- package/dist/types/strategies/pancakeswap/fetch/pancakeswapMath.d.ts +33 -0
- package/dist/types/strategies/pancakeswap/fetch/pancakeswapMath.d.ts.map +1 -0
- package/dist/types/strategies/pendle/build.d.ts +42 -0
- package/dist/types/strategies/pendle/build.d.ts.map +1 -0
- package/dist/types/strategies/pendle/fetch.d.ts +60 -0
- package/dist/types/strategies/pendle/fetch.d.ts.map +1 -0
- package/dist/types/strategies/pendle/getPendleApiData.d.ts +3 -0
- package/dist/types/strategies/pendle/getPendleApiData.d.ts.map +1 -0
- package/dist/types/strategies/pendle/pendlePoints.d.ts +80 -0
- package/dist/types/strategies/pendle/pendlePoints.d.ts.map +1 -0
- package/dist/types/strategies/types.d.ts +17 -3
- package/dist/types/strategies/types.d.ts.map +1 -1
- package/dist/types/strategies/utils/getAprBreakdown.d.ts +1 -4
- package/dist/types/strategies/utils/getAprBreakdown.d.ts.map +1 -1
- package/dist/types/strategies/utils/index.d.ts +2 -0
- package/dist/types/strategies/utils/index.d.ts.map +1 -1
- package/dist/types/strategies/yearn/build.d.ts.map +1 -1
- package/dist/types/strategies/yearn/fetch/fetchAllYearnGauges.d.ts.map +1 -1
- package/dist/types/strategies/yearn/fetch/index.d.ts +13 -2
- package/dist/types/strategies/yearn/fetch/index.d.ts.map +1 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/bytecodes/index.ts +18 -0
- package/src/bytecodes/strategies/batches/batchBalancerStrats.ts +70 -0
- package/src/{batches/curveStrats.ts → bytecodes/strategies/batches/batchCurveStrats.ts} +3 -3
- package/src/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.ts +67 -0
- package/src/bytecodes/strategies/batches/batchPancakeSwapPositions.ts +50 -0
- package/src/bytecodes/strategies/batches/batchPancakeswapStrats.ts +54 -0
- package/src/bytecodes/strategies/batches/batchPendleStrats.ts +65 -0
- package/src/bytecodes/strategies/builds/buildBalancerStrats.ts +56 -0
- package/src/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.ts +70 -0
- package/src/bytecodes/strategies/builds/buildPancakeSwapStrats.ts +57 -0
- package/src/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.ts +60 -0
- package/src/bytecodes/strategies/builds/buildPendleStrats.ts +41 -0
- package/src/{batches → bytecodes/strategies/builds}/buildYearnStrats.ts +3 -3
- package/src/{batches → bytecodes/strategies}/fetchYearnGauges.ts +1 -1
- package/src/{batches → bytecodes/strategies}/sdtGaugeRewards.ts +1 -1
- package/src/endpoints.ts +2 -0
- package/src/index.ts +43 -5
- package/src/lockers/utils/endpoints.ts +2 -1
- package/src/prices.ts +57 -6
- package/src/strategies/balancer/build.ts +66 -0
- package/src/strategies/balancer/endpoints.ts +27 -0
- package/src/strategies/balancer/fetch.ts +266 -0
- package/src/strategies/curve/build.ts +4 -3
- package/src/strategies/curve/fetch/curveApiData/bytecode.ts +0 -1
- package/src/strategies/curve/fetch/curveApiData/getCurveApiData.ts +4 -3
- package/src/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.ts +7 -3
- package/src/strategies/curve/fetch/curveApiData/getGaugesWeights.ts +3 -2
- package/src/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.ts +3 -2
- package/src/strategies/curve/fetch/index.ts +53 -15
- package/src/strategies/curve/httpCalls.ts +3 -3
- package/src/strategies/curve/onChainCalls.ts +4 -2
- package/src/strategies/pancakeswap/build.ts +57 -0
- package/src/strategies/pancakeswap/buildErc20.ts +73 -0
- package/src/strategies/pancakeswap/config.ts +7 -0
- package/src/strategies/pancakeswap/endpoints.ts +12 -0
- package/src/strategies/pancakeswap/fetch/getPancakeApisData.ts +32 -0
- package/src/strategies/pancakeswap/fetch/getPancakeErc20Vaults.ts +184 -0
- package/src/strategies/pancakeswap/fetch/getPancakeNotDeployed.ts +132 -0
- package/src/strategies/pancakeswap/fetch/getPancakeV3Vaults.ts +191 -0
- package/src/strategies/pancakeswap/fetch/index.ts +50 -0
- package/src/strategies/pancakeswap/fetch/pancakePositions.ts +147 -0
- package/src/strategies/pancakeswap/fetch/pancakeswapMath.ts +305 -0
- package/src/strategies/pendle/build.ts +93 -0
- package/src/strategies/pendle/fetch.ts +349 -0
- package/src/strategies/pendle/getPendleApiData.ts +20 -0
- package/src/strategies/pendle/pendlePoints.ts +71 -0
- package/src/strategies/types.ts +20 -3
- package/src/strategies/utils/getAprBreakdown.ts +9 -9
- package/src/strategies/utils/index.ts +14 -1
- package/src/strategies/yearn/build.ts +5 -4
- package/src/strategies/yearn/fetch/fetchAllYearnGauges.ts +4 -3
- package/src/strategies/yearn/fetch/index.ts +22 -11
- package/src/utils.ts +3 -3
- package/dist/esm/batches/balancerStrats.js +0 -73
- package/dist/esm/batches/balancerStrats.js.map +0 -1
- package/dist/esm/batches/buildBalancerStrats.js +0 -62
- package/dist/esm/batches/buildBalancerStrats.js.map +0 -1
- package/dist/esm/batches/buildYearnStrats.js.map +0 -1
- package/dist/esm/batches/curveStrats.js.map +0 -1
- package/dist/esm/batches/fetchYearnGauges.js.map +0 -1
- package/dist/esm/batches/index.js +0 -8
- package/dist/esm/batches/index.js.map +0 -1
- package/dist/esm/batches/sdtGaugeRewards.js.map +0 -1
- package/dist/esm/batches/tokenData.js.map +0 -1
- package/dist/esm/strategies/balancer/fetch/index.js +0 -203
- package/dist/esm/strategies/balancer/fetch/index.js.map +0 -1
- package/dist/types/batches/balancerStrats.d.ts +0 -4
- package/dist/types/batches/balancerStrats.d.ts.map +0 -1
- package/dist/types/batches/buildBalancerStrats.d.ts +0 -4
- package/dist/types/batches/buildBalancerStrats.d.ts.map +0 -1
- package/dist/types/batches/buildYearnStrats.d.ts +0 -4
- package/dist/types/batches/buildYearnStrats.d.ts.map +0 -1
- package/dist/types/batches/curveStrats.d.ts +0 -4
- package/dist/types/batches/curveStrats.d.ts.map +0 -1
- package/dist/types/batches/fetchYearnGauges.d.ts +0 -4
- package/dist/types/batches/fetchYearnGauges.d.ts.map +0 -1
- package/dist/types/batches/index.d.ts +0 -8
- package/dist/types/batches/index.d.ts.map +0 -1
- package/dist/types/batches/sdtGaugeRewards.d.ts +0 -4
- package/dist/types/batches/sdtGaugeRewards.d.ts.map +0 -1
- package/dist/types/batches/tokenData.d.ts.map +0 -1
- package/dist/types/batches/types.d.ts.map +0 -1
- package/dist/types/strategies/balancer/fetch/index.d.ts +0 -6
- package/dist/types/strategies/balancer/fetch/index.d.ts.map +0 -1
- package/src/batches/index.ts +0 -5
- /package/dist/esm/{batches → bytecodes/strategies}/fetchYearnGauges.js +0 -0
- /package/dist/esm/{batches → bytecodes/strategies}/sdtGaugeRewards.js +0 -0
- /package/dist/esm/{batches → bytecodes}/tokenData.js +0 -0
- /package/dist/esm/{batches → bytecodes}/types.js +0 -0
- /package/dist/types/{batches → bytecodes}/tokenData.d.ts +0 -0
- /package/dist/types/{batches → bytecodes}/types.d.ts +0 -0
- /package/src/{batches → bytecodes}/tokenData.ts +0 -0
- /package/src/{batches → bytecodes}/types.ts +0 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import dayjs from 'dayjs'
|
|
2
|
+
import { chunk } from 'lodash-es'
|
|
3
|
+
import { encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem'
|
|
4
|
+
|
|
5
|
+
import { ONE_YEAR, STRAT_FEES, contract, contracts, mainnet, pendleStrats, tokenWithId } from '@stake-dao/constants'
|
|
6
|
+
import { batchPendleStrats } from '../../bytecodes/index.js'
|
|
7
|
+
import type { Price } from '../../prices.js'
|
|
8
|
+
import { type Call, batchJsonRpc, equalTlc, multicall } from '../../utils.js'
|
|
9
|
+
import { FACTORY_EXPLORER_EVENTS } from '../curve/endpoints.js'
|
|
10
|
+
import type { RewardsData, SdtApr, ValidChainId, ValidExplorer } from '../types.js'
|
|
11
|
+
import { getBoost } from '../utils/boost.js'
|
|
12
|
+
import decodeEtherscanFactoryEvent from '../utils/decodeEtherscanFactoryEvent.js'
|
|
13
|
+
import { getAprBreakdown } from '../utils/getAprBreakdown.js'
|
|
14
|
+
import { OneEther, Zero, concatBytecode } from '../utils/index.js'
|
|
15
|
+
import multicallPendleStratsAbi from './abis/MulticallPendleStratsAbi.json'
|
|
16
|
+
import { buildPendleStrategies } from './build.js'
|
|
17
|
+
import getPendleApiData from './getPendleApiData.js'
|
|
18
|
+
import pendlePoints from './pendlePoints.js'
|
|
19
|
+
|
|
20
|
+
const pendleApiForMarket = async (market: string) =>
|
|
21
|
+
(await fetch(`https://api-v2.pendle.finance/core/v1/1/markets/${market}`)).json()
|
|
22
|
+
|
|
23
|
+
const calls = (tokenAddresses: string[]): Call[] => [
|
|
24
|
+
{ address: contracts.sdGaugeController![1]!, name: 'get_total_weight' },
|
|
25
|
+
...tokenAddresses.map((tokenAddress) => ({
|
|
26
|
+
address: tokenAddress,
|
|
27
|
+
name: 'redeemRewards',
|
|
28
|
+
params: [contracts.pendleLocker![1]],
|
|
29
|
+
})),
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
interface TFetchPendle {
|
|
33
|
+
prices: Price[]
|
|
34
|
+
provider: any
|
|
35
|
+
rpc: string
|
|
36
|
+
explorerApiKey: string
|
|
37
|
+
explorer: ValidExplorer
|
|
38
|
+
chainId: ValidChainId
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const fetchPendle = async ({ prices, provider, rpc, explorerApiKey, explorer, chainId }: TFetchPendle) => {
|
|
42
|
+
const sdt = tokenWithId('sdt', chainId)!
|
|
43
|
+
const sdtToken = {
|
|
44
|
+
name: sdt.name,
|
|
45
|
+
symbol: sdt.symbol,
|
|
46
|
+
decimals: sdt.decimals,
|
|
47
|
+
address: sdt.address,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const lastBlockNumber = pendleStrats.meta.lastSyncBlock[chainId]! + 1
|
|
51
|
+
|
|
52
|
+
const httpCalls = [
|
|
53
|
+
// Etherscan Events
|
|
54
|
+
await (
|
|
55
|
+
await fetch(
|
|
56
|
+
FACTORY_EXPLORER_EVENTS(explorerApiKey, explorer, contracts.pendleVaultFactory![chainId]!, lastBlockNumber),
|
|
57
|
+
)
|
|
58
|
+
).json(),
|
|
59
|
+
// Pende Api
|
|
60
|
+
getPendleApiData(),
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
const httpResp = await Promise.all(httpCalls)
|
|
64
|
+
const etherscanData = httpResp[0]
|
|
65
|
+
const pendleApiData = httpResp[1]
|
|
66
|
+
|
|
67
|
+
const vaultsAndLps = pendleStrats.strats[chainId]!.concat(decodeEtherscanFactoryEvent(etherscanData))
|
|
68
|
+
const strats: any[] = await buildPendleStrategies(rpc, vaultsAndLps, pendleApiData, chainId)
|
|
69
|
+
|
|
70
|
+
const pendleMarketAddresses = strats.map((s) => s.lpToken.address.toLowerCase())
|
|
71
|
+
|
|
72
|
+
const stratsWithExtraUnderlyingReward = pendleApiData.filter(
|
|
73
|
+
(s) => pendleMarketAddresses.includes(s.address.toLowerCase()) && s.underlyingRewardApy > 0,
|
|
74
|
+
)
|
|
75
|
+
const extraDataHttpCalls = stratsWithExtraUnderlyingReward.map((s) => pendleApiForMarket(s.address))
|
|
76
|
+
const pendleApiExtraData = await Promise.all(extraDataHttpCalls)
|
|
77
|
+
|
|
78
|
+
const inputArgsChunks = chunk(
|
|
79
|
+
strats.map((data) => [data.vault, data.lpToken.address]),
|
|
80
|
+
12,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
const allContractCreationCodes: string[] = inputArgsChunks.map((inputArgs) => {
|
|
84
|
+
const inputParams = [contract('sdGaugeController', chainId), inputArgs]
|
|
85
|
+
|
|
86
|
+
const inputData = encodeAbiParameters(
|
|
87
|
+
parseAbiParameters(batchPendleStrats.inputType[chainId] || []) as any,
|
|
88
|
+
inputParams,
|
|
89
|
+
)
|
|
90
|
+
return concatBytecode(batchPendleStrats.bytecode[chainId]!, inputData)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
const decodedPromise = await batchJsonRpc({
|
|
94
|
+
rpc,
|
|
95
|
+
calls: allContractCreationCodes,
|
|
96
|
+
outputTypeAbi: batchPendleStrats.outputType![chainId],
|
|
97
|
+
parse: false,
|
|
98
|
+
callsKey: `strategies/pendle/fetch.ts: fetchPendle - chainId ${chainId} - rpc ${rpc}`,
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const multicallRawData = await multicall(
|
|
102
|
+
provider,
|
|
103
|
+
calls(strats.map((s) => s.lpToken.address)),
|
|
104
|
+
multicallPendleStratsAbi,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
const totalGaugeWeight = multicallRawData.shift().result
|
|
108
|
+
|
|
109
|
+
const parsedData = strats.map((s) => {
|
|
110
|
+
const pendleStratApiData = pendleApiData.find((element) => equalTlc(element.address, s.lpToken.address))
|
|
111
|
+
const rawData = decodedPromise.find((element) => equalTlc(element.lpt, s.lpToken.address))
|
|
112
|
+
|
|
113
|
+
const expiry = Number(rawData.expiry)
|
|
114
|
+
const totalSupply = rawData.totalSupply
|
|
115
|
+
const strategyHoldings = rawData.strategyHoldings
|
|
116
|
+
const workingBalance = rawData.workingBalance
|
|
117
|
+
|
|
118
|
+
const lpPriceInUsd = pendleStratApiData.lp.price.usd
|
|
119
|
+
const tvl = Number(formatUnits(totalSupply, 18)) * lpPriceInUsd
|
|
120
|
+
|
|
121
|
+
const pendingRewards = multicallRawData.shift().result
|
|
122
|
+
const rewards = rawData.rewards.map((r, index) => ({
|
|
123
|
+
name: r.name,
|
|
124
|
+
symbol: r.symbol,
|
|
125
|
+
decimals: Number(r.decimals),
|
|
126
|
+
address: r._address,
|
|
127
|
+
pending: formatUnits(pendingRewards[index], 0),
|
|
128
|
+
}))
|
|
129
|
+
|
|
130
|
+
const rewardsData: RewardsData[] = rawData.sdRewards.map((r, index) => {
|
|
131
|
+
const rewardTokenAddress = rawData.sdRewardsTokens[index]
|
|
132
|
+
const rewardToken = rewards.find((rt) => equalTlc(rewardTokenAddress, rt.address))
|
|
133
|
+
const rewardTokenData = equalTlc(rewardTokenAddress, sdt.address)
|
|
134
|
+
? sdtToken
|
|
135
|
+
: {
|
|
136
|
+
name: rewardToken.name,
|
|
137
|
+
symbol: rewardToken.symbol,
|
|
138
|
+
decimals: rewardToken.decimals,
|
|
139
|
+
address: rewardToken.address,
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const rewardPrice = prices.find((p: any) => equalTlc(p.address, rewardTokenData.address))
|
|
143
|
+
|
|
144
|
+
const periodFinish = Number(formatUnits(r.period_finish, 0))
|
|
145
|
+
const streaming = periodFinish > Math.floor(Date.now() / 1000)
|
|
146
|
+
|
|
147
|
+
const rewardApr =
|
|
148
|
+
streaming && rewardPrice && tvl > 0
|
|
149
|
+
? (Number(formatUnits(r.rate * BigInt(ONE_YEAR), 18)) * rewardPrice.usdPrice) /
|
|
150
|
+
tvl /
|
|
151
|
+
(equalTlc(rewardTokenData.symbol, 'SDT') ? 2.5 : 1)
|
|
152
|
+
: 0
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
token: rewardTokenData,
|
|
156
|
+
price: rewardPrice ? rewardPrice.usdPrice : 0,
|
|
157
|
+
apr: rewardApr * 100,
|
|
158
|
+
streaming,
|
|
159
|
+
periodFinish,
|
|
160
|
+
rate: formatUnits(r.rate, 0),
|
|
161
|
+
lastUpdate: formatUnits(r.last_update, 0),
|
|
162
|
+
claimablePendingRewards: equalTlc(rewardTokenAddress, sdt.address) ? '0' : rewardToken.pending,
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
const boost = getBoost('pendle', strategyHoldings, workingBalance)
|
|
167
|
+
|
|
168
|
+
let extraRewards = []
|
|
169
|
+
if (pendleStratApiData.underlyingRewardApy > 0) {
|
|
170
|
+
const extraApiData = pendleApiExtraData.find((el) => equalTlc(el.address, s.lpToken.address))
|
|
171
|
+
extraRewards = extraApiData.underlyingRewardApyBreakdown.map((r) => {
|
|
172
|
+
const nonBoostedApr = (r.absoluteApy * (100 - STRAT_FEES)) / 2.5
|
|
173
|
+
return {
|
|
174
|
+
address: r.address,
|
|
175
|
+
name: r.name,
|
|
176
|
+
symbol: r.symbol,
|
|
177
|
+
decimals: r.decimals,
|
|
178
|
+
apy: nonBoostedApr * boost,
|
|
179
|
+
}
|
|
180
|
+
})
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const totalPt = pendleStratApiData.totalPt
|
|
184
|
+
const totalSy = pendleStratApiData.totalSy
|
|
185
|
+
|
|
186
|
+
const syYield = (totalSy / (totalPt + totalSy)) * pendleStratApiData.underlyingApy * 100
|
|
187
|
+
const ptYield = (totalPt / (totalPt + totalSy)) * pendleStratApiData.impliedApy * 100
|
|
188
|
+
|
|
189
|
+
const subname = `${dayjs(expiry * 1000).format('DD/MM/YYYY')}`
|
|
190
|
+
|
|
191
|
+
const gaugeWeight = rawData.sdGaugeWeight
|
|
192
|
+
|
|
193
|
+
const sdGauge = {
|
|
194
|
+
address: rawData.sdGauge,
|
|
195
|
+
totalSupply: formatUnits(rawData.sdGaugeTotalSupply, 0),
|
|
196
|
+
...(chainId === mainnet.id
|
|
197
|
+
? {
|
|
198
|
+
relativeWeight: formatUnits(rawData.sdGaugeRelativeWeight, 0),
|
|
199
|
+
weight: formatUnits(gaugeWeight, 0),
|
|
200
|
+
futureWeight:
|
|
201
|
+
totalGaugeWeight > Zero
|
|
202
|
+
? formatUnits(((gaugeWeight as bigint) * OneEther * OneEther) / totalGaugeWeight, 0)
|
|
203
|
+
: '0',
|
|
204
|
+
workingSupply: formatUnits(rawData.sdGaugeWorkingSupply, 0),
|
|
205
|
+
}
|
|
206
|
+
: { relativeWeight: '0', weight: '0', futureWeight: '0', workingSupply: '0' }),
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const tradingApy = pendleStratApiData.swapFeeApy * 100
|
|
210
|
+
const minApr = pendleStratApiData.pendleApy * (100 - STRAT_FEES)
|
|
211
|
+
const maxApr = pendleStratApiData.pendleApy * (100 - STRAT_FEES) * 2.5
|
|
212
|
+
|
|
213
|
+
const underlyingReward = [
|
|
214
|
+
{
|
|
215
|
+
...s.underlyingReward,
|
|
216
|
+
apy: syYield,
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
...s.underlyingReward,
|
|
220
|
+
symbol: `PT ${s.underlyingReward.symbol}`,
|
|
221
|
+
apy: ptYield,
|
|
222
|
+
},
|
|
223
|
+
...extraRewards,
|
|
224
|
+
]
|
|
225
|
+
|
|
226
|
+
const sdtApr: SdtApr = {
|
|
227
|
+
sdtUserApr: 0,
|
|
228
|
+
sdtFuturUserApr: 0,
|
|
229
|
+
sdtMinApr: 0,
|
|
230
|
+
sdtFuturMinApr: 0,
|
|
231
|
+
sdtMaxApr: 0,
|
|
232
|
+
sdtFuturMaxApr: 0,
|
|
233
|
+
sdtBoost: 1,
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const apr = getAprBreakdown(
|
|
237
|
+
{
|
|
238
|
+
...s,
|
|
239
|
+
tradingApy,
|
|
240
|
+
minApr,
|
|
241
|
+
maxApr,
|
|
242
|
+
underlyingReward,
|
|
243
|
+
},
|
|
244
|
+
rewardsData,
|
|
245
|
+
boost,
|
|
246
|
+
sdtApr,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
return {
|
|
250
|
+
key: s.key,
|
|
251
|
+
name: s.coins.reduce((res: string, current) => `${res}/${current.symbol}`, '').slice(1),
|
|
252
|
+
subname,
|
|
253
|
+
protocol: s.protocol,
|
|
254
|
+
chainId: s.chainId,
|
|
255
|
+
vault: s.vault,
|
|
256
|
+
lpToken: s.lpToken,
|
|
257
|
+
coins: s.coins,
|
|
258
|
+
sdGauge,
|
|
259
|
+
lpPriceInUsd,
|
|
260
|
+
tvl,
|
|
261
|
+
apr: {
|
|
262
|
+
boost,
|
|
263
|
+
...apr,
|
|
264
|
+
},
|
|
265
|
+
// sdtApr,
|
|
266
|
+
rewards: rewardsData,
|
|
267
|
+
underlyingReward,
|
|
268
|
+
// Base APR data
|
|
269
|
+
tradingApy,
|
|
270
|
+
minApr,
|
|
271
|
+
maxApr,
|
|
272
|
+
// Raw data
|
|
273
|
+
vaultHoldings: formatUnits(rawData.vaultHoldings, 0),
|
|
274
|
+
totalSupply: formatUnits(totalSupply, 0),
|
|
275
|
+
strategyHoldings: formatUnits(strategyHoldings, 0),
|
|
276
|
+
workingBalance: formatUnits(workingBalance, 0),
|
|
277
|
+
// Gas optimised
|
|
278
|
+
vaultFees: {
|
|
279
|
+
keeper: 0,
|
|
280
|
+
accumulated: '0',
|
|
281
|
+
},
|
|
282
|
+
}
|
|
283
|
+
})
|
|
284
|
+
|
|
285
|
+
const rawNotDeployed = pendleApiData.filter((s) => {
|
|
286
|
+
if (!pendleMarketAddresses.includes(s.address.toLowerCase())) {
|
|
287
|
+
const expiry = new Date(s.expiry)
|
|
288
|
+
const expiryTimestamp = Math.floor(expiry.getTime() / 1000)
|
|
289
|
+
const nowTimestamp = Math.floor(Date.now() / 1000)
|
|
290
|
+
|
|
291
|
+
return expiryTimestamp > nowTimestamp
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return false
|
|
295
|
+
})
|
|
296
|
+
|
|
297
|
+
const notDeployed = rawNotDeployed.map((s) => ({
|
|
298
|
+
name: s.proName,
|
|
299
|
+
lpTokenAddress: s.address,
|
|
300
|
+
gaugeAddress: s.address,
|
|
301
|
+
protocol: 'pendle',
|
|
302
|
+
chainId,
|
|
303
|
+
coins: [
|
|
304
|
+
{
|
|
305
|
+
address: s.underlyingAsset.address,
|
|
306
|
+
name: s.underlyingAsset.name,
|
|
307
|
+
symbol: s.underlyingAsset.symbol,
|
|
308
|
+
decimals: s.underlyingAsset.decimals,
|
|
309
|
+
},
|
|
310
|
+
],
|
|
311
|
+
maxApy: s.maxBoostedApy * 100,
|
|
312
|
+
accentColor: s.accentColor,
|
|
313
|
+
points: pendlePoints[s.address.toLowerCase()],
|
|
314
|
+
}))
|
|
315
|
+
|
|
316
|
+
return {
|
|
317
|
+
deployed: parsedData,
|
|
318
|
+
notDeployed: notDeployed.filter(
|
|
319
|
+
(s) =>
|
|
320
|
+
![
|
|
321
|
+
// Exclude
|
|
322
|
+
'0xd1434df1e2ad0cb7b3701a751d01981c7cf2dd62', // Stafi RETH
|
|
323
|
+
|
|
324
|
+
// With old factory
|
|
325
|
+
'0xfcbae4635ca89866f83add208ecceec742678746', // 2024-06-27 wstETH-WETH
|
|
326
|
+
'0xabc8ae339e3f560bf700a3f6ee85ee719979762b', // 2024-09-26 ankrETH-WETH
|
|
327
|
+
'0x2ec8c498ec997ad963969a2c93bf7150a1f5b213', // 2024-12-26 rETH-WETH
|
|
328
|
+
'0x8225dd26ddfaaa321e5388e0f4c090ba16217c21', // 2024-09-26 swETH-bbaWETH
|
|
329
|
+
'0xd547d9c74314f787affc587d101146e1663d046e', // 2024-06-27 ankrETH-wstETH
|
|
330
|
+
'0xc112b12addc11f988abc1aafb47e4c2f62fb6070', // 2024-09-26 ETHx-bbaWETH
|
|
331
|
+
'0xcf756c00a755172bdc073787ea83817603da42ef', // 2024-09-26 swETH-bbaWETH
|
|
332
|
+
'0x23aefced9255ad3560cdaa4a10cbfe9ec230dc5a', // 2024-12-26 eUSD
|
|
333
|
+
'0xff262396f2a35cd7aa24b7255e7d3f45f057cdba', // 2024-12-26 ETHx
|
|
334
|
+
'0xa5fd0e8991be631917d2d2b2d5dacfd7bfef7876', // 2024-06-27 swETH
|
|
335
|
+
'0x0eb3f11ed8ca69813744868d02d83d4fbf72841e', // 2024-09-26 ePENDLE
|
|
336
|
+
'0x93a82f3873e5b4ff81902663c43286d662f6721c', // 2024-09-26 sDAI
|
|
337
|
+
|
|
338
|
+
// With new factory (not deployed yet)
|
|
339
|
+
'0x90c98ab215498b72abfec04c651e2e496ba364c0', // 2024-06-27 USDe (Zircuit)
|
|
340
|
+
'0x445d25a1c31445fb29e65d12da8e0eea38174176', // 2024-06-27 rsETH (Zircuit)
|
|
341
|
+
'0xd7e0809998693fd87e81d51de1619fd0ee658031', // 2024-06-27 ezETH (Zircuit)
|
|
342
|
+
'0xe26d7f9409581f606242300fbfe63f56789f2169', // 2024-06-27 (Zircuit) eETH
|
|
343
|
+
'0xe6d4986cd935529fc4505d48e926bcd36a58a0f0', // 2025-03-27 apxETH
|
|
344
|
+
'0x2084b373979415bc93190071af3390f92dcdd189', // 2024-06-27 stTAO
|
|
345
|
+
].includes(s.lpTokenAddress.toLowerCase()),
|
|
346
|
+
),
|
|
347
|
+
fetched: true,
|
|
348
|
+
}
|
|
349
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const LIMIT = 100
|
|
2
|
+
const URL = (skip: number = 0) =>
|
|
3
|
+
`https://api-v2.pendle.finance/core/v1/1/markets?limit=${LIMIT}&select=all&skip=${skip}`
|
|
4
|
+
|
|
5
|
+
const getPendleApiData = async () => {
|
|
6
|
+
let totalFetched = 0
|
|
7
|
+
let pendleApiData: any
|
|
8
|
+
let pendleStrats: any[] = []
|
|
9
|
+
|
|
10
|
+
do {
|
|
11
|
+
pendleApiData = await (await fetch(URL(totalFetched))).json()
|
|
12
|
+
totalFetched += LIMIT
|
|
13
|
+
|
|
14
|
+
pendleStrats = pendleStrats.concat(pendleApiData.results)
|
|
15
|
+
} while (pendleApiData.total > totalFetched)
|
|
16
|
+
|
|
17
|
+
return pendleStrats
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default getPendleApiData
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const pendlePoints = {
|
|
2
|
+
'0x9c73879f795cefa1d5239de08d1b6aba2d2d1434': [{ multiplier: 30, label: 'Sats Multiplier' }],
|
|
3
|
+
'0x19588f29f9402bb508007feadd415c875ee3f19f': [{ multiplier: 20, label: 'Sats Multiplier' }],
|
|
4
|
+
'0x90c98ab215498b72abfec04c651e2e496ba364c0': [
|
|
5
|
+
{ multiplier: 20, label: 'Sats Multiplier' },
|
|
6
|
+
{ multiplier: 2, label: 'Zircuit Multiplier' },
|
|
7
|
+
],
|
|
8
|
+
'0x107a2e3cd2bb9a32b9ee2e4d51143149f8367eba': [{ multiplier: 20, label: 'Sats Multiplier' }],
|
|
9
|
+
'0x7d372819240d14fb477f17b964f95f33beb4c704': [
|
|
10
|
+
{ multiplier: 3, label: 'Ether.fi Multiplier' },
|
|
11
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
12
|
+
],
|
|
13
|
+
'0xf32e58f92e60f4b0a37a69b95d642a471365eae8': [
|
|
14
|
+
{ multiplier: 2, label: 'Ether.fi Multiplier' },
|
|
15
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
16
|
+
],
|
|
17
|
+
'0xe26d7f9409581f606242300fbfe63f56789f2169': [
|
|
18
|
+
{ multiplier: 3, label: 'Ether.fi Multiplier' },
|
|
19
|
+
{ multiplier: 2, label: 'Zircuit Multiplier' },
|
|
20
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
21
|
+
],
|
|
22
|
+
'0xd8f12bcde578c653014f27379a6114f67f0e445f': [
|
|
23
|
+
{ multiplier: 4, label: 'Renzo Multiplier' },
|
|
24
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
25
|
+
],
|
|
26
|
+
'0xd7e0809998693fd87e81d51de1619fd0ee658031': [
|
|
27
|
+
{ multiplier: 1, label: 'Renzo Multiplier' },
|
|
28
|
+
{ multiplier: 2, label: 'Zircuit Multiplier' },
|
|
29
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
30
|
+
],
|
|
31
|
+
'0x4f43c77872db6ba177c270986cd30c3381af37ee': [
|
|
32
|
+
{ multiplier: 2, label: 'Kelp Multiplier' },
|
|
33
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
34
|
+
],
|
|
35
|
+
'0x445d25a1c31445fb29e65d12da8e0eea38174176': [
|
|
36
|
+
{ multiplier: 2, label: 'Kelp Multiplier' },
|
|
37
|
+
{ multiplier: 2, label: 'Zircuit Multiplier' },
|
|
38
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
39
|
+
],
|
|
40
|
+
'0xa9355a5d306c67027c54de0e5a72df76befa5694': [
|
|
41
|
+
{ multiplier: 4.5, label: 'Swell Multiplier' },
|
|
42
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
43
|
+
],
|
|
44
|
+
'0x38100a480dbed278b0fe57ba80a75498a7dc5bb1': [
|
|
45
|
+
{ multiplier: 5, label: 'Bedrock Multiplier' },
|
|
46
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
47
|
+
],
|
|
48
|
+
'0x17be998a578fd97687b24e83954fec86dc20c979': [
|
|
49
|
+
{ multiplier: 1.25, label: 'Puffer Multiplier' },
|
|
50
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
51
|
+
],
|
|
52
|
+
'0xd1d7d99764f8a52aff007b7831cc02748b2013b5': [{ multiplier: 20, label: 'Sats Multiplier' }],
|
|
53
|
+
'0xa54fc268101c8b97de19ef3141d34751a11996b2': [
|
|
54
|
+
{ multiplier: 2, label: 'Puffer Multiplier' },
|
|
55
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
56
|
+
],
|
|
57
|
+
'0xbae2df4dfcd0c613018d6056a40077f2d1eff28a': [
|
|
58
|
+
{ multiplier: 5, label: 'Bedrock Multiplier' },
|
|
59
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
60
|
+
],
|
|
61
|
+
'0xc8edd52d0502aa8b4d5c77361d4b3d300e8fc81c': [
|
|
62
|
+
{ multiplier: 2, label: 'Ether.fi Multiplier' },
|
|
63
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
64
|
+
],
|
|
65
|
+
'0xcdbd5ff3e03b6828db9c32e2131a60aba5137901': [
|
|
66
|
+
{ multiplier: 4, label: 'Renzo Multiplier' },
|
|
67
|
+
{ multiplier: 1, label: 'EigenLayer Multiplier' },
|
|
68
|
+
],
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export default pendlePoints
|
package/src/strategies/types.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export type ValidExplorer = 'etherscan.io' | 'bscscan.com' | 'arbiscan.io'
|
|
2
|
+
export type ValidChainId = 1 | 56 | 42161
|
|
3
|
+
|
|
1
4
|
export type Coin = {
|
|
2
5
|
name: string
|
|
3
6
|
symbol: string
|
|
@@ -91,7 +94,7 @@ export type RewardsData = {
|
|
|
91
94
|
|
|
92
95
|
export type Strategy = {
|
|
93
96
|
key: string
|
|
94
|
-
type
|
|
97
|
+
type?: string
|
|
95
98
|
protocol: string
|
|
96
99
|
chainId: number
|
|
97
100
|
isMetapool?: boolean
|
|
@@ -105,6 +108,7 @@ export type Strategy = {
|
|
|
105
108
|
rewards: RewardsData[]
|
|
106
109
|
name: string
|
|
107
110
|
tradingApy: number
|
|
111
|
+
gaugesProjectedApr?: any
|
|
108
112
|
underlyingApy?: number
|
|
109
113
|
minApr: number
|
|
110
114
|
maxApr: number
|
|
@@ -155,7 +159,20 @@ export type YearnGlobalData = {
|
|
|
155
159
|
fees: Fees
|
|
156
160
|
}
|
|
157
161
|
|
|
158
|
-
export type
|
|
162
|
+
export type BalancerGlobalData = {
|
|
163
|
+
totalGaugeWeights: string
|
|
164
|
+
inflationRate: string
|
|
165
|
+
balPerWeek: string
|
|
166
|
+
fees: Fees
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export type PancakeSwapGlobalData = {
|
|
170
|
+
totalAllocPoint: string
|
|
171
|
+
inflationRate: string
|
|
172
|
+
fees: Fees
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export type Global = CurveGlobalData | YearnGlobalData | BalancerGlobalData | PancakeSwapGlobalData
|
|
159
176
|
|
|
160
177
|
export type StrategyData = {
|
|
161
178
|
global?: Global
|
|
@@ -166,7 +183,7 @@ export type StrategyData = {
|
|
|
166
183
|
|
|
167
184
|
export type BuiltStrat = {
|
|
168
185
|
key: string
|
|
169
|
-
type
|
|
186
|
+
type?: string
|
|
170
187
|
protocol: string
|
|
171
188
|
chainId: number
|
|
172
189
|
isMetapool?: boolean
|
|
@@ -22,11 +22,11 @@ export const getAprBreakdown = (
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
const underlyingReward = strat.underlyingReward
|
|
25
|
-
? {
|
|
26
|
-
label: `Underlying Yield (${
|
|
27
|
-
value: [
|
|
28
|
-
}
|
|
29
|
-
: { label: '', value: [0] }
|
|
25
|
+
? strat.underlyingReward.map((sur) => ({
|
|
26
|
+
label: `Underlying Yield (${sur.symbol})`,
|
|
27
|
+
value: [sur.apy],
|
|
28
|
+
}))
|
|
29
|
+
: [{ label: '', value: [0] }]
|
|
30
30
|
|
|
31
31
|
// Current streaming APRs from the Stake DAO gauge
|
|
32
32
|
const currentAprBreakdown: Breakdown[] = rewardsData.map((r) => {
|
|
@@ -78,13 +78,13 @@ export const getAprBreakdown = (
|
|
|
78
78
|
// Compute total current APR
|
|
79
79
|
const currentTotal =
|
|
80
80
|
baseReward.value[0]! +
|
|
81
|
-
underlyingReward.value[0] +
|
|
81
|
+
underlyingReward.reduce((total: number, curr) => total + curr.value[0]!, 0) +
|
|
82
82
|
currentAprBreakdown.reduce((total: number, curr) => total + curr.value[0]!, 0)
|
|
83
83
|
|
|
84
84
|
// Compute total projected APR
|
|
85
85
|
const projectedTotal =
|
|
86
86
|
baseReward.value[0]! +
|
|
87
|
-
underlyingReward.value[0] +
|
|
87
|
+
underlyingReward.reduce((total: number, curr) => total + curr.value[0]!, 0) +
|
|
88
88
|
projectedAprBreakdown.reduce((total: number, curr) => total + curr.value[0]!, 0) +
|
|
89
89
|
cvxApr +
|
|
90
90
|
(strat.gaugesProjectedApr ? strat.gaugesProjectedApr.reduce((total: number, y: any) => total + y.apr, 0) : 0) +
|
|
@@ -93,13 +93,13 @@ export const getAprBreakdown = (
|
|
|
93
93
|
return {
|
|
94
94
|
current: {
|
|
95
95
|
total: currentTotal,
|
|
96
|
-
details: [baseReward, underlyingReward, ...currentAprBreakdown].filter((r) => r?.value[0] > 0 || false),
|
|
96
|
+
details: [baseReward, ...underlyingReward, ...currentAprBreakdown].filter((r) => r?.value[0] > 0 || false),
|
|
97
97
|
},
|
|
98
98
|
projected: {
|
|
99
99
|
total: projectedTotal,
|
|
100
100
|
details: [
|
|
101
101
|
baseReward,
|
|
102
|
-
underlyingReward,
|
|
102
|
+
...underlyingReward,
|
|
103
103
|
...projectedAprBreakdown,
|
|
104
104
|
...(strat?.gaugesProjectedApr
|
|
105
105
|
? strat.gaugesProjectedApr.map((r: any) => ({
|
|
@@ -1,9 +1,22 @@
|
|
|
1
|
-
import { parseEther } from 'viem'
|
|
1
|
+
import { decodeAbiParameters, fromBytes, hexToBytes, parseAbiParameters, parseEther } from 'viem'
|
|
2
2
|
|
|
3
3
|
export const Zero = BigInt(0)
|
|
4
4
|
export const One = BigInt(1)
|
|
5
5
|
export const OneEther = parseEther('1')
|
|
6
6
|
|
|
7
|
+
export const bytes32ToString = (bytes32: `0x${string}`) => {
|
|
8
|
+
try {
|
|
9
|
+
return decodeAbiParameters(parseAbiParameters('string'), bytes32)[0]
|
|
10
|
+
} catch {
|
|
11
|
+
return fromBytes(
|
|
12
|
+
hexToBytes(bytes32).filter((v) => v > 0),
|
|
13
|
+
'string',
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const concatBytecode = (contract: string, args: string): string => contract.concat(args.slice(2))
|
|
19
|
+
|
|
7
20
|
export * from './boost.js'
|
|
8
21
|
export * from './decodeEtherscanFactoryEvent.js'
|
|
9
22
|
export * from './sdt.js'
|
|
@@ -3,9 +3,10 @@ import { decodeAbiParameters, encodeAbiParameters, parseAbiParameters } from 'vi
|
|
|
3
3
|
|
|
4
4
|
import { contracts, tokens } from '@stake-dao/constants'
|
|
5
5
|
import type { FetchedToken, Token } from '@stake-dao/constants'
|
|
6
|
-
import { batchSdtGaugeRewards, batchTokenData, buildYearnStrats } from '../../
|
|
6
|
+
import { batchSdtGaugeRewards, batchTokenData, buildYearnStrats } from '../../bytecodes/index.js'
|
|
7
7
|
import { equalTlc, getTokenInfo } from '../../utils.js'
|
|
8
8
|
import type { BuiltStrat } from '../types.js'
|
|
9
|
+
import { concatBytecode } from '../utils/index.js'
|
|
9
10
|
|
|
10
11
|
interface VaultAndLp {
|
|
11
12
|
vault: string
|
|
@@ -26,7 +27,7 @@ export const buildYearnStrategies = async (
|
|
|
26
27
|
contracts.yearnGaugeFactory![chainId],
|
|
27
28
|
inputArgs,
|
|
28
29
|
])
|
|
29
|
-
const contractCreationCode = buildYearnStrats.bytecode![chainId]
|
|
30
|
+
const contractCreationCode = concatBytecode(buildYearnStrats.bytecode![chainId]!, inputData)
|
|
30
31
|
const returnedData = await provider.call({
|
|
31
32
|
data: contractCreationCode,
|
|
32
33
|
})
|
|
@@ -75,7 +76,7 @@ export const buildYearnStrategies = async (
|
|
|
75
76
|
const inputData = encodeAbiParameters(parseAbiParameters(batchTokenData.inputType[chainId] || []) as any, [
|
|
76
77
|
inputArgs,
|
|
77
78
|
])
|
|
78
|
-
const contractCreationCode = batchTokenData.bytecode[chainId]
|
|
79
|
+
const contractCreationCode = concatBytecode(batchTokenData.bytecode[chainId]!, inputData)
|
|
79
80
|
const returnedData = await provider.call({
|
|
80
81
|
data: contractCreationCode,
|
|
81
82
|
})
|
|
@@ -98,7 +99,7 @@ export const buildYearnStrategies = async (
|
|
|
98
99
|
const inputData = encodeAbiParameters(parseAbiParameters(batchSdtGaugeRewards.inputType[chainId] || []) as any, [
|
|
99
100
|
inputArgs,
|
|
100
101
|
])
|
|
101
|
-
const contractCreationCode = batchSdtGaugeRewards.bytecode[chainId]
|
|
102
|
+
const contractCreationCode = concatBytecode(batchSdtGaugeRewards.bytecode[chainId]!, inputData)
|
|
102
103
|
const returnedData = await provider.call({
|
|
103
104
|
data: contractCreationCode,
|
|
104
105
|
})
|
|
@@ -2,9 +2,10 @@ import { chunk } from 'lodash-es'
|
|
|
2
2
|
import { encodeAbiParameters, parseAbiParameters } from 'viem'
|
|
3
3
|
|
|
4
4
|
import { contracts } from '@stake-dao/constants'
|
|
5
|
-
import { fetchYearnGauges } from '../../../
|
|
5
|
+
import { fetchYearnGauges } from '../../../bytecodes/index.js'
|
|
6
6
|
import { batchJsonRpc, multicall } from '../../../utils.js'
|
|
7
7
|
import multicallYearnStratsAbi from '../../utils/abis/MulticallYearnStratsAbi.json'
|
|
8
|
+
import { concatBytecode } from '../../utils/index.js'
|
|
8
9
|
import { computeYearnApr } from './computeYearnApr.js'
|
|
9
10
|
|
|
10
11
|
const SKIP = '8'
|
|
@@ -36,11 +37,11 @@ export const fetchAllYearnGauges = async (
|
|
|
36
37
|
])
|
|
37
38
|
|
|
38
39
|
const decodedPromises = await batchJsonRpc({
|
|
39
|
-
calls: [fetchYearnGauges.bytecode[chainId]
|
|
40
|
+
calls: [concatBytecode(fetchYearnGauges.bytecode[chainId]!, inputData)],
|
|
40
41
|
outputTypeAbi: fetchYearnGauges.outputType![chainId]!,
|
|
41
42
|
rpc,
|
|
42
43
|
parse: false,
|
|
43
|
-
callsKey: `
|
|
44
|
+
callsKey: `strategies/yearn/fetch/fetchAllYearnGauges.ts: fetchAllYearnGauges - chainId ${chainId} - rpc ${rpc}`,
|
|
44
45
|
})
|
|
45
46
|
const decodedResult = decodedPromises[0]?.yearnStrats || []
|
|
46
47
|
|
|
@@ -11,7 +11,7 @@ import { computeYearnApr } from './computeYearnApr.js'
|
|
|
11
11
|
|
|
12
12
|
import { contracts } from '@stake-dao/constants'
|
|
13
13
|
import type { Price } from '../../../prices.js'
|
|
14
|
-
import type { RewardsData, StrategyData } from '../../types.js'
|
|
14
|
+
import type { RewardsData, StrategyData, ValidChainId, ValidExplorer } from '../../types.js'
|
|
15
15
|
import { getAprBreakdown } from '../../utils/getAprBreakdown.js'
|
|
16
16
|
import { type SdtEmissionData, decodeNewFactoryEvent, getSdtApr } from '../../utils/index.js'
|
|
17
17
|
import { fetchAllYearnGauges } from './fetchAllYearnGauges.js'
|
|
@@ -46,16 +46,27 @@ const calls = (
|
|
|
46
46
|
const callsForRewards = (gauge: string, rewards: any[]) =>
|
|
47
47
|
rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] }))
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
prices: Price[]
|
|
51
|
-
provider: any
|
|
52
|
-
rpc: string
|
|
53
|
-
explorerApiKey: string
|
|
54
|
-
explorer:
|
|
55
|
-
chainId:
|
|
56
|
-
lastBlockNumber: number
|
|
57
|
-
sdtEmissionData: SdtEmissionData
|
|
58
|
-
|
|
49
|
+
interface TFetchYearn {
|
|
50
|
+
prices: Price[]
|
|
51
|
+
provider: any
|
|
52
|
+
rpc: string
|
|
53
|
+
explorerApiKey: string
|
|
54
|
+
explorer: ValidExplorer
|
|
55
|
+
chainId: ValidChainId
|
|
56
|
+
lastBlockNumber: number
|
|
57
|
+
sdtEmissionData: SdtEmissionData
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const fetchYearn = async ({
|
|
61
|
+
prices,
|
|
62
|
+
provider,
|
|
63
|
+
rpc,
|
|
64
|
+
explorerApiKey,
|
|
65
|
+
explorer,
|
|
66
|
+
chainId,
|
|
67
|
+
lastBlockNumber,
|
|
68
|
+
sdtEmissionData,
|
|
69
|
+
}: TFetchYearn): Promise<StrategyData> => {
|
|
59
70
|
const dYfiPrice = prices.find((p) => p.symbol === 'dYFI')?.usdPrice || 0
|
|
60
71
|
const stratsCalls: any[] = []
|
|
61
72
|
const rewardsCalls: any[] = []
|