@paraswap/dex-lib 3.8.2 → 3.8.3

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 (346) hide show
  1. package/.vscode/launch.json +13 -0
  2. package/.vscode/settings.json +3 -0
  3. package/build/abi/AaveV1_lending_pool.json +27 -0
  4. package/build/abi/Uncompressor.json +250 -0
  5. package/build/abi/integral/factory.json +333 -0
  6. package/build/abi/integral/oracle.json +501 -0
  7. package/build/abi/integral/pool.json +1041 -0
  8. package/build/abi/integral/relayer.json +1536 -0
  9. package/build/abi/oswap/oswap.abi.json +452 -0
  10. package/build/abi/platypus/asset.json +490 -0
  11. package/build/abi/platypus/avax-pool.json +820 -0
  12. package/build/abi/platypus/oracle.json +119 -0
  13. package/build/abi/platypus/pool.json +677 -0
  14. package/build/abi/smardex/all/smardex-router.json +648 -0
  15. package/build/abi/smardex/layer-1/smardex-factory.json +242 -0
  16. package/build/abi/smardex/layer-1/smardex-pool.json +506 -0
  17. package/build/abi/smardex/layer-2/smardex-factory.json +185 -0
  18. package/build/abi/smardex/layer-2/smardex-pool.json +578 -0
  19. package/build/abi/swaap-v1/pool.json +1346 -0
  20. package/build/dex/aave-v1/aave-v1.d.ts +33 -0
  21. package/build/dex/aave-v1/aave-v1.js +158 -0
  22. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  23. package/build/dex/aave-v1/config.d.ts +11 -0
  24. package/build/dex/aave-v1/config.js +20 -0
  25. package/build/dex/aave-v1/config.js.map +1 -0
  26. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  27. package/build/dex/aave-v1/tokens.d.ts +3 -0
  28. package/build/dex/aave-v1/tokens.js +50 -0
  29. package/build/dex/aave-v1/tokens.js.map +1 -0
  30. package/build/dex/aave-v1/types.d.ts +12 -0
  31. package/build/dex/aave-v1/types.js +3 -0
  32. package/build/dex/aave-v1/types.js.map +1 -0
  33. package/build/dex/aave-v3/aave-v3.js +2 -1
  34. package/build/dex/aave-v3/aave-v3.js.map +1 -1
  35. package/build/dex/aave-v3-stata/aave-v3-stata.js +1 -0
  36. package/build/dex/aave-v3-stata/aave-v3-stata.js.map +1 -1
  37. package/build/dex/angle-staked-stable/angle-staked-stable.js +4 -1
  38. package/build/dex/angle-staked-stable/angle-staked-stable.js.map +1 -1
  39. package/build/dex/bProtocol.d.ts +18 -0
  40. package/build/dex/bProtocol.js +39 -0
  41. package/build/dex/bProtocol.js.map +1 -0
  42. package/build/dex/bancor.d.ts +26 -0
  43. package/build/dex/bancor.js +58 -0
  44. package/build/dex/bancor.js.map +1 -0
  45. package/build/dex/compound/compound.js +2 -1
  46. package/build/dex/compound/compound.js.map +1 -1
  47. package/build/dex/compound.d.ts +18 -0
  48. package/build/dex/compound.js +46 -0
  49. package/build/dex/compound.js.map +1 -0
  50. package/build/dex/curve-v2.d.ts +58 -0
  51. package/build/dex/curve-v2.js +180 -0
  52. package/build/dex/curve-v2.js.map +1 -0
  53. package/build/dex/dodo-v1.d.ts +33 -0
  54. package/build/dex/dodo-v1.js +63 -0
  55. package/build/dex/dodo-v1.js.map +1 -0
  56. package/build/dex/etherfi/etherfi.d.ts +26 -0
  57. package/build/dex/etherfi/etherfi.js +96 -0
  58. package/build/dex/etherfi/etherfi.js.map +1 -0
  59. package/build/dex/etherfi.js +4 -1
  60. package/build/dex/etherfi.js.map +1 -1
  61. package/build/dex/idle-dao/idle-dao.js +1 -0
  62. package/build/dex/idle-dao/idle-dao.js.map +1 -1
  63. package/build/dex/integral/config.d.ts +4 -0
  64. package/build/dex/integral/config.js +20 -0
  65. package/build/dex/integral/config.js.map +1 -0
  66. package/build/dex/integral/context.d.ts +33 -0
  67. package/build/dex/integral/context.js +98 -0
  68. package/build/dex/integral/context.js.map +1 -0
  69. package/build/dex/integral/helpers.d.ts +17 -0
  70. package/build/dex/integral/helpers.js +157 -0
  71. package/build/dex/integral/helpers.js.map +1 -0
  72. package/build/dex/integral/integral-factory.d.ts +21 -0
  73. package/build/dex/integral/integral-factory.js +92 -0
  74. package/build/dex/integral/integral-factory.js.map +1 -0
  75. package/build/dex/integral/integral-pool.d.ts +46 -0
  76. package/build/dex/integral/integral-pool.js +143 -0
  77. package/build/dex/integral/integral-pool.js.map +1 -0
  78. package/build/dex/integral/integral-pricing.d.ts +18 -0
  79. package/build/dex/integral/integral-pricing.js +114 -0
  80. package/build/dex/integral/integral-pricing.js.map +1 -0
  81. package/build/dex/integral/integral-relayer.d.ts +39 -0
  82. package/build/dex/integral/integral-relayer.js +189 -0
  83. package/build/dex/integral/integral-relayer.js.map +1 -0
  84. package/build/dex/integral/integral-token.d.ts +22 -0
  85. package/build/dex/integral/integral-token.js +55 -0
  86. package/build/dex/integral/integral-token.js.map +1 -0
  87. package/build/dex/integral/integral.d.ts +41 -0
  88. package/build/dex/integral/integral.js +382 -0
  89. package/build/dex/integral/integral.js.map +1 -0
  90. package/build/dex/integral/types.d.ts +84 -0
  91. package/build/dex/integral/types.js +9 -0
  92. package/build/dex/integral/types.js.map +1 -0
  93. package/build/dex/integral/utils.d.ts +6 -0
  94. package/build/dex/integral/utils.js +23 -0
  95. package/build/dex/integral/utils.js.map +1 -0
  96. package/build/dex/lido.d.ts +19 -0
  97. package/build/dex/lido.js +42 -0
  98. package/build/dex/lido.js.map +1 -0
  99. package/build/dex/mStable.js +1 -1
  100. package/build/dex/mStable.js.map +1 -1
  101. package/build/dex/onebit.d.ts +25 -0
  102. package/build/dex/onebit.js +42 -0
  103. package/build/dex/onebit.js.map +1 -0
  104. package/build/dex/oswap/config.d.ts +5 -0
  105. package/build/dex/oswap/config.js +31 -0
  106. package/build/dex/oswap/config.js.map +1 -0
  107. package/build/dex/oswap/oswap-pool.d.ts +51 -0
  108. package/build/dex/oswap/oswap-pool.js +150 -0
  109. package/build/dex/oswap/oswap-pool.js.map +1 -0
  110. package/build/dex/oswap/oswap.d.ts +46 -0
  111. package/build/dex/oswap/oswap.js +266 -0
  112. package/build/dex/oswap/oswap.js.map +1 -0
  113. package/build/dex/oswap/types.d.ts +20 -0
  114. package/build/dex/oswap/types.js +3 -0
  115. package/build/dex/oswap/types.js.map +1 -0
  116. package/build/dex/platypus/asset.d.ts +14 -0
  117. package/build/dex/platypus/asset.js +97 -0
  118. package/build/dex/platypus/asset.js.map +1 -0
  119. package/build/dex/platypus/config.d.ts +11 -0
  120. package/build/dex/platypus/config.js +69 -0
  121. package/build/dex/platypus/config.js.map +1 -0
  122. package/build/dex/platypus/platypus.d.ts +62 -0
  123. package/build/dex/platypus/platypus.js +442 -0
  124. package/build/dex/platypus/platypus.js.map +1 -0
  125. package/build/dex/platypus/pool-avax.d.ts +8 -0
  126. package/build/dex/platypus/pool-avax.js +54 -0
  127. package/build/dex/platypus/pool-avax.js.map +1 -0
  128. package/build/dex/platypus/pool-base.d.ts +19 -0
  129. package/build/dex/platypus/pool-base.js +86 -0
  130. package/build/dex/platypus/pool-base.js.map +1 -0
  131. package/build/dex/platypus/pool-pure.d.ts +8 -0
  132. package/build/dex/platypus/pool-pure.js +37 -0
  133. package/build/dex/platypus/pool-pure.js.map +1 -0
  134. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  135. package/build/dex/platypus/pool-subscriber.js +167 -0
  136. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  137. package/build/dex/platypus/pool.d.ts +8 -0
  138. package/build/dex/platypus/pool.js +58 -0
  139. package/build/dex/platypus/pool.js.map +1 -0
  140. package/build/dex/platypus/types.d.ts +92 -0
  141. package/build/dex/platypus/types.js +10 -0
  142. package/build/dex/platypus/types.js.map +1 -0
  143. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  144. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  145. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  146. package/build/dex/sdai/config.d.ts +11 -0
  147. package/build/dex/sdai/config.js +21 -0
  148. package/build/dex/sdai/config.js.map +1 -0
  149. package/build/dex/sdai/constants.d.ts +2 -0
  150. package/build/dex/sdai/constants.js +6 -0
  151. package/build/dex/sdai/constants.js.map +1 -0
  152. package/build/dex/sdai/scripts/validate-state.d.ts +1 -0
  153. package/build/dex/sdai/scripts/validate-state.js +102 -0
  154. package/build/dex/sdai/scripts/validate-state.js.map +1 -0
  155. package/build/dex/sdai/sdai-pool.d.ts +16 -0
  156. package/build/dex/sdai/sdai-pool.js +85 -0
  157. package/build/dex/sdai/sdai-pool.js.map +1 -0
  158. package/build/dex/sdai/sdai.d.ts +51 -0
  159. package/build/dex/sdai/sdai.js +172 -0
  160. package/build/dex/sdai/sdai.js.map +1 -0
  161. package/build/dex/sdai/types.d.ts +21 -0
  162. package/build/dex/sdai/types.js +11 -0
  163. package/build/dex/sdai/types.js.map +1 -0
  164. package/build/dex/sdai/utils.d.ts +4 -0
  165. package/build/dex/sdai/utils.js +39 -0
  166. package/build/dex/sdai/utils.js.map +1 -0
  167. package/build/dex/simple-exchange.d.ts +1 -1
  168. package/build/dex/simple-exchange.js +4 -2
  169. package/build/dex/simple-exchange.js.map +1 -1
  170. package/build/dex/smardex/config.d.ts +4 -0
  171. package/build/dex/smardex/config.js +64 -0
  172. package/build/dex/smardex/config.js.map +1 -0
  173. package/build/dex/smardex/constants.d.ts +18 -0
  174. package/build/dex/smardex/constants.js +33 -0
  175. package/build/dex/smardex/constants.js.map +1 -0
  176. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  177. package/build/dex/smardex/sdk/constants.js +13 -0
  178. package/build/dex/smardex/sdk/constants.js.map +1 -0
  179. package/build/dex/smardex/sdk/core.d.ts +113 -0
  180. package/build/dex/smardex/sdk/core.js +499 -0
  181. package/build/dex/smardex/sdk/core.js.map +1 -0
  182. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  183. package/build/dex/smardex/sdk/errors.js +22 -0
  184. package/build/dex/smardex/sdk/errors.js.map +1 -0
  185. package/build/dex/smardex/sdk/types.d.ts +62 -0
  186. package/build/dex/smardex/sdk/types.js +3 -0
  187. package/build/dex/smardex/sdk/types.js.map +1 -0
  188. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  189. package/build/dex/smardex/sdk/utils.js +133 -0
  190. package/build/dex/smardex/sdk/utils.js.map +1 -0
  191. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  192. package/build/dex/smardex/smardex-event-pool.js +119 -0
  193. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  194. package/build/dex/smardex/smardex.d.ts +65 -0
  195. package/build/dex/smardex/smardex.js +519 -0
  196. package/build/dex/smardex/smardex.js.map +1 -0
  197. package/build/dex/smardex/types.d.ts +55 -0
  198. package/build/dex/smardex/types.js +3 -0
  199. package/build/dex/smardex/types.js.map +1 -0
  200. package/build/dex/smoothy.d.ts +26 -0
  201. package/build/dex/smoothy.js +48 -0
  202. package/build/dex/smoothy.js.map +1 -0
  203. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  204. package/build/dex/solidly/forks-override/cone.js +53 -0
  205. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  206. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  207. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  208. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  209. package/build/dex/spark/spark.js +2 -1
  210. package/build/dex/spark/spark.js.map +1 -1
  211. package/build/dex/stable-pool.d.ts +28 -0
  212. package/build/dex/stable-pool.js +62 -0
  213. package/build/dex/stable-pool.js.map +1 -0
  214. package/build/dex/swaap-v1/config.d.ts +17 -0
  215. package/build/dex/swaap-v1/config.js +56 -0
  216. package/build/dex/swaap-v1/config.js.map +1 -0
  217. package/build/dex/swaap-v1/constants.d.ts +6 -0
  218. package/build/dex/swaap-v1/constants.js +17 -0
  219. package/build/dex/swaap-v1/constants.js.map +1 -0
  220. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  221. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  222. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  223. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  224. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  225. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  226. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  227. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  228. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  229. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  230. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  231. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  232. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  233. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  234. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  235. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  236. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  237. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  238. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  239. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  240. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  241. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  242. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  243. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  244. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  245. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  246. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  247. package/build/dex/swaap-v1/swaap-v1.d.ts +61 -0
  248. package/build/dex/swaap-v1/swaap-v1.js +369 -0
  249. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  250. package/build/dex/swaap-v1/types.d.ts +106 -0
  251. package/build/dex/swaap-v1/types.js +9 -0
  252. package/build/dex/swaap-v1/types.js.map +1 -0
  253. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  254. package/build/dex/trader-joe-v2.1.js +79 -0
  255. package/build/dex/trader-joe-v2.1.js.map +1 -0
  256. package/build/executor/Executor01BytecodeBuilder.js +3 -1
  257. package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
  258. package/build/executor/Executor02BytecodeBuilder.js +3 -1
  259. package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
  260. package/build/executor/Executor03BytecodeBuilder.js +2 -0
  261. package/build/executor/Executor03BytecodeBuilder.js.map +1 -1
  262. package/build/executor/ExecutorBytecodeBuilder.js +2 -0
  263. package/build/executor/ExecutorBytecodeBuilder.js.map +1 -1
  264. package/build/executor/compressor/Compressor.d.ts +23 -0
  265. package/build/executor/compressor/Compressor.js +144 -0
  266. package/build/executor/compressor/Compressor.js.map +1 -0
  267. package/build/executor/compressor/compress.d.ts +17 -0
  268. package/build/executor/compressor/compress.js +187 -0
  269. package/build/executor/compressor/compress.js.map +1 -0
  270. package/build/executor/compressor/compress_functions/addressSubstitution.d.ts +6 -0
  271. package/build/executor/compressor/compress_functions/addressSubstitution.js +29 -0
  272. package/build/executor/compressor/compress_functions/addressSubstitution.js.map +1 -0
  273. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.d.ts +10 -0
  274. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js +40 -0
  275. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js.map +1 -0
  276. package/build/executor/compressor/compress_functions/byteSubstitution.d.ts +11 -0
  277. package/build/executor/compressor/compress_functions/byteSubstitution.js +64 -0
  278. package/build/executor/compressor/compress_functions/byteSubstitution.js.map +1 -0
  279. package/build/executor/compressor/compress_functions/ffSubstitution.d.ts +7 -0
  280. package/build/executor/compressor/compress_functions/ffSubstitution.js +54 -0
  281. package/build/executor/compressor/compress_functions/ffSubstitution.js.map +1 -0
  282. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.d.ts +8 -0
  283. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js +67 -0
  284. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js.map +1 -0
  285. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.d.ts +8 -0
  286. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js +61 -0
  287. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js.map +1 -0
  288. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.d.ts +6 -0
  289. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js +37 -0
  290. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js.map +1 -0
  291. package/build/executor/compressor/compress_functions/searchUnusedBytes.d.ts +9 -0
  292. package/build/executor/compressor/compress_functions/searchUnusedBytes.js +33 -0
  293. package/build/executor/compressor/compress_functions/searchUnusedBytes.js.map +1 -0
  294. package/build/executor/compressor/fetchSaved.d.ts +0 -0
  295. package/build/executor/compressor/fetchSaved.js +17 -0
  296. package/build/executor/compressor/fetchSaved.js.map +1 -0
  297. package/build/executor/compressor/utils/computeCostL2.d.ts +2 -0
  298. package/build/executor/compressor/utils/computeCostL2.js +14 -0
  299. package/build/executor/compressor/utils/computeCostL2.js.map +1 -0
  300. package/build/executor/compressor/utils/findLongestDuplicatedString.d.ts +2 -0
  301. package/build/executor/compressor/utils/findLongestDuplicatedString.js +30 -0
  302. package/build/executor/compressor/utils/findLongestDuplicatedString.js.map +1 -0
  303. package/build/executor/compressor/utils/getAllIndexes.d.ts +2 -0
  304. package/build/executor/compressor/utils/getAllIndexes.js +12 -0
  305. package/build/executor/compressor/utils/getAllIndexes.js.map +1 -0
  306. package/build/executor/compressor/utils/getByteForAddress.d.ts +2 -0
  307. package/build/executor/compressor/utils/getByteForAddress.js +14 -0
  308. package/build/executor/compressor/utils/getByteForAddress.js.map +1 -0
  309. package/build/executor/compressor/utils/intTo2Bytes.d.ts +2 -0
  310. package/build/executor/compressor/utils/intTo2Bytes.js +14 -0
  311. package/build/executor/compressor/utils/intTo2Bytes.js.map +1 -0
  312. package/build/executor/compressor/utils/intTo3Bytes.d.ts +2 -0
  313. package/build/executor/compressor/utils/intTo3Bytes.js +18 -0
  314. package/build/executor/compressor/utils/intTo3Bytes.js.map +1 -0
  315. package/build/executor/compressor/utils/intToByte.d.ts +2 -0
  316. package/build/executor/compressor/utils/intToByte.js +10 -0
  317. package/build/executor/compressor/utils/intToByte.js.map +1 -0
  318. package/build/types.d.ts +1 -0
  319. package/package.json +1 -1
  320. package/src/dex/aave-v3/aave-v3-e2e.test.ts +4 -9
  321. package/src/dex/aave-v3/aave-v3.ts +5 -0
  322. package/src/dex/aave-v3-stata/aave-v3-stata.ts +1 -0
  323. package/src/dex/angle-staked-stable/angle-staked-stable.ts +8 -0
  324. package/src/dex/compound/compound.ts +5 -0
  325. package/src/dex/etherfi.ts +5 -0
  326. package/src/dex/idle-dao/idle-dao.ts +1 -0
  327. package/src/dex/simple-exchange.ts +5 -5
  328. package/src/dex/spark/spark-e2e.test.ts +9 -1
  329. package/src/dex/spark/spark.ts +5 -0
  330. package/src/executor/Executor01BytecodeBuilder.ts +3 -1
  331. package/src/executor/Executor02BytecodeBuilder.ts +3 -1
  332. package/src/executor/Executor03BytecodeBuilder.ts +2 -0
  333. package/src/executor/ExecutorBytecodeBuilder.ts +2 -0
  334. package/src/executor/executor01-bytecode-builder-e2e.test.ts +25 -0
  335. package/src/executor/executor02-bytecode-builder-e2e.test.ts +29 -0
  336. package/src/types.ts +1 -0
  337. package/tests/constants-e2e.ts +13 -13
  338. package/tests/utils-e2e.ts +1 -1
  339. package/.idea/aws.xml +0 -17
  340. package/.idea/codeStyles/Project.xml +0 -19
  341. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  342. package/.idea/misc.xml +0 -6
  343. package/.idea/modules.xml +0 -8
  344. package/.idea/paraswap-dex-lib.iml +0 -9
  345. package/.idea/prettier.xml +0 -7
  346. package/.idea/vcs.xml +0 -6
@@ -0,0 +1,656 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SwaapV1Pool = void 0;
7
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
8
+ const pool_json_1 = __importDefault(require("../../abi/swaap-v1/pool.json"));
9
+ const chainlink_json_1 = __importDefault(require("../../abi/chainlink.json"));
10
+ const erc20_json_1 = __importDefault(require("../../abi/erc20.json"));
11
+ const abi_1 = require("@ethersproject/abi");
12
+ const bytes_1 = require("@ethersproject/bytes");
13
+ class SwaapV1Pool extends stateful_event_subscriber_1.StatefulEventSubscriber {
14
+ constructor(dexKey, network, pool, dexHelper) {
15
+ super(dexKey, pool.id, dexHelper, dexHelper.getLogger(`${dexKey}-${network}-${pool.id}`));
16
+ this.pool = pool;
17
+ this.dexHelper = dexHelper;
18
+ this.id = pool.id;
19
+ this.tokens = pool.tokens.map(t => t.address);
20
+ this.addressesSubscribed = [pool.id];
21
+ this.oracleTokenMap = pool.tokens.reduce((acc, t) => {
22
+ this.addressesSubscribed.push(t.oracleInitialState.aggregator.toLowerCase());
23
+ return {
24
+ ...acc,
25
+ [t.oracleInitialState.aggregator.toLowerCase()]: t.address,
26
+ };
27
+ }, {});
28
+ }
29
+ // Function which transforms the given state for the given log event.
30
+ // If the provided log does not affect the state, return null.
31
+ async processLog(state, log, blockHeader) {
32
+ try {
33
+ const tokenAddress = this.oracleTokenMap[log.address.toLowerCase()];
34
+ if (tokenAddress) {
35
+ // log comes from a subscribed oracle
36
+ if (log.topics[0] != SwaapV1Pool.ANSWER_UPDATED_TOPIC)
37
+ return null;
38
+ const decoded = SwaapV1Pool.proxyInterface.decodeEventLog('AnswerUpdated', log.data, log.topics);
39
+ const latestRoundId = Number(decoded.roundId.toString());
40
+ const latestRoundData = {
41
+ answer: BigInt(decoded.current.toString()),
42
+ timestamp: BigInt(decoded.updatedAt.toString()),
43
+ };
44
+ let previousRoundId = state.oracles[tokenAddress].latestRoundId;
45
+ if (previousRoundId == latestRoundId) {
46
+ return null;
47
+ }
48
+ let updatedHistoricalState = {
49
+ ...state.oracles[tokenAddress].historicalOracleState,
50
+ };
51
+ const roundLookbackWindow = (state.parameters.priceStatisticsLookbackInRound - 1) *
52
+ state.parameters.priceStatisticsLookbackStepInRound;
53
+ // Case where roundIds are skipped
54
+ while (latestRoundId > previousRoundId + 1) {
55
+ delete updatedHistoricalState[previousRoundId - roundLookbackWindow];
56
+ updatedHistoricalState[++previousRoundId] = {
57
+ answer: 0n,
58
+ timestamp: 0n,
59
+ };
60
+ }
61
+ delete updatedHistoricalState[previousRoundId - roundLookbackWindow];
62
+ updatedHistoricalState[latestRoundId] = latestRoundData;
63
+ return {
64
+ ...state,
65
+ oracles: {
66
+ ...state.oracles,
67
+ [tokenAddress]: {
68
+ ...state.oracles[tokenAddress],
69
+ latestRoundId: latestRoundId,
70
+ historicalOracleState: updatedHistoricalState,
71
+ },
72
+ },
73
+ };
74
+ }
75
+ else if (this.pool.id === log.address.toLowerCase()) {
76
+ // log comes from the Pool
77
+ // Check if the event is anonymous or not
78
+ let isAnonymousEvent = true;
79
+ const nameOrSignatureOrTopic = log.topics[0];
80
+ if ((0, bytes_1.isHexString)(nameOrSignatureOrTopic)) {
81
+ const topichash = nameOrSignatureOrTopic.toLowerCase();
82
+ for (const name of Object.keys(SwaapV1Pool.poolInterface.events)) {
83
+ if (topichash === SwaapV1Pool.poolInterface.getEventTopic(name)) {
84
+ isAnonymousEvent = false;
85
+ break;
86
+ }
87
+ }
88
+ }
89
+ if (isAnonymousEvent) {
90
+ // anonymous events
91
+ const topic0 = log.topics[0];
92
+ switch (topic0) {
93
+ // setSwapFee
94
+ case SwaapV1Pool.SWAP_FEE_TOPIC: {
95
+ const value = BigInt(SwaapV1Pool.getValueFromAnonymousEvent(log));
96
+ return {
97
+ ...state,
98
+ parameters: {
99
+ ...state.parameters,
100
+ swapFee: value,
101
+ },
102
+ };
103
+ }
104
+ // setPriceStatisticsLookbackInRound
105
+ case SwaapV1Pool.LB_IN_ROUND_TOPIC: {
106
+ const value = Number(SwaapV1Pool.getValueFromAnonymousEvent(log));
107
+ const oldRoundLookbackWindow = (state.parameters.priceStatisticsLookbackInRound - 1) *
108
+ state.parameters.priceStatisticsLookbackStepInRound;
109
+ const newRoundLookbackWindow = (value - 1) *
110
+ state.parameters.priceStatisticsLookbackStepInRound;
111
+ const tokens = Object.keys(state.oracles);
112
+ if (value > state.parameters.priceStatisticsLookbackInRound) {
113
+ const multiCallInputs = tokens
114
+ .map((token) => {
115
+ return [
116
+ {
117
+ target: state.oracles[token].oraclesBindState.proxy,
118
+ callData: SwaapV1Pool.proxyInterface.encodeFunctionData('latestRound'),
119
+ },
120
+ ];
121
+ })
122
+ .flat();
123
+ const multicallOutputs = (await this.dexHelper.multiContract.methods
124
+ .aggregate(multiCallInputs)
125
+ .call({}, blockHeader.number)).returnData;
126
+ let i = 0;
127
+ const latestRoundIdsBN = tokens.reduce((acc, token) => {
128
+ return {
129
+ ...acc,
130
+ [token]: BigInt(SwaapV1Pool.proxyInterface
131
+ .decodeFunctionResult('latestRound', multicallOutputs[i++])[0]
132
+ .toString()),
133
+ };
134
+ }, {});
135
+ const missingHistoricalData = await this.getHistoricalRoundsData(tokens, newRoundLookbackWindow, latestRoundIdsBN, state.oracles, blockHeader.number);
136
+ const updatedOraclesData = tokens.reduce((acc, token) => {
137
+ return {
138
+ ...acc,
139
+ [token]: {
140
+ oraclesBindState: {
141
+ ...state.oracles[token].oraclesBindState,
142
+ },
143
+ latestRoundId: state.oracles[token].latestRoundId,
144
+ historicalOracleState: missingHistoricalData[token],
145
+ },
146
+ };
147
+ }, {});
148
+ return {
149
+ ...state,
150
+ parameters: {
151
+ ...state.parameters,
152
+ priceStatisticsLookbackInRound: value,
153
+ },
154
+ oracles: { ...updatedOraclesData },
155
+ };
156
+ }
157
+ else if (value < state.parameters.priceStatisticsLookbackInRound) {
158
+ const updatedOraclesData = tokens.reduce((acc, token) => {
159
+ let historicalData = {
160
+ ...state.oracles[token].historicalOracleState,
161
+ };
162
+ let roundId = state.oracles[token].latestRoundId - oldRoundLookbackWindow;
163
+ const endRoundId = state.oracles[token].latestRoundId - newRoundLookbackWindow;
164
+ while (roundId < endRoundId) {
165
+ delete historicalData[roundId++];
166
+ }
167
+ return {
168
+ ...acc,
169
+ [token]: {
170
+ oraclesBindState: {
171
+ ...state.oracles[token].oraclesBindState,
172
+ },
173
+ latestRoundId: state.oracles[token].latestRoundId,
174
+ historicalOracleState: historicalData,
175
+ },
176
+ };
177
+ }, {});
178
+ return {
179
+ ...state,
180
+ parameters: {
181
+ ...state.parameters,
182
+ priceStatisticsLookbackInRound: value,
183
+ },
184
+ oracles: updatedOraclesData,
185
+ };
186
+ }
187
+ return null;
188
+ }
189
+ // setPriceStatisticsLookbackStepInRound
190
+ case SwaapV1Pool.LB_STEP_IN_ROUND_TOPIC: {
191
+ const value = Number(SwaapV1Pool.getValueFromAnonymousEvent(log));
192
+ const oldRoundLookbackWindow = (state.parameters.priceStatisticsLookbackInRound - 1) *
193
+ state.parameters.priceStatisticsLookbackStepInRound;
194
+ const newRoundLookbackWindow = (state.parameters.priceStatisticsLookbackInRound - 1) * value;
195
+ const tokens = Object.keys(state.oracles);
196
+ if (value > state.parameters.priceStatisticsLookbackStepInRound) {
197
+ const multiCallInputs = tokens
198
+ .map((token) => {
199
+ return [
200
+ {
201
+ target: state.oracles[token].oraclesBindState.proxy,
202
+ callData: SwaapV1Pool.proxyInterface.encodeFunctionData('latestRound'),
203
+ },
204
+ ];
205
+ })
206
+ .flat();
207
+ const multicallOutputs = (await this.dexHelper.multiContract.methods
208
+ .aggregate(multiCallInputs)
209
+ .call({}, blockHeader.number)).returnData;
210
+ let i = 0;
211
+ const latestRoundIdsBN = tokens.reduce((acc, token) => {
212
+ return {
213
+ ...acc,
214
+ [token]: BigInt(SwaapV1Pool.proxyInterface
215
+ .decodeFunctionResult('latestRound', multicallOutputs[i++])[0]
216
+ .toString()),
217
+ };
218
+ }, {});
219
+ const missingHistoricalData = await this.getHistoricalRoundsData(tokens, newRoundLookbackWindow, latestRoundIdsBN, state.oracles, blockHeader.number);
220
+ const updatedOraclesData = tokens.reduce((acc, token) => {
221
+ return {
222
+ ...acc,
223
+ [token]: {
224
+ oraclesBindState: {
225
+ ...state.oracles[token].oraclesBindState,
226
+ },
227
+ latestRoundId: state.oracles[token].latestRoundId,
228
+ historicalOracleState: missingHistoricalData[token],
229
+ },
230
+ };
231
+ }, {});
232
+ return {
233
+ ...state,
234
+ parameters: {
235
+ ...state.parameters,
236
+ priceStatisticsLookbackStepInRound: value,
237
+ },
238
+ oracles: { ...updatedOraclesData },
239
+ };
240
+ }
241
+ else if (value < state.parameters.priceStatisticsLookbackStepInRound) {
242
+ const updatedOraclesData = tokens.reduce((acc, token) => {
243
+ let historicalData = {
244
+ ...state.oracles[token].historicalOracleState,
245
+ };
246
+ let roundId = state.oracles[token].latestRoundId - oldRoundLookbackWindow;
247
+ const endRoundId = state.oracles[token].latestRoundId - newRoundLookbackWindow;
248
+ while (roundId < endRoundId) {
249
+ delete historicalData[roundId++];
250
+ }
251
+ return {
252
+ ...acc,
253
+ [token]: {
254
+ oraclesBindState: {
255
+ ...state.oracles[token].oraclesBindState,
256
+ },
257
+ latestRoundId: state.oracles[token].latestRoundId,
258
+ historicalOracleState: historicalData,
259
+ },
260
+ };
261
+ }, {});
262
+ return {
263
+ ...state,
264
+ parameters: {
265
+ ...state.parameters,
266
+ priceStatisticsLookbackStepInRound: value,
267
+ },
268
+ oracles: updatedOraclesData,
269
+ };
270
+ }
271
+ return {
272
+ ...state,
273
+ parameters: {
274
+ ...state.parameters,
275
+ priceStatisticsLookbackStepInRound: value,
276
+ },
277
+ };
278
+ }
279
+ // setDynamicCoverageFeesZ
280
+ case SwaapV1Pool.Z_TOPIC: {
281
+ const value = BigInt(SwaapV1Pool.getValueFromAnonymousEvent(log));
282
+ return {
283
+ ...state,
284
+ parameters: {
285
+ ...state.parameters,
286
+ dynamicCoverageFeesZ: value,
287
+ },
288
+ };
289
+ }
290
+ // setDynamicCoverageFeesHorizon
291
+ case SwaapV1Pool.HORIZON_TOPIC: {
292
+ const value = BigInt(SwaapV1Pool.getValueFromAnonymousEvent(log));
293
+ return {
294
+ ...state,
295
+ parameters: {
296
+ ...state.parameters,
297
+ dynamicCoverageFeesHorizon: value,
298
+ },
299
+ };
300
+ }
301
+ // setPriceStatisticsLookbackInSec
302
+ case SwaapV1Pool.LB_IN_SEC_TOPIC: {
303
+ const value = BigInt(SwaapV1Pool.getValueFromAnonymousEvent(log));
304
+ return {
305
+ ...state,
306
+ parameters: {
307
+ ...state.parameters,
308
+ priceStatisticsLookbackInSec: value,
309
+ },
310
+ };
311
+ }
312
+ // setMaxPriceUnpegRatio
313
+ case SwaapV1Pool.MAX_UNPEG_TOPIC: {
314
+ const value = BigInt(SwaapV1Pool.getValueFromAnonymousEvent(log));
315
+ return {
316
+ ...state,
317
+ parameters: {
318
+ ...state.parameters,
319
+ maxPriceUnpegRatio: value,
320
+ },
321
+ };
322
+ }
323
+ }
324
+ }
325
+ else {
326
+ // named events
327
+ const parsed = SwaapV1Pool.poolInterface.parseLog(log);
328
+ switch (parsed.name) {
329
+ case 'LOG_JOIN': {
330
+ const tokenIn = parsed.args.tokenIn.toString().toLowerCase();
331
+ const tokenAmountIn = BigInt(parsed.args.tokenAmountIn.toString());
332
+ return {
333
+ ...state,
334
+ liquidities: {
335
+ ...state.liquidities,
336
+ [tokenIn]: {
337
+ ...state.liquidities[tokenIn],
338
+ balance: state.liquidities[tokenIn].balance + tokenAmountIn,
339
+ },
340
+ },
341
+ };
342
+ }
343
+ case 'LOG_EXIT': {
344
+ const tokenOut = parsed.args.tokenOut.toString().toLowerCase();
345
+ const tokenAmountOut = BigInt(parsed.args.tokenAmountOut.toString());
346
+ return {
347
+ ...state,
348
+ liquidities: {
349
+ ...state.liquidities,
350
+ [tokenOut]: {
351
+ ...state.liquidities[tokenOut],
352
+ balance: state.liquidities[tokenOut].balance - tokenAmountOut,
353
+ },
354
+ },
355
+ };
356
+ }
357
+ case 'LOG_SWAP': {
358
+ const tokenIn = parsed.args.tokenIn.toString().toLowerCase();
359
+ const tokenAmountIn = BigInt(parsed.args.tokenAmountIn.toString());
360
+ const tokenOut = parsed.args.tokenOut.toString().toLowerCase();
361
+ const tokenAmountOut = BigInt(parsed.args.tokenAmountOut.toString());
362
+ return {
363
+ ...state,
364
+ liquidities: {
365
+ ...state.liquidities,
366
+ [tokenIn]: {
367
+ ...state.liquidities[tokenIn],
368
+ balance: state.liquidities[tokenIn].balance + tokenAmountIn,
369
+ },
370
+ [tokenOut]: {
371
+ ...state.liquidities[tokenOut],
372
+ balance: state.liquidities[tokenOut].balance - tokenAmountOut,
373
+ },
374
+ },
375
+ };
376
+ }
377
+ default: {
378
+ return null;
379
+ }
380
+ }
381
+ }
382
+ }
383
+ return null;
384
+ }
385
+ catch (e) {
386
+ this.logger.error('Failed to decode result', e);
387
+ return null;
388
+ }
389
+ }
390
+ async getTokensAndParameters(blockNumber) {
391
+ const multiCallInputs = [
392
+ {
393
+ target: this.pool.id,
394
+ callData: SwaapV1Pool.poolInterface.encodeFunctionData('getTokens'),
395
+ },
396
+ {
397
+ target: this.pool.id,
398
+ callData: SwaapV1Pool.poolInterface.encodeFunctionData('getCoverageParameters'),
399
+ },
400
+ {
401
+ target: this.pool.id,
402
+ callData: SwaapV1Pool.poolInterface.encodeFunctionData('getSwapFee'),
403
+ },
404
+ ];
405
+ const returnData = (await this.dexHelper.multiContract.methods
406
+ .aggregate(multiCallInputs)
407
+ .call({}, blockNumber)).returnData;
408
+ let tokens = SwaapV1Pool.poolInterface.decodeFunctionResult('getTokens', returnData[0])[0];
409
+ tokens = tokens.map(t => t.toLowerCase());
410
+ const coverageParameters = SwaapV1Pool.poolInterface.decodeFunctionResult('getCoverageParameters', returnData[1]);
411
+ const parameters = {
412
+ swapFee: BigInt(SwaapV1Pool.poolInterface
413
+ .decodeFunctionResult('getSwapFee', returnData[2])[0]
414
+ .toString()),
415
+ priceStatisticsLookbackInRound: Number(coverageParameters[0].toString()),
416
+ priceStatisticsLookbackStepInRound: Number(coverageParameters[1].toString()),
417
+ dynamicCoverageFeesZ: BigInt(coverageParameters[2].toString()),
418
+ dynamicCoverageFeesHorizon: BigInt(coverageParameters[3].toString()),
419
+ priceStatisticsLookbackInSec: BigInt(coverageParameters[4].toString()),
420
+ maxPriceUnpegRatio: BigInt(coverageParameters[5].toString()),
421
+ };
422
+ return [tokens, parameters];
423
+ }
424
+ async getProxiesAndLiquidities(tokens, blockNumber) {
425
+ let multiCallInputs = tokens
426
+ .map(token => {
427
+ return [
428
+ {
429
+ target: this.pool.id,
430
+ callData: SwaapV1Pool.poolInterface.encodeFunctionData('getBalance', [token]),
431
+ },
432
+ {
433
+ target: this.pool.id,
434
+ callData: SwaapV1Pool.poolInterface.encodeFunctionData('getDenormalizedWeight', [token]),
435
+ },
436
+ {
437
+ target: token,
438
+ callData: SwaapV1Pool.erc20Interface.encodeFunctionData('decimals'),
439
+ },
440
+ ];
441
+ })
442
+ .flat();
443
+ multiCallInputs = tokens.reduce((acc, token) => {
444
+ return [
445
+ ...acc,
446
+ {
447
+ target: this.pool.id,
448
+ callData: SwaapV1Pool.poolInterface.encodeFunctionData('getTokenPriceOracle', [token]),
449
+ },
450
+ ].flat();
451
+ }, multiCallInputs);
452
+ let multicallOutputs = (await this.dexHelper.multiContract.methods
453
+ .aggregate(multiCallInputs)
454
+ .call({}, blockNumber)).returnData;
455
+ let idx = 0;
456
+ // get liquidities
457
+ const liquidities = tokens.reduce((acc, token) => {
458
+ const balance = BigInt(SwaapV1Pool.poolInterface
459
+ .decodeFunctionResult('getBalance', multicallOutputs[idx++])[0]
460
+ .toString());
461
+ const initialWeight = BigInt(SwaapV1Pool.poolInterface
462
+ .decodeFunctionResult('getDenormalizedWeight', multicallOutputs[idx++])[0]
463
+ .toString());
464
+ const decimals = parseInt(SwaapV1Pool.erc20Interface
465
+ .decodeFunctionResult('decimals', multicallOutputs[idx++])[0]
466
+ .toString());
467
+ return {
468
+ ...acc,
469
+ [token]: {
470
+ balance: balance,
471
+ initialWeight: initialWeight,
472
+ decimals: decimals,
473
+ },
474
+ };
475
+ }, {});
476
+ const oracles = tokens.reduce((acc, token) => {
477
+ const oracle = SwaapV1Pool.poolInterface
478
+ .decodeFunctionResult('getTokenPriceOracle', multicallOutputs[idx++])[0]
479
+ .toString()
480
+ .toLowerCase();
481
+ return {
482
+ ...acc,
483
+ [token]: oracle,
484
+ };
485
+ }, {});
486
+ return [oracles, liquidities];
487
+ }
488
+ async getOraclesData(tokens, proxies, // key: token, value: proxy
489
+ parameters, blockNumber) {
490
+ // aggregators
491
+ let multiCallInputs = tokens.map((token) => {
492
+ return {
493
+ target: proxies[token],
494
+ callData: SwaapV1Pool.proxyInterface.encodeFunctionData('aggregator'),
495
+ };
496
+ });
497
+ // oracle's addresses
498
+ let multicallOutputs = (await this.dexHelper.multiContract.methods
499
+ .aggregate(multiCallInputs)
500
+ .call({}, blockNumber)).returnData;
501
+ let i = 0;
502
+ const oracles = tokens.reduce((acc, token) => {
503
+ return {
504
+ ...acc,
505
+ [token]: SwaapV1Pool.poolInterface
506
+ .decodeFunctionResult('getTokenPriceOracle', multicallOutputs[i++])[0]
507
+ .toString()
508
+ .toLowerCase(),
509
+ };
510
+ }, {});
511
+ multiCallInputs = tokens
512
+ .map((token) => {
513
+ return [
514
+ {
515
+ target: this.pool.id,
516
+ callData: SwaapV1Pool.poolInterface.encodeFunctionData('getTokenOracleInitialPrice', [token]),
517
+ },
518
+ {
519
+ target: proxies[token],
520
+ callData: SwaapV1Pool.proxyInterface.encodeFunctionData('decimals'),
521
+ },
522
+ {
523
+ target: proxies[token],
524
+ callData: SwaapV1Pool.proxyInterface.encodeFunctionData('description'),
525
+ },
526
+ {
527
+ target: proxies[token],
528
+ callData: SwaapV1Pool.proxyInterface.encodeFunctionData('latestRoundData'),
529
+ },
530
+ ];
531
+ })
532
+ .flat();
533
+ multicallOutputs = (await this.dexHelper.multiContract.methods
534
+ .aggregate(multiCallInputs)
535
+ .call({}, blockNumber)).returnData;
536
+ let latestRoundIdsBN = {};
537
+ i = 0;
538
+ let oraclesData = tokens.reduce((acc, token) => {
539
+ const oraclesBindState = {
540
+ proxy: proxies[token],
541
+ aggregator: oracles[token],
542
+ price: BigInt(SwaapV1Pool.poolInterface
543
+ .decodeFunctionResult('getTokenOracleInitialPrice', multicallOutputs[i++])[0]
544
+ .toString()),
545
+ decimals: Number(SwaapV1Pool.proxyInterface
546
+ .decodeFunctionResult('decimals', multicallOutputs[i++])[0]
547
+ .toString()),
548
+ description: SwaapV1Pool.proxyInterface
549
+ .decodeFunctionResult('description', multicallOutputs[i++])[0]
550
+ .toString(),
551
+ };
552
+ const latestRoundData = SwaapV1Pool.proxyInterface.decodeFunctionResult('latestRoundData', multicallOutputs[i++]);
553
+ const latestRoundId = BigInt(latestRoundData.roundId.toString());
554
+ latestRoundIdsBN[token] = latestRoundId;
555
+ return {
556
+ ...acc,
557
+ [token]: {
558
+ oraclesBindState: oraclesBindState,
559
+ latestRoundId: Number(latestRoundId % 2n ** 64n),
560
+ historicalOracleState: {
561
+ [Number(latestRoundId % 2n ** 64n)]: {
562
+ answer: BigInt(latestRoundData.answer.toString()),
563
+ timestamp: BigInt(latestRoundData.updatedAt.toString()),
564
+ },
565
+ },
566
+ },
567
+ };
568
+ }, {});
569
+ const roundLookbackWindow = (parameters.priceStatisticsLookbackInRound - 1) *
570
+ parameters.priceStatisticsLookbackStepInRound;
571
+ const historicalRoundsData = await this.getHistoricalRoundsData(tokens, roundLookbackWindow, latestRoundIdsBN, oraclesData, blockNumber);
572
+ tokens.forEach(token => {
573
+ oraclesData[token].historicalOracleState = historicalRoundsData[token];
574
+ });
575
+ return oraclesData;
576
+ }
577
+ async getHistoricalRoundsData(tokens, roundLookbackWindow, latestRoundIdsBN, oraclesData, blockNumber) {
578
+ // historical round data
579
+ let historicalStates = tokens.reduce((acc, token) => {
580
+ return {
581
+ ...acc,
582
+ [token]: { ...oraclesData[token].historicalOracleState },
583
+ };
584
+ }, {});
585
+ let multiCallInputs = tokens
586
+ .map((token) => {
587
+ const startRoundId = latestRoundIdsBN[token];
588
+ return Array.from({ length: roundLookbackWindow }, (x, idx) => idx)
589
+ .map(idx => {
590
+ return {
591
+ target: oraclesData[token].oraclesBindState.proxy,
592
+ callData: SwaapV1Pool.proxyInterface.encodeFunctionData('getRoundData', [startRoundId - BigInt(idx + 1)]),
593
+ };
594
+ })
595
+ .flat();
596
+ })
597
+ .flat();
598
+ try {
599
+ let multicallOutputs = (await this.dexHelper.multiContract.methods
600
+ .aggregate(multiCallInputs)
601
+ .call({}, blockNumber)).returnData;
602
+ let i = 0;
603
+ tokens.map(token => {
604
+ Array.from({ length: roundLookbackWindow }, (x, idx) => idx).map(idx => {
605
+ const decoded = SwaapV1Pool.proxyInterface.decodeFunctionResult('getRoundData', multicallOutputs[i++]);
606
+ const roundId = Number(BigInt(decoded.roundId.toString()) % 2n ** 64n);
607
+ historicalStates[token][roundId] = {
608
+ answer: BigInt(decoded.answer.toString()),
609
+ timestamp: BigInt(decoded.updatedAt.toString()),
610
+ };
611
+ });
612
+ });
613
+ }
614
+ catch (e) {
615
+ this.logger.error('Failed to get historical round data', e);
616
+ }
617
+ return historicalStates;
618
+ }
619
+ //Function used to generate a state if one is not currently present, which
620
+ //must be the state at exactly the given block number, unless one is not
621
+ //provided, in which case one should be generated for latest block. This
622
+ //function should not use any previous states to derive a new state, it should
623
+ //generate one from scratch.
624
+ async generateState(blockNumber) {
625
+ if (blockNumber === 'latest' || blockNumber === undefined) {
626
+ blockNumber = await this.dexHelper.provider.getBlockNumber();
627
+ }
628
+ const [tokens, parameters] = await this.getTokensAndParameters(blockNumber);
629
+ const [proxies, liquidities] = await this.getProxiesAndLiquidities(tokens, blockNumber);
630
+ const oracles = await this.getOraclesData(tokens, proxies, parameters, blockNumber);
631
+ return {
632
+ parameters: parameters,
633
+ liquidities: liquidities,
634
+ oracles: oracles,
635
+ };
636
+ }
637
+ static getValueFromAnonymousEvent(log) {
638
+ const data = log.data.toString();
639
+ const startIdx = 2 + 64 + 64 + 8;
640
+ return '0x' + data.slice(startIdx, startIdx + 64).toString();
641
+ }
642
+ }
643
+ exports.SwaapV1Pool = SwaapV1Pool;
644
+ SwaapV1Pool.poolInterface = new abi_1.Interface(pool_json_1.default);
645
+ SwaapV1Pool.proxyInterface = new abi_1.Interface(chainlink_json_1.default);
646
+ SwaapV1Pool.erc20Interface = new abi_1.Interface(erc20_json_1.default);
647
+ // LOG_CALL Event topics 0
648
+ SwaapV1Pool.SWAP_FEE_TOPIC = '0x34e1990700000000000000000000000000000000000000000000000000000000';
649
+ SwaapV1Pool.LB_IN_ROUND_TOPIC = '0x3cc3396000000000000000000000000000000000000000000000000000000000';
650
+ SwaapV1Pool.LB_STEP_IN_ROUND_TOPIC = '0x045dbae000000000000000000000000000000000000000000000000000000000';
651
+ SwaapV1Pool.Z_TOPIC = '0x3c515d9900000000000000000000000000000000000000000000000000000000';
652
+ SwaapV1Pool.HORIZON_TOPIC = '0x314d204f00000000000000000000000000000000000000000000000000000000';
653
+ SwaapV1Pool.LB_IN_SEC_TOPIC = '0x538e285c00000000000000000000000000000000000000000000000000000000';
654
+ SwaapV1Pool.MAX_UNPEG_TOPIC = '0xacb21b3100000000000000000000000000000000000000000000000000000000';
655
+ SwaapV1Pool.ANSWER_UPDATED_TOPIC = SwaapV1Pool.proxyInterface.getEventTopic('AnswerUpdated');
656
+ //# sourceMappingURL=swaap-v1-pool.js.map