@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.
Files changed (290) hide show
  1. package/dist/esm/bytecodes/index.js +16 -0
  2. package/dist/esm/bytecodes/index.js.map +1 -0
  3. package/dist/esm/bytecodes/strategies/batches/batchBalancerStrats.js +68 -0
  4. package/dist/esm/bytecodes/strategies/batches/batchBalancerStrats.js.map +1 -0
  5. package/dist/esm/{batches/curveStrats.js → bytecodes/strategies/batches/batchCurveStrats.js} +3 -3
  6. package/dist/esm/bytecodes/strategies/batches/batchCurveStrats.js.map +1 -0
  7. package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.js +61 -0
  8. package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.js.map +1 -0
  9. package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapPositions.js +44 -0
  10. package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapPositions.js.map +1 -0
  11. package/dist/esm/bytecodes/strategies/batches/batchPancakeswapStrats.js +48 -0
  12. package/dist/esm/bytecodes/strategies/batches/batchPancakeswapStrats.js.map +1 -0
  13. package/dist/esm/bytecodes/strategies/batches/batchPendleStrats.js +63 -0
  14. package/dist/esm/bytecodes/strategies/batches/batchPendleStrats.js.map +1 -0
  15. package/dist/esm/bytecodes/strategies/builds/buildBalancerStrats.js +54 -0
  16. package/dist/esm/bytecodes/strategies/builds/buildBalancerStrats.js.map +1 -0
  17. package/dist/esm/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.js +64 -0
  18. package/dist/esm/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.js.map +1 -0
  19. package/dist/esm/bytecodes/strategies/builds/buildPancakeSwapStrats.js +51 -0
  20. package/dist/esm/bytecodes/strategies/builds/buildPancakeSwapStrats.js.map +1 -0
  21. package/dist/esm/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.js +54 -0
  22. package/dist/esm/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.js.map +1 -0
  23. package/dist/esm/bytecodes/strategies/builds/buildPendleStrats.js +39 -0
  24. package/dist/esm/bytecodes/strategies/builds/buildPendleStrats.js.map +1 -0
  25. package/dist/esm/{batches → bytecodes/strategies/builds}/buildYearnStrats.js +2 -2
  26. package/dist/esm/bytecodes/strategies/builds/buildYearnStrats.js.map +1 -0
  27. package/dist/esm/bytecodes/strategies/fetchYearnGauges.js.map +1 -0
  28. package/dist/esm/bytecodes/strategies/sdtGaugeRewards.js.map +1 -0
  29. package/dist/esm/bytecodes/tokenData.js.map +1 -0
  30. package/dist/esm/{batches → bytecodes}/types.js.map +1 -1
  31. package/dist/esm/index.js +33 -6
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/lockers/utils/endpoints.js +1 -1
  34. package/dist/esm/lockers/utils/endpoints.js.map +1 -1
  35. package/dist/esm/prices.js +39 -3
  36. package/dist/esm/prices.js.map +1 -1
  37. package/dist/esm/strategies/balancer/build.js +4 -11
  38. package/dist/esm/strategies/balancer/build.js.map +1 -1
  39. package/dist/esm/strategies/balancer/fetch.js +190 -0
  40. package/dist/esm/strategies/balancer/fetch.js.map +1 -0
  41. package/dist/esm/strategies/curve/build.js +4 -4
  42. package/dist/esm/strategies/curve/build.js.map +1 -1
  43. package/dist/esm/strategies/curve/fetch/curveApiData/bytecode.js +0 -1
  44. package/dist/esm/strategies/curve/fetch/curveApiData/bytecode.js.map +1 -1
  45. package/dist/esm/strategies/curve/fetch/curveApiData/getCurveApiData.js +3 -2
  46. package/dist/esm/strategies/curve/fetch/curveApiData/getCurveApiData.js.map +1 -1
  47. package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.js +3 -2
  48. package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.js.map +1 -1
  49. package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesWeights.js +2 -1
  50. package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesWeights.js.map +1 -1
  51. package/dist/esm/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.js +2 -1
  52. package/dist/esm/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.js.map +1 -1
  53. package/dist/esm/strategies/curve/fetch/index.js +22 -4
  54. package/dist/esm/strategies/curve/fetch/index.js.map +1 -1
  55. package/dist/esm/strategies/curve/httpCalls.js +3 -3
  56. package/dist/esm/strategies/curve/httpCalls.js.map +1 -1
  57. package/dist/esm/strategies/curve/onChainCalls.js +3 -2
  58. package/dist/esm/strategies/curve/onChainCalls.js.map +1 -1
  59. package/dist/esm/strategies/pancakeswap/abis/PancakeSwapMasterchef.json +1575 -0
  60. package/dist/esm/strategies/pancakeswap/build.js +48 -0
  61. package/dist/esm/strategies/pancakeswap/build.js.map +1 -0
  62. package/dist/esm/strategies/pancakeswap/buildErc20.js +63 -0
  63. package/dist/esm/strategies/pancakeswap/buildErc20.js.map +1 -0
  64. package/dist/esm/strategies/pancakeswap/config.js +7 -0
  65. package/dist/esm/strategies/pancakeswap/config.js.map +1 -0
  66. package/dist/esm/strategies/pancakeswap/endpoints.js +10 -0
  67. package/dist/esm/strategies/pancakeswap/endpoints.js.map +1 -0
  68. package/dist/esm/strategies/pancakeswap/fetch/getPancakeApisData.js +24 -0
  69. package/dist/esm/strategies/pancakeswap/fetch/getPancakeApisData.js.map +1 -0
  70. package/dist/esm/strategies/pancakeswap/fetch/getPancakeErc20Vaults.js +134 -0
  71. package/dist/esm/strategies/pancakeswap/fetch/getPancakeErc20Vaults.js.map +1 -0
  72. package/dist/esm/strategies/pancakeswap/fetch/getPancakeNotDeployed.js +102 -0
  73. package/dist/esm/strategies/pancakeswap/fetch/getPancakeNotDeployed.js.map +1 -0
  74. package/dist/esm/strategies/pancakeswap/fetch/getPancakeV3Vaults.js +142 -0
  75. package/dist/esm/strategies/pancakeswap/fetch/getPancakeV3Vaults.js.map +1 -0
  76. package/dist/esm/strategies/pancakeswap/fetch/index.js +25 -0
  77. package/dist/esm/strategies/pancakeswap/fetch/index.js.map +1 -0
  78. package/dist/esm/strategies/pancakeswap/fetch/pancakePositions.js +87 -0
  79. package/dist/esm/strategies/pancakeswap/fetch/pancakePositions.js.map +1 -0
  80. package/dist/esm/strategies/pancakeswap/fetch/pancakeswapMath.js +199 -0
  81. package/dist/esm/strategies/pancakeswap/fetch/pancakeswapMath.js.map +1 -0
  82. package/dist/esm/strategies/pendle/abis/MulticallPendleStratsAbi.json +103 -0
  83. package/dist/esm/strategies/pendle/build.js +70 -0
  84. package/dist/esm/strategies/pendle/build.js.map +1 -0
  85. package/dist/esm/strategies/pendle/fetch.js +267 -0
  86. package/dist/esm/strategies/pendle/fetch.js.map +1 -0
  87. package/dist/esm/strategies/pendle/getPendleApiData.js +15 -0
  88. package/dist/esm/strategies/pendle/getPendleApiData.js.map +1 -0
  89. package/dist/esm/strategies/pendle/pendlePoints.js +71 -0
  90. package/dist/esm/strategies/pendle/pendlePoints.js.map +1 -0
  91. package/dist/esm/strategies/utils/getAprBreakdown.js +9 -9
  92. package/dist/esm/strategies/utils/getAprBreakdown.js.map +1 -1
  93. package/dist/esm/strategies/utils/index.js +10 -1
  94. package/dist/esm/strategies/utils/index.js.map +1 -1
  95. package/dist/esm/strategies/yearn/build.js +5 -4
  96. package/dist/esm/strategies/yearn/build.js.map +1 -1
  97. package/dist/esm/strategies/yearn/fetch/fetchAllYearnGauges.js +3 -2
  98. package/dist/esm/strategies/yearn/fetch/fetchAllYearnGauges.js.map +1 -1
  99. package/dist/esm/strategies/yearn/fetch/index.js +1 -1
  100. package/dist/esm/strategies/yearn/fetch/index.js.map +1 -1
  101. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  102. package/dist/esm/utils.js +1 -1
  103. package/dist/esm/utils.js.map +1 -1
  104. package/dist/types/bytecodes/index.d.ts +16 -0
  105. package/dist/types/bytecodes/index.d.ts.map +1 -0
  106. package/dist/types/bytecodes/strategies/batches/batchBalancerStrats.d.ts +4 -0
  107. package/dist/types/bytecodes/strategies/batches/batchBalancerStrats.d.ts.map +1 -0
  108. package/dist/types/bytecodes/strategies/batches/batchCurveStrats.d.ts +4 -0
  109. package/dist/types/bytecodes/strategies/batches/batchCurveStrats.d.ts.map +1 -0
  110. package/dist/types/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.d.ts +4 -0
  111. package/dist/types/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.d.ts.map +1 -0
  112. package/dist/types/bytecodes/strategies/batches/batchPancakeSwapPositions.d.ts +4 -0
  113. package/dist/types/bytecodes/strategies/batches/batchPancakeSwapPositions.d.ts.map +1 -0
  114. package/dist/types/bytecodes/strategies/batches/batchPancakeswapStrats.d.ts +4 -0
  115. package/dist/types/bytecodes/strategies/batches/batchPancakeswapStrats.d.ts.map +1 -0
  116. package/dist/types/bytecodes/strategies/batches/batchPendleStrats.d.ts +4 -0
  117. package/dist/types/bytecodes/strategies/batches/batchPendleStrats.d.ts.map +1 -0
  118. package/dist/types/bytecodes/strategies/builds/buildBalancerStrats.d.ts +4 -0
  119. package/dist/types/bytecodes/strategies/builds/buildBalancerStrats.d.ts.map +1 -0
  120. package/dist/types/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.d.ts +4 -0
  121. package/dist/types/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.d.ts.map +1 -0
  122. package/dist/types/bytecodes/strategies/builds/buildPancakeSwapStrats.d.ts +4 -0
  123. package/dist/types/bytecodes/strategies/builds/buildPancakeSwapStrats.d.ts.map +1 -0
  124. package/dist/types/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.d.ts +4 -0
  125. package/dist/types/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.d.ts.map +1 -0
  126. package/dist/types/bytecodes/strategies/builds/buildPendleStrats.d.ts +4 -0
  127. package/dist/types/bytecodes/strategies/builds/buildPendleStrats.d.ts.map +1 -0
  128. package/dist/types/bytecodes/strategies/builds/buildYearnStrats.d.ts +4 -0
  129. package/dist/types/bytecodes/strategies/builds/buildYearnStrats.d.ts.map +1 -0
  130. package/dist/types/bytecodes/strategies/fetchYearnGauges.d.ts +4 -0
  131. package/dist/types/bytecodes/strategies/fetchYearnGauges.d.ts.map +1 -0
  132. package/dist/types/bytecodes/strategies/sdtGaugeRewards.d.ts +4 -0
  133. package/dist/types/bytecodes/strategies/sdtGaugeRewards.d.ts.map +1 -0
  134. package/dist/types/bytecodes/tokenData.d.ts.map +1 -0
  135. package/dist/types/bytecodes/types.d.ts.map +1 -0
  136. package/dist/types/index.d.ts +15 -6
  137. package/dist/types/index.d.ts.map +1 -1
  138. package/dist/types/lockers/utils/endpoints.d.ts +1 -1
  139. package/dist/types/lockers/utils/endpoints.d.ts.map +1 -1
  140. package/dist/types/prices.d.ts +8 -1
  141. package/dist/types/prices.d.ts.map +1 -1
  142. package/dist/types/strategies/balancer/build.d.ts +0 -1
  143. package/dist/types/strategies/balancer/build.d.ts.map +1 -1
  144. package/dist/types/strategies/balancer/fetch.d.ts +11 -0
  145. package/dist/types/strategies/balancer/fetch.d.ts.map +1 -0
  146. package/dist/types/strategies/curve/build.d.ts.map +1 -1
  147. package/dist/types/strategies/curve/fetch/curveApiData/bytecode.d.ts.map +1 -1
  148. package/dist/types/strategies/curve/fetch/curveApiData/getCurveApiData.d.ts +1 -1
  149. package/dist/types/strategies/curve/fetch/curveApiData/getCurveApiData.d.ts.map +1 -1
  150. package/dist/types/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.d.ts.map +1 -1
  151. package/dist/types/strategies/curve/fetch/curveApiData/getGaugesWeights.d.ts.map +1 -1
  152. package/dist/types/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.d.ts.map +1 -1
  153. package/dist/types/strategies/curve/fetch/index.d.ts +15 -2
  154. package/dist/types/strategies/curve/fetch/index.d.ts.map +1 -1
  155. package/dist/types/strategies/curve/onChainCalls.d.ts.map +1 -1
  156. package/dist/types/strategies/pancakeswap/build.d.ts +2 -0
  157. package/dist/types/strategies/pancakeswap/build.d.ts.map +1 -0
  158. package/dist/types/strategies/pancakeswap/buildErc20.d.ts +7 -0
  159. package/dist/types/strategies/pancakeswap/buildErc20.d.ts.map +1 -0
  160. package/dist/types/strategies/pancakeswap/config.d.ts +7 -0
  161. package/dist/types/strategies/pancakeswap/config.d.ts.map +1 -0
  162. package/dist/types/strategies/pancakeswap/endpoints.d.ts +8 -0
  163. package/dist/types/strategies/pancakeswap/endpoints.d.ts.map +1 -0
  164. package/dist/types/strategies/pancakeswap/fetch/getPancakeApisData.d.ts +10 -0
  165. package/dist/types/strategies/pancakeswap/fetch/getPancakeApisData.d.ts.map +1 -0
  166. package/dist/types/strategies/pancakeswap/fetch/getPancakeErc20Vaults.d.ts +44 -0
  167. package/dist/types/strategies/pancakeswap/fetch/getPancakeErc20Vaults.d.ts.map +1 -0
  168. package/dist/types/strategies/pancakeswap/fetch/getPancakeNotDeployed.d.ts +3 -0
  169. package/dist/types/strategies/pancakeswap/fetch/getPancakeNotDeployed.d.ts.map +1 -0
  170. package/dist/types/strategies/pancakeswap/fetch/getPancakeV3Vaults.d.ts +7 -0
  171. package/dist/types/strategies/pancakeswap/fetch/getPancakeV3Vaults.d.ts.map +1 -0
  172. package/dist/types/strategies/pancakeswap/fetch/index.d.ts +17 -0
  173. package/dist/types/strategies/pancakeswap/fetch/index.d.ts.map +1 -0
  174. package/dist/types/strategies/pancakeswap/fetch/pancakePositions.d.ts +11 -0
  175. package/dist/types/strategies/pancakeswap/fetch/pancakePositions.d.ts.map +1 -0
  176. package/dist/types/strategies/pancakeswap/fetch/pancakeswapMath.d.ts +33 -0
  177. package/dist/types/strategies/pancakeswap/fetch/pancakeswapMath.d.ts.map +1 -0
  178. package/dist/types/strategies/pendle/build.d.ts +42 -0
  179. package/dist/types/strategies/pendle/build.d.ts.map +1 -0
  180. package/dist/types/strategies/pendle/fetch.d.ts +60 -0
  181. package/dist/types/strategies/pendle/fetch.d.ts.map +1 -0
  182. package/dist/types/strategies/pendle/getPendleApiData.d.ts +3 -0
  183. package/dist/types/strategies/pendle/getPendleApiData.d.ts.map +1 -0
  184. package/dist/types/strategies/pendle/pendlePoints.d.ts +80 -0
  185. package/dist/types/strategies/pendle/pendlePoints.d.ts.map +1 -0
  186. package/dist/types/strategies/types.d.ts +17 -3
  187. package/dist/types/strategies/types.d.ts.map +1 -1
  188. package/dist/types/strategies/utils/getAprBreakdown.d.ts +1 -4
  189. package/dist/types/strategies/utils/getAprBreakdown.d.ts.map +1 -1
  190. package/dist/types/strategies/utils/index.d.ts +2 -0
  191. package/dist/types/strategies/utils/index.d.ts.map +1 -1
  192. package/dist/types/strategies/yearn/build.d.ts.map +1 -1
  193. package/dist/types/strategies/yearn/fetch/fetchAllYearnGauges.d.ts.map +1 -1
  194. package/dist/types/strategies/yearn/fetch/index.d.ts +13 -2
  195. package/dist/types/strategies/yearn/fetch/index.d.ts.map +1 -1
  196. package/dist/types/utils.d.ts.map +1 -1
  197. package/package.json +3 -2
  198. package/src/bytecodes/index.ts +18 -0
  199. package/src/bytecodes/strategies/batches/batchBalancerStrats.ts +70 -0
  200. package/src/{batches/curveStrats.ts → bytecodes/strategies/batches/batchCurveStrats.ts} +3 -3
  201. package/src/bytecodes/strategies/batches/batchPancakeSwapErc20Strats.ts +67 -0
  202. package/src/bytecodes/strategies/batches/batchPancakeSwapPositions.ts +50 -0
  203. package/src/bytecodes/strategies/batches/batchPancakeswapStrats.ts +54 -0
  204. package/src/bytecodes/strategies/batches/batchPendleStrats.ts +65 -0
  205. package/src/bytecodes/strategies/builds/buildBalancerStrats.ts +56 -0
  206. package/src/bytecodes/strategies/builds/buildPancakeSwapErc20Strats.ts +70 -0
  207. package/src/bytecodes/strategies/builds/buildPancakeSwapStrats.ts +57 -0
  208. package/src/bytecodes/strategies/builds/buildPancakeswapNotDeployedErc20Strats.ts +60 -0
  209. package/src/bytecodes/strategies/builds/buildPendleStrats.ts +41 -0
  210. package/src/{batches → bytecodes/strategies/builds}/buildYearnStrats.ts +3 -3
  211. package/src/{batches → bytecodes/strategies}/fetchYearnGauges.ts +1 -1
  212. package/src/{batches → bytecodes/strategies}/sdtGaugeRewards.ts +1 -1
  213. package/src/endpoints.ts +2 -0
  214. package/src/index.ts +43 -5
  215. package/src/lockers/utils/endpoints.ts +2 -1
  216. package/src/prices.ts +57 -6
  217. package/src/strategies/balancer/build.ts +66 -0
  218. package/src/strategies/balancer/endpoints.ts +27 -0
  219. package/src/strategies/balancer/fetch.ts +266 -0
  220. package/src/strategies/curve/build.ts +4 -3
  221. package/src/strategies/curve/fetch/curveApiData/bytecode.ts +0 -1
  222. package/src/strategies/curve/fetch/curveApiData/getCurveApiData.ts +4 -3
  223. package/src/strategies/curve/fetch/curveApiData/getGaugesFromRegistry.ts +7 -3
  224. package/src/strategies/curve/fetch/curveApiData/getGaugesWeights.ts +3 -2
  225. package/src/strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts.ts +3 -2
  226. package/src/strategies/curve/fetch/index.ts +53 -15
  227. package/src/strategies/curve/httpCalls.ts +3 -3
  228. package/src/strategies/curve/onChainCalls.ts +4 -2
  229. package/src/strategies/pancakeswap/build.ts +57 -0
  230. package/src/strategies/pancakeswap/buildErc20.ts +73 -0
  231. package/src/strategies/pancakeswap/config.ts +7 -0
  232. package/src/strategies/pancakeswap/endpoints.ts +12 -0
  233. package/src/strategies/pancakeswap/fetch/getPancakeApisData.ts +32 -0
  234. package/src/strategies/pancakeswap/fetch/getPancakeErc20Vaults.ts +184 -0
  235. package/src/strategies/pancakeswap/fetch/getPancakeNotDeployed.ts +132 -0
  236. package/src/strategies/pancakeswap/fetch/getPancakeV3Vaults.ts +191 -0
  237. package/src/strategies/pancakeswap/fetch/index.ts +50 -0
  238. package/src/strategies/pancakeswap/fetch/pancakePositions.ts +147 -0
  239. package/src/strategies/pancakeswap/fetch/pancakeswapMath.ts +305 -0
  240. package/src/strategies/pendle/build.ts +93 -0
  241. package/src/strategies/pendle/fetch.ts +349 -0
  242. package/src/strategies/pendle/getPendleApiData.ts +20 -0
  243. package/src/strategies/pendle/pendlePoints.ts +71 -0
  244. package/src/strategies/types.ts +20 -3
  245. package/src/strategies/utils/getAprBreakdown.ts +9 -9
  246. package/src/strategies/utils/index.ts +14 -1
  247. package/src/strategies/yearn/build.ts +5 -4
  248. package/src/strategies/yearn/fetch/fetchAllYearnGauges.ts +4 -3
  249. package/src/strategies/yearn/fetch/index.ts +22 -11
  250. package/src/utils.ts +3 -3
  251. package/dist/esm/batches/balancerStrats.js +0 -73
  252. package/dist/esm/batches/balancerStrats.js.map +0 -1
  253. package/dist/esm/batches/buildBalancerStrats.js +0 -62
  254. package/dist/esm/batches/buildBalancerStrats.js.map +0 -1
  255. package/dist/esm/batches/buildYearnStrats.js.map +0 -1
  256. package/dist/esm/batches/curveStrats.js.map +0 -1
  257. package/dist/esm/batches/fetchYearnGauges.js.map +0 -1
  258. package/dist/esm/batches/index.js +0 -8
  259. package/dist/esm/batches/index.js.map +0 -1
  260. package/dist/esm/batches/sdtGaugeRewards.js.map +0 -1
  261. package/dist/esm/batches/tokenData.js.map +0 -1
  262. package/dist/esm/strategies/balancer/fetch/index.js +0 -203
  263. package/dist/esm/strategies/balancer/fetch/index.js.map +0 -1
  264. package/dist/types/batches/balancerStrats.d.ts +0 -4
  265. package/dist/types/batches/balancerStrats.d.ts.map +0 -1
  266. package/dist/types/batches/buildBalancerStrats.d.ts +0 -4
  267. package/dist/types/batches/buildBalancerStrats.d.ts.map +0 -1
  268. package/dist/types/batches/buildYearnStrats.d.ts +0 -4
  269. package/dist/types/batches/buildYearnStrats.d.ts.map +0 -1
  270. package/dist/types/batches/curveStrats.d.ts +0 -4
  271. package/dist/types/batches/curveStrats.d.ts.map +0 -1
  272. package/dist/types/batches/fetchYearnGauges.d.ts +0 -4
  273. package/dist/types/batches/fetchYearnGauges.d.ts.map +0 -1
  274. package/dist/types/batches/index.d.ts +0 -8
  275. package/dist/types/batches/index.d.ts.map +0 -1
  276. package/dist/types/batches/sdtGaugeRewards.d.ts +0 -4
  277. package/dist/types/batches/sdtGaugeRewards.d.ts.map +0 -1
  278. package/dist/types/batches/tokenData.d.ts.map +0 -1
  279. package/dist/types/batches/types.d.ts.map +0 -1
  280. package/dist/types/strategies/balancer/fetch/index.d.ts +0 -6
  281. package/dist/types/strategies/balancer/fetch/index.d.ts.map +0 -1
  282. package/src/batches/index.ts +0 -5
  283. /package/dist/esm/{batches → bytecodes/strategies}/fetchYearnGauges.js +0 -0
  284. /package/dist/esm/{batches → bytecodes/strategies}/sdtGaugeRewards.js +0 -0
  285. /package/dist/esm/{batches → bytecodes}/tokenData.js +0 -0
  286. /package/dist/esm/{batches → bytecodes}/types.js +0 -0
  287. /package/dist/types/{batches → bytecodes}/tokenData.d.ts +0 -0
  288. /package/dist/types/{batches → bytecodes}/types.d.ts +0 -0
  289. /package/src/{batches → bytecodes}/tokenData.ts +0 -0
  290. /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
@@ -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: string
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 Global = CurveGlobalData | YearnGlobalData
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: string
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 (${strat.underlyingReward.symbol})`,
27
- value: [strat.underlyingReward.apy],
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 '../../batches/index.js'
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]!.concat(inputData.slice(2))
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]?.concat(inputData.slice(2))
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]?.concat(inputData.slice(2))
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 '../../../batches/index.js'
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]!.concat(inputData.slice(2))],
40
+ calls: [concatBytecode(fetchYearnGauges.bytecode[chainId]!, inputData)],
40
41
  outputTypeAbi: fetchYearnGauges.outputType![chainId]!,
41
42
  rpc,
42
43
  parse: false,
43
- callsKey: `Fetch all Yearn gauges chainId : ${chainId}`,
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
- export const fetchYearn = async (
50
- prices: Price[],
51
- provider: any,
52
- rpc: string,
53
- explorerApiKey: string,
54
- explorer: string,
55
- chainId: number,
56
- lastBlockNumber: number,
57
- sdtEmissionData: SdtEmissionData,
58
- ): Promise<StrategyData> => {
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[] = []