@stake-dao/reader 0.1.3 → 0.2.0
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/{batches → bytecodes/strategies}/sdtGaugeRewards.js +1 -1
- 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/endpoints.js +1 -0
- package/dist/esm/endpoints.js.map +1 -1
- package/dist/esm/index.js +33 -5
- 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 +51 -0
- package/dist/esm/strategies/balancer/build.js.map +1 -0
- package/dist/esm/strategies/balancer/endpoints.js +27 -0
- package/dist/esm/strategies/balancer/endpoints.js.map +1 -0
- 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 -3
- 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/endpoints.d.ts +1 -0
- package/dist/types/endpoints.d.ts.map +1 -1
- package/dist/types/index.d.ts +15 -5
- 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 +21 -0
- package/dist/types/strategies/balancer/build.d.ts.map +1 -0
- package/dist/types/strategies/balancer/endpoints.d.ts +3 -0
- package/dist/types/strategies/balancer/endpoints.d.ts.map +1 -0
- 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 +2 -2
- 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 +3 -2
- package/src/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.ts +6 -2
- package/src/strategies/curve/fetch/curveApiData/getGaugesWeights.ts +2 -1
- package/src/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.ts +2 -1
- package/src/strategies/curve/fetch/index.ts +53 -15
- package/src/strategies/curve/httpCalls.ts +3 -3
- package/src/strategies/curve/onChainCalls.ts +3 -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 +348 -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 +3 -2
- package/src/strategies/yearn/fetch/index.ts +22 -11
- package/src/utils.ts +1 -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 -6
- 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/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 -6
- 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/src/batches/index.ts +0 -5
- /package/dist/esm/{batches → bytecodes/strategies}/fetchYearnGauges.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,48 @@
|
|
|
1
|
+
import { decodeAbiParameters, encodeAbiParameters, parseAbiParameters, zeroAddress } from 'viem';
|
|
2
|
+
import { contracts, tokenWithId } from '@stake-dao/constants';
|
|
3
|
+
import { range } from 'lodash-es';
|
|
4
|
+
import { buildPancakeSwapStrats } from '../../bytecodes/index.js';
|
|
5
|
+
import { batchJsonRpc, rpcCall } from '../../utils.js';
|
|
6
|
+
import { concatBytecode } from '../utils/index.js';
|
|
7
|
+
import { PCS_POOLS_CHUNK_SIZE } from './config.js';
|
|
8
|
+
export const buildPancakeSwapStrategies = async (rpc, chainId) => {
|
|
9
|
+
const cake = tokenWithId('cake', chainId);
|
|
10
|
+
const cakeReward = { name: cake.name, symbol: cake.symbol, address: cake.address, decimals: cake.decimals };
|
|
11
|
+
const nPoolsRequest = await rpcCall(rpc, [{ to: contracts.pancakeMasterchef[chainId], data: '0x081e3eda' }]); // poolLength()
|
|
12
|
+
const nPools = Number(decodeAbiParameters([{ type: 'uint256', name: 'n_gauges' }], nPoolsRequest[0].result));
|
|
13
|
+
const poolsCalls = range(0, nPools, PCS_POOLS_CHUNK_SIZE).map((skip) => {
|
|
14
|
+
const inputParams = [
|
|
15
|
+
contracts.pancakeMasterchef[chainId],
|
|
16
|
+
skip,
|
|
17
|
+
skip + PCS_POOLS_CHUNK_SIZE > nPools ? nPools : skip + PCS_POOLS_CHUNK_SIZE,
|
|
18
|
+
];
|
|
19
|
+
const inputData = encodeAbiParameters(parseAbiParameters(buildPancakeSwapStrats.inputType[chainId]), inputParams);
|
|
20
|
+
return concatBytecode(buildPancakeSwapStrats.bytecode[chainId], inputData);
|
|
21
|
+
});
|
|
22
|
+
const pools = await batchJsonRpc({
|
|
23
|
+
rpc,
|
|
24
|
+
calls: poolsCalls,
|
|
25
|
+
outputTypeAbi: buildPancakeSwapStrats.outputTypeHr[chainId],
|
|
26
|
+
callsKey: `Fetch PancakeSwap Pools From Masterchef on chain ${chainId}`,
|
|
27
|
+
});
|
|
28
|
+
return pools
|
|
29
|
+
.filter((d) => d.pool !== zeroAddress)
|
|
30
|
+
.map((data) => {
|
|
31
|
+
return {
|
|
32
|
+
key: `${chainId}-${data.id}`,
|
|
33
|
+
poolId: Number(data.id),
|
|
34
|
+
protocol: 'pancakeswap',
|
|
35
|
+
chainId,
|
|
36
|
+
pool: data.pool,
|
|
37
|
+
fee: data.fee,
|
|
38
|
+
coins: data.coins.map((c) => ({
|
|
39
|
+
name: c._name,
|
|
40
|
+
symbol: c._symbol,
|
|
41
|
+
address: c._address,
|
|
42
|
+
decimals: Number(c._decimals),
|
|
43
|
+
})),
|
|
44
|
+
rewards: [cakeReward],
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../src/strategies/pancakeswap/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { chunk } from 'lodash-es';
|
|
2
|
+
import { encodeAbiParameters, parseAbiParameters } from 'viem';
|
|
3
|
+
import { buildPancakeSwapErc20Strats } from '../../bytecodes/index.js';
|
|
4
|
+
import { batchJsonRpc } from '../../utils.js';
|
|
5
|
+
import { bytes32ToString, concatBytecode } from '../utils/index.js';
|
|
6
|
+
import { BROKEN_VAULT, PCS_POOLS_ERC20_CHUNK_SIZE } from './config.js';
|
|
7
|
+
export const buildPancakeSwapErc20Strategies = async (stratsList, rpc, chainId) => {
|
|
8
|
+
const inputArgsChunks = chunk(stratsList, PCS_POOLS_ERC20_CHUNK_SIZE);
|
|
9
|
+
const poolsCalls = inputArgsChunks.map((poolsArgs) => {
|
|
10
|
+
const inputData = encodeAbiParameters(parseAbiParameters(buildPancakeSwapErc20Strats.inputType[chainId]), [
|
|
11
|
+
poolsArgs,
|
|
12
|
+
]);
|
|
13
|
+
return concatBytecode(buildPancakeSwapErc20Strats.bytecode[chainId], inputData);
|
|
14
|
+
});
|
|
15
|
+
const pools = await batchJsonRpc({
|
|
16
|
+
rpc,
|
|
17
|
+
calls: poolsCalls,
|
|
18
|
+
outputTypeAbi: buildPancakeSwapErc20Strats.outputTypeHr[chainId],
|
|
19
|
+
callsKey: `Fetch PancakeSwap Erc20 Pools From Masterchef on chain ${chainId}`,
|
|
20
|
+
});
|
|
21
|
+
return pools
|
|
22
|
+
.map((data) => {
|
|
23
|
+
const coins = data.coins.map((c) => ({
|
|
24
|
+
name: bytes32ToString(c._name),
|
|
25
|
+
symbol: bytes32ToString(c._symbol),
|
|
26
|
+
address: c._address,
|
|
27
|
+
decimals: Number(c._decimals),
|
|
28
|
+
}));
|
|
29
|
+
const lpName = bytes32ToString(data.lpToken._name);
|
|
30
|
+
const isStable = lpName.includes('StableSwap');
|
|
31
|
+
const isMetapool = coins.some((c) => c.name.includes(' LPs'));
|
|
32
|
+
const lpSymbol = `${coins.map((c) => c.symbol).join('-')} ${isStable ? 'Stable LP' : 'LP'}`;
|
|
33
|
+
if (!BROKEN_VAULT[chainId].includes(data.vault)) {
|
|
34
|
+
return {
|
|
35
|
+
key: `${data.manager.toLowerCase()}-${coins.map((c) => c.symbol.toLowerCase()).join('-')}`,
|
|
36
|
+
protocol: 'pancakeswap',
|
|
37
|
+
chainId,
|
|
38
|
+
isMetapool,
|
|
39
|
+
isStable,
|
|
40
|
+
manager: data.manager,
|
|
41
|
+
pool: data.pool,
|
|
42
|
+
gaugeAddress: data.gauge,
|
|
43
|
+
vault: data.vault,
|
|
44
|
+
lpToken: {
|
|
45
|
+
name: lpName,
|
|
46
|
+
symbol: lpSymbol,
|
|
47
|
+
address: data.lpToken._address,
|
|
48
|
+
decimals: Number(data.lpToken._decimals),
|
|
49
|
+
},
|
|
50
|
+
coins,
|
|
51
|
+
rewards: data.rewards.map((r) => ({
|
|
52
|
+
name: r._name,
|
|
53
|
+
symbol: r._symbol,
|
|
54
|
+
address: r._address,
|
|
55
|
+
decimals: Number(r._decimals),
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
})
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=buildErc20.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildErc20.js","sourceRoot":"","sources":["../../../../src/strategies/pancakeswap/buildErc20.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const PCS_POOLS_CHUNK_SIZE = 30;
|
|
2
|
+
export const PCS_POOLS_ERC20_CHUNK_SIZE = 10;
|
|
3
|
+
export const PCS_POOLS_NOT_DEPLOYED_CHUNK_SIZE = 10;
|
|
4
|
+
export const BROKEN_VAULT = {
|
|
5
|
+
56: ['0xBf94E99cAF355BdEb3Fbb172449EC6E933E7B3Ec'],
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/strategies/pancakeswap/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAA;AACtC,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAA;AAC5C,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAA;AAEnD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,EAAE,EAAE,CAAC,4CAA4C,CAAC;CACnD,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const CHAINS_DENOMINATOR = {
|
|
2
|
+
1: 'ethereum',
|
|
3
|
+
56: 'bsc',
|
|
4
|
+
42161: 'arbitrum',
|
|
5
|
+
};
|
|
6
|
+
export const PANCAKESWAP_FEE_URL = (version, chainId) => {
|
|
7
|
+
return `https://explorer-api.pancakeswap.com/cached/pools/apr/${version}/${CHAINS_DENOMINATOR[chainId]}/farms-lp`;
|
|
8
|
+
};
|
|
9
|
+
export const MANAGER_FEES_ENDPOINT = 'https://raw.githubusercontent.com/stake-dao/votemarket-data/main/tvls/pancakeManagersFees.json';
|
|
10
|
+
//# sourceMappingURL=endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../../src/strategies/pancakeswap/endpoints.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,CAAC,EAAE,UAAU;IACb,EAAE,EAAE,KAAK;IACT,KAAK,EAAE,UAAU;CAClB,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;IACtE,OAAO,yDAAyD,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAChC,gGAAgG,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { bsc } from 'viem/chains';
|
|
2
|
+
import { MANAGER_FEES_ENDPOINT, PANCAKESWAP_FEE_URL } from '../endpoints.js';
|
|
3
|
+
export const getPancakeSwapManagerFeesAPR = async (chainId) => {
|
|
4
|
+
if (chainId !== bsc.id)
|
|
5
|
+
return {};
|
|
6
|
+
const data = await (await fetch(MANAGER_FEES_ENDPOINT)).json();
|
|
7
|
+
const res = {};
|
|
8
|
+
for (const d of data) {
|
|
9
|
+
res[d.lpAddress.toLowerCase()] = {
|
|
10
|
+
token0: d.token0,
|
|
11
|
+
token1: d.token1,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return res;
|
|
15
|
+
};
|
|
16
|
+
export const getPancakeSwapFeesAPR = async (chainId) => {
|
|
17
|
+
const [v2TradingFees, stableTradingFees, v3TradingFees] = await Promise.all([
|
|
18
|
+
(await fetch(PANCAKESWAP_FEE_URL('v2', chainId))).json(),
|
|
19
|
+
(await fetch(PANCAKESWAP_FEE_URL('stable', chainId))).json(),
|
|
20
|
+
(await fetch(PANCAKESWAP_FEE_URL('v3', chainId))).json(),
|
|
21
|
+
]);
|
|
22
|
+
return { ...v2TradingFees, ...stableTradingFees, ...v3TradingFees };
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=getPancakeApisData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPancakeApisData.js","sourceRoot":"","sources":["../../../../../src/strategies/pancakeswap/fetch/getPancakeApisData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAM5E,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,EAAE,OAAe,EAA+B,EAAE;IACjG,IAAI,OAAO,KAAK,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,CAAA;IAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9D,MAAM,GAAG,GAAuB,EAAE,CAAA;IAElC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG;YAC/B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAA;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IAC7D,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1E,CAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QACxD,CAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC5D,CAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KACzD,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,iBAAiB,EAAE,GAAG,aAAa,EAAE,CAAA;AACrE,CAAC,CAAA"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem';
|
|
2
|
+
import { batchPancakeSwapErc20Strats } from '../../../bytecodes/index.js';
|
|
3
|
+
import { buildPancakeSwapErc20Strategies } from '../buildErc20.js';
|
|
4
|
+
import { ONE_YEAR, STRAT_FEES, contracts, pancakeswapErc20Strats, tokenWithId } from '@stake-dao/constants';
|
|
5
|
+
import { concatBytecode, decodeNewFactoryEvent } from '../../../index.js';
|
|
6
|
+
import { mergePrices } from '../../../prices.js';
|
|
7
|
+
import { batchJsonRpc, equalTlc } from '../../../utils.js';
|
|
8
|
+
import { getAprBreakdown } from '../../utils/getAprBreakdown.js';
|
|
9
|
+
export const getPancakeErc20Vaults = async (rpc, chainId, basePrices, feesApr, managerFees, events) => {
|
|
10
|
+
const oldVaultsAndLp = pancakeswapErc20Strats.strats[chainId];
|
|
11
|
+
const newVaultsAndLp = decodeNewFactoryEvent(events).map((e) => ({ vault: e.vault, lpToken: e.lpToken }));
|
|
12
|
+
const vaultsAndLp = oldVaultsAndLp.concat(newVaultsAndLp);
|
|
13
|
+
const poolsErc20 = vaultsAndLp.length > 0
|
|
14
|
+
? await buildPancakeSwapErc20Strategies(oldVaultsAndLp.concat(newVaultsAndLp), rpc, chainId)
|
|
15
|
+
: [];
|
|
16
|
+
if (poolsErc20.length > 0) {
|
|
17
|
+
const poolsErc20Info = poolsErc20.map((p) => ({ lp: p.lpToken.address, wrapper: p.gaugeAddress, vault: p.vault }));
|
|
18
|
+
const pricesToFetch = poolsErc20
|
|
19
|
+
.flatMap((p) => p.coins.map((c) => {
|
|
20
|
+
const coinPrice = basePrices.find((bp) => equalTlc(bp.address, c.address))?.usdPrice || 0;
|
|
21
|
+
return coinPrice === 0 ? { address: c.address, symbol: c.symbol } : undefined;
|
|
22
|
+
}))
|
|
23
|
+
.filter(Boolean);
|
|
24
|
+
const prices = await mergePrices(basePrices, pricesToFetch, chainId);
|
|
25
|
+
const cake = tokenWithId('cake', chainId);
|
|
26
|
+
const cakePriceUsd = prices.find((p) => equalTlc(p.address, cake.address))?.usdPrice || 0;
|
|
27
|
+
const poolsErc20InputData = encodeAbiParameters(parseAbiParameters(batchPancakeSwapErc20Strats.inputType[chainId]), [contracts.cakeLocker[chainId], poolsErc20Info]);
|
|
28
|
+
const poolsErc20Calls = concatBytecode(batchPancakeSwapErc20Strats.bytecode[chainId], poolsErc20InputData);
|
|
29
|
+
const decodedPromiseErc20 = await batchJsonRpc({
|
|
30
|
+
rpc,
|
|
31
|
+
calls: [poolsErc20Calls],
|
|
32
|
+
outputTypeAbi: batchPancakeSwapErc20Strats.outputTypeHr[chainId],
|
|
33
|
+
callsKey: `fetchPancakeSwapErc20-poolsInfo chainId ${chainId}`,
|
|
34
|
+
});
|
|
35
|
+
const parsedStratsErc20 = poolsErc20.map((strat, index) => {
|
|
36
|
+
const stratParsedData = decodedPromiseErc20[0].stratsData[index];
|
|
37
|
+
const token0PriceInUsd = prices.find((p) => equalTlc(p.address, strat.coins[0].address))?.usdPrice || 0;
|
|
38
|
+
const token1PriceInUsd = prices.find((p) => equalTlc(p.address, strat.coins[1].address))?.usdPrice || 0;
|
|
39
|
+
const lpPriceInUsd = Number(formatUnits(stratParsedData.token0PerShare, strat.coins[0].decimals)) * token0PriceInUsd +
|
|
40
|
+
Number(formatUnits(stratParsedData.token1PerShare, strat.coins[1].decimals)) * token1PriceInUsd;
|
|
41
|
+
const totalSupply = formatUnits(stratParsedData.sharesDeposited, 18);
|
|
42
|
+
const tvl = lpPriceInUsd * Number(totalSupply);
|
|
43
|
+
const tvlTotal = lpPriceInUsd * Number(formatUnits(stratParsedData.sharesTotalSupply, 18));
|
|
44
|
+
let tradingApy = Number(feesApr[strat.lpToken.address.toLowerCase()]?.apr7d || 0);
|
|
45
|
+
if (!tradingApy && managerFees[strat.pool.toLowerCase()]) {
|
|
46
|
+
const feesData = managerFees[strat.pool.toLowerCase()];
|
|
47
|
+
tradingApy = feesData
|
|
48
|
+
? ((Number(formatUnits(feesData.token0, strat.coins[0].decimals)) * token0PriceInUsd +
|
|
49
|
+
Number(formatUnits(feesData.token1, strat.coins[1].decimals)) * token1PriceInUsd) /
|
|
50
|
+
tvlTotal) *
|
|
51
|
+
365 *
|
|
52
|
+
100
|
|
53
|
+
: 0;
|
|
54
|
+
}
|
|
55
|
+
const boost = Number(formatUnits(stratParsedData.boost, 0)) / Number(formatUnits(stratParsedData.boostPrecision, 0)) ||
|
|
56
|
+
(strat.manager === 'pancakeswap' ? 2.5 : 3); // Pancake max boost is 2.5, managers farm is 3
|
|
57
|
+
const rewardPerYear = cakePriceUsd * Number(formatUnits(stratParsedData.rewardPerSecond, 18)) * ONE_YEAR;
|
|
58
|
+
const farmApr = tvl > 0
|
|
59
|
+
? ((rewardPerYear *
|
|
60
|
+
(Number(formatUnits(stratParsedData.boostedSharesDeposited, 0)) /
|
|
61
|
+
Number(formatUnits(stratParsedData.boostedSharesTotalSupply, 0)))) /
|
|
62
|
+
tvl) *
|
|
63
|
+
((100 - STRAT_FEES + 0.5) / 100)
|
|
64
|
+
: (rewardPerYear / tvlTotal) * boost;
|
|
65
|
+
const rewardsData = stratParsedData.sdRewardsData.map((r, index) => {
|
|
66
|
+
const rewardToken = strat.rewards[index];
|
|
67
|
+
const rewardPrice = prices.find((p) => equalTlc(p.symbol, rewardToken.symbol));
|
|
68
|
+
const periodFinish = Number(formatUnits(r.period_finish, 0));
|
|
69
|
+
const streaming = periodFinish > Math.floor(Date.now() / 1000);
|
|
70
|
+
const rewardApr = streaming && rewardPrice && tvl > 0
|
|
71
|
+
? (Number(formatUnits(r.rate * BigInt(ONE_YEAR), 18)) * rewardPrice.usdPrice) /
|
|
72
|
+
tvl /
|
|
73
|
+
(equalTlc(rewardToken.symbol, 'SDT') ? 2.5 : 1)
|
|
74
|
+
: 0;
|
|
75
|
+
return {
|
|
76
|
+
token: rewardToken,
|
|
77
|
+
price: rewardPrice ? rewardPrice.usdPrice : 0,
|
|
78
|
+
apr: rewardApr * 100,
|
|
79
|
+
streaming,
|
|
80
|
+
periodFinish,
|
|
81
|
+
rate: formatUnits(r.rate, 0),
|
|
82
|
+
lastUpdate: formatUnits(r.last_update, 0),
|
|
83
|
+
claimablePendingRewards: rewardToken.symbol === 'CAKE' ? formatUnits(stratParsedData.claimablePendingRewards, 0) : '0',
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
const apr = getAprBreakdown({ ...strat, minApr: (farmApr / boost) * 100, tradingApy }, rewardsData, boost, undefined);
|
|
87
|
+
const name = strat.coins.reduce((res, current) => `${res}/${current.symbol}`, '').slice(1);
|
|
88
|
+
const subname = strat.manager === 'pancakeswap' ? (strat.lpToken.symbol.includes('Stable LP') ? 'Stable' : 'v2') : strat.manager;
|
|
89
|
+
const version = strat.manager === 'pancakeswap'
|
|
90
|
+
? strat.lpToken.symbol.includes('Stable LP')
|
|
91
|
+
? 'stable'
|
|
92
|
+
: '2'
|
|
93
|
+
: strat.manager.toLowerCase();
|
|
94
|
+
const sdGauge = {
|
|
95
|
+
address: strat.sdGauge,
|
|
96
|
+
totalSupply: formatUnits(stratParsedData.sharesDeposited, 0),
|
|
97
|
+
relativeWeight: '0',
|
|
98
|
+
weight: '0',
|
|
99
|
+
futureWeight: '0',
|
|
100
|
+
workingSupply: '0',
|
|
101
|
+
};
|
|
102
|
+
return {
|
|
103
|
+
key: strat.key,
|
|
104
|
+
name,
|
|
105
|
+
subname,
|
|
106
|
+
protocol: strat.protocol,
|
|
107
|
+
version,
|
|
108
|
+
chainId: strat.chainId,
|
|
109
|
+
isMetapool: strat.isMetapool,
|
|
110
|
+
isStable: strat.isStable,
|
|
111
|
+
vault: strat.vault,
|
|
112
|
+
lpToken: strat.lpToken,
|
|
113
|
+
gaugeAddress: strat.gaugeAddress,
|
|
114
|
+
pool: strat.pool,
|
|
115
|
+
manager: strat.manager,
|
|
116
|
+
coins: strat.coins,
|
|
117
|
+
sdGauge,
|
|
118
|
+
lpPriceInUsd,
|
|
119
|
+
tvl,
|
|
120
|
+
apr: { ...apr, boost },
|
|
121
|
+
rewards: rewardsData,
|
|
122
|
+
// Base APR data
|
|
123
|
+
tradingApy,
|
|
124
|
+
minApr: (farmApr / boost) * 100,
|
|
125
|
+
maxApr: (farmApr / boost) * (strat.manager === 'pancakeswap' ? 2.5 : 3) * 100,
|
|
126
|
+
// Raw data
|
|
127
|
+
totalSupply: formatUnits(stratParsedData.sharesDeposited, 0),
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
return parsedStratsErc20;
|
|
131
|
+
}
|
|
132
|
+
return [];
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=getPancakeErc20Vaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPancakeErc20Vaults.js","sourceRoot":"","sources":["../../../../../src/strategies/pancakeswap/fetch/getPancakeErc20Vaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ONE_YEAR, STRAT_FEES, contracts, tokenWithId } from '@stake-dao/constants';
|
|
2
|
+
import { decodeAbiParameters, encodeAbiParameters, formatUnits, parseAbiParameters, zeroAddress } from 'viem';
|
|
3
|
+
import { range } from 'lodash-es';
|
|
4
|
+
import { buildPancakeswapNotDeployedErc20Strats } from '../../../bytecodes/index.js';
|
|
5
|
+
import { bytes32ToString, concatBytecode } from '../../../index.js';
|
|
6
|
+
import { mergePrices } from '../../../prices.js';
|
|
7
|
+
import { batchJsonRpc, equalTlc, rpcCall } from '../../../utils.js';
|
|
8
|
+
import { PCS_POOLS_NOT_DEPLOYED_CHUNK_SIZE } from '../config.js';
|
|
9
|
+
export const getPancakeNotDeployed = async (rpc, chainId, basePrices, feesApr, managerFees, deployedLp) => {
|
|
10
|
+
const poolLengthRequest = await rpcCall(rpc, [{ to: contracts.pancakeFarmBooster[chainId], data: '0x081e3eda' }]); // poolLength()
|
|
11
|
+
const poolLength = Number(decodeAbiParameters([{ type: 'uint256', name: 'n_gauges' }], poolLengthRequest[0].result)) + 1;
|
|
12
|
+
const notDeployedCalls = range(1, poolLength, PCS_POOLS_NOT_DEPLOYED_CHUNK_SIZE).map((skip) => {
|
|
13
|
+
const inputParams = [
|
|
14
|
+
contracts.pancakeFarmBooster[chainId],
|
|
15
|
+
skip,
|
|
16
|
+
skip + PCS_POOLS_NOT_DEPLOYED_CHUNK_SIZE > poolLength ? poolLength : skip + PCS_POOLS_NOT_DEPLOYED_CHUNK_SIZE,
|
|
17
|
+
];
|
|
18
|
+
const inputData = encodeAbiParameters(parseAbiParameters(buildPancakeswapNotDeployedErc20Strats.inputType[chainId]), inputParams);
|
|
19
|
+
return concatBytecode(buildPancakeswapNotDeployedErc20Strats.bytecode[chainId], inputData);
|
|
20
|
+
});
|
|
21
|
+
const notDeployedData = await batchJsonRpc({
|
|
22
|
+
rpc,
|
|
23
|
+
calls: notDeployedCalls,
|
|
24
|
+
outputTypeAbi: buildPancakeswapNotDeployedErc20Strats.outputTypeHr[chainId],
|
|
25
|
+
callsKey: `fetchPancakeSwap-notDeployed chainId ${chainId}`,
|
|
26
|
+
});
|
|
27
|
+
const pricesToFetch = notDeployedData
|
|
28
|
+
.flatMap((d) => {
|
|
29
|
+
if (d.lpToken._address === zeroAddress || deployedLp.includes(d.lpToken._address))
|
|
30
|
+
return undefined;
|
|
31
|
+
return d.coins.map((c) => {
|
|
32
|
+
const coinPrice = basePrices.find((bp) => equalTlc(bp.address, c._address))?.usdPrice || 0;
|
|
33
|
+
return coinPrice === 0 ? { address: c._address, symbol: bytes32ToString(c._symbol) } : undefined;
|
|
34
|
+
});
|
|
35
|
+
})
|
|
36
|
+
.filter(Boolean);
|
|
37
|
+
const prices = await mergePrices(basePrices, pricesToFetch, chainId);
|
|
38
|
+
const cake = tokenWithId('cake', chainId);
|
|
39
|
+
const cakeReward = { name: cake.name, symbol: cake.symbol, address: cake.address, decimals: cake.decimals };
|
|
40
|
+
const cakePriceUsd = prices.find((p) => equalTlc(p.address, cake.address))?.usdPrice || 0;
|
|
41
|
+
// TODO type
|
|
42
|
+
const notDeployed = notDeployedData
|
|
43
|
+
.map((d) => {
|
|
44
|
+
if (d.lpToken._address === zeroAddress || deployedLp.includes(d.lpToken._address))
|
|
45
|
+
return undefined;
|
|
46
|
+
const coins = d.coins.map((c) => ({
|
|
47
|
+
name: bytes32ToString(c._name),
|
|
48
|
+
symbol: bytes32ToString(c._symbol),
|
|
49
|
+
address: c._address,
|
|
50
|
+
decimals: Number(c._decimals),
|
|
51
|
+
}));
|
|
52
|
+
const lpName = bytes32ToString(d.lpToken._name);
|
|
53
|
+
const isStable = lpName.includes('StableSwap');
|
|
54
|
+
const isMetapool = coins.some((c) => c.name.includes(' LPs'));
|
|
55
|
+
const lpSymbol = `${coins.map((c) => c.symbol).join('-')} ${isStable ? 'Stable LP' : 'LP'}`;
|
|
56
|
+
const lpToken = {
|
|
57
|
+
name: lpName,
|
|
58
|
+
symbol: lpSymbol,
|
|
59
|
+
address: d.lpToken._address,
|
|
60
|
+
decimals: Number(d.lpToken._decimals),
|
|
61
|
+
};
|
|
62
|
+
const token0PriceInUsd = prices.find((p) => equalTlc(p.address, coins[0].address))?.usdPrice || 0;
|
|
63
|
+
const token1PriceInUsd = prices.find((p) => equalTlc(p.address, coins[1].address))?.usdPrice || 0;
|
|
64
|
+
const lpPriceInUsd = Number(formatUnits(d.token0PerShare, coins[0].decimals)) * token0PriceInUsd +
|
|
65
|
+
Number(formatUnits(d.token1PerShare, coins[1].decimals)) * token1PriceInUsd;
|
|
66
|
+
const tvl = lpPriceInUsd * Number(formatUnits(d.sharesTotalSupply, 18));
|
|
67
|
+
let tradingApy = Number(feesApr[lpToken.address.toLowerCase()]?.apr7d || 0);
|
|
68
|
+
if (!tradingApy && managerFees[d.pool.toLowerCase()]) {
|
|
69
|
+
const feesData = managerFees[d.pool.toLowerCase()];
|
|
70
|
+
tradingApy = feesData
|
|
71
|
+
? ((Number(formatUnits(feesData.token0, coins[0].decimals)) * token0PriceInUsd +
|
|
72
|
+
Number(formatUnits(feesData.token1, coins[1].decimals)) * token1PriceInUsd) /
|
|
73
|
+
tvl) *
|
|
74
|
+
365 *
|
|
75
|
+
100
|
|
76
|
+
: 0;
|
|
77
|
+
}
|
|
78
|
+
const boost = d.manager === 'pancakeswap' ? 2.5 : 3; // Pancake max boost is 2.5, managers farm is 3
|
|
79
|
+
const rewardPerYear = cakePriceUsd * Number(formatUnits(d.rewardPerSecond, 18)) * ONE_YEAR;
|
|
80
|
+
const stakedTvl = lpPriceInUsd * Number(formatUnits(d.stakedInGauge, 18));
|
|
81
|
+
const minApr = (rewardPerYear / (stakedTvl > 0 ? stakedTvl : tvl)) * ((100 - STRAT_FEES + 0.5) / 100);
|
|
82
|
+
const maxApr = minApr * boost;
|
|
83
|
+
return {
|
|
84
|
+
key: `${d.manager.toLowerCase()}-${coins.map((c) => c.symbol.toLowerCase()).join('-')}`,
|
|
85
|
+
protocol: 'pancakeswap',
|
|
86
|
+
chainId,
|
|
87
|
+
isMetapool,
|
|
88
|
+
isStable,
|
|
89
|
+
manager: d.manager,
|
|
90
|
+
pool: d.pool,
|
|
91
|
+
gaugeAddress: d.gagaugeAddressuge,
|
|
92
|
+
lpToken,
|
|
93
|
+
coins,
|
|
94
|
+
minApr,
|
|
95
|
+
maxApr,
|
|
96
|
+
rewards: [cakeReward],
|
|
97
|
+
};
|
|
98
|
+
})
|
|
99
|
+
.filter(Boolean);
|
|
100
|
+
return notDeployed;
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=getPancakeNotDeployed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPancakeNotDeployed.js","sourceRoot":"","sources":["../../../../../src/strategies/pancakeswap/fetch/getPancakeNotDeployed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { chunk } from 'lodash-es';
|
|
2
|
+
import { encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem';
|
|
3
|
+
import { batchPancakeSwapPositions, batchPancakeSwapStrats } from '../../../bytecodes/index.js';
|
|
4
|
+
import { getFarmApr } from './pancakeswapMath.js';
|
|
5
|
+
import { STRAT_FEES, contracts, tokenWithId } from '@stake-dao/constants';
|
|
6
|
+
import { buildPancakeSwapStrategies, concatBytecode } from '../../../index.js';
|
|
7
|
+
import { mergePrices } from '../../../prices.js';
|
|
8
|
+
import { batchJsonRpc, equalTlc } from '../../../utils.js';
|
|
9
|
+
import { getAprBreakdown } from '../../utils/getAprBreakdown.js';
|
|
10
|
+
import { computePositionData } from './pancakePositions.js';
|
|
11
|
+
// NOTE: Need to include mainnet SDT price and sdCAKE in prices args
|
|
12
|
+
export const getPancakeV3Vaults = async (rpc, chainId, basePrices, feesApr, stakedTVLS) => {
|
|
13
|
+
const pools = await buildPancakeSwapStrategies(rpc, chainId);
|
|
14
|
+
const poolInfos = pools.map((p) => ({ pid: p.poolId, pool: p.pool }));
|
|
15
|
+
const poolInfosInputArgsChunks = chunk(poolInfos, 20);
|
|
16
|
+
const poolInfosCalls = poolInfosInputArgsChunks.map((inputArgs) => {
|
|
17
|
+
const inputData = encodeAbiParameters(parseAbiParameters(batchPancakeSwapStrats.inputType[chainId]), [
|
|
18
|
+
contracts.pancakeMasterchef[chainId],
|
|
19
|
+
inputArgs,
|
|
20
|
+
]);
|
|
21
|
+
return concatBytecode(batchPancakeSwapStrats.bytecode[chainId], inputData);
|
|
22
|
+
});
|
|
23
|
+
const decodedPromise = await batchJsonRpc({
|
|
24
|
+
rpc,
|
|
25
|
+
calls: poolInfosCalls,
|
|
26
|
+
outputTypeAbi: batchPancakeSwapStrats.outputTypeHr[chainId],
|
|
27
|
+
callsKey: `fetchPancakeSwap-poolsInfo chainId ${chainId}`,
|
|
28
|
+
});
|
|
29
|
+
const positionsInputData = encodeAbiParameters(parseAbiParameters(batchPancakeSwapPositions.inputType[chainId]), [contracts.pancakeMasterchef[chainId], contracts.cakeStrategy[chainId], contracts.cakeLocker[chainId]]);
|
|
30
|
+
const positionsCalls = concatBytecode(batchPancakeSwapPositions.bytecode[chainId], positionsInputData);
|
|
31
|
+
const positionsData = await batchJsonRpc({
|
|
32
|
+
rpc,
|
|
33
|
+
calls: [positionsCalls],
|
|
34
|
+
outputTypeAbi: batchPancakeSwapPositions.outputTypeHr[chainId],
|
|
35
|
+
callsKey: `fetchPancakeSwap-positions chainId ${chainId}`,
|
|
36
|
+
});
|
|
37
|
+
const pricesToFetch = pools
|
|
38
|
+
.flatMap((p) => p.coins.map((c) => {
|
|
39
|
+
const coinPrice = basePrices.find((bp) => equalTlc(bp.address, c.address))?.usdPrice || 0;
|
|
40
|
+
return coinPrice === 0 ? { address: c.address, symbol: c.symbol } : undefined;
|
|
41
|
+
}))
|
|
42
|
+
.filter(Boolean);
|
|
43
|
+
const prices = await mergePrices(basePrices, pricesToFetch, chainId);
|
|
44
|
+
const cake = tokenWithId('cake', chainId);
|
|
45
|
+
const cakePriceUsd = prices.find((p) => equalTlc(p.address, cake.address))?.usdPrice || 0;
|
|
46
|
+
const global = {
|
|
47
|
+
totalAllocPoint: '0',
|
|
48
|
+
inflationRate: '0',
|
|
49
|
+
fees: {
|
|
50
|
+
veSdt: 0,
|
|
51
|
+
perf: 0,
|
|
52
|
+
accumulator: 0,
|
|
53
|
+
claimer: 0,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
// TODO stratsData type
|
|
57
|
+
let stratsData = [];
|
|
58
|
+
decodedPromise.forEach((d, index) => {
|
|
59
|
+
if (index === 0) {
|
|
60
|
+
global.totalAllocPoint = formatUnits(d.totalAllocPoint, 0);
|
|
61
|
+
global.inflationRate = formatUnits(d.inflationRate, 30);
|
|
62
|
+
}
|
|
63
|
+
for (const stratData of d.pancakeSwapStratsData) {
|
|
64
|
+
const stratParsedData = {
|
|
65
|
+
poolId: Number(stratData.id),
|
|
66
|
+
allocPoint: Number(stratData.allocPoint),
|
|
67
|
+
tick: stratData.tick,
|
|
68
|
+
sqrtPriceX96: stratData.sqrtPriceX96.toString(),
|
|
69
|
+
totalLiquidity: stratData.totalLiquidity.toString(),
|
|
70
|
+
totalBoostLiquidity: stratData.totalBoostLiquidity.toString(),
|
|
71
|
+
poolLiquidity: stratData.poolLiquidity.toString(),
|
|
72
|
+
};
|
|
73
|
+
const strat = pools.find((p) => p.poolId === stratParsedData.poolId);
|
|
74
|
+
const token0PriceInUsd = prices.find((p) => equalTlc(p.address, strat.coins[0].address))?.usdPrice || 0;
|
|
75
|
+
const token1PriceInUsd = prices.find((p) => equalTlc(p.address, strat.coins[1].address))?.usdPrice || 0;
|
|
76
|
+
let tvl = 0;
|
|
77
|
+
let boost = 2;
|
|
78
|
+
const poolPositionData = positionsData.filter((p) => Number(p.pid) === strat.poolId);
|
|
79
|
+
const fees24H = ((feesApr[strat.pool.toLowerCase()]?.volumeUSD24h || 0) * strat.fee) / 10000;
|
|
80
|
+
const positions = poolPositionData.map((p) => {
|
|
81
|
+
const computedPositionData = computePositionData(strat, p, stratParsedData, fees24H, prices, token0PriceInUsd, token1PriceInUsd, global.totalAllocPoint, global.inflationRate);
|
|
82
|
+
tvl += computedPositionData.tvlToAdd;
|
|
83
|
+
boost = computedPositionData.boost;
|
|
84
|
+
return computedPositionData.positionData;
|
|
85
|
+
});
|
|
86
|
+
const protocolTvlData = stakedTVLS[strat.pool];
|
|
87
|
+
const protocolTvl = protocolTvlData
|
|
88
|
+
? Number(protocolTvlData.token0) * token0PriceInUsd + Number(protocolTvlData.token1) * token1PriceInUsd
|
|
89
|
+
: 0;
|
|
90
|
+
const farmApr = getFarmApr({
|
|
91
|
+
tvlUsd: protocolTvl,
|
|
92
|
+
cakePriceUsd,
|
|
93
|
+
cakePerSecond: Number(global.inflationRate),
|
|
94
|
+
poolWeight: stratParsedData.allocPoint / Number(global.totalAllocPoint),
|
|
95
|
+
}) *
|
|
96
|
+
((100 - STRAT_FEES + 0.5) / 100); // +0.5 because no harvest fee on v3 pools
|
|
97
|
+
const rewards = [
|
|
98
|
+
{
|
|
99
|
+
token: strat.rewards[0],
|
|
100
|
+
apr: farmApr * boost,
|
|
101
|
+
price: cakePriceUsd,
|
|
102
|
+
streaming: true,
|
|
103
|
+
periodFinish: 0,
|
|
104
|
+
rate: '0',
|
|
105
|
+
lastUpdate: '0',
|
|
106
|
+
claimablePendingRewards: '0',
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
const tradingApy = Number(feesApr[strat.pool.toLowerCase()]?.apr7d || 0);
|
|
110
|
+
const apr = getAprBreakdown({ ...strat, tradingApy }, rewards, boost, undefined);
|
|
111
|
+
const parsedData = {
|
|
112
|
+
key: strat.key,
|
|
113
|
+
name: strat.coins.reduce((res, current) => `${res}/${current.symbol}`, '').slice(1),
|
|
114
|
+
subname: 'v3',
|
|
115
|
+
protocol: strat.protocol,
|
|
116
|
+
version: '3',
|
|
117
|
+
chainId: strat.chainId,
|
|
118
|
+
pool: strat.pool,
|
|
119
|
+
fee: strat.fee,
|
|
120
|
+
coins: strat.coins,
|
|
121
|
+
coinsPrice: [token0PriceInUsd, token1PriceInUsd],
|
|
122
|
+
tvl,
|
|
123
|
+
apr: { ...apr, boost },
|
|
124
|
+
rewards,
|
|
125
|
+
// Positions
|
|
126
|
+
positions,
|
|
127
|
+
// Base APR data
|
|
128
|
+
tradingApy,
|
|
129
|
+
gaugesProjectedApr: strat.gaugesProjectedApr,
|
|
130
|
+
minApr: farmApr,
|
|
131
|
+
maxApr: farmApr * 2,
|
|
132
|
+
// Raw data
|
|
133
|
+
tick: Number(stratParsedData.tick),
|
|
134
|
+
sqrtPriceX96: stratParsedData.sqrtPriceX96.toString(),
|
|
135
|
+
allocPoint: stratParsedData.allocPoint,
|
|
136
|
+
};
|
|
137
|
+
stratsData = stratsData.concat(parsedData);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
return { global, stratsData };
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=getPancakeV3Vaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPancakeV3Vaults.js","sourceRoot":"","sources":["../../../../../src/strategies/pancakeswap/fetch/getPancakeV3Vaults.ts"],"names":[],"mappings":"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"}
|