@paraswap/dex-lib 3.8.2 → 3.8.3-integral-dex

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 (403) 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/config.js +1 -1
  21. package/build/dex/aave-v1/aave-v1.d.ts +33 -0
  22. package/build/dex/aave-v1/aave-v1.js +158 -0
  23. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  24. package/build/dex/aave-v1/config.d.ts +11 -0
  25. package/build/dex/aave-v1/config.js +20 -0
  26. package/build/dex/aave-v1/config.js.map +1 -0
  27. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  28. package/build/dex/aave-v1/tokens.d.ts +3 -0
  29. package/build/dex/aave-v1/tokens.js +50 -0
  30. package/build/dex/aave-v1/tokens.js.map +1 -0
  31. package/build/dex/aave-v1/types.d.ts +12 -0
  32. package/build/dex/aave-v1/types.js +3 -0
  33. package/build/dex/aave-v1/types.js.map +1 -0
  34. package/build/dex/bProtocol.d.ts +18 -0
  35. package/build/dex/bProtocol.js +39 -0
  36. package/build/dex/bProtocol.js.map +1 -0
  37. package/build/dex/bancor.d.ts +26 -0
  38. package/build/dex/bancor.js +58 -0
  39. package/build/dex/bancor.js.map +1 -0
  40. package/build/dex/compound.d.ts +18 -0
  41. package/build/dex/compound.js +46 -0
  42. package/build/dex/compound.js.map +1 -0
  43. package/build/dex/curve-v1-factory/config.js +10 -47
  44. package/build/dex/curve-v1-factory/config.js.map +1 -1
  45. package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +2 -2
  46. package/build/dex/curve-v1-factory/curve-v1-factory.js +36 -96
  47. package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
  48. package/build/dex/curve-v1-factory/price-handlers/functions/constants.js.map +1 -1
  49. package/build/dex/curve-v1-factory/price-handlers/functions/get_dx.js +1 -13
  50. package/build/dex/curve-v1-factory/price-handlers/functions/get_dx.js.map +1 -1
  51. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.d.ts +2 -2
  52. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.js +1 -1
  53. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.js.map +1 -1
  54. package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.js +1 -1
  55. package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.js.map +1 -1
  56. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.d.ts +3 -4
  57. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.js +9 -24
  58. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.js.map +1 -1
  59. package/build/dex/curve-v1-factory/types.d.ts +4 -20
  60. package/build/dex/curve-v1-factory/types.js +3 -11
  61. package/build/dex/curve-v1-factory/types.js.map +1 -1
  62. package/build/dex/curve-v1-stable-ng/config.js +0 -18
  63. package/build/dex/curve-v1-stable-ng/config.js.map +1 -1
  64. package/build/dex/curve-v2.d.ts +58 -0
  65. package/build/dex/curve-v2.js +180 -0
  66. package/build/dex/curve-v2.js.map +1 -0
  67. package/build/dex/dodo-v1.d.ts +33 -0
  68. package/build/dex/dodo-v1.js +63 -0
  69. package/build/dex/dodo-v1.js.map +1 -0
  70. package/build/dex/etherfi/etherfi.d.ts +26 -0
  71. package/build/dex/etherfi/etherfi.js +96 -0
  72. package/build/dex/etherfi/etherfi.js.map +1 -0
  73. package/build/dex/index.js +21 -3
  74. package/build/dex/index.js.map +1 -1
  75. package/build/dex/integral/config.d.ts +4 -0
  76. package/build/dex/integral/config.js +20 -0
  77. package/build/dex/integral/config.js.map +1 -0
  78. package/build/dex/integral/context.d.ts +40 -0
  79. package/build/dex/integral/context.js +158 -0
  80. package/build/dex/integral/context.js.map +1 -0
  81. package/build/dex/integral/helpers.d.ts +17 -0
  82. package/build/dex/integral/helpers.js +157 -0
  83. package/build/dex/integral/helpers.js.map +1 -0
  84. package/build/dex/integral/integral-factory.d.ts +21 -0
  85. package/build/dex/integral/integral-factory.js +92 -0
  86. package/build/dex/integral/integral-factory.js.map +1 -0
  87. package/build/dex/integral/integral-pool.d.ts +46 -0
  88. package/build/dex/integral/integral-pool.js +143 -0
  89. package/build/dex/integral/integral-pool.js.map +1 -0
  90. package/build/dex/integral/integral-pricing.d.ts +18 -0
  91. package/build/dex/integral/integral-pricing.js +114 -0
  92. package/build/dex/integral/integral-pricing.js.map +1 -0
  93. package/build/dex/integral/integral-relayer.d.ts +39 -0
  94. package/build/dex/integral/integral-relayer.js +189 -0
  95. package/build/dex/integral/integral-relayer.js.map +1 -0
  96. package/build/dex/integral/integral-token.d.ts +24 -0
  97. package/build/dex/integral/integral-token.js +56 -0
  98. package/build/dex/integral/integral-token.js.map +1 -0
  99. package/build/dex/integral/integral.d.ts +41 -0
  100. package/build/dex/integral/integral.js +377 -0
  101. package/build/dex/integral/integral.js.map +1 -0
  102. package/build/dex/integral/types.d.ts +84 -0
  103. package/build/dex/integral/types.js +9 -0
  104. package/build/dex/integral/types.js.map +1 -0
  105. package/build/dex/integral/utils-e2e.d.ts +9 -0
  106. package/build/dex/integral/utils-e2e.js +131 -0
  107. package/build/dex/integral/utils-e2e.js.map +1 -0
  108. package/build/dex/integral/utils.d.ts +17 -0
  109. package/build/dex/integral/utils.js +94 -0
  110. package/build/dex/integral/utils.js.map +1 -0
  111. package/build/dex/lido.d.ts +19 -0
  112. package/build/dex/lido.js +42 -0
  113. package/build/dex/lido.js.map +1 -0
  114. package/build/dex/onebit.d.ts +25 -0
  115. package/build/dex/onebit.js +42 -0
  116. package/build/dex/onebit.js.map +1 -0
  117. package/build/dex/oswap/config.d.ts +5 -0
  118. package/build/dex/oswap/config.js +31 -0
  119. package/build/dex/oswap/config.js.map +1 -0
  120. package/build/dex/oswap/oswap-pool.d.ts +51 -0
  121. package/build/dex/oswap/oswap-pool.js +150 -0
  122. package/build/dex/oswap/oswap-pool.js.map +1 -0
  123. package/build/dex/oswap/oswap.d.ts +46 -0
  124. package/build/dex/oswap/oswap.js +266 -0
  125. package/build/dex/oswap/oswap.js.map +1 -0
  126. package/build/dex/oswap/types.d.ts +20 -0
  127. package/build/dex/oswap/types.js +3 -0
  128. package/build/dex/oswap/types.js.map +1 -0
  129. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +0 -3
  130. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
  131. package/build/dex/platypus/asset.d.ts +14 -0
  132. package/build/dex/platypus/asset.js +97 -0
  133. package/build/dex/platypus/asset.js.map +1 -0
  134. package/build/dex/platypus/config.d.ts +11 -0
  135. package/build/dex/platypus/config.js +69 -0
  136. package/build/dex/platypus/config.js.map +1 -0
  137. package/build/dex/platypus/platypus.d.ts +62 -0
  138. package/build/dex/platypus/platypus.js +442 -0
  139. package/build/dex/platypus/platypus.js.map +1 -0
  140. package/build/dex/platypus/pool-avax.d.ts +8 -0
  141. package/build/dex/platypus/pool-avax.js +54 -0
  142. package/build/dex/platypus/pool-avax.js.map +1 -0
  143. package/build/dex/platypus/pool-base.d.ts +19 -0
  144. package/build/dex/platypus/pool-base.js +86 -0
  145. package/build/dex/platypus/pool-base.js.map +1 -0
  146. package/build/dex/platypus/pool-pure.d.ts +8 -0
  147. package/build/dex/platypus/pool-pure.js +37 -0
  148. package/build/dex/platypus/pool-pure.js.map +1 -0
  149. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  150. package/build/dex/platypus/pool-subscriber.js +167 -0
  151. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  152. package/build/dex/platypus/pool.d.ts +8 -0
  153. package/build/dex/platypus/pool.js +58 -0
  154. package/build/dex/platypus/pool.js.map +1 -0
  155. package/build/dex/platypus/types.d.ts +92 -0
  156. package/build/dex/platypus/types.js +10 -0
  157. package/build/dex/platypus/types.js.map +1 -0
  158. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  159. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  160. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  161. package/build/dex/sdai/config.d.ts +11 -0
  162. package/build/dex/sdai/config.js +21 -0
  163. package/build/dex/sdai/config.js.map +1 -0
  164. package/build/dex/sdai/constants.d.ts +2 -0
  165. package/build/dex/sdai/constants.js +6 -0
  166. package/build/dex/sdai/constants.js.map +1 -0
  167. package/build/dex/sdai/scripts/validate-state.d.ts +1 -0
  168. package/build/dex/sdai/scripts/validate-state.js +102 -0
  169. package/build/dex/sdai/scripts/validate-state.js.map +1 -0
  170. package/build/dex/sdai/sdai-pool.d.ts +16 -0
  171. package/build/dex/sdai/sdai-pool.js +85 -0
  172. package/build/dex/sdai/sdai-pool.js.map +1 -0
  173. package/build/dex/sdai/sdai.d.ts +51 -0
  174. package/build/dex/sdai/sdai.js +172 -0
  175. package/build/dex/sdai/sdai.js.map +1 -0
  176. package/build/dex/sdai/types.d.ts +21 -0
  177. package/build/dex/sdai/types.js +11 -0
  178. package/build/dex/sdai/types.js.map +1 -0
  179. package/build/dex/sdai/utils.d.ts +4 -0
  180. package/build/dex/sdai/utils.js +39 -0
  181. package/build/dex/sdai/utils.js.map +1 -0
  182. package/build/dex/smardex/config.d.ts +4 -0
  183. package/build/dex/smardex/config.js +64 -0
  184. package/build/dex/smardex/config.js.map +1 -0
  185. package/build/dex/smardex/constants.d.ts +18 -0
  186. package/build/dex/smardex/constants.js +33 -0
  187. package/build/dex/smardex/constants.js.map +1 -0
  188. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  189. package/build/dex/smardex/sdk/constants.js +13 -0
  190. package/build/dex/smardex/sdk/constants.js.map +1 -0
  191. package/build/dex/smardex/sdk/core.d.ts +113 -0
  192. package/build/dex/smardex/sdk/core.js +499 -0
  193. package/build/dex/smardex/sdk/core.js.map +1 -0
  194. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  195. package/build/dex/smardex/sdk/errors.js +22 -0
  196. package/build/dex/smardex/sdk/errors.js.map +1 -0
  197. package/build/dex/smardex/sdk/types.d.ts +62 -0
  198. package/build/dex/smardex/sdk/types.js +3 -0
  199. package/build/dex/smardex/sdk/types.js.map +1 -0
  200. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  201. package/build/dex/smardex/sdk/utils.js +133 -0
  202. package/build/dex/smardex/sdk/utils.js.map +1 -0
  203. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  204. package/build/dex/smardex/smardex-event-pool.js +119 -0
  205. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  206. package/build/dex/smardex/smardex.d.ts +65 -0
  207. package/build/dex/smardex/smardex.js +519 -0
  208. package/build/dex/smardex/smardex.js.map +1 -0
  209. package/build/dex/smardex/types.d.ts +55 -0
  210. package/build/dex/smardex/types.js +3 -0
  211. package/build/dex/smardex/types.js.map +1 -0
  212. package/build/dex/smoothy.d.ts +26 -0
  213. package/build/dex/smoothy.js +48 -0
  214. package/build/dex/smoothy.js.map +1 -0
  215. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  216. package/build/dex/solidly/forks-override/cone.js +53 -0
  217. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  218. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  219. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  220. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  221. package/build/dex/stable-pool.d.ts +28 -0
  222. package/build/dex/stable-pool.js +62 -0
  223. package/build/dex/stable-pool.js.map +1 -0
  224. package/build/dex/swaap-v1/config.d.ts +17 -0
  225. package/build/dex/swaap-v1/config.js +56 -0
  226. package/build/dex/swaap-v1/config.js.map +1 -0
  227. package/build/dex/swaap-v1/constants.d.ts +6 -0
  228. package/build/dex/swaap-v1/constants.js +17 -0
  229. package/build/dex/swaap-v1/constants.js.map +1 -0
  230. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  231. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  232. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  233. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  234. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  235. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  236. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  237. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  238. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  239. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  240. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  241. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  242. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  243. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  244. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  245. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  246. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  247. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  248. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  249. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  250. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  251. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  252. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  253. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  254. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  255. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  256. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  257. package/build/dex/swaap-v1/swaap-v1.d.ts +61 -0
  258. package/build/dex/swaap-v1/swaap-v1.js +369 -0
  259. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  260. package/build/dex/swaap-v1/types.d.ts +106 -0
  261. package/build/dex/swaap-v1/types.js +9 -0
  262. package/build/dex/swaap-v1/types.js.map +1 -0
  263. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  264. package/build/dex/trader-joe-v2.1.js +79 -0
  265. package/build/dex/trader-joe-v2.1.js.map +1 -0
  266. package/build/dex/uniswap-v3/contract-math/Oracle.js +4 -4
  267. package/build/dex/uniswap-v3/contract-math/Oracle.js.map +1 -1
  268. package/build/executor/compressor/Compressor.d.ts +23 -0
  269. package/build/executor/compressor/Compressor.js +144 -0
  270. package/build/executor/compressor/Compressor.js.map +1 -0
  271. package/build/executor/compressor/compress.d.ts +17 -0
  272. package/build/executor/compressor/compress.js +187 -0
  273. package/build/executor/compressor/compress.js.map +1 -0
  274. package/build/executor/compressor/compress_functions/addressSubstitution.d.ts +6 -0
  275. package/build/executor/compressor/compress_functions/addressSubstitution.js +29 -0
  276. package/build/executor/compressor/compress_functions/addressSubstitution.js.map +1 -0
  277. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.d.ts +10 -0
  278. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js +40 -0
  279. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js.map +1 -0
  280. package/build/executor/compressor/compress_functions/byteSubstitution.d.ts +11 -0
  281. package/build/executor/compressor/compress_functions/byteSubstitution.js +64 -0
  282. package/build/executor/compressor/compress_functions/byteSubstitution.js.map +1 -0
  283. package/build/executor/compressor/compress_functions/ffSubstitution.d.ts +7 -0
  284. package/build/executor/compressor/compress_functions/ffSubstitution.js +54 -0
  285. package/build/executor/compressor/compress_functions/ffSubstitution.js.map +1 -0
  286. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.d.ts +8 -0
  287. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js +67 -0
  288. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js.map +1 -0
  289. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.d.ts +8 -0
  290. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js +61 -0
  291. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js.map +1 -0
  292. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.d.ts +6 -0
  293. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js +37 -0
  294. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js.map +1 -0
  295. package/build/executor/compressor/compress_functions/searchUnusedBytes.d.ts +9 -0
  296. package/build/executor/compressor/compress_functions/searchUnusedBytes.js +33 -0
  297. package/build/executor/compressor/compress_functions/searchUnusedBytes.js.map +1 -0
  298. package/build/executor/compressor/fetchSaved.d.ts +0 -0
  299. package/build/executor/compressor/fetchSaved.js +17 -0
  300. package/build/executor/compressor/fetchSaved.js.map +1 -0
  301. package/build/executor/compressor/utils/computeCostL2.d.ts +2 -0
  302. package/build/executor/compressor/utils/computeCostL2.js +14 -0
  303. package/build/executor/compressor/utils/computeCostL2.js.map +1 -0
  304. package/build/executor/compressor/utils/findLongestDuplicatedString.d.ts +2 -0
  305. package/build/executor/compressor/utils/findLongestDuplicatedString.js +30 -0
  306. package/build/executor/compressor/utils/findLongestDuplicatedString.js.map +1 -0
  307. package/build/executor/compressor/utils/getAllIndexes.d.ts +2 -0
  308. package/build/executor/compressor/utils/getAllIndexes.js +12 -0
  309. package/build/executor/compressor/utils/getAllIndexes.js.map +1 -0
  310. package/build/executor/compressor/utils/getByteForAddress.d.ts +2 -0
  311. package/build/executor/compressor/utils/getByteForAddress.js +14 -0
  312. package/build/executor/compressor/utils/getByteForAddress.js.map +1 -0
  313. package/build/executor/compressor/utils/intTo2Bytes.d.ts +2 -0
  314. package/build/executor/compressor/utils/intTo2Bytes.js +14 -0
  315. package/build/executor/compressor/utils/intTo2Bytes.js.map +1 -0
  316. package/build/executor/compressor/utils/intTo3Bytes.d.ts +2 -0
  317. package/build/executor/compressor/utils/intTo3Bytes.js +18 -0
  318. package/build/executor/compressor/utils/intTo3Bytes.js.map +1 -0
  319. package/build/executor/compressor/utils/intToByte.d.ts +2 -0
  320. package/build/executor/compressor/utils/intToByte.js +10 -0
  321. package/build/executor/compressor/utils/intToByte.js.map +1 -0
  322. package/build/generic-swap-transaction-builder.js +3 -1
  323. package/build/generic-swap-transaction-builder.js.map +1 -1
  324. package/build/router/simpleswap.js +3 -1
  325. package/build/router/simpleswap.js.map +1 -1
  326. package/package.json +2 -2
  327. package/src/abi/BProtocol.json +1155 -0
  328. package/src/abi/Jarvis.json +1172 -0
  329. package/src/abi/MStableAsset.json +1545 -0
  330. package/src/abi/OneInchLp.json +1304 -0
  331. package/src/abi/Onebit.json +736 -0
  332. package/src/abi/Shell.json +1294 -0
  333. package/src/abi/TraderJoeV2Router.json +50 -0
  334. package/src/abi/integral/factory.json +333 -0
  335. package/src/abi/integral/oracle.json +501 -0
  336. package/src/abi/integral/pool.json +1041 -0
  337. package/src/abi/integral/relayer.json +1536 -0
  338. package/src/abi/zrx.v2.json +1967 -0
  339. package/src/abi/zrx.v3.json +3454 -0
  340. package/src/abi/zrx.v4.json +2193 -0
  341. package/src/config.ts +1 -1
  342. package/src/dex/OneInchLp.ts +84 -0
  343. package/src/dex/bProtocol/bProtocol-e2e.test.ts +93 -0
  344. package/src/dex/bProtocol/bProtocol.ts +108 -0
  345. package/src/dex/bProtocol/types.ts +13 -0
  346. package/src/dex/curve-v1-factory/config.ts +10 -47
  347. package/src/dex/curve-v1-factory/curve-v1-factory-e2e.test.ts +16 -92
  348. package/src/dex/curve-v1-factory/curve-v1-factory-integration.test.ts +5 -125
  349. package/src/dex/curve-v1-factory/curve-v1-factory.ts +45 -137
  350. package/src/dex/curve-v1-factory/price-handlers/functions/constants.ts +2 -0
  351. package/src/dex/curve-v1-factory/price-handlers/functions/get_dx.ts +1 -24
  352. package/src/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.ts +2 -3
  353. package/src/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.ts +0 -1
  354. package/src/dex/curve-v1-factory/state-polling-pools/pool-polling-base.ts +10 -31
  355. package/src/dex/curve-v1-factory/types.ts +6 -22
  356. package/src/dex/curve-v1-stable-ng/config.ts +0 -18
  357. package/src/dex/curve-v1-stable-ng/curve-v1-stable-ng-e2e.test.ts +0 -17
  358. package/src/dex/index.ts +20 -3
  359. package/src/dex/integral/config.ts +20 -0
  360. package/src/dex/integral/context.ts +287 -0
  361. package/src/dex/integral/integral-e2e.test.ts +86 -0
  362. package/src/dex/integral/integral-events.test.ts +412 -0
  363. package/src/dex/integral/integral-factory.ts +146 -0
  364. package/src/dex/integral/integral-integration.test.ts +221 -0
  365. package/src/dex/integral/integral-pool.ts +198 -0
  366. package/src/dex/integral/integral-pricing.ts +190 -0
  367. package/src/dex/integral/integral-relayer.ts +285 -0
  368. package/src/dex/integral/integral-token.ts +95 -0
  369. package/src/dex/integral/integral.ts +523 -0
  370. package/src/dex/integral/test-artifacts/configs.json +1 -0
  371. package/src/dex/integral/test-artifacts/logs.json +1 -0
  372. package/src/dex/integral/test-artifacts/states.json +1 -0
  373. package/src/dex/integral/types.ts +88 -0
  374. package/src/dex/integral/utils-e2e.ts +194 -0
  375. package/src/dex/integral/utils.ts +146 -0
  376. package/src/dex/jarvis.ts +262 -0
  377. package/src/dex/mStable.ts +147 -0
  378. package/src/dex/onebit/onebit.ts +113 -0
  379. package/src/dex/onebit/types.ts +17 -0
  380. package/src/dex/paraswap-limit-orders/paraswap-limit-orders-e2e.test.ts +68 -152
  381. package/src/dex/paraswap-limit-orders/paraswap-limit-orders.ts +0 -3
  382. package/src/dex/shell.ts +84 -0
  383. package/src/dex/trader-joe-v2.ts +148 -0
  384. package/src/dex/uniswap-v3/contract-math/Oracle.ts +5 -4
  385. package/src/dex/zerox/config.ts +31 -0
  386. package/src/dex/zerox/index.ts +328 -0
  387. package/src/dex/zerox/order.ts +62 -0
  388. package/src/dex/zerox/types.ts +82 -0
  389. package/src/dex/zerox/zerox-e2e.test.ts +110 -0
  390. package/src/generic-swap-transaction-builder.ts +3 -1
  391. package/src/router/simpleswap.ts +3 -1
  392. package/tests/constants-e2e.ts +2 -2
  393. package/tests/utils-e2e.ts +0 -2
  394. package/.idea/aws.xml +0 -17
  395. package/.idea/codeStyles/Project.xml +0 -19
  396. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  397. package/.idea/misc.xml +0 -6
  398. package/.idea/modules.xml +0 -8
  399. package/.idea/paraswap-dex-lib.iml +0 -9
  400. package/.idea/prettier.xml +0 -7
  401. package/.idea/vcs.xml +0 -6
  402. package/src/abi/curve-v1-factory/CurveV1Router.abi.json +0 -331
  403. package/src/dex/curve-v1-factory/optimizer.ts +0 -61
@@ -0,0 +1,412 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import {
6
+ IntegralFactory,
7
+ OnPoolCreatedCallback,
8
+ } from '../integral/integral-factory';
9
+ import { Network } from '../../constants';
10
+ import { Address } from '../../types';
11
+ import { DummyDexHelper } from '../../dex-helper/index';
12
+ import { testEventSubscriber } from '../../../tests/utils-events';
13
+ import {
14
+ FactoryState,
15
+ PoolState,
16
+ RelayerState,
17
+ TokenState,
18
+ } from '../integral/types';
19
+ import { IntegralConfig } from './config';
20
+ import { IntegralEventPool } from './integral-pool';
21
+ import { Tokens } from '../../../tests/constants-e2e';
22
+ import { IntegralRelayer, OnPoolEnabledSetCallback } from './integral-relayer';
23
+ import ERC20ABI from '../../abi/erc20.json';
24
+ import { Interface } from 'ethers/lib/utils';
25
+ import { updateEventSubscriber, checkEventSubscriber } from './utils-e2e';
26
+ import { IntegralToken } from './integral-token';
27
+ import { IntegralContext } from './context';
28
+
29
+ jest.setTimeout(50 * 1000);
30
+ const dexKey = 'Integral';
31
+ const network = Network.MAINNET;
32
+ const dexHelper = new DummyDexHelper(network);
33
+ const logger = dexHelper.getLogger(dexKey);
34
+ const erc20Interface = new Interface(ERC20ABI);
35
+
36
+ const TEST_POOL_ADDRESS = '0x6ec472b613012a492693697FA551420E60567eA7'; // usdc-usdt pool address
37
+ const _TEST_POOLS = {
38
+ ['0x6ec472b613012a492693697FA551420E60567eA7']: ['USDC', 'USDT'],
39
+ ['0x2fe16Dd18bba26e457B7dD2080d5674312b026a2']: ['WETH', 'USDC'],
40
+ ['0x048f0e7ea2CFD522a4a058D1b1bDd574A0486c46']: ['WETH', 'USDT'],
41
+ ['0x37F6dF71b40c50b2038329CaBf5FDa3682Df1ebF']: ['WETH', 'WBTC'],
42
+ ['0x29b57D56a114aE5BE3c129240898B3321A70A300']: ['WETH', 'wstETH'],
43
+ ['0x61fA1CEe13CEEAF20C30611c5e6dA48c595F7dB2']: [
44
+ 'WETH',
45
+ '0xD33526068D116cE69F19A9ee46F0bd304F21A51f',
46
+ ], // RPL
47
+ ['0x045950A37c59d75496BB4Af68c05f9066A4C7e27']: [
48
+ 'WETH',
49
+ '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2',
50
+ ], // SWISE
51
+ ['0xbEE7Ef1adfaa628536Ebc0C1EBF082DbDC27265F']: [
52
+ 'WETH',
53
+ '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32',
54
+ ], // LDO
55
+ };
56
+ const TEST_POOLS = initTestPools();
57
+ const dummyCallback = () => {};
58
+
59
+ function initTestPools() {
60
+ return Object.entries(_TEST_POOLS).reduce<{
61
+ [poolAddress: Address]: { token0: Address; token1: Address };
62
+ }>((memo, [poolAddress, [symbolA, symbolB]]) => {
63
+ const tokenA =
64
+ (Tokens[network][symbolA] &&
65
+ Tokens[network][symbolA].address.toLowerCase()) ||
66
+ symbolA.toLowerCase();
67
+ const tokenB =
68
+ (Tokens[network][symbolB] &&
69
+ Tokens[network][symbolB].address.toLowerCase()) ||
70
+ symbolB.toLowerCase();
71
+ const [token0, token1] =
72
+ tokenA < tokenB ? [tokenA, tokenB] : [tokenB, tokenA];
73
+ memo[poolAddress] = { token0, token1 };
74
+ return memo;
75
+ }, {});
76
+ }
77
+
78
+ async function fetchFactoryState(
79
+ integralFactory: IntegralFactory,
80
+ blockNumber: number,
81
+ factoryAddress: string,
82
+ ): Promise<FactoryState> {
83
+ const message = `Integral Factory: ${factoryAddress} blockNumber ${blockNumber}`;
84
+ console.log(`Fetching state ${message}`);
85
+ return integralFactory.generateState(blockNumber);
86
+ }
87
+
88
+ async function fetchPoolState(
89
+ integralPool: IntegralEventPool,
90
+ blockNumber: number,
91
+ poolAddress: string,
92
+ ): Promise<PoolState> {
93
+ const message = `Integral Pool: ${poolAddress} blockNumber ${blockNumber}`;
94
+ console.log(`Fetching state ${message}`);
95
+ return integralPool.generateState(blockNumber);
96
+ }
97
+
98
+ async function fetchTokenState(
99
+ integralToken: IntegralToken,
100
+ blockNumber: number,
101
+ tokenAddress: string,
102
+ ): Promise<TokenState> {
103
+ const message = `ERC20 Token: ${tokenAddress} blockNumber ${blockNumber}`;
104
+ console.log(`Fetching state ${message}`);
105
+ return integralToken.generateState();
106
+ }
107
+
108
+ async function fetchRelayerState(
109
+ integralRelayer: IntegralRelayer,
110
+ blockNumber: number,
111
+ relayerAddress: string,
112
+ ): Promise<RelayerState> {
113
+ const message = `Integral Relayer: ${relayerAddress} blockNumber ${blockNumber}`;
114
+ console.log(`Fetching state ${message}`);
115
+ return integralRelayer.generateState(blockNumber);
116
+ }
117
+
118
+ // eventName -> blockNumbers
119
+ type EventMappings = Record<string, number[]>;
120
+
121
+ describe('Integral Factory Events Mainnet', function () {
122
+ const onPoolCreated: OnPoolCreatedCallback =
123
+ dummyCallback as unknown as OnPoolCreatedCallback;
124
+ let integralFactory: IntegralFactory;
125
+
126
+ const factoryAddress =
127
+ IntegralConfig[dexKey][network].factoryAddress.toLowerCase();
128
+ // poolAddress -> EventMappings
129
+ const eventsToTest: Record<Address, EventMappings> = {
130
+ [factoryAddress]: {
131
+ PairCreated: [
132
+ 14423189, 14538708, 14722391, 15001878, 16638150, 17022679, 17333304,
133
+ 19011983, 19011987, 19011992, 19012000, 19483224, 19483230, 19483234,
134
+ 19483237,
135
+ ],
136
+ },
137
+ };
138
+
139
+ beforeEach(async () => {
140
+ integralFactory = new IntegralFactory(
141
+ dexHelper,
142
+ dexKey,
143
+ factoryAddress,
144
+ onPoolCreated,
145
+ logger,
146
+ );
147
+ });
148
+
149
+ Object.entries(eventsToTest).forEach(
150
+ ([factoryAddress, events]: [string, EventMappings]) => {
151
+ describe(`Events for Factory: ${factoryAddress}`, () => {
152
+ Object.entries(events).forEach(
153
+ ([eventName, blockNumbers]: [string, number[]]) => {
154
+ describe(`${eventName}`, () => {
155
+ blockNumbers.forEach((blockNumber: number) => {
156
+ it(`State after ${blockNumber}`, async function () {
157
+ await testEventSubscriber<FactoryState>(
158
+ integralFactory,
159
+ integralFactory.addressesSubscribed,
160
+ (_blockNumber: number) =>
161
+ fetchFactoryState(
162
+ integralFactory,
163
+ _blockNumber,
164
+ factoryAddress,
165
+ ),
166
+ blockNumber,
167
+ `${dexKey}_${factoryAddress}`,
168
+ dexHelper.provider,
169
+ );
170
+ });
171
+ });
172
+ });
173
+ },
174
+ );
175
+ });
176
+ },
177
+ );
178
+ });
179
+
180
+ describe('Integral Pool Events Mainnet', function () {
181
+ let integralPool: IntegralEventPool;
182
+
183
+ const eventsToTest: Record<Address, EventMappings> = {
184
+ [TEST_POOL_ADDRESS]: {
185
+ SetSwapFee: [17022687],
186
+ SetMintFee: [],
187
+ SetBurnFee: [],
188
+ },
189
+ };
190
+
191
+ beforeEach(async () => {
192
+ integralPool = new IntegralEventPool(
193
+ dexKey,
194
+ network,
195
+ dexHelper,
196
+ TEST_POOL_ADDRESS,
197
+ TEST_POOLS[TEST_POOL_ADDRESS].token0,
198
+ TEST_POOLS[TEST_POOL_ADDRESS].token1,
199
+ logger,
200
+ );
201
+ });
202
+
203
+ Object.entries(eventsToTest).forEach(
204
+ ([poolAddress, events]: [string, EventMappings]) => {
205
+ describe(`Events for Pool: ${poolAddress}`, () => {
206
+ Object.entries(events).forEach(
207
+ ([eventName, blockNumbers]: [string, number[]]) => {
208
+ describe(`${eventName}`, () => {
209
+ blockNumbers.forEach((blockNumber: number) => {
210
+ it(`State after ${blockNumber}`, async function () {
211
+ await testEventSubscriber<PoolState>(
212
+ integralPool,
213
+ integralPool.addressesSubscribed,
214
+ (_blockNumber: number) =>
215
+ fetchPoolState(integralPool, _blockNumber, poolAddress),
216
+ blockNumber,
217
+ `${dexKey}_${poolAddress}`,
218
+ dexHelper.provider,
219
+ );
220
+ });
221
+ });
222
+ });
223
+ },
224
+ );
225
+ });
226
+ },
227
+ );
228
+ });
229
+
230
+ describe('Integral Relayer Events Mainnet', function () {
231
+ let integralRelayer: IntegralRelayer;
232
+ const onPoolEnabledSet = dummyCallback as unknown as OnPoolEnabledSetCallback;
233
+ const relayerAddress =
234
+ IntegralConfig[dexKey][network].relayerAddress.toLowerCase();
235
+
236
+ const eventsToTest: Record<Address, EventMappings> = {
237
+ [relayerAddress]: {
238
+ SwapFeeSet: [19460786],
239
+ PairEnabledSet: [19133248, 19488170, 19488805],
240
+ UnwrapWeth: [
241
+ 19117714, 19216294, 19272845, 19326496, 19361829, 19389103, 19430619,
242
+ 19473032, 19565232, 19632898, 19660246, 19757979,
243
+ ],
244
+ WrapEth: [],
245
+ },
246
+ };
247
+
248
+ beforeEach(async () => {
249
+ integralRelayer = new IntegralRelayer(
250
+ dexHelper,
251
+ dexKey,
252
+ erc20Interface,
253
+ relayerAddress,
254
+ TEST_POOLS,
255
+ onPoolEnabledSet,
256
+ logger,
257
+ );
258
+ });
259
+
260
+ Object.entries(eventsToTest).forEach(
261
+ ([relayerAddress, events]: [string, EventMappings]) => {
262
+ describe(`Events for Relayer: ${relayerAddress}`, () => {
263
+ Object.entries(events).forEach(
264
+ ([eventName, blockNumbers]: [string, number[]]) => {
265
+ describe(`${eventName}`, () => {
266
+ blockNumbers.forEach((blockNumber: number) => {
267
+ it(`State after ${blockNumber}`, async function () {
268
+ await testEventSubscriber<RelayerState>(
269
+ integralRelayer,
270
+ integralRelayer.addressesSubscribed,
271
+ (_blockNumber: number) =>
272
+ fetchRelayerState(
273
+ integralRelayer,
274
+ _blockNumber,
275
+ relayerAddress,
276
+ ),
277
+ blockNumber,
278
+ `${dexKey}_${relayerAddress}`,
279
+ dexHelper.provider,
280
+ );
281
+ });
282
+ });
283
+ });
284
+ },
285
+ );
286
+ });
287
+ },
288
+ );
289
+ });
290
+
291
+ describe('Integral Multiple Events Mainnet', function () {
292
+ let context: IntegralContext;
293
+ const onPoolEnabledSet = dummyCallback as unknown as OnPoolEnabledSetCallback;
294
+ const relayerAddress =
295
+ IntegralConfig[dexKey][network].relayerAddress.toLowerCase();
296
+
297
+ const eventsToTest: Record<Address, EventMappings> = {
298
+ ['']: {
299
+ Transfer: [
300
+ 18490280, 18567011, 18633511, 18713381, 18764112, 18831592, 18912551,
301
+ 19016598, 19117714, 19216294, 19241751, 19272845, 19326496, 19361829,
302
+ 19389103, 19430619, 19430725, 19473032, 19565232, 19632898, 19660246,
303
+ 19696426, 19701836, 19703192, 19709820, 19711173, 19715839, 19717874,
304
+ 19723287, 19724410, 19728665, 19733351, 19735237, 19738144, 19739161,
305
+ 19748150, 19748662, 19749146, 19752286, 19754012, 19757979, 19760993,
306
+ ],
307
+ },
308
+ };
309
+
310
+ beforeEach(async () => {
311
+ context = IntegralContext.initialize(
312
+ network,
313
+ 'Integral',
314
+ dexHelper,
315
+ erc20Interface,
316
+ IntegralConfig[dexKey][network].factoryAddress.toLowerCase(),
317
+ IntegralConfig[dexKey][network].relayerAddress.toLowerCase(),
318
+ );
319
+ const onTransfer = (
320
+ token: Address,
321
+ from: Address,
322
+ to: Address,
323
+ amount: bigint,
324
+ blockNumber: number,
325
+ ) => context.onTransferUpdateBalance(token, from, to, amount, blockNumber);
326
+ const tokensMap = Object.values(TEST_POOLS).reduce<{
327
+ [tokenAddress: Address]: null;
328
+ }>((memo, { token0, token1 }) => {
329
+ memo[token0.toLowerCase()] = null;
330
+ memo[token1.toLowerCase()] = null;
331
+ return memo;
332
+ }, {});
333
+ Object.keys(tokensMap).map(tokenAddress => {
334
+ context.tokens[tokenAddress] = new IntegralToken(
335
+ network,
336
+ dexHelper,
337
+ dexKey,
338
+ erc20Interface,
339
+ tokenAddress,
340
+ relayerAddress,
341
+ onTransfer,
342
+ logger,
343
+ );
344
+ });
345
+
346
+ const integralRelayer = new IntegralRelayer(
347
+ dexHelper,
348
+ dexKey,
349
+ erc20Interface,
350
+ relayerAddress.toLowerCase(),
351
+ TEST_POOLS,
352
+ onPoolEnabledSet,
353
+ logger,
354
+ );
355
+ context.relayer = integralRelayer;
356
+ });
357
+
358
+ Object.entries(eventsToTest).forEach(
359
+ ([_, events]: [string, EventMappings]) => {
360
+ describe(`Events for Pool & Relayer`, () => {
361
+ Object.entries(events).forEach(
362
+ ([eventName, blockNumbers]: [string, number[]]) => {
363
+ describe(`${eventName}`, () => {
364
+ blockNumbers.forEach((blockNumber: number) => {
365
+ it(`State after ${blockNumber}`, async function () {
366
+ await updateEventSubscriber<RelayerState>(
367
+ context.relayer,
368
+ context.relayer.addressesSubscribed,
369
+ (_blockNumber: number) =>
370
+ fetchRelayerState(
371
+ context.relayer,
372
+ _blockNumber,
373
+ relayerAddress,
374
+ ),
375
+ blockNumber,
376
+ `${dexKey}_${relayerAddress}`,
377
+ dexHelper.provider,
378
+ );
379
+ const tokenArray = Object.values(context.tokens);
380
+ await Promise.all(
381
+ tokenArray.map(async t =>
382
+ updateEventSubscriber<TokenState>(
383
+ t,
384
+ t.addressesSubscribed,
385
+ (_blockNumber: number) =>
386
+ fetchTokenState(t, _blockNumber, t.tokenAddress),
387
+ blockNumber,
388
+ `${dexKey}_${t.tokenAddress}`,
389
+ dexHelper.provider,
390
+ ),
391
+ ),
392
+ );
393
+ await checkEventSubscriber<RelayerState>(
394
+ context.relayer,
395
+ (_blockNumber: number) =>
396
+ fetchRelayerState(
397
+ context.relayer,
398
+ _blockNumber,
399
+ relayerAddress,
400
+ ),
401
+ blockNumber,
402
+ `${dexKey}_${relayerAddress}`,
403
+ );
404
+ });
405
+ });
406
+ });
407
+ },
408
+ );
409
+ });
410
+ },
411
+ );
412
+ });
@@ -0,0 +1,146 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { LogDescription } from 'ethers/lib/utils';
3
+ import { IDexHelper } from '../../dex-helper';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { Address, BlockHeader, Log, Logger } from '../../types';
6
+ import { FactoryState } from './types';
7
+ import IntegralFactoryABI from '../../abi/integral/factory.json';
8
+ import IntegralPoolABI from '../../abi/integral/pool.json';
9
+ import { addressDecode } from '../../lib/decoders';
10
+ import { MultiCallParams } from '../../lib/multi-wrapper';
11
+
12
+ export type OnPoolCreatedCallback = (
13
+ token0: Address,
14
+ token1: Address,
15
+ poolAddress: Address,
16
+ blockNumber: number,
17
+ ) => Promise<void>;
18
+
19
+ export class IntegralFactory extends StatefulEventSubscriber<FactoryState> {
20
+ handlers: {
21
+ [event: string]: (
22
+ event: any,
23
+ state: FactoryState,
24
+ blockHeader: Readonly<BlockHeader>,
25
+ ) => Promise<FactoryState>;
26
+ } = {};
27
+
28
+ logDecoder: (log: Log) => any;
29
+
30
+ public readonly factoryIface = new Interface(IntegralFactoryABI);
31
+
32
+ constructor(
33
+ readonly dexHelper: IDexHelper,
34
+ parentName: string,
35
+ protected readonly factoryAddress: Address,
36
+ protected readonly onPoolCreated: OnPoolCreatedCallback,
37
+ logger: Logger,
38
+ mapKey: string = '',
39
+ ) {
40
+ super(parentName, `${parentName} Factory`, dexHelper, logger, true, mapKey);
41
+
42
+ this.addressesSubscribed = [factoryAddress];
43
+
44
+ this.logDecoder = (log: Log) => this.factoryIface.parseLog(log);
45
+
46
+ this.handlers['PairCreated'] = this.handlePairCreated.bind(this);
47
+ }
48
+
49
+ async generateState(blockNumber?: number | 'latest'): Promise<FactoryState> {
50
+ const factory = new this.dexHelper.web3Provider.eth.Contract(
51
+ IntegralFactoryABI as any,
52
+ this.factoryAddress,
53
+ );
54
+ const poolCountResult = await factory.methods
55
+ .allPairsLength()
56
+ .call(undefined, blockNumber);
57
+ const poolCount = Number(poolCountResult);
58
+ const poolAddressCallDatas: MultiCallParams<string>[] = [
59
+ ...Array(poolCount),
60
+ ].map((_, i) => {
61
+ return {
62
+ target: this.factoryAddress,
63
+ callData: factory.methods.allPairs(i).encodeABI(),
64
+ decodeFunction: addressDecode,
65
+ };
66
+ });
67
+ const poolAddresses =
68
+ await this.dexHelper.multiWrapper.tryAggregate<string>(
69
+ false,
70
+ poolAddressCallDatas,
71
+ blockNumber,
72
+ this.dexHelper.multiWrapper.defaultBatchSize,
73
+ false,
74
+ );
75
+
76
+ const poolIface = new Interface(IntegralPoolABI);
77
+ const poolInfosCallDatas: MultiCallParams<string>[] = poolAddresses
78
+ .map(poolAddress => {
79
+ return [
80
+ {
81
+ target: poolAddress.returnData,
82
+ callData: poolIface.encodeFunctionData('token0', []),
83
+ decodeFunction: addressDecode,
84
+ },
85
+ {
86
+ target: poolAddress.returnData,
87
+ callData: poolIface.encodeFunctionData('token1', []),
88
+ decodeFunction: addressDecode,
89
+ },
90
+ ];
91
+ })
92
+ .flat();
93
+ const poolInfos = await this.dexHelper.multiWrapper.aggregate<string>(
94
+ poolInfosCallDatas,
95
+ blockNumber,
96
+ );
97
+
98
+ const state: FactoryState = { pools: {} };
99
+ poolAddresses.forEach((poolAddress, i) => {
100
+ const tokens: [Address, Address] = [
101
+ poolInfos[i * 2].toLowerCase(),
102
+ poolInfos[i * 2 + 1].toLowerCase(),
103
+ ];
104
+ state.pools[poolAddress.returnData.toLowerCase()] = {
105
+ token0: tokens[0],
106
+ token1: tokens[1],
107
+ };
108
+ });
109
+ return state;
110
+ }
111
+
112
+ protected async processLog(
113
+ state: FactoryState,
114
+ log: Readonly<Log>,
115
+ blockHeader: Readonly<BlockHeader>,
116
+ ): Promise<FactoryState> {
117
+ const event = this.logDecoder(log);
118
+ if (event.name in this.handlers) {
119
+ return await this.handlers[event.name](event, state, blockHeader);
120
+ }
121
+
122
+ return state;
123
+ }
124
+
125
+ async handlePairCreated(
126
+ event: LogDescription,
127
+ state: FactoryState,
128
+ blockHeader: Readonly<BlockHeader>,
129
+ ) {
130
+ const tokens: [Address, Address] = [
131
+ event.args.token0.toLowerCase(),
132
+ event.args.token1.toLowerCase(),
133
+ ];
134
+ state.pools[event.args.pair.toLowerCase()] = {
135
+ token0: tokens[0],
136
+ token1: tokens[1],
137
+ };
138
+ await this.onPoolCreated(
139
+ tokens[0],
140
+ tokens[1],
141
+ event.args.pair.toLowerCase(),
142
+ blockHeader.number,
143
+ );
144
+ return state;
145
+ }
146
+ }