@paraswap/dex-lib 3.8.28-fm.2 → 3.8.28

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 (310) hide show
  1. package/.vscode/launch.json +53 -0
  2. package/.vscode/settings.json +2 -0
  3. package/.vscode/tasks.json +15 -0
  4. package/build/abi/AaveV1_lending_pool.json +27 -0
  5. package/build/abi/BProtocol.json +1155 -0
  6. package/build/abi/Jarvis.json +1172 -0
  7. package/build/abi/MStableAsset.json +1545 -0
  8. package/build/abi/OneInchLp.json +1304 -0
  9. package/build/abi/Onebit.json +736 -0
  10. package/build/abi/Shell.json +1294 -0
  11. package/build/abi/TraderJoeV2Router.json +50 -0
  12. package/build/abi/platypus/asset.json +490 -0
  13. package/build/abi/platypus/avax-pool.json +820 -0
  14. package/build/abi/platypus/oracle.json +119 -0
  15. package/build/abi/platypus/pool.json +677 -0
  16. package/build/abi/smardex/all/smardex-router.json +648 -0
  17. package/build/abi/smardex/layer-1/smardex-factory.json +242 -0
  18. package/build/abi/smardex/layer-1/smardex-pool.json +506 -0
  19. package/build/abi/smardex/layer-2/smardex-factory.json +185 -0
  20. package/build/abi/smardex/layer-2/smardex-pool.json +578 -0
  21. package/build/abi/swaap-v1/pool.json +1346 -0
  22. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +52 -0
  23. package/build/abi/wombat/pool.json +1289 -0
  24. package/build/abi/zrx.v2.json +1967 -0
  25. package/build/abi/zrx.v3.json +3454 -0
  26. package/build/abi/zrx.v4.json +2193 -0
  27. package/build/config.js +18 -18
  28. package/build/dex/OneInchLp.d.ts +24 -0
  29. package/build/dex/OneInchLp.js +43 -0
  30. package/build/dex/OneInchLp.js.map +1 -0
  31. package/build/dex/aave-v1/aave-v1.d.ts +34 -0
  32. package/build/dex/aave-v1/aave-v1.js +181 -0
  33. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  34. package/build/dex/aave-v1/config.d.ts +11 -0
  35. package/build/dex/aave-v1/config.js +20 -0
  36. package/build/dex/aave-v1/config.js.map +1 -0
  37. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  38. package/build/dex/aave-v1/tokens.d.ts +3 -0
  39. package/build/dex/aave-v1/tokens.js +50 -0
  40. package/build/dex/aave-v1/tokens.js.map +1 -0
  41. package/build/dex/aave-v1/types.d.ts +12 -0
  42. package/build/dex/aave-v1/types.js +3 -0
  43. package/build/dex/aave-v1/types.js.map +1 -0
  44. package/build/dex/aave-v2/tokens-avalanche.json +44 -0
  45. package/build/dex/aave-v2/tokens-mainnet.json +188 -0
  46. package/build/dex/aave-v2/tokens-polygon.json +44 -0
  47. package/build/dex/bProtocol/bProtocol.d.ts +15 -0
  48. package/build/dex/bProtocol/bProtocol.js +56 -0
  49. package/build/dex/bProtocol/bProtocol.js.map +1 -0
  50. package/build/dex/bProtocol/types.d.ts +11 -0
  51. package/build/dex/bProtocol/types.js +8 -0
  52. package/build/dex/bProtocol/types.js.map +1 -0
  53. package/build/dex/bProtocol.d.ts +18 -0
  54. package/build/dex/bProtocol.js +39 -0
  55. package/build/dex/bProtocol.js.map +1 -0
  56. package/build/dex/balancer-v1/balancer-v1.d.ts +2 -2
  57. package/build/dex/balancer-v1/balancer-v1.js +2 -2
  58. package/build/dex/balancer-v1/balancer-v1.js.map +1 -1
  59. package/build/dex/balancer-v2/balancer-v2.d.ts +2 -2
  60. package/build/dex/balancer-v2/balancer-v2.js +2 -2
  61. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  62. package/build/dex/bancor.d.ts +26 -0
  63. package/build/dex/bancor.js +58 -0
  64. package/build/dex/bancor.js.map +1 -0
  65. package/build/dex/camelot/camelot.d.ts +2 -2
  66. package/build/dex/camelot/camelot.js +4 -4
  67. package/build/dex/camelot/camelot.js.map +1 -1
  68. package/build/dex/compound.d.ts +18 -0
  69. package/build/dex/compound.js +46 -0
  70. package/build/dex/compound.js.map +1 -0
  71. package/build/dex/curve-v1/curve-v1.d.ts +1 -1
  72. package/build/dex/curve-v1/curve-v1.js +2 -2
  73. package/build/dex/curve-v1/curve-v1.js.map +1 -1
  74. package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +1 -1
  75. package/build/dex/curve-v1-factory/curve-v1-factory.js +5 -4
  76. package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
  77. package/build/dex/curve-v2.d.ts +58 -0
  78. package/build/dex/curve-v2.js +180 -0
  79. package/build/dex/curve-v2.js.map +1 -0
  80. package/build/dex/dexalot/dexalot.js +4 -0
  81. package/build/dex/dexalot/dexalot.js.map +1 -1
  82. package/build/dex/dodo-v1.d.ts +33 -0
  83. package/build/dex/dodo-v1.js +63 -0
  84. package/build/dex/dodo-v1.js.map +1 -0
  85. package/build/dex/gmx/gmx.d.ts +2 -2
  86. package/build/dex/gmx/gmx.js +2 -2
  87. package/build/dex/gmx/gmx.js.map +1 -1
  88. package/build/dex/gmx/pool.d.ts +2 -2
  89. package/build/dex/gmx/pool.js +3 -7
  90. package/build/dex/gmx/pool.js.map +1 -1
  91. package/build/dex/hashflow/hashflow.js +4 -0
  92. package/build/dex/hashflow/hashflow.js.map +1 -1
  93. package/build/dex/idex.d.ts +1 -1
  94. package/build/dex/infusion/infusion.d.ts +2 -2
  95. package/build/dex/infusion/infusion.js +4 -4
  96. package/build/dex/infusion/infusion.js.map +1 -1
  97. package/build/dex/jarvis.d.ts +56 -0
  98. package/build/dex/jarvis.js +163 -0
  99. package/build/dex/jarvis.js.map +1 -0
  100. package/build/dex/lido.d.ts +19 -0
  101. package/build/dex/lido.js +42 -0
  102. package/build/dex/lido.js.map +1 -0
  103. package/build/dex/mStable.d.ts +44 -0
  104. package/build/dex/mStable.js +75 -0
  105. package/build/dex/mStable.js.map +1 -0
  106. package/build/dex/maker-psm/scripts/gem.abi.json +136 -0
  107. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  108. package/build/dex/maker-psm/scripts/validate-state.js +185 -0
  109. package/build/dex/maker-psm/scripts/validate-state.js.map +1 -0
  110. package/build/dex/maker-psm/scripts/vat.abi.json +243 -0
  111. package/build/dex/onebit/onebit.d.ts +16 -0
  112. package/build/dex/onebit/onebit.js +61 -0
  113. package/build/dex/onebit/onebit.js.map +1 -0
  114. package/build/dex/onebit/types.d.ts +14 -0
  115. package/build/dex/onebit/types.js +8 -0
  116. package/build/dex/onebit/types.js.map +1 -0
  117. package/build/dex/onebit.d.ts +25 -0
  118. package/build/dex/onebit.js +42 -0
  119. package/build/dex/onebit.js.map +1 -0
  120. package/build/dex/oswap/oswap-pool.d.ts +1 -1
  121. package/build/dex/oswap/oswap-pool.js +1 -3
  122. package/build/dex/oswap/oswap-pool.js.map +1 -1
  123. package/build/dex/oswap/oswap.d.ts +1 -1
  124. package/build/dex/oswap/oswap.js +2 -6
  125. package/build/dex/oswap/oswap.js.map +1 -1
  126. package/build/dex/platypus/asset.d.ts +14 -0
  127. package/build/dex/platypus/asset.js +97 -0
  128. package/build/dex/platypus/asset.js.map +1 -0
  129. package/build/dex/platypus/config.d.ts +11 -0
  130. package/build/dex/platypus/config.js +69 -0
  131. package/build/dex/platypus/config.js.map +1 -0
  132. package/build/dex/platypus/platypus.d.ts +63 -0
  133. package/build/dex/platypus/platypus.js +487 -0
  134. package/build/dex/platypus/platypus.js.map +1 -0
  135. package/build/dex/platypus/pool-avax.d.ts +8 -0
  136. package/build/dex/platypus/pool-avax.js +54 -0
  137. package/build/dex/platypus/pool-avax.js.map +1 -0
  138. package/build/dex/platypus/pool-base.d.ts +19 -0
  139. package/build/dex/platypus/pool-base.js +86 -0
  140. package/build/dex/platypus/pool-base.js.map +1 -0
  141. package/build/dex/platypus/pool-pure.d.ts +8 -0
  142. package/build/dex/platypus/pool-pure.js +37 -0
  143. package/build/dex/platypus/pool-pure.js.map +1 -0
  144. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  145. package/build/dex/platypus/pool-subscriber.js +167 -0
  146. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  147. package/build/dex/platypus/pool.d.ts +8 -0
  148. package/build/dex/platypus/pool.js +58 -0
  149. package/build/dex/platypus/pool.js.map +1 -0
  150. package/build/dex/platypus/types.d.ts +92 -0
  151. package/build/dex/platypus/types.js +10 -0
  152. package/build/dex/platypus/types.js.map +1 -0
  153. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  154. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  155. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  156. package/build/dex/shell.d.ts +25 -0
  157. package/build/dex/shell.js +41 -0
  158. package/build/dex/shell.js.map +1 -0
  159. package/build/dex/smardex/config.d.ts +4 -0
  160. package/build/dex/smardex/config.js +64 -0
  161. package/build/dex/smardex/config.js.map +1 -0
  162. package/build/dex/smardex/constants.d.ts +18 -0
  163. package/build/dex/smardex/constants.js +33 -0
  164. package/build/dex/smardex/constants.js.map +1 -0
  165. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  166. package/build/dex/smardex/sdk/constants.js +13 -0
  167. package/build/dex/smardex/sdk/constants.js.map +1 -0
  168. package/build/dex/smardex/sdk/core.d.ts +113 -0
  169. package/build/dex/smardex/sdk/core.js +499 -0
  170. package/build/dex/smardex/sdk/core.js.map +1 -0
  171. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  172. package/build/dex/smardex/sdk/errors.js +22 -0
  173. package/build/dex/smardex/sdk/errors.js.map +1 -0
  174. package/build/dex/smardex/sdk/types.d.ts +62 -0
  175. package/build/dex/smardex/sdk/types.js +3 -0
  176. package/build/dex/smardex/sdk/types.js.map +1 -0
  177. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  178. package/build/dex/smardex/sdk/utils.js +133 -0
  179. package/build/dex/smardex/sdk/utils.js.map +1 -0
  180. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  181. package/build/dex/smardex/smardex-event-pool.js +119 -0
  182. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  183. package/build/dex/smardex/smardex.d.ts +65 -0
  184. package/build/dex/smardex/smardex.js +519 -0
  185. package/build/dex/smardex/smardex.js.map +1 -0
  186. package/build/dex/smardex/types.d.ts +55 -0
  187. package/build/dex/smardex/types.js +3 -0
  188. package/build/dex/smardex/types.js.map +1 -0
  189. package/build/dex/smoothy.d.ts +26 -0
  190. package/build/dex/smoothy.js +48 -0
  191. package/build/dex/smoothy.js.map +1 -0
  192. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  193. package/build/dex/solidly/forks-override/cone.js +53 -0
  194. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  195. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  196. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  197. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  198. package/build/dex/solidly/solidly.d.ts +2 -2
  199. package/build/dex/solidly/solidly.js +4 -4
  200. package/build/dex/solidly/solidly.js.map +1 -1
  201. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +1 -0
  202. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +53 -0
  203. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +1 -0
  204. package/build/dex/stable-pool.d.ts +28 -0
  205. package/build/dex/stable-pool.js +55 -0
  206. package/build/dex/stable-pool.js.map +1 -0
  207. package/build/dex/swaap-v1/config.d.ts +17 -0
  208. package/build/dex/swaap-v1/config.js +56 -0
  209. package/build/dex/swaap-v1/config.js.map +1 -0
  210. package/build/dex/swaap-v1/constants.d.ts +6 -0
  211. package/build/dex/swaap-v1/constants.js +17 -0
  212. package/build/dex/swaap-v1/constants.js.map +1 -0
  213. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  214. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  215. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  216. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  217. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  218. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  219. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  220. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  221. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  222. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  223. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  224. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  225. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  226. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  227. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  228. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  229. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  230. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  231. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  232. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  233. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  234. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  235. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  236. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  237. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  238. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  239. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  240. package/build/dex/swaap-v1/swaap-v1.d.ts +62 -0
  241. package/build/dex/swaap-v1/swaap-v1.js +383 -0
  242. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  243. package/build/dex/swaap-v1/types.d.ts +106 -0
  244. package/build/dex/swaap-v1/types.js +9 -0
  245. package/build/dex/swaap-v1/types.js.map +1 -0
  246. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +7 -0
  247. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +20 -0
  248. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +1 -0
  249. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  250. package/build/dex/trader-joe-v2.1.js +79 -0
  251. package/build/dex/trader-joe-v2.1.js.map +1 -0
  252. package/build/dex/trader-joe-v2.d.ts +40 -0
  253. package/build/dex/trader-joe-v2.js +74 -0
  254. package/build/dex/trader-joe-v2.js.map +1 -0
  255. package/build/dex/uniswap-v2/uniswap-v2.d.ts +2 -2
  256. package/build/dex/uniswap-v2/uniswap-v2.js +4 -4
  257. package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
  258. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +17 -0
  259. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +64 -0
  260. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +1 -0
  261. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +17 -0
  262. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +79 -0
  263. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +1 -0
  264. package/build/dex/uniswap-v3/uniswap-v3.d.ts +2 -2
  265. package/build/dex/uniswap-v3/uniswap-v3.js +2 -4
  266. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  267. package/build/dex/zerox/config.d.ts +2 -0
  268. package/build/dex/zerox/config.js +33 -0
  269. package/build/dex/zerox/config.js.map +1 -0
  270. package/build/dex/zerox/index.d.ts +22 -0
  271. package/build/dex/zerox/index.js +225 -0
  272. package/build/dex/zerox/index.js.map +1 -0
  273. package/build/dex/zerox/order.d.ts +88 -0
  274. package/build/dex/zerox/order.js +53 -0
  275. package/build/dex/zerox/order.js.map +1 -0
  276. package/build/dex/zerox/types.d.ts +73 -0
  277. package/build/dex/zerox/types.js +21 -0
  278. package/build/dex/zerox/types.js.map +1 -0
  279. package/build/executor/types.d.ts +3 -1
  280. package/build/executor/types.js +2 -0
  281. package/build/executor/types.js.map +1 -1
  282. package/build/pricing-helper.d.ts +2 -2
  283. package/build/pricing-helper.js +5 -9
  284. package/build/pricing-helper.js.map +1 -1
  285. package/package.json +1 -1
  286. package/src/config.ts +18 -18
  287. package/src/dex/balancer-v1/balancer-v1.ts +1 -5
  288. package/src/dex/balancer-v2/balancer-v2.ts +1 -5
  289. package/src/dex/camelot/camelot.ts +3 -9
  290. package/src/dex/curve-v1/curve-v1.ts +1 -3
  291. package/src/dex/curve-v1-factory/curve-v1-factory.ts +4 -5
  292. package/src/dex/dexalot/dexalot.ts +4 -0
  293. package/src/dex/gmx/gmx.ts +0 -5
  294. package/src/dex/gmx/pool.ts +2 -8
  295. package/src/dex/hashflow/hashflow.ts +4 -0
  296. package/src/dex/idex.ts +0 -1
  297. package/src/dex/infusion/infusion.ts +3 -9
  298. package/src/dex/oswap/oswap-pool.ts +1 -3
  299. package/src/dex/oswap/oswap.ts +2 -8
  300. package/src/dex/solidly/solidly.ts +3 -9
  301. package/src/dex/uniswap-v2/uniswap-v2.ts +3 -9
  302. package/src/dex/uniswap-v3/uniswap-v3.ts +8 -14
  303. package/src/executor/types.ts +2 -0
  304. package/src/pricing-helper.ts +4 -27
  305. package/build/dex-utils.d.ts +0 -3
  306. package/build/dex-utils.js +0 -10
  307. package/build/dex-utils.js.map +0 -1
  308. package/build/stateful-dual-synchronizer.d.ts +0 -46
  309. package/build/stateful-dual-synchronizer.js +0 -300
  310. package/build/stateful-dual-synchronizer.js.map +0 -1
@@ -151,11 +151,7 @@ export class Infusion extends UniswapV2 {
151
151
  return pair;
152
152
  }
153
153
 
154
- async batchCatchUpPairs(
155
- pairs: [Token, Token][],
156
- blockNumber: number,
157
- fmode?: boolean,
158
- ) {
154
+ async batchCatchUpPairs(pairs: [Token, Token][], blockNumber: number) {
159
155
  if (!blockNumber) return;
160
156
  const pairsToFetch: InfusionPair[] = [];
161
157
  for (const _pair of pairs) {
@@ -167,7 +163,7 @@ export class Infusion extends UniswapV2 {
167
163
  if (!(pair && pair.exchange)) continue;
168
164
  if (!pair.pool) {
169
165
  pairsToFetch.push(pair);
170
- } else if (!fmode && !pair.pool.getState(blockNumber)) {
166
+ } else if (!pair.pool.getState(blockNumber)) {
171
167
  pairsToFetch.push(pair);
172
168
  }
173
169
  }
@@ -281,8 +277,6 @@ export class Infusion extends UniswapV2 {
281
277
  srcDexFee: 0,
282
278
  destDexFee: 0,
283
279
  },
284
- isFirstSwap?: boolean,
285
- fmode?: boolean,
286
280
  ): Promise<ExchangePrices<InfusionData> | null> {
287
281
  try {
288
282
  if (side === SwapSide.BUY) return null; // Buy side not implemented yet
@@ -300,7 +294,7 @@ export class Infusion extends UniswapV2 {
300
294
  .sort((a, b) => (a > b ? 1 : -1))
301
295
  .join('_');
302
296
 
303
- await this.batchCatchUpPairs([[from, to]], blockNumber, fmode);
297
+ await this.batchCatchUpPairs([[from, to]], blockNumber);
304
298
 
305
299
  const resultPromises = [false, true].map(async stable => {
306
300
  // We don't support fee on transfer for stable pools yet
@@ -126,11 +126,9 @@ export class OSwapEventPool extends StatefulEventSubscriber<OSwapPoolState> {
126
126
  async getStateOrGenerate(
127
127
  blockNumber: number,
128
128
  readonly: boolean = true,
129
- fmode?: boolean,
130
- ): Promise<OSwapPoolState | null> {
129
+ ): Promise<OSwapPoolState> {
131
130
  let state = this.getState(blockNumber);
132
131
  if (!state) {
133
- if (fmode) return null;
134
132
  state = await this.generateState(blockNumber);
135
133
  if (!readonly) this.setState(state, blockNumber);
136
134
  }
@@ -1,5 +1,5 @@
1
1
  import { Interface } from '@ethersproject/abi';
2
- import { assert, AsyncOrSync } from 'ts-essentials';
2
+ import { AsyncOrSync } from 'ts-essentials';
3
3
  import {
4
4
  Token,
5
5
  Address,
@@ -203,8 +203,6 @@ export class OSwap extends SimpleExchange implements IDex<OSwapData> {
203
203
  srcDexFee: 0,
204
204
  destDexFee: 0,
205
205
  },
206
- isFirstSwap?: boolean,
207
- fmode?: boolean,
208
206
  ): Promise<null | ExchangePrices<OSwapData>> {
209
207
  try {
210
208
  // Get the pool to use.
@@ -222,9 +220,7 @@ export class OSwap extends SimpleExchange implements IDex<OSwapData> {
222
220
  return null;
223
221
  }
224
222
 
225
- const state = await eventPool.getStateOrGenerate(blockNumber, fmode);
226
-
227
- if (!state) return null;
223
+ const state = await eventPool.getStateOrGenerate(blockNumber);
228
224
 
229
225
  // Calculate the prices
230
226
  const unitAmount = getBigIntPow(18);
@@ -383,8 +379,6 @@ export class OSwap extends SimpleExchange implements IDex<OSwapData> {
383
379
  await this.dexHelper.web3Provider.eth.getBlockNumber();
384
380
  const state = await eventPool.getStateOrGenerate(blockNumber);
385
381
 
386
- assert(state, 'OSwap pool state not found');
387
-
388
382
  const usd0 = await this.dexHelper.getTokenUSDPrice(
389
383
  { address: pool.token0, decimals: 18 },
390
384
  BigInt(state.balance0),
@@ -171,11 +171,7 @@ export class Solidly extends UniswapV2 {
171
171
  return pair;
172
172
  }
173
173
 
174
- async batchCatchUpPairs(
175
- pairs: [Token, Token][],
176
- blockNumber: number,
177
- fmode?: boolean,
178
- ) {
174
+ async batchCatchUpPairs(pairs: [Token, Token][], blockNumber: number) {
179
175
  if (!blockNumber) return;
180
176
  const pairsToFetch: SolidlyPair[] = [];
181
177
  for (const _pair of pairs) {
@@ -184,7 +180,7 @@ export class Solidly extends UniswapV2 {
184
180
  if (!(pair && pair.exchange)) continue;
185
181
  if (!pair.pool) {
186
182
  pairsToFetch.push(pair);
187
- } else if (!fmode && !pair.pool.getState(blockNumber)) {
183
+ } else if (!pair.pool.getState(blockNumber)) {
188
184
  pairsToFetch.push(pair);
189
185
  }
190
186
  }
@@ -310,8 +306,6 @@ export class Solidly extends UniswapV2 {
310
306
  srcDexFee: 0,
311
307
  destDexFee: 0,
312
308
  },
313
- isFirstSwap?: boolean,
314
- fmode?: boolean,
315
309
  ): Promise<ExchangePrices<UniswapV2Data> | null> {
316
310
  try {
317
311
  if (side === SwapSide.BUY) return null; // Buy side not implemented yet
@@ -329,7 +323,7 @@ export class Solidly extends UniswapV2 {
329
323
  .sort((a, b) => (a > b ? 1 : -1))
330
324
  .join('_');
331
325
 
332
- await this.batchCatchUpPairs([[from, to]], blockNumber, fmode);
326
+ await this.batchCatchUpPairs([[from, to]], blockNumber);
333
327
 
334
328
  const resultPromises = [false, true].map(async stable => {
335
329
  // We don't support fee on transfer for stable pools yet
@@ -445,11 +445,7 @@ export class UniswapV2
445
445
  }
446
446
  }
447
447
 
448
- async batchCatchUpPairs(
449
- pairs: [Token, Token][],
450
- blockNumber: number,
451
- fmode?: boolean,
452
- ) {
448
+ async batchCatchUpPairs(pairs: [Token, Token][], blockNumber: number) {
453
449
  if (!blockNumber) return;
454
450
  const pairsToFetch: UniswapV2Pair[] = [];
455
451
  for (const _pair of pairs) {
@@ -457,7 +453,7 @@ export class UniswapV2
457
453
  if (!(pair && pair.exchange)) continue;
458
454
  if (!pair.pool) {
459
455
  pairsToFetch.push(pair);
460
- } else if (!fmode && !pair.pool.getState(blockNumber)) {
456
+ } else if (!pair.pool.getState(blockNumber)) {
461
457
  pairsToFetch.push(pair);
462
458
  }
463
459
  }
@@ -564,8 +560,6 @@ export class UniswapV2
564
560
  srcDexFee: 0,
565
561
  destDexFee: 0,
566
562
  },
567
- isFirstSwap?: boolean,
568
- fmode?: boolean,
569
563
  ): Promise<ExchangePrices<UniswapV2Data> | null> {
570
564
  try {
571
565
  const from = this.dexHelper.config.wrapETH(_from);
@@ -587,7 +581,7 @@ export class UniswapV2
587
581
  if (limitPools && limitPools.every(p => p !== poolIdentifier))
588
582
  return null;
589
583
 
590
- await this.batchCatchUpPairs([[from, to]], blockNumber, fmode);
584
+ await this.batchCatchUpPairs([[from, to]], blockNumber);
591
585
  const isSell = side === SwapSide.SELL;
592
586
  const pairParam = await this.getPairOrderedParams(
593
587
  from,
@@ -14,7 +14,6 @@ import {
14
14
  PreprocessTransactionOptions,
15
15
  SimpleExchangeParam,
16
16
  Token,
17
- TransferFeeParams,
18
17
  TxInfo,
19
18
  } from '../../types';
20
19
  import { CACHE_PREFIX, Network, SwapSide } from '../../constants';
@@ -662,9 +661,6 @@ export class UniswapV3
662
661
  side: SwapSide,
663
662
  blockNumber: number,
664
663
  limitPools?: string[],
665
- transferFees?: TransferFeeParams,
666
- isFirstSwap?: boolean,
667
- fmode?: boolean,
668
664
  ): Promise<null | ExchangePrices<UniswapV3Data>> {
669
665
  try {
670
666
  const _srcToken = this.dexHelper.config.wrapETH(srcToken);
@@ -741,16 +737,14 @@ export class UniswapV3
741
737
  p => p.getState(blockNumber)!,
742
738
  );
743
739
 
744
- const rpcResultsPromise = fmode
745
- ? null
746
- : this.getPricingFromRpc(
747
- _srcToken,
748
- _destToken,
749
- amounts,
750
- side,
751
- this.network === Network.ZKEVM ? [] : poolsToUse.poolWithoutState,
752
- this.network === Network.ZKEVM ? [] : states,
753
- );
740
+ const rpcResultsPromise = this.getPricingFromRpc(
741
+ _srcToken,
742
+ _destToken,
743
+ amounts,
744
+ side,
745
+ this.network === Network.ZKEVM ? [] : poolsToUse.poolWithoutState,
746
+ this.network === Network.ZKEVM ? [] : states,
747
+ );
754
748
 
755
749
  const unitAmount = getBigIntPow(
756
750
  side == SwapSide.SELL ? _srcToken.decimals : _destToken.decimals,
@@ -25,6 +25,8 @@ export enum SpecialDex {
25
25
  SWAP_ON_AUGUSTUS_RFQ = 9, // swapOnAugustusRFQ
26
26
  EXECUTE_VERTICAL_BRANCHING = 10, // execute vertical branching
27
27
  BUY_ON_SOLIDLY_V3 = 11,
28
+ SWAP_ON_DEXALOT = 12,
29
+ SWAP_ON_HASHFLOW = 13,
28
30
  }
29
31
 
30
32
  export enum Executors {
@@ -111,24 +111,14 @@ export class PricingHelper {
111
111
  blockNumber: number,
112
112
  dexKeys: string[],
113
113
  filterConstantPricePool: boolean = false,
114
- overrideTimeout?: number,
115
114
  ): Promise<{ [dexKey: string]: string[] | null }> {
116
115
  const poolIdentifiers = await Promise.all(
117
116
  dexKeys.map(async key => {
118
117
  try {
119
118
  return await new Promise<string[] | null>((resolve, reject) => {
120
- const now = Date.now();
121
- const timeout = overrideTimeout ?? FETCH_POOL_IDENTIFIER_TIMEOUT;
122
119
  const timer = setTimeout(
123
- () =>
124
- reject(
125
- new Error(
126
- `Timeout of ${timeout}ms breached after ${
127
- Date.now() - now
128
- }ms for ${key}`,
129
- ),
130
- ),
131
- timeout,
120
+ () => reject(new Error(`Timeout`)),
121
+ FETCH_POOL_IDENTIFIER_TIMEOUT,
132
122
  );
133
123
  const dexInstance = this.dexAdapterService.getDexByKey(key);
134
124
 
@@ -202,8 +192,6 @@ export class PricingHelper {
202
192
  destDexFee: 0,
203
193
  },
204
194
  rollupL1ToL2GasRatio?: number,
205
- overrideTimeout?: number,
206
- fmode?: boolean,
207
195
  ): Promise<PoolPrices<any>[]> {
208
196
  const dexPoolPrices = await Promise.all(
209
197
  dexKeys.map(async key => {
@@ -214,18 +202,9 @@ export class PricingHelper {
214
202
 
215
203
  return await new Promise<PoolPrices<any>[] | null>(
216
204
  (resolve, reject) => {
217
- const now = Date.now();
218
- const timeout = overrideTimeout ?? FETCH_POOL_PRICES_TIMEOUT;
219
205
  const timer = setTimeout(
220
- () =>
221
- reject(
222
- new Error(
223
- `Timeout of ${timeout}ms breached after ${
224
- Date.now() - now
225
- }ms for ${key}`,
226
- ),
227
- ),
228
- timeout,
206
+ () => reject(new Error(`Timeout`)),
207
+ FETCH_POOL_PRICES_TIMEOUT,
229
208
  );
230
209
 
231
210
  const dexInstance = this.dexAdapterService.getDexByKey(key);
@@ -247,8 +226,6 @@ export class PricingHelper {
247
226
  blockNumber,
248
227
  limitPools ? limitPools : undefined,
249
228
  transferFees,
250
- false,
251
- fmode,
252
229
  )
253
230
  .then(poolPrices => {
254
231
  try {
@@ -1,3 +0,0 @@
1
- export declare class DexPoolNotFoundError extends Error {
2
- constructor(dexKey: string, poolIdentifier: string);
3
- }
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DexPoolNotFoundError = void 0;
4
- class DexPoolNotFoundError extends Error {
5
- constructor(dexKey, poolIdentifier) {
6
- super(`Pool ${poolIdentifier} not found for DEX ${dexKey}`);
7
- }
8
- }
9
- exports.DexPoolNotFoundError = DexPoolNotFoundError;
10
- //# sourceMappingURL=dex-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dex-utils.js","sourceRoot":"","sources":["../src/dex-utils.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,MAAc,EAAE,cAAsB;QAChD,KAAK,CAAC,QAAQ,cAAc,sBAAsB,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AAJD,oDAIC"}
@@ -1,46 +0,0 @@
1
- import { AsyncOrSync, DeepReadonly } from 'ts-essentials';
2
- import { Log, Logger } from './types';
3
- import { BlockHeader } from 'web3-eth';
4
- import { EventSubscriber } from './dex-helper/iblock-manager';
5
- import { IDexHelper } from './dex-helper';
6
- export declare type InitializeStateOptions<State> = {
7
- state?: DeepReadonly<State>;
8
- initCallback?: (state: DeepReadonly<State>) => void;
9
- forceRegenerate?: boolean;
10
- };
11
- declare type ObjectOrString<State> = DeepReadonly<State> | string;
12
- declare type ObjectOrStringOrNull<State> = ObjectOrString<State> | null;
13
- export declare abstract class StatefulDualSynchronizer<State> implements EventSubscriber {
14
- dexKey: string;
15
- poolIdentifier: string;
16
- protected dexHelper: IDexHelper;
17
- protected logger: Logger;
18
- protected state: ObjectOrStringOrNull<State>;
19
- protected stateBlockNumber: number;
20
- protected stateHistory: {
21
- [blockNumber: number]: ObjectOrString<State>;
22
- };
23
- protected invalid: boolean;
24
- isTracking: () => boolean;
25
- addressesSubscribed: string[];
26
- parentName: string;
27
- name: string;
28
- isInitialized: boolean;
29
- constructor(dexKey: string, poolIdentifier: string, dexHelper: IDexHelper, logger: Logger);
30
- getStateBlockNumber(): Readonly<number>;
31
- initialize(blockNumber: number, options?: InitializeStateOptions<State>): Promise<void>;
32
- protected abstract processLog(state: DeepReadonly<State>, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): AsyncOrSync<DeepReadonly<State> | null>;
33
- protected processBlockLogs(state: DeepReadonly<State>, logs: Readonly<Log>[], blockHeader: Readonly<BlockHeader>): Promise<DeepReadonly<State> | null>;
34
- abstract generateState(blockNumber?: number | 'latest'): AsyncOrSync<DeepReadonly<State>>;
35
- restart(blockNumber: number): void;
36
- update(logs: Readonly<Log>[], blockHeaders: Readonly<{
37
- [blockNumber: number]: Readonly<BlockHeader>;
38
- }>): Promise<void>;
39
- rollback(blockNumber: number): void;
40
- invalidate(): void;
41
- getState(minBlockNumber: number): DeepReadonly<State> | null;
42
- getStaleState(): DeepReadonly<State> | null;
43
- _setState(state: ObjectOrStringOrNull<State>, blockNumber: number): void;
44
- setState(state: ObjectOrString<State>, blockNumber: number): void;
45
- }
46
- export {};
@@ -1,300 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StatefulDualSynchronizer = void 0;
4
- const ts_essentials_1 = require("ts-essentials");
5
- const constants_1 = require("./constants");
6
- const utils_1 = require("./utils");
7
- // TODO: make sure that we can get either state object or string
8
- class StatefulDualSynchronizer {
9
- constructor(dexKey, poolIdentifier, dexHelper, logger) {
10
- this.dexKey = dexKey;
11
- this.poolIdentifier = poolIdentifier;
12
- this.dexHelper = dexHelper;
13
- this.logger = logger;
14
- //The current state and its block number
15
- //Derived classes should not set these directly, and instead use setState()
16
- this.state = null;
17
- this.stateBlockNumber = 0;
18
- //Derived classes should use setState() to record a new entry
19
- this.stateHistory = {};
20
- //Invalid flag - indicates that the currently stored state might not be valid
21
- this.invalid = false;
22
- this.isTracking = () => false;
23
- this.addressesSubscribed = [];
24
- this.isInitialized = false;
25
- this.dexKey = dexKey.toLowerCase();
26
- this.poolIdentifier = poolIdentifier.toLowerCase();
27
- // parentName and Name are imposed by the interface. Prefer dexKey and poolIdentifier
28
- this.parentName = this.dexKey;
29
- this.name = this.poolIdentifier;
30
- if (!this.dexHelper.config.isSlave) {
31
- this.dexHelper.dexStatePublisher.registerPool(this.dexKey, this.poolIdentifier, this);
32
- }
33
- }
34
- getStateBlockNumber() {
35
- return this.stateBlockNumber;
36
- }
37
- //Function which set the initial state and bounded it to blockNumber
38
- //There is multiple possible case:
39
- // 1. You provide a state in options object the function will initialize with the provided state
40
- // with blockNumber and subscribe to logs.
41
- // 2. if you are a master instance of dex-lib and no state is provided in options object
42
- // then the function generate a new state with blockNumber as height and set the state with
43
- // the result.
44
- // 3. if you are a slave instance of dex-lib
45
- // either:
46
- // - If a state is found in the cache and the state is not null we set our state with the
47
- // cache state and cache blockNumber. Subscribe to logs with the cache blockNumber
48
- // or:
49
- // - If no valid state found in cache, we generate a new state with blockNumber
50
- // and se state with blockNumber. Subscribe to logs with blockNumber. The function
51
- // will also publish a message to cache to tell one master version of dex-lib that this slave
52
- // instance subscribed to a pool from dex this.parentName and name this.name.
53
- async initialize(blockNumber, options) {
54
- let masterBn = undefined;
55
- if (options && options.state) {
56
- this.setState(options.state, blockNumber);
57
- }
58
- else {
59
- if (this.dexHelper.config.isSlave) {
60
- let updatedState = await this.dexHelper.dexStateSubscriber.requestDEXPoolState(this.dexKey, this.poolIdentifier, blockNumber);
61
- this.setState(updatedState, blockNumber);
62
- }
63
- else {
64
- // if you are not a slave instance always generate new state
65
- this.logger.info(`${this.dexKey}: ${this.poolIdentifier}: cache generating state`);
66
- const state = await this.generateState(blockNumber);
67
- this.setState(state, blockNumber);
68
- }
69
- }
70
- // apply a callback on the state
71
- if (options && options.initCallback) {
72
- if (this.state) {
73
- (0, ts_essentials_1.assert)(typeof this.state !== 'string', 'LOGIC ERROR: state is serialised');
74
- options.initCallback(this.state);
75
- }
76
- }
77
- if (this.dexHelper.config.isSlave) {
78
- this.dexHelper.dexStateSubscriber.subscribeToDEXPoolUpdates(this.dexKey, this.poolIdentifier, (state, blockNumber) => {
79
- this.setState(state, blockNumber);
80
- });
81
- }
82
- else {
83
- this.dexHelper.blockManager.subscribeToLogs(this, this.addressesSubscribed, masterBn || blockNumber);
84
- }
85
- this.isInitialized = true;
86
- }
87
- //This function processes all logs for a single block (the block number is
88
- //contained in each of the logs). It is not allowed to call this function
89
- //with an empty logs array. The default implementation here will just call
90
- //processLog for each of the logs; it may be overridden, if block specific
91
- //handling or handling multiple logs at once is needed. Null should be
92
- //returned if none of the provided logs affect the state.
93
- async processBlockLogs(state, logs, blockHeader) {
94
- let nextState = null;
95
- for (const log of logs) {
96
- const retState = await this.processLog(nextState || state, log, blockHeader);
97
- if (retState)
98
- nextState = retState;
99
- }
100
- return nextState;
101
- }
102
- restart(blockNumber) {
103
- for (const _bn of Object.keys(this.stateHistory)) {
104
- const bn = +_bn;
105
- if (bn >= blockNumber)
106
- break;
107
- delete this.stateHistory[bn];
108
- }
109
- if (this.state && this.stateBlockNumber < blockNumber) {
110
- this.logger.info(`StatefulDualSynchronizer restart, bn: ${blockNumber}, state_bn: ${this.stateBlockNumber}: ${this.dexKey}: ${this.poolIdentifier}`);
111
- this._setState(null, blockNumber);
112
- }
113
- }
114
- //Implementation must call setState() for every block in which the state
115
- //changes and must ignore any logs that aren't newer than the oldest state
116
- //stored. If state is not set or null, then the implementation should derive
117
- //the state by another method for the block number of the first log, ignore
118
- //all logs with that block number and then proceed as normal for the remaining
119
- //logs. Remember to clear the invalid flag, even if there are no logs!
120
- //A default implementation is provided here, but could be overridden.
121
- async update(logs, blockHeaders) {
122
- if (this.dexHelper.config.isSlave) {
123
- throw new Error('LOGIC ERROR: we should expect to listen to events on slave instances');
124
- }
125
- let index = 0;
126
- let lastBlockNumber;
127
- while (index < logs.length) {
128
- const blockNumber = logs[index].blockNumber;
129
- if (index && blockNumber <= lastBlockNumber) {
130
- this.logger.error('update() received blocks out of order!');
131
- }
132
- const blockHeader = blockHeaders[blockNumber];
133
- if (!blockHeader) {
134
- this.logger.error('update() missing block header!');
135
- }
136
- let lastLogIndex = logs[index].logIndex;
137
- let indexBlockEnd = index + 1;
138
- while (indexBlockEnd < logs.length &&
139
- logs[indexBlockEnd].blockNumber === blockNumber) {
140
- if (logs[indexBlockEnd].logIndex <= lastLogIndex) {
141
- this.logger.error('update() received logs out of order!');
142
- }
143
- lastLogIndex = logs[indexBlockEnd].logIndex;
144
- ++indexBlockEnd;
145
- }
146
- if (!this.state) {
147
- const freshState = await this.generateState(blockNumber);
148
- this.setState(freshState, blockNumber);
149
- }
150
- //Find the last state before the blockNumber of the logs
151
- let stateBeforeLog;
152
- for (const _bn of Object.keys(this.stateHistory)) {
153
- const bn = +_bn;
154
- if (bn >= blockNumber)
155
- break;
156
- stateBeforeLog = this.stateHistory[bn];
157
- }
158
- //Ignoring logs if there's no older state to play them onto
159
- if (stateBeforeLog) {
160
- (0, ts_essentials_1.assert)(typeof stateBeforeLog !== 'string', 'LOGIC ERROR: state is serialised');
161
- const nextState = await this.processBlockLogs(stateBeforeLog, logs.slice(index, indexBlockEnd), blockHeader);
162
- if (nextState)
163
- this.setState(nextState, blockNumber);
164
- }
165
- lastBlockNumber = blockNumber;
166
- index = indexBlockEnd;
167
- }
168
- this.invalid = false;
169
- if (!this.dexHelper.config.isSlave && this.state === null) {
170
- const network = this.dexHelper.config.data.network;
171
- const createNewState = async () => {
172
- if (this.state !== null) {
173
- return true;
174
- }
175
- const latestBlockNumber = this.dexHelper.blockManager.getLatestBlockNumber();
176
- this.logger.warn(`${network}: ${this.dexKey}: ${this.poolIdentifier}: master generate (latest: ${latestBlockNumber}) new state because state is null`);
177
- try {
178
- const state = await this.generateState(latestBlockNumber);
179
- this.setState(state, latestBlockNumber);
180
- return true;
181
- }
182
- catch (e) {
183
- this.logger.error(`${network}: ${this.dexKey} ${this.poolIdentifier}: (${latestBlockNumber}) failed fetch state:`, e);
184
- }
185
- return false;
186
- };
187
- this.dexHelper.promiseScheduler.addPromise(createNewState);
188
- }
189
- }
190
- //Removes all states that are beyond the given block number and sets the
191
- //current state to the latest one that is left, if any, unless the invalid
192
- //flag is not set, in which case the most recent state can be kept.
193
- rollback(blockNumber) {
194
- if (this.invalid) {
195
- let lastBn = undefined;
196
- //loop in the ascending order of the blockNumber. V8 property when object keys are number.
197
- for (const bn of Object.keys(this.stateHistory)) {
198
- const bnAsNumber = +bn;
199
- if (bnAsNumber > blockNumber) {
200
- delete this.stateHistory[+bn];
201
- }
202
- else {
203
- lastBn = bnAsNumber;
204
- }
205
- }
206
- if (lastBn) {
207
- this._setState(this.stateHistory[lastBn], lastBn);
208
- }
209
- else {
210
- this.logger.info(`StatefulDualSynchronizer rollback, bn: ${blockNumber}: ${this.dexKey}: ${this.poolIdentifier}`);
211
- this._setState(null, blockNumber);
212
- // TODO: explore generating new state on invalidation
213
- }
214
- }
215
- else {
216
- //Keep the current state in this.state and in the history
217
- for (const _bn of Object.keys(this.stateHistory)) {
218
- const bn = +_bn;
219
- if (+bn > blockNumber && +bn !== this.stateBlockNumber) {
220
- delete this.stateHistory[bn];
221
- }
222
- }
223
- }
224
- }
225
- invalidate() {
226
- this.logger.info(`StatefulDualSynchronizer invalidate: ${this.dexKey}: ${this.poolIdentifier}`);
227
- this.invalid = true;
228
- // TODO: explore generating new state on invalidation
229
- }
230
- //May return a state that is more recent than the block number specified, or
231
- //will return null if a recent enough state cannot be found, in which case the
232
- //caller should derive a state using another method (at an exact block
233
- //number), possibly using generateState(), and set it on this object using
234
- //setState. In case isTracking() returns true, it is assumed that the stored
235
- //state is current and so the minBlockNumber will be disregarded.
236
- getState(minBlockNumber) {
237
- if (!this.state || this.invalid)
238
- return null;
239
- if (this.dexHelper.config.isSlave) {
240
- if (this.dexHelper.dexStateSubscriber.isSynced(minBlockNumber) ||
241
- this.stateBlockNumber >= minBlockNumber) {
242
- if (typeof this.state === 'string') {
243
- this.state = utils_1.Utils.Parse(this.state);
244
- }
245
- (0, ts_essentials_1.assert)(typeof this.state !== 'string', 'LOGIC ERROR: state is serialised');
246
- return this.state;
247
- }
248
- }
249
- else {
250
- if (this.isTracking() || this.stateBlockNumber >= minBlockNumber) {
251
- if (typeof this.state === 'string') {
252
- this.state = utils_1.Utils.Parse(this.state);
253
- }
254
- (0, ts_essentials_1.assert)(typeof this.state !== 'string', 'LOGIC ERROR: state is serialised');
255
- return this.state;
256
- }
257
- }
258
- return null; // DEX need to implement an fallback strategy here
259
- }
260
- // Returns the last set state. The state might be invalid or not updated.
261
- getStaleState() {
262
- if (typeof this.state === 'string') {
263
- this.state = utils_1.Utils.Parse(this.state);
264
- }
265
- (0, ts_essentials_1.assert)(typeof this.state !== 'string', 'LOGIC ERROR: state is serialised');
266
- return this.state;
267
- }
268
- _setState(state, blockNumber) {
269
- this.state = state;
270
- this.stateBlockNumber = blockNumber;
271
- }
272
- //Saves the state into the stateHistory, and cleans up any old state that is
273
- //no longer needed. If the blockNumber is greater than or equal to the
274
- //current state, then the current state will be updated and the invalid flag
275
- //can be reset.
276
- setState(state, blockNumber) {
277
- if (!blockNumber) {
278
- this.logger.error('setState() with blockNumber', blockNumber);
279
- return;
280
- }
281
- this.stateHistory[blockNumber] = state;
282
- if (!this.state || blockNumber >= this.stateBlockNumber) {
283
- this._setState(state, blockNumber);
284
- this.invalid = false;
285
- }
286
- const minBlockNumberToKeep = this.stateBlockNumber - constants_1.MAX_BLOCKS_HISTORY;
287
- let lastBlockNumber;
288
- for (const bn of Object.keys(this.stateHistory)) {
289
- if (+bn <= minBlockNumberToKeep) {
290
- if (lastBlockNumber)
291
- delete this.stateHistory[lastBlockNumber];
292
- }
293
- if (+bn >= minBlockNumberToKeep)
294
- break;
295
- lastBlockNumber = +bn;
296
- }
297
- }
298
- }
299
- exports.StatefulDualSynchronizer = StatefulDualSynchronizer;
300
- //# sourceMappingURL=stateful-dual-synchronizer.js.map