@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,266 @@
1
+ import { chunk } from 'lodash-es'
2
+ import { decodeAbiParameters, encodeAbiParameters, formatUnits, parseAbiParameters, parseUnits } from 'viem'
3
+
4
+ import {
5
+ BALANCER_FEE_SHARE_FOR_LP,
6
+ ETH_ONE_DAY_BLOCK,
7
+ ONE_WEEK,
8
+ ONE_YEAR,
9
+ STRAT_FEES,
10
+ balancerStrats,
11
+ contracts,
12
+ tokenWithId,
13
+ } from '@stake-dao/constants'
14
+ import { batchBalancerStrats } from '../../bytecodes/index.js'
15
+ import { OneEther, Zero, concatBytecode, getBoost, getPricesFromLlama, getSdtApr } from '../../index.js'
16
+ import { equalTlc, graphql } from '../../utils.js'
17
+ import { FACTORY_EXPLORER_EVENTS } from '../curve/endpoints.js'
18
+ import type { BalancerGlobalData, RewardsData, Strategy, StrategyData, ValidChainId, ValidExplorer } from '../types.js'
19
+ import decodeEtherscanFactoryEvent from '../utils/decodeEtherscanFactoryEvent.js'
20
+ import { getAprBreakdown } from '../utils/getAprBreakdown.js'
21
+ import { buildBalancerStrategies } from './build.js'
22
+ import { BALANCER_POOLS_DATA_QUERY, BALANCER_SUBGRAPH_URL } from './endpoints.js'
23
+
24
+ interface TFetchBalancer {
25
+ provider: any
26
+ explorer: ValidExplorer
27
+ explorerApiKey: string
28
+ chainId: ValidChainId
29
+ sdtEmissionData: any
30
+ }
31
+
32
+ export const fetchBalancer = async ({
33
+ provider,
34
+ explorer,
35
+ explorerApiKey,
36
+ chainId,
37
+ sdtEmissionData,
38
+ }: TFetchBalancer): Promise<StrategyData> => {
39
+ const currentBlockNumber = Number(await provider.getBlockNumber())
40
+ const lastBlockNumber = balancerStrats.meta.lastSyncBlock[chainId]! + 1
41
+
42
+ const httpCalls = [
43
+ // Etherscan Events
44
+ (
45
+ await fetch(
46
+ FACTORY_EXPLORER_EVENTS(explorerApiKey, explorer, contracts.balancerVaultFactory![1]!, lastBlockNumber),
47
+ )
48
+ ).json(),
49
+ ]
50
+
51
+ const httpResponses = (await Promise.allSettled(httpCalls)).map((result) =>
52
+ result.status === 'fulfilled' ? result.value : [],
53
+ )
54
+
55
+ const newVaultsAndLp = decodeEtherscanFactoryEvent(httpResponses[0])
56
+ const vaultsAndLp = balancerStrats.strats[chainId] || []
57
+
58
+ const strats: any[] = await buildBalancerStrategies(provider, vaultsAndLp.concat(newVaultsAndLp), chainId)
59
+
60
+ const poolIds = strats.map((s) => s.key)
61
+ const tokensToFetch: any = [tokenWithId('bal'), tokenWithId('sdt')]
62
+ for (const s of strats) {
63
+ tokensToFetch.push(s.lpToken)
64
+ tokensToFetch.push(...s.coins)
65
+ }
66
+
67
+ const moreHttpCalls = [
68
+ // Balancer Subgraph
69
+ graphql(BALANCER_SUBGRAPH_URL, BALANCER_POOLS_DATA_QUERY, { id: poolIds, block: currentBlockNumber }),
70
+ graphql(BALANCER_SUBGRAPH_URL, BALANCER_POOLS_DATA_QUERY, {
71
+ id: poolIds,
72
+ block: currentBlockNumber - ETH_ONE_DAY_BLOCK,
73
+ }),
74
+ // Prices
75
+ getPricesFromLlama(tokensToFetch), // TODO
76
+ ]
77
+
78
+ const moreHttpResponses = (await Promise.allSettled(moreHttpCalls)).map((result) =>
79
+ result.status === 'fulfilled' ? result.value : [result.reason],
80
+ )
81
+
82
+ const subgraphPoolsData = moreHttpResponses[0]?.pools
83
+ const subgraphPoolsDataSnapshot = moreHttpResponses[1]?.pools
84
+ const prices = moreHttpResponses[2]
85
+
86
+ const stratsDataCalls = strats.map((s) => ({
87
+ vault: s.vault,
88
+ token: s.lpToken.address,
89
+ }))
90
+
91
+ const inputArgsChunks = chunk(stratsDataCalls, 20)
92
+ const decodedPromise = await Promise.allSettled(
93
+ inputArgsChunks.map(async (inputArgs) => {
94
+ const inputData = encodeAbiParameters(parseAbiParameters(batchBalancerStrats.inputType[chainId]!) as any, [
95
+ contracts.balancerTokenAdmin![chainId],
96
+ contracts.balancerGaugeController![chainId],
97
+ contracts.sdGaugeController![chainId],
98
+ contracts.balancerLocker![chainId],
99
+ inputArgs,
100
+ ])
101
+ const contractCreationCode = concatBytecode(batchBalancerStrats.bytecode[chainId]!, inputData)
102
+ const returnedData = await provider.call({
103
+ data: contractCreationCode,
104
+ })
105
+ return decodeAbiParameters(
106
+ parseAbiParameters(batchBalancerStrats.outputTypeHr[chainId]!) as any,
107
+ returnedData.data,
108
+ )
109
+ }),
110
+ )
111
+
112
+ const global: BalancerGlobalData = {
113
+ totalGaugeWeights: '0',
114
+ inflationRate: '0',
115
+ balPerWeek: '0',
116
+ fees: {
117
+ veSdt: 5,
118
+ perf: 2,
119
+ accumulator: 8,
120
+ claimer: 1,
121
+ },
122
+ }
123
+
124
+ let stratsData: Strategy[] = []
125
+
126
+ decodedPromise.forEach((d, index) => {
127
+ if (d.status === 'fulfilled') {
128
+ if (index === 0) {
129
+ global.totalGaugeWeights = formatUnits(d.value[0].totalGaugeWeights, 0)
130
+ global.inflationRate = formatUnits(d.value[0].inflationRate, 0)
131
+ global.balPerWeek = formatUnits(d.value[0].inflationRate * BigInt(ONE_WEEK), 0)
132
+ }
133
+
134
+ const parsedData = d.value[0].balancerStratsData.map((v) => {
135
+ let strat = strats.find((s) => equalTlc(s.vault, v.vault))
136
+
137
+ const bal = tokenWithId('bal', chainId)
138
+ const poolData = subgraphPoolsData?.find((data) => data.id === strat.key)
139
+ const snapshotData = subgraphPoolsDataSnapshot.find((data) => data.id === strat.key)
140
+ const balPriceInUsd = prices.find((p) => p.address.toLowerCase() === tokenWithId('bal')!.address.toLowerCase())
141
+ const lpPriceInUsd = prices.find((p) => p.address.toLowerCase() === strat.lpToken.address.toLowerCase())
142
+
143
+ if (lpPriceInUsd && lpPriceInUsd.usdPrice === 0 && poolData) {
144
+ lpPriceInUsd.usdPrice = Number(poolData.totalLiquidity) / Number(poolData.totalShares)
145
+ }
146
+
147
+ let swapFeeApr = 0
148
+ if (poolData) {
149
+ const lastDaySwapFeesInUsd = poolData.totalSwapFee - snapshotData.totalSwapFee
150
+ const dailySwapFeeApr =
151
+ Number(poolData.totalLiquidity) > 0
152
+ ? (lastDaySwapFeesInUsd * BALANCER_FEE_SHARE_FOR_LP) / Number(poolData.totalLiquidity)
153
+ : 0
154
+ swapFeeApr = dailySwapFeeApr * 365 * 100
155
+ }
156
+
157
+ const balRewards = BigInt(global.balPerWeek) * v.poolGaugeRelativeWeight
158
+
159
+ const bptPriceBn = lpPriceInUsd ? parseUnits(lpPriceInUsd.usdPrice.toString(), 18) : Zero
160
+ const balPriceBn = parseUnits((balPriceInUsd?.usdPrice || 0).toString(), 18)
161
+
162
+ const workingBalance = BigInt(4) * parseUnits('10', 35) // Should be 0.4
163
+ const shareForOneBpt = workingBalance / v.workingSupplyStaked
164
+
165
+ const weeklyReward = shareForOneBpt * balRewards
166
+ const yearlyReward = weeklyReward * BigInt(52) * balPriceBn
167
+ const rawBalApr = bptPriceBn > Zero ? yearlyReward / bptPriceBn / parseUnits('10', 18) : Zero
168
+
169
+ const balApr = formatUnits(rawBalApr, 36)
170
+ const minApr = Number(balApr) * (100 - STRAT_FEES)
171
+ const maxApr = Number(balApr) * 2.5 * (100 - STRAT_FEES)
172
+
173
+ strat = { ...strat, tradingApy: swapFeeApr, minApr, maxApr }
174
+
175
+ const tvl =
176
+ v.totalSupply && lpPriceInUsd?.usdPrice ? Number(formatUnits(v.totalSupply, 18)) * lpPriceInUsd.usdPrice : 0
177
+
178
+ const sdGauge = {
179
+ address: v.gauge,
180
+ totalSupply: formatUnits(v.sdGaugeTotalSupply, 0),
181
+ relativeWeight: formatUnits(v.gaugeRelativeWeight, 0),
182
+ weight: formatUnits(v.gaugeWeight, 0),
183
+ futureWeight:
184
+ BigInt(global.totalGaugeWeights) > 0
185
+ ? formatUnits(((v.gaugeWeight as bigint) * OneEther * OneEther) / BigInt(global.totalGaugeWeights), 0)
186
+ : '0',
187
+ workingSupply: formatUnits(v.sdWorkingSupply, 0),
188
+ }
189
+
190
+ const boost = getBoost('balancer', v.strategyHoldings, v.workingBalance)
191
+
192
+ const rewardsData: RewardsData[] = v.sdRewardsData.map((r: any, rewardIndex: number) => {
193
+ const rewardToken = strat.rewards[rewardIndex]
194
+ const rewardPrice = prices.find((p: any) => equalTlc(p.symbol, rewardToken.symbol))
195
+
196
+ const periodFinish = Number(formatUnits(r.period_finish, 0))
197
+ const streaming = periodFinish > Math.floor(Date.now() / 1000)
198
+
199
+ const rewardApr =
200
+ streaming && rewardPrice && tvl > 0
201
+ ? (Number(formatUnits(r.rate * BigInt(ONE_YEAR), 18)) * rewardPrice.usdPrice) /
202
+ tvl /
203
+ (equalTlc(rewardToken.symbol, 'SDT') ? 2.5 : 1)
204
+ : 0
205
+
206
+ return {
207
+ token: rewardToken,
208
+ price: rewardPrice ? rewardPrice.usdPrice : 0,
209
+ apr: rewardApr * 100,
210
+ streaming,
211
+ periodFinish,
212
+ rate: formatUnits(r.rate, 0),
213
+ lastUpdate: formatUnits(r.last_update, 0),
214
+ claimablePendingRewards: equalTlc(r.token, bal?.address!) ? formatUnits(v.claimablePendingRewards, 0) : '0', // TODO
215
+ }
216
+ })
217
+
218
+ const sdtApr = getSdtApr(rewardsData, sdtEmissionData, sdGauge, lpPriceInUsd.usdPrice, undefined)
219
+ const apr = getAprBreakdown(strat, rewardsData, boost, sdtApr)
220
+
221
+ const coins = strat.underlyingCoins?.length > 0 ? strat.underlyingCoins : strat.coins
222
+
223
+ return {
224
+ key: strat.key,
225
+ name: coins.reduce((res: string, current) => `${res}/${current.symbol}`, '').slice(1),
226
+ protocol: strat.protocol,
227
+ chainId: strat.chainId,
228
+ vault: strat.vault,
229
+ lpToken: strat.lpToken,
230
+ gaugeAddress: strat.gaugeAddress,
231
+ coins: strat.coins,
232
+ sdGauge,
233
+ lpPriceInUsd: lpPriceInUsd ? lpPriceInUsd.usdPrice : 0,
234
+ tvl,
235
+ apr: {
236
+ boost,
237
+ ...apr,
238
+ },
239
+ sdtApr,
240
+ rewards: rewardsData,
241
+ // Base APR data
242
+ tradingApy: strat.tradingApy,
243
+ minApr: strat.minApr,
244
+ maxApr: strat.maxApr,
245
+ // Raw data
246
+ vaultHoldings: formatUnits(v.vaultHoldings, 0),
247
+ totalSupply: formatUnits(v.totalSupply, 0),
248
+ strategyHoldings: formatUnits(v.strategyHoldings, 0),
249
+ workingBalance: formatUnits(v.workingBalance, 0),
250
+ // Gas optimised
251
+ vaultFees: {
252
+ keeper: Number(v.keeperFee) / 100,
253
+ accumulated: formatUnits(v.accumulatedFees, 0),
254
+ },
255
+ }
256
+ })
257
+ stratsData = stratsData.concat(parsedData)
258
+ }
259
+ })
260
+
261
+ return {
262
+ deployed: stratsData,
263
+ notDeployed: [],
264
+ fetched: true,
265
+ }
266
+ }
@@ -3,9 +3,10 @@ import { decodeAbiParameters, encodeAbiParameters, parseAbi, parseAbiParameters
3
3
 
4
4
  import { contract, tokens } from '@stake-dao/constants'
5
5
  import type { FetchedToken, Token } from '@stake-dao/constants'
6
- import { batchSdtGaugeRewards, batchTokenData } from '../../batches/index.js'
6
+ import { batchSdtGaugeRewards, batchTokenData } 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
@@ -86,7 +87,7 @@ export const buildCurveStrategies = async (
86
87
  const inputData = encodeAbiParameters(parseAbiParameters(batchTokenData.inputType[chainId] || []) as any, [
87
88
  inputArgs,
88
89
  ])
89
- const contractCreationCode = batchTokenData.bytecode[chainId]?.concat(inputData.slice(2))
90
+ const contractCreationCode = concatBytecode(batchTokenData.bytecode[chainId]!, inputData)
90
91
  const returnedData = await provider.call({
91
92
  data: contractCreationCode,
92
93
  })
@@ -109,7 +110,7 @@ export const buildCurveStrategies = async (
109
110
  const inputData = encodeAbiParameters(parseAbiParameters(batchSdtGaugeRewards.inputType[chainId] || []) as any, [
110
111
  inputArgs,
111
112
  ])
112
- const contractCreationCode = batchSdtGaugeRewards.bytecode[chainId]?.concat(inputData.slice(2))
113
+ const contractCreationCode = concatBytecode(batchSdtGaugeRewards.bytecode[chainId]!, inputData)
113
114
  const returnedData = await provider.call({
114
115
  data: contractCreationCode,
115
116
  })
@@ -24,7 +24,6 @@ export const gaugesBytecode = {
24
24
  42161:
25
25
  '0x608060405234801561000f575f80fd5b5060405161106a38038061106a833981810160405281019061003191906109be565b5f815190505f8167ffffffffffffffff81111561005157610050610828565b5b60405190808252806020026020018201604052801561008a57816020015b61007761072d565b81526020019060019003908161006f5790505b5090505f5b828110156106ed575f8482815181106100ab576100aa610a05565b5b602002602001015190506100bd61072d565b81815f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101038261071c60201b60201c565b6106bf578173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561016f57506040513d601f19601f8201168201806040525081019061016c9190610a32565b60015b156101ae5780826020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050505b8173ffffffffffffffffffffffffffffffffffffffff16639c868ac06040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561021657506040513d601f19601f820116820180604052508101906102139190610a92565b60015b156106be57808260400190151590811515815250505f1515811515036106bc578273ffffffffffffffffffffffffffffffffffffffff166317e280896040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561029e57506040513d601f19601f8201168201806040525081019061029b9190610af0565b60015b156102af5780836060018181525050505b8273ffffffffffffffffffffffffffffffffffffffff1663963c94b96040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561031757506040513d601f19601f820116820180604052508101906103149190610af0565b60015b156106bb578067ffffffffffffffff81111561033657610335610828565b5b60405190808252806020026020018201604052801561036f57816020015b61035c610786565b8152602001906001900390816103545790505b5083608001819052505f5b818110156106b8575f8573ffffffffffffffffffffffffffffffffffffffff166354c49fe9836040518263ffffffff1660e01b81526004016103bc9190610b2a565b602060405180830381865afa1580156103d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fb9190610a32565b9050610405610786565b5f8773ffffffffffffffffffffffffffffffffffffffff166348e9c65e846040518263ffffffff1660e01b815260040161043f9190610b52565b60a060405180830381865afa15801561045a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047e9190610bf8565b90505f83905083835f01515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610506573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061052e9190610cd3565b835f0151602001819052508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610581573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906105a99190610cd3565b835f0151604001819052508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106219190610af0565b835f01516060018181525050815f0151836020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081602001518360400181815250508160400151836060018181525050828860800151868151811061069c5761069b610a05565b5b602002602001018190525050505050808060010191505061037a565b50505b5b505b5b808484815181106106d3576106d2610a05565b5b60200260200101819052505050808060010191505061008f565b505f816040516020016107009190611049565b6040516020818303038152906040529050602081018059038082f35b5f80823b90505f8114915050919050565b6040518060a001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f8152602001606081525090565b60405180608001604052806107996107c7565b81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61085e82610818565b810181811067ffffffffffffffff8211171561087d5761087c610828565b5b80604052505050565b5f61088f610803565b905061089b8282610855565b919050565b5f67ffffffffffffffff8211156108ba576108b9610828565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108f8826108cf565b9050919050565b610908816108ee565b8114610912575f80fd5b50565b5f81519050610923816108ff565b92915050565b5f61093b610936846108a0565b610886565b9050808382526020820190506020840283018581111561095e5761095d6108cb565b5b835b8181101561098757806109738882610915565b845260208401935050602081019050610960565b5050509392505050565b5f82601f8301126109a5576109a4610814565b5b81516109b5848260208601610929565b91505092915050565b5f602082840312156109d3576109d261080c565b5b5f82015167ffffffffffffffff8111156109f0576109ef610810565b5b6109fc84828501610991565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215610a4757610a4661080c565b5b5f610a5484828501610915565b91505092915050565b5f8115159050919050565b610a7181610a5d565b8114610a7b575f80fd5b50565b5f81519050610a8c81610a68565b92915050565b5f60208284031215610aa757610aa661080c565b5b5f610ab484828501610a7e565b91505092915050565b5f819050919050565b610acf81610abd565b8114610ad9575f80fd5b50565b5f81519050610aea81610ac6565b92915050565b5f60208284031215610b0557610b0461080c565b5b5f610b1284828501610adc565b91505092915050565b610b2481610abd565b82525050565b5f602082019050610b3d5f830184610b1b565b92915050565b610b4c816108ee565b82525050565b5f602082019050610b655f830184610b43565b92915050565b5f80fd5b5f60a08284031215610b8457610b83610b6b565b5b610b8e60a0610886565b90505f610b9d84828501610915565b5f830152506020610bb084828501610adc565b6020830152506040610bc484828501610adc565b6040830152506060610bd884828501610adc565b6060830152506080610bec84828501610adc565b60808301525092915050565b5f60a08284031215610c0d57610c0c61080c565b5b5f610c1a84828501610b6f565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115610c4157610c40610828565b5b610c4a82610818565b9050602081019050919050565b8281835e5f83830152505050565b5f610c77610c7284610c27565b610886565b905082815260208101848484011115610c9357610c92610c23565b5b610c9e848285610c57565b509392505050565b5f82601f830112610cba57610cb9610814565b5b8151610cca848260208601610c65565b91505092915050565b5f60208284031215610ce857610ce761080c565b5b5f82015167ffffffffffffffff811115610d0557610d04610810565b5b610d1184828501610ca6565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610d4c816108ee565b82525050565b610d5b81610a5d565b82525050565b610d6a81610abd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f610dbd82610d99565b610dc78185610da3565b9350610dd7818560208601610c57565b610de081610818565b840191505092915050565b5f608083015f830151610e005f860182610d43565b5060208301518482036020860152610e188282610db3565b91505060408301518482036040860152610e328282610db3565b9150506060830151610e476060860182610d61565b508091505092915050565b5f608083015f8301518482035f860152610e6c8282610deb565b9150506020830151610e816020860182610d43565b506040830151610e946040860182610d61565b506060830151610ea76060860182610d61565b508091505092915050565b5f610ebd8383610e52565b905092915050565b5f602082019050919050565b5f610edb82610d70565b610ee58185610d7a565b935083602082028501610ef785610d8a565b805f5b85811015610f325784840389528151610f138582610eb2565b9450610f1e83610ec5565b925060208a01995050600181019050610efa565b50829750879550505050505092915050565b5f60a083015f830151610f595f860182610d43565b506020830151610f6c6020860182610d43565b506040830151610f7f6040860182610d52565b506060830151610f926060860182610d61565b5060808301518482036080860152610faa8282610ed1565b9150508091505092915050565b5f610fc28383610f44565b905092915050565b5f602082019050919050565b5f610fe082610d1a565b610fea8185610d24565b935083602082028501610ffc85610d34565b805f5b8581101561103757848403895281516110188582610fb7565b945061102383610fca565b925060208a01995050600181019050610fff565b50829750879550505050505092915050565b5f6020820190508181035f8301526110618184610fd6565b90509291505056fe',
26
26
  }
27
- ;('0x608060405234801561000f575f80fd5b506040516111ef3803806111ef83398181016040528101906100319190610abf565b5f815190505f8167ffffffffffffffff81111561005157610050610929565b5b60405190808252806020026020018201604052801561008a57816020015b610077610828565b81526020019060019003908161006f5790505b5090505f5b82811015610682575f8482815181106100ab576100aa610b06565b5b602002602001015190506100bd610828565b81815f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561015c57506040513d601f19601f820116820180604052508101906101599190610b33565b60015b1561019b5780826020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050505b8173ffffffffffffffffffffffffffffffffffffffff16639c868ac06040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561020357506040513d601f19601f820116820180604052508101906102009190610b93565b60015b1561065457808260400190151590811515815250505f15158115150361065257610232836106b160201b60201c565b8360600184608001828152508281525050508273ffffffffffffffffffffffffffffffffffffffff1663963c94b96040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156102ac57506040513d601f19601f820116820180604052508101906102a99190610bf1565b60015b15610651578067ffffffffffffffff8111156102cb576102ca610929565b5b60405190808252806020026020018201604052801561030457816020015b6102f1610887565b8152602001906001900390816102e95790505b508360a001819052505f5b8181101561064e575f8573ffffffffffffffffffffffffffffffffffffffff166354c49fe9836040518263ffffffff1660e01b81526004016103519190610c2b565b602060405180830381865afa15801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190610b33565b905061039a610887565b5f8773ffffffffffffffffffffffffffffffffffffffff166348e9c65e846040518263ffffffff1660e01b81526004016103d49190610c53565b60c060405180830381865afa1580156103ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104139190610d0d565b90505f83905083835f01515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801561049b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906104c39190610de8565b835f0151602001819052508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610516573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061053e9190610de8565b835f0151604001819052508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b69190610bf1565b835f015160600181815250508160200151836020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081604001518360400181815250508160600151836060018181525050828860a00151868151811061063257610631610b06565b5b602002602001018190525050505050808060010191505061030f565b50505b5b505b8084848151811061066857610667610b06565b5b60200260200101819052505050808060010191505061008f565b505f816040516020016106959190611171565b6040516020818303038152906040529050602081018059038082f35b5f808273ffffffffffffffffffffffffffffffffffffffff166317e280896040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561071b57506040513d601f19601f820116820180604052508101906107189190610bf1565b60015b1561072557809150505b8273ffffffffffffffffffffffffffffffffffffffff1663180692d06040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561078d57506040513d601f19601f8201168201806040525081019061078a9190610bf1565b60015b61081e578273ffffffffffffffffffffffffffffffffffffffff1663fadd59ab62093a80426107bc91906111be565b6040518263ffffffff1660e01b81526004016107d89190610c2b565b602060405180830381865afa1580156107f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108179190610bf1565b9150610823565b809250505b915091565b6040518060c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f81526020015f8152602001606081525090565b604051806080016040528061089a6108c8565b81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61095f82610919565b810181811067ffffffffffffffff8211171561097e5761097d610929565b5b80604052505050565b5f610990610904565b905061099c8282610956565b919050565b5f67ffffffffffffffff8211156109bb576109ba610929565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109f9826109d0565b9050919050565b610a09816109ef565b8114610a13575f80fd5b50565b5f81519050610a2481610a00565b92915050565b5f610a3c610a37846109a1565b610987565b90508083825260208201905060208402830185811115610a5f57610a5e6109cc565b5b835b81811015610a885780610a748882610a16565b845260208401935050602081019050610a61565b5050509392505050565b5f82601f830112610aa657610aa5610915565b5b8151610ab6848260208601610a2a565b91505092915050565b5f60208284031215610ad457610ad361090d565b5b5f82015167ffffffffffffffff811115610af157610af0610911565b5b610afd84828501610a92565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215610b4857610b4761090d565b5b5f610b5584828501610a16565b91505092915050565b5f8115159050919050565b610b7281610b5e565b8114610b7c575f80fd5b50565b5f81519050610b8d81610b69565b92915050565b5f60208284031215610ba857610ba761090d565b5b5f610bb584828501610b7f565b91505092915050565b5f819050919050565b610bd081610bbe565b8114610bda575f80fd5b50565b5f81519050610beb81610bc7565b92915050565b5f60208284031215610c0657610c0561090d565b5b5f610c1384828501610bdd565b91505092915050565b610c2581610bbe565b82525050565b5f602082019050610c3e5f830184610c1c565b92915050565b610c4d816109ef565b82525050565b5f602082019050610c665f830184610c44565b92915050565b5f80fd5b5f60c08284031215610c8557610c84610c6c565b5b610c8f60c0610987565b90505f610c9e84828501610a16565b5f830152506020610cb184828501610a16565b6020830152506040610cc584828501610bdd565b6040830152506060610cd984828501610bdd565b6060830152506080610ced84828501610bdd565b60808301525060a0610d0184828501610bdd565b60a08301525092915050565b5f60c08284031215610d2257610d2161090d565b5b5f610d2f84828501610c70565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115610d5657610d55610929565b5b610d5f82610919565b9050602081019050919050565b8281835e5f83830152505050565b5f610d8c610d8784610d3c565b610987565b905082815260208101848484011115610da857610da7610d38565b5b610db3848285610d6c565b509392505050565b5f82601f830112610dcf57610dce610915565b5b8151610ddf848260208601610d7a565b91505092915050565b5f60208284031215610dfd57610dfc61090d565b5b5f82015167ffffffffffffffff811115610e1a57610e19610911565b5b610e2684828501610dbb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610e61816109ef565b82525050565b610e7081610b5e565b82525050565b610e7f81610bbe565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f610ed282610eae565b610edc8185610eb8565b9350610eec818560208601610d6c565b610ef581610919565b840191505092915050565b5f608083015f830151610f155f860182610e58565b5060208301518482036020860152610f2d8282610ec8565b91505060408301518482036040860152610f478282610ec8565b9150506060830151610f5c6060860182610e76565b508091505092915050565b5f608083015f8301518482035f860152610f818282610f00565b9150506020830151610f966020860182610e58565b506040830151610fa96040860182610e76565b506060830151610fbc6060860182610e76565b508091505092915050565b5f610fd28383610f67565b905092915050565b5f602082019050919050565b5f610ff082610e85565b610ffa8185610e8f565b93508360208202850161100c85610e9f565b805f5b8581101561104757848403895281516110288582610fc7565b945061103383610fda565b925060208a0199505060018101905061100f565b50829750879550505050505092915050565b5f60c083015f83015161106e5f860182610e58565b5060208301516110816020860182610e58565b5060408301516110946040860182610e67565b5060608301516110a76060860182610e76565b5060808301516110ba6080860182610e76565b5060a083015184820360a08601526110d28282610fe6565b9150508091505092915050565b5f6110ea8383611059565b905092915050565b5f602082019050919050565b5f61110882610e2f565b6111128185610e39565b93508360208202850161112485610e49565b805f5b8581101561115f578484038952815161114085826110df565b945061114b836110f2565b925060208a01995050600181019050611127565b50829750879550505050505092915050565b5f6020820190508181035f83015261118981846110fe565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6111c882610bbe565b91506111d383610bbe565b9250826111e3576111e2611191565b5b82820490509291505056fe')
28
27
 
29
28
  export const gaugesWeightBytecode =
30
29
  '0x608060405234801561000f575f80fd5b506040516108573803806108578339818101604052810190610031919061047b565b5f732f50d538606fa9edd2b11e2446beb18c9d5846bb90505f82146100565781610058565b835b91505f838361006791906104f8565b67ffffffffffffffff8111156100805761007f61052b565b5b6040519080825280602002602001820160405280156100b957816020015b6100a661040a565b81526020019060019003908161009e5790505b5090505f8490505b838110156102e8575f8373ffffffffffffffffffffffffffffffffffffffff1663b0539187836040518263ffffffff1660e01b81526004016101039190610567565b602060405180830381865afa15801561011e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014291906105da565b905061014c61040a565b81815f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101928261031760201b60201c565b8160200181815250508473ffffffffffffffffffffffffffffffffffffffff166395cfcec3836040518263ffffffff1660e01b81526004016101d49190610614565b6020604051808303815f875af11580156101f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610214919061062d565b8160400181815250508473ffffffffffffffffffffffffffffffffffffffff16636472eee18362093a80426102499190610658565b6040518363ffffffff1660e01b815260040161026692919061068b565b6020604051808303815f875af1158015610282573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102a6919061062d565b816060018181525050808488856102bd91906104f8565b815181106102ce576102cd6106b2565b5b6020026020010181905250505080806001019150506100c1565b505f816040516020016102fb91906107f8565b6040516020818303038152906040529050602081018059038082f35b5f808290508073ffffffffffffffffffffffffffffffffffffffff166378de221b6040518163ffffffff1660e01b81526004016040805180830381865afa92505050801561038357506040513d601f19601f820116820180604052508101906103809190610818565b60015b6103fe578073ffffffffffffffffffffffffffffffffffffffff1663180692d06040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156103ef57506040513d601f19601f820116820180604052508101906103ec919061062d565b60015b156103f957809250505b610404565b81935050505b50919050565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81525090565b5f80fd5b5f819050919050565b61045a81610448565b8114610464575f80fd5b50565b5f8151905061047581610451565b92915050565b5f805f6060848603121561049257610491610444565b5b5f61049f86828701610467565b93505060206104b086828701610467565b92505060406104c186828701610467565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61050282610448565b915061050d83610448565b9250828203905081811115610525576105246104cb565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61056181610448565b82525050565b5f60208201905061057a5f830184610558565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6105a982610580565b9050919050565b6105b98161059f565b81146105c3575f80fd5b50565b5f815190506105d4816105b0565b92915050565b5f602082840312156105ef576105ee610444565b5b5f6105fc848285016105c6565b91505092915050565b61060e8161059f565b82525050565b5f6020820190506106275f830184610605565b92915050565b5f6020828403121561064257610641610444565b5b5f61064f84828501610467565b91505092915050565b5f61066282610448565b915061066d83610448565b9250828201905080821115610685576106846104cb565b5b92915050565b5f60408201905061069e5f830185610605565b6106ab6020830184610558565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6107118161059f565b82525050565b61072081610448565b82525050565b608082015f82015161073a5f850182610708565b50602082015161074d6020850182610717565b5060408201516107606040850182610717565b5060608201516107736060850182610717565b50505050565b5f6107848383610726565b60808301905092915050565b5f602082019050919050565b5f6107a6826106df565b6107b081856106e9565b93506107bb836106f9565b805f5b838110156107eb5781516107d28882610779565b97506107dd83610790565b9250506001810190506107be565b5085935050505092915050565b5f6020820190508181035f830152610810818461079c565b905092915050565b5f806040838503121561082e5761082d610444565b5b5f61083b85828601610467565b925050602061084c85828601610467565b915050925092905056fe'
@@ -5,6 +5,7 @@ import { mainnet } from 'viem/chains'
5
5
  import { LLAMA_API_URL } from '../../../../endpoints.js'
6
6
  import { getLlamaTokenPrefix, getPricesFromCurve } from '../../../../prices.js'
7
7
  import { batchJsonRpc, equalTlc } from '../../../../utils.js'
8
+ import { concatBytecode } from '../../../utils/index.js'
8
9
  import { handlePromise } from '../../../utils/promise.js'
9
10
  import { getCurveDataGaugesOutputTypeAbi } from './abi.js'
10
11
  import { gaugesBytecode } from './bytecode.js'
@@ -14,7 +15,7 @@ import type { GaugeWeight } from './getGaugesWeights.js'
14
15
  import { getPoolsFromRegistries } from './getPoolsFromRegistries.ts.js'
15
16
  import { getRegistries } from './getRegistries.js'
16
17
 
17
- export const fetchCurveBase = async (rpc: string, chainId: number, gaugesWeights: GaugeWeight[]) => {
18
+ export const getCurveApiData = async (rpc: string, chainId: number, gaugesWeights: GaugeWeight[]) => {
18
19
  const { lendingCallsStartIndex, poolCounts } = await getRegistries(rpc, chainId)
19
20
 
20
21
  const promises = await handlePromise(
@@ -52,7 +53,7 @@ export const fetchCurveBase = async (rpc: string, chainId: number, gaugesWeights
52
53
  const inputParams = [gauges]
53
54
 
54
55
  const inputData = encodeAbiParameters(parseAbiParameters(['address[] gauges']) as any, inputParams)
55
- return gaugesBytecode[chainId].concat(inputData.slice(2))
56
+ return concatBytecode(gaugesBytecode[chainId], inputData)
56
57
  })
57
58
 
58
59
  const gauges = await batchJsonRpc({
@@ -60,7 +61,7 @@ export const fetchCurveBase = async (rpc: string, chainId: number, gaugesWeights
60
61
  calls: gaugesCalls,
61
62
  outputTypeAbi: getCurveDataGaugesOutputTypeAbi,
62
63
  parse: false,
63
- callsKey: 'Fetch Curve Gauges',
64
+ callsKey: `strategies/curve/fetch/curveApiData/getCurveApiData.ts: gauges - chainId ${chainId} - rpc ${rpc}`,
64
65
  })
65
66
 
66
67
  const tokens = uniqBy(
@@ -2,6 +2,7 @@ import { contracts } from '@stake-dao/constants'
2
2
  import { range } from 'lodash-es'
3
3
  import { decodeAbiParameters, encodeAbiParameters, parseAbiParameters } from 'viem'
4
4
  import { batchJsonRpc, rpcCall } from '../../../../utils.js'
5
+ import { concatBytecode } from '../../../utils/index.js'
5
6
  import { gaugesRegistryBytecode } from './bytecode.js'
6
7
  import { GAUGES_REGISTRY_CHUNK_SIZE } from './config.js'
7
8
 
@@ -9,7 +10,10 @@ export const getGaugesFromRegistry = async (chainId: number, rpc: string): Promi
9
10
  const nGaugesRequest = await rpcCall(rpc, [
10
11
  {
11
12
  to: contracts.curveGaugeRegistry![1]!,
12
- data: `0x38f31214${encodeAbiParameters(parseAbiParameters(['uint256 chainId']) as any, [chainId]).slice(2)}`,
13
+ data: concatBytecode(
14
+ '0x38f31214',
15
+ encodeAbiParameters(parseAbiParameters(['uint256 chainId']) as any, [chainId]),
16
+ ),
13
17
  },
14
18
  ])
15
19
 
@@ -26,7 +30,7 @@ export const getGaugesFromRegistry = async (chainId: number, rpc: string): Promi
26
30
  parseAbiParameters(['uint256 chainId, uint256 skip, uint256 limit']) as any,
27
31
  inputParams,
28
32
  )
29
- return gaugesRegistryBytecode.concat(inputData.slice(2))
33
+ return concatBytecode(gaugesRegistryBytecode, inputData)
30
34
  })
31
35
 
32
36
  const gaugesFromRegistry = await batchJsonRpc({
@@ -34,7 +38,7 @@ export const getGaugesFromRegistry = async (chainId: number, rpc: string): Promi
34
38
  calls: gaugesRegistryCalls,
35
39
  outputTypeAbi: [{ type: 'address[]', name: 'returnData' }],
36
40
  parse: false,
37
- callsKey: 'Fetch Curve Gauges Weights',
41
+ callsKey: `strategies/curve/fetch/curveApiData/getGaugesFromRegistry.ts: gaugesFromRegistry - chainId ${chainId} - rpc ${rpc}`,
38
42
  })
39
43
 
40
44
  return gaugesFromRegistry
@@ -2,6 +2,7 @@ import { contracts } from '@stake-dao/constants'
2
2
  import { range } from 'lodash-es'
3
3
  import { decodeAbiParameters, encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem'
4
4
  import { batchJsonRpc, rpcCall } from '../../../../utils.js'
5
+ import { concatBytecode } from '../../../utils/index.js'
5
6
  import { getCurveDataGaugesWeightsOutputTypeAbi } from './abi.js'
6
7
  import { gaugesWeightBytecode } from './bytecode.js'
7
8
  import { GAUGES_WEIGHTS_CHUNK_SIZE } from './config.js'
@@ -31,7 +32,7 @@ export const getGaugesWeights = async (rpc: string): Promise<GaugesWeightsData>
31
32
  parseAbiParameters(['uint256 maxLength, uint256 skip, uint256 limit']) as any,
32
33
  inputParams,
33
34
  )
34
- return gaugesWeightBytecode.concat(inputData.slice(2))
35
+ return concatBytecode(gaugesWeightBytecode, inputData)
35
36
  })
36
37
 
37
38
  const gaugesWeights = await batchJsonRpc({
@@ -39,7 +40,7 @@ export const getGaugesWeights = async (rpc: string): Promise<GaugesWeightsData>
39
40
  calls: gaugesWeightsCalls,
40
41
  outputTypeAbi: getCurveDataGaugesWeightsOutputTypeAbi,
41
42
  parse: false,
42
- callsKey: 'Fetch Curve Gauges Weights',
43
+ callsKey: `strategies/curve/fetch/curveApiData/getGaugesWeights.ts: gaugesWeights - chainId ${1} - rpc ${rpc}`,
43
44
  })
44
45
 
45
46
  return {
@@ -1,6 +1,7 @@
1
1
  import { range } from 'lodash-es'
2
2
  import { encodeAbiParameters, parseAbiParameters } from 'viem'
3
3
  import { batchJsonRpc } from '../../../../utils.js'
4
+ import { concatBytecode } from '../../../utils/index.js'
4
5
  import { getCurveDataPoolsOutputTypeAbi } from './abi.js'
5
6
  import { curveApiDataBytecodes } from './bytecode.js'
6
7
  import { CHUNK_SIZE } from './config.js'
@@ -18,7 +19,7 @@ export const getPoolsFromRegistries = async (rpc: string, lendingCallsStartIndex
18
19
  parseAbiParameters(['address _registry, uint256 skip, uint256 limit']) as any,
19
20
  inputParams,
20
21
  )
21
- return curveApiDataBytecodes[registry.bytecodeIndex]?.concat(inputData.slice(2))
22
+ return concatBytecode(curveApiDataBytecodes[registry.bytecodeIndex]!, inputData)
22
23
  }),
23
24
  )
24
25
 
@@ -29,7 +30,7 @@ export const getPoolsFromRegistries = async (rpc: string, lendingCallsStartIndex
29
30
  getCurveDataPoolsOutputTypeAbi(index >= lendingCallsStartIndex),
30
31
  ),
31
32
  parse: false,
32
- callsKey: 'Fetch Curve Apis Data',
33
+ callsKey: `strategies/curve/fetch/curveApiData/getPoolsFromRegistries.ts: pools - rpc ${rpc}`,
33
34
  })
34
35
 
35
36
  return pools
@@ -1,8 +1,16 @@
1
1
  import { formatUnits } from 'viem'
2
2
 
3
3
  import { ONE_YEAR, curveStrats, mainnet, tokenWithId } from '@stake-dao/constants'
4
+ import type { Price } from '../../../prices.js'
4
5
  import { equalTlc } from '../../../utils.js'
5
- import type { CurveGlobalData, OnlyBoostData, RewardsData, StrategyData } from '../../types.js'
6
+ import type {
7
+ CurveGlobalData,
8
+ OnlyBoostData,
9
+ RewardsData,
10
+ StrategyData,
11
+ ValidChainId,
12
+ ValidExplorer,
13
+ } from '../../types.js'
6
14
  import { getBoost } from '../../utils/boost.js'
7
15
  import decodeEtherscanFactoryEvent, { decodeNewFactoryEvent } from '../../utils/decodeEtherscanFactoryEvent.js'
8
16
  import { getAprBreakdown } from '../../utils/getAprBreakdown.js'
@@ -16,17 +24,29 @@ import { getCvxApr } from './getCvxApr.js'
16
24
  import getOnlyboostData from './getOnlyboostData.js'
17
25
  import { getCurveStratsWithApr } from './getStratsWithApr.js'
18
26
 
19
- export const fetchCurve = async (
20
- prices: any, // TODO Type
21
- provider: any,
22
- rpc: string,
23
- explorerApiKey: string,
24
- explorer: string,
25
- chainId: number,
26
- lastBlockNumber: number,
27
- sdtEmissionData: SdtEmissionData,
28
- gaugesWeights: GaugesWeightsData,
29
- ): Promise<StrategyData> => {
27
+ interface TFetchCurve {
28
+ prices: Price[]
29
+ provider: any
30
+ rpc: string
31
+ explorerApiKey: string
32
+ explorer: ValidExplorer
33
+ chainId: ValidChainId
34
+ lastBlockNumber: number
35
+ sdtEmissionData: SdtEmissionData
36
+ gaugesWeights: GaugesWeightsData
37
+ }
38
+
39
+ export const fetchCurve = async ({
40
+ prices,
41
+ provider,
42
+ rpc,
43
+ explorerApiKey,
44
+ explorer,
45
+ chainId,
46
+ lastBlockNumber,
47
+ sdtEmissionData,
48
+ gaugesWeights,
49
+ }: TFetchCurve): Promise<StrategyData> => {
30
50
  const apisData = await getCurveHttpCalls(explorerApiKey, explorer, rpc, chainId, lastBlockNumber, gaugesWeights)
31
51
 
32
52
  const newVaultAndLp =
@@ -178,7 +198,20 @@ export const fetchCurve = async (
178
198
  const apr = getAprBreakdown(strat, rewardsData, boost, sdtApr, cvxApr)
179
199
 
180
200
  return {
181
- ...strat,
201
+ key: strat.key,
202
+ name: strat.name,
203
+ type: strat.type,
204
+ protocol: strat.protocol,
205
+ chainId: strat.chainId,
206
+ isMetapool: strat.isMetapool,
207
+ isLending: strat.isLending,
208
+ vault: strat.vault,
209
+ lpToken: strat.lpToken,
210
+ gaugeAddress: strat.gaugeAddress,
211
+ coins: strat.coins,
212
+ underlyingCoins: strat.underlyingCoins,
213
+ sdGauge,
214
+ lpPriceInUsd: strat.lpPriceInUsd,
182
215
  tvl,
183
216
  apr: {
184
217
  boost,
@@ -202,12 +235,17 @@ export const fetchCurve = async (
202
235
  },
203
236
  sdtApr,
204
237
  rewards: rewardsData,
205
-
238
+ // Base APR data
239
+ tradingApy: strat.tradingApy,
240
+ gaugesProjectedApr: strat.gaugesProjectedApr,
241
+ minApr: strat.minApr,
242
+ maxApr: strat.maxApr,
243
+ // Raw data
206
244
  vaultHoldings: formatUnits(v.vaultHoldings, 0),
207
245
  totalSupply,
208
246
  strategyHoldings: formatUnits(v.strategyHoldings, 0),
209
247
  workingBalance: formatUnits(v.workingBalance, 0),
210
- sdGauge,
248
+ // Gas optimised
211
249
  vaultFees:
212
250
  chainId === mainnet.id
213
251
  ? {
@@ -6,7 +6,7 @@ import {
6
6
  FACTORY_EXPLORER_EVENTS,
7
7
  NEW_FACTORY_EXPLORER_EVENTS,
8
8
  } from './endpoints.js'
9
- import { fetchCurveBase } from './fetch/curveApiData/getCurveApiData.js'
9
+ import { getCurveApiData } from './fetch/curveApiData/getCurveApiData.js'
10
10
  import { type GaugesWeightsData } from './fetch/curveApiData/getGaugesWeights.js'
11
11
 
12
12
  export const getCurveHttpCalls = async (
@@ -32,7 +32,7 @@ export const getCurveHttpCalls = async (
32
32
  )
33
33
  ).json(),
34
34
  // Curve Data (replace APIs calls)
35
- fetchCurveBase(rpc, chainId, gaugesWeights.gauges),
35
+ getCurveApiData(rpc, chainId, gaugesWeights.gauges),
36
36
  // Curve Trading Apy API
37
37
  (await fetch(`${CURVE_API_URL}/getSubgraphData/ethereum`)).json(),
38
38
  // Convex API for OnlyBoost
@@ -67,7 +67,7 @@ export const getCurveHttpCalls = async (
67
67
  )
68
68
  ).json(),
69
69
  // Curve Data (replace APIs calls)
70
- fetchCurveBase(rpc, chainId, gaugesWeights.gauges),
70
+ getCurveApiData(rpc, chainId, gaugesWeights.gauges),
71
71
  // Curve Trading Apy API
72
72
  (await fetch(`${CURVE_API_URL}/getSubgraphData/arbitrum`)).json(),
73
73
  ]
@@ -1,8 +1,9 @@
1
1
  import { contract, mainnet } from '@stake-dao/constants'
2
2
  import { chunk } from 'lodash-es'
3
3
  import { encodeAbiParameters, parseAbiParameters } from 'viem'
4
- import { batchCurveStrats } from '../../batches/index.js'
4
+ import { batchCurveStrats } from '../../bytecodes/index.js'
5
5
  import { batchJsonRpc } from '../../utils.js'
6
+ import { concatBytecode } from '../utils/index.js'
6
7
 
7
8
  export const getOnChainSdCurveData = async (chainId: number, rpc: string, calls: any[]) => {
8
9
  const inputArgsChunks = chunk(calls, 12)
@@ -22,7 +23,7 @@ export const getOnChainSdCurveData = async (chainId: number, rpc: string, calls:
22
23
  parseAbiParameters(batchCurveStrats.inputType[chainId] || []) as any,
23
24
  inputParams,
24
25
  )
25
- return batchCurveStrats.bytecode[chainId]?.concat(inputData.slice(2)) as string
26
+ return concatBytecode(batchCurveStrats.bytecode[chainId]!, inputData)
26
27
  })
27
28
 
28
29
  const decodedPromise = await batchJsonRpc({
@@ -30,6 +31,7 @@ export const getOnChainSdCurveData = async (chainId: number, rpc: string, calls:
30
31
  calls: allContractCreationCodes,
31
32
  outputTypeAbi: batchCurveStrats.outputType ? batchCurveStrats.outputType[chainId] : [],
32
33
  parse: false,
34
+ callsKey: `strategies/curve/onChainCalls.ts: getOnChainSdCurveData - chainId ${chainId} - rpc ${rpc}`,
33
35
  })
34
36
 
35
37
  return decodedPromise