@paraswap/dex-lib 3.8.26 → 3.8.27-dualsync.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/build/dex/idex.d.ts +4 -0
  2. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.d.ts +4 -3
  3. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js +5 -4
  4. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js.map +1 -1
  5. package/build/dex/pancakeswap-v3/pancakeswap-v3.d.ts +5 -1
  6. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +11 -2
  7. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
  8. package/build/dex/uniswap-v2/uniswap-v2.d.ts +11 -4
  9. package/build/dex/uniswap-v2/uniswap-v2.js +40 -13
  10. package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
  11. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +3 -2
  12. package/build/dex/uniswap-v3/uniswap-v3-pool.js +3 -3
  13. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  14. package/build/dex/uniswap-v3/uniswap-v3.d.ts +4 -0
  15. package/build/dex/uniswap-v3/uniswap-v3.js +11 -2
  16. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  17. package/build/dex-helper/dummy-dex-helper.d.ts +2 -0
  18. package/build/dex-helper/dummy-dex-helper.js.map +1 -1
  19. package/build/dex-helper/idex-helper.d.ts +2 -0
  20. package/build/dex-utils.d.ts +3 -0
  21. package/build/dex-utils.js +10 -0
  22. package/build/dex-utils.js.map +1 -0
  23. package/build/stateful-dual-synchronizer.d.ts +46 -0
  24. package/build/stateful-dual-synchronizer.js +300 -0
  25. package/build/stateful-dual-synchronizer.js.map +1 -0
  26. package/package.json +1 -1
  27. package/src/dex/idex.ts +8 -0
  28. package/src/dex/pancakeswap-v3/pancakeswap-v3-pool.ts +5 -10
  29. package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +22 -2
  30. package/src/dex/uniswap-v2/uniswap-v2.ts +66 -16
  31. package/src/dex/uniswap-v3/uniswap-v3-pool.ts +4 -6
  32. package/src/dex/uniswap-v3/uniswap-v3.ts +28 -2
  33. package/src/dex-helper/dummy-dex-helper.ts +2 -0
  34. package/src/dex-helper/idex-helper.ts +2 -0
  35. package/src/dex-utils.ts +5 -0
  36. package/src/stateful-dual-synchronizer.ts +415 -0
  37. package/.vscode/launch.json +0 -16
  38. package/.vscode/settings.json +0 -3
  39. package/build/abi/AaveV1_lending_pool.json +0 -27
  40. package/build/abi/BProtocol.json +0 -1155
  41. package/build/abi/Jarvis.json +0 -1172
  42. package/build/abi/MStableAsset.json +0 -1545
  43. package/build/abi/OneInchLp.json +0 -1304
  44. package/build/abi/Onebit.json +0 -736
  45. package/build/abi/Shell.json +0 -1294
  46. package/build/abi/TraderJoeV2Router.json +0 -50
  47. package/build/abi/Uncompressor.json +0 -250
  48. package/build/abi/integral/factory.json +0 -333
  49. package/build/abi/integral/oracle.json +0 -501
  50. package/build/abi/integral/pool.json +0 -1041
  51. package/build/abi/integral/relayer.json +0 -1536
  52. package/build/abi/platypus/asset.json +0 -490
  53. package/build/abi/platypus/avax-pool.json +0 -820
  54. package/build/abi/platypus/oracle.json +0 -119
  55. package/build/abi/platypus/pool.json +0 -677
  56. package/build/abi/smardex/all/smardex-router.json +0 -648
  57. package/build/abi/smardex/layer-1/smardex-factory.json +0 -242
  58. package/build/abi/smardex/layer-1/smardex-pool.json +0 -506
  59. package/build/abi/smardex/layer-2/smardex-factory.json +0 -185
  60. package/build/abi/smardex/layer-2/smardex-pool.json +0 -578
  61. package/build/abi/swaap-v1/pool.json +0 -1346
  62. package/build/abi/zrx.v2.json +0 -1967
  63. package/build/abi/zrx.v3.json +0 -3454
  64. package/build/abi/zrx.v4.json +0 -2193
  65. package/build/dex/OneInchLp.d.ts +0 -24
  66. package/build/dex/OneInchLp.js +0 -43
  67. package/build/dex/OneInchLp.js.map +0 -1
  68. package/build/dex/aave-v1/aave-v1.d.ts +0 -33
  69. package/build/dex/aave-v1/aave-v1.js +0 -158
  70. package/build/dex/aave-v1/aave-v1.js.map +0 -1
  71. package/build/dex/aave-v1/config.d.ts +0 -11
  72. package/build/dex/aave-v1/config.js +0 -20
  73. package/build/dex/aave-v1/config.js.map +0 -1
  74. package/build/dex/aave-v1/tokens-mainnet.json +0 -134
  75. package/build/dex/aave-v1/tokens.d.ts +0 -3
  76. package/build/dex/aave-v1/tokens.js +0 -50
  77. package/build/dex/aave-v1/tokens.js.map +0 -1
  78. package/build/dex/aave-v1/types.d.ts +0 -12
  79. package/build/dex/aave-v1/types.js +0 -3
  80. package/build/dex/aave-v1/types.js.map +0 -1
  81. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  82. package/build/dex/bProtocol/bProtocol.js +0 -56
  83. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  84. package/build/dex/bProtocol/types.d.ts +0 -11
  85. package/build/dex/bProtocol/types.js +0 -8
  86. package/build/dex/bProtocol/types.js.map +0 -1
  87. package/build/dex/bProtocol.d.ts +0 -18
  88. package/build/dex/bProtocol.js +0 -39
  89. package/build/dex/bProtocol.js.map +0 -1
  90. package/build/dex/bancor.d.ts +0 -26
  91. package/build/dex/bancor.js +0 -58
  92. package/build/dex/bancor.js.map +0 -1
  93. package/build/dex/compound.d.ts +0 -18
  94. package/build/dex/compound.js +0 -46
  95. package/build/dex/compound.js.map +0 -1
  96. package/build/dex/curve-v2.d.ts +0 -58
  97. package/build/dex/curve-v2.js +0 -180
  98. package/build/dex/curve-v2.js.map +0 -1
  99. package/build/dex/dodo-v1.d.ts +0 -33
  100. package/build/dex/dodo-v1.js +0 -63
  101. package/build/dex/dodo-v1.js.map +0 -1
  102. package/build/dex/etherfi/etherfi.d.ts +0 -26
  103. package/build/dex/etherfi/etherfi.js +0 -96
  104. package/build/dex/etherfi/etherfi.js.map +0 -1
  105. package/build/dex/integral/config.d.ts +0 -4
  106. package/build/dex/integral/config.js +0 -20
  107. package/build/dex/integral/config.js.map +0 -1
  108. package/build/dex/integral/context.d.ts +0 -40
  109. package/build/dex/integral/context.js +0 -158
  110. package/build/dex/integral/context.js.map +0 -1
  111. package/build/dex/integral/helpers.d.ts +0 -17
  112. package/build/dex/integral/helpers.js +0 -157
  113. package/build/dex/integral/helpers.js.map +0 -1
  114. package/build/dex/integral/integral-factory.d.ts +0 -24
  115. package/build/dex/integral/integral-factory.js +0 -95
  116. package/build/dex/integral/integral-factory.js.map +0 -1
  117. package/build/dex/integral/integral-pool.d.ts +0 -50
  118. package/build/dex/integral/integral-pool.js +0 -149
  119. package/build/dex/integral/integral-pool.js.map +0 -1
  120. package/build/dex/integral/integral-pricing.d.ts +0 -18
  121. package/build/dex/integral/integral-pricing.js +0 -114
  122. package/build/dex/integral/integral-pricing.js.map +0 -1
  123. package/build/dex/integral/integral-relayer.d.ts +0 -42
  124. package/build/dex/integral/integral-relayer.js +0 -192
  125. package/build/dex/integral/integral-relayer.js.map +0 -1
  126. package/build/dex/integral/integral-token.d.ts +0 -27
  127. package/build/dex/integral/integral-token.js +0 -59
  128. package/build/dex/integral/integral-token.js.map +0 -1
  129. package/build/dex/integral/integral.d.ts +0 -41
  130. package/build/dex/integral/integral.js +0 -376
  131. package/build/dex/integral/integral.js.map +0 -1
  132. package/build/dex/integral/types.d.ts +0 -85
  133. package/build/dex/integral/types.js +0 -9
  134. package/build/dex/integral/types.js.map +0 -1
  135. package/build/dex/integral/utils-e2e.d.ts +0 -9
  136. package/build/dex/integral/utils-e2e.js +0 -131
  137. package/build/dex/integral/utils-e2e.js.map +0 -1
  138. package/build/dex/integral/utils.d.ts +0 -17
  139. package/build/dex/integral/utils.js +0 -94
  140. package/build/dex/integral/utils.js.map +0 -1
  141. package/build/dex/jarvis.d.ts +0 -56
  142. package/build/dex/jarvis.js +0 -163
  143. package/build/dex/jarvis.js.map +0 -1
  144. package/build/dex/lido.d.ts +0 -19
  145. package/build/dex/lido.js +0 -42
  146. package/build/dex/lido.js.map +0 -1
  147. package/build/dex/mStable.d.ts +0 -44
  148. package/build/dex/mStable.js +0 -75
  149. package/build/dex/mStable.js.map +0 -1
  150. package/build/dex/onebit/onebit.d.ts +0 -16
  151. package/build/dex/onebit/onebit.js +0 -61
  152. package/build/dex/onebit/onebit.js.map +0 -1
  153. package/build/dex/onebit/types.d.ts +0 -14
  154. package/build/dex/onebit/types.js +0 -8
  155. package/build/dex/onebit/types.js.map +0 -1
  156. package/build/dex/onebit.d.ts +0 -25
  157. package/build/dex/onebit.js +0 -42
  158. package/build/dex/onebit.js.map +0 -1
  159. package/build/dex/platypus/asset.d.ts +0 -14
  160. package/build/dex/platypus/asset.js +0 -97
  161. package/build/dex/platypus/asset.js.map +0 -1
  162. package/build/dex/platypus/config.d.ts +0 -11
  163. package/build/dex/platypus/config.js +0 -69
  164. package/build/dex/platypus/config.js.map +0 -1
  165. package/build/dex/platypus/platypus.d.ts +0 -62
  166. package/build/dex/platypus/platypus.js +0 -442
  167. package/build/dex/platypus/platypus.js.map +0 -1
  168. package/build/dex/platypus/pool-avax.d.ts +0 -8
  169. package/build/dex/platypus/pool-avax.js +0 -54
  170. package/build/dex/platypus/pool-avax.js.map +0 -1
  171. package/build/dex/platypus/pool-base.d.ts +0 -19
  172. package/build/dex/platypus/pool-base.js +0 -86
  173. package/build/dex/platypus/pool-base.js.map +0 -1
  174. package/build/dex/platypus/pool-pure.d.ts +0 -8
  175. package/build/dex/platypus/pool-pure.js +0 -37
  176. package/build/dex/platypus/pool-pure.js.map +0 -1
  177. package/build/dex/platypus/pool-subscriber.d.ts +0 -14
  178. package/build/dex/platypus/pool-subscriber.js +0 -167
  179. package/build/dex/platypus/pool-subscriber.js.map +0 -1
  180. package/build/dex/platypus/pool.d.ts +0 -8
  181. package/build/dex/platypus/pool.js +0 -58
  182. package/build/dex/platypus/pool.js.map +0 -1
  183. package/build/dex/platypus/types.d.ts +0 -92
  184. package/build/dex/platypus/types.js +0 -10
  185. package/build/dex/platypus/types.js.map +0 -1
  186. package/build/dex/quickswap/spiritswap-v3.d.ts +0 -6
  187. package/build/dex/quickswap/spiritswap-v3.js +0 -19
  188. package/build/dex/quickswap/spiritswap-v3.js.map +0 -1
  189. package/build/dex/sdai/config.d.ts +0 -11
  190. package/build/dex/sdai/config.js +0 -21
  191. package/build/dex/sdai/config.js.map +0 -1
  192. package/build/dex/sdai/constants.d.ts +0 -2
  193. package/build/dex/sdai/constants.js +0 -6
  194. package/build/dex/sdai/constants.js.map +0 -1
  195. package/build/dex/sdai/scripts/validate-state.d.ts +0 -1
  196. package/build/dex/sdai/scripts/validate-state.js +0 -102
  197. package/build/dex/sdai/scripts/validate-state.js.map +0 -1
  198. package/build/dex/sdai/sdai-pool.d.ts +0 -16
  199. package/build/dex/sdai/sdai-pool.js +0 -85
  200. package/build/dex/sdai/sdai-pool.js.map +0 -1
  201. package/build/dex/sdai/sdai.d.ts +0 -51
  202. package/build/dex/sdai/sdai.js +0 -172
  203. package/build/dex/sdai/sdai.js.map +0 -1
  204. package/build/dex/sdai/types.d.ts +0 -21
  205. package/build/dex/sdai/types.js +0 -11
  206. package/build/dex/sdai/types.js.map +0 -1
  207. package/build/dex/sdai/utils.d.ts +0 -4
  208. package/build/dex/sdai/utils.js +0 -39
  209. package/build/dex/sdai/utils.js.map +0 -1
  210. package/build/dex/shell.d.ts +0 -25
  211. package/build/dex/shell.js +0 -41
  212. package/build/dex/shell.js.map +0 -1
  213. package/build/dex/smardex/config.d.ts +0 -4
  214. package/build/dex/smardex/config.js +0 -64
  215. package/build/dex/smardex/config.js.map +0 -1
  216. package/build/dex/smardex/constants.d.ts +0 -18
  217. package/build/dex/smardex/constants.js +0 -33
  218. package/build/dex/smardex/constants.js.map +0 -1
  219. package/build/dex/smardex/sdk/constants.d.ts +0 -6
  220. package/build/dex/smardex/sdk/constants.js +0 -13
  221. package/build/dex/smardex/sdk/constants.js.map +0 -1
  222. package/build/dex/smardex/sdk/core.d.ts +0 -113
  223. package/build/dex/smardex/sdk/core.js +0 -499
  224. package/build/dex/smardex/sdk/core.js.map +0 -1
  225. package/build/dex/smardex/sdk/errors.d.ts +0 -15
  226. package/build/dex/smardex/sdk/errors.js +0 -22
  227. package/build/dex/smardex/sdk/errors.js.map +0 -1
  228. package/build/dex/smardex/sdk/types.d.ts +0 -62
  229. package/build/dex/smardex/sdk/types.js +0 -3
  230. package/build/dex/smardex/sdk/types.js.map +0 -1
  231. package/build/dex/smardex/sdk/utils.d.ts +0 -44
  232. package/build/dex/smardex/sdk/utils.js +0 -133
  233. package/build/dex/smardex/sdk/utils.js.map +0 -1
  234. package/build/dex/smardex/smardex-event-pool.d.ts +0 -28
  235. package/build/dex/smardex/smardex-event-pool.js +0 -119
  236. package/build/dex/smardex/smardex-event-pool.js.map +0 -1
  237. package/build/dex/smardex/smardex.d.ts +0 -65
  238. package/build/dex/smardex/smardex.js +0 -519
  239. package/build/dex/smardex/smardex.js.map +0 -1
  240. package/build/dex/smardex/types.d.ts +0 -55
  241. package/build/dex/smardex/types.js +0 -3
  242. package/build/dex/smardex/types.js.map +0 -1
  243. package/build/dex/smoothy.d.ts +0 -26
  244. package/build/dex/smoothy.js +0 -48
  245. package/build/dex/smoothy.js.map +0 -1
  246. package/build/dex/solidly/forks-override/cone.d.ts +0 -22
  247. package/build/dex/solidly/forks-override/cone.js +0 -53
  248. package/build/dex/solidly/forks-override/cone.js.map +0 -1
  249. package/build/dex/solidly/forks-override/solisnek.d.ts +0 -8
  250. package/build/dex/solidly/forks-override/solisnek.js +0 -15
  251. package/build/dex/solidly/forks-override/solisnek.js.map +0 -1
  252. package/build/dex/stable-pool.d.ts +0 -28
  253. package/build/dex/stable-pool.js +0 -62
  254. package/build/dex/stable-pool.js.map +0 -1
  255. package/build/dex/swaap-v1/config.d.ts +0 -17
  256. package/build/dex/swaap-v1/config.js +0 -56
  257. package/build/dex/swaap-v1/config.js.map +0 -1
  258. package/build/dex/swaap-v1/constants.d.ts +0 -6
  259. package/build/dex/swaap-v1/constants.js +0 -17
  260. package/build/dex/swaap-v1/constants.js.map +0 -1
  261. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +0 -25
  262. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +0 -62
  263. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +0 -1
  264. package/build/dex/swaap-v1/libraries/Const.d.ts +0 -18
  265. package/build/dex/swaap-v1/libraries/Const.js +0 -26
  266. package/build/dex/swaap-v1/libraries/Const.js.map +0 -1
  267. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +0 -77
  268. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +0 -316
  269. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +0 -1
  270. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +0 -75
  271. package/build/dex/swaap-v1/libraries/LogExpMath.js +0 -418
  272. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +0 -1
  273. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +0 -185
  274. package/build/dex/swaap-v1/libraries/MathMMM.js +0 -453
  275. package/build/dex/swaap-v1/libraries/MathMMM.js.map +0 -1
  276. package/build/dex/swaap-v1/libraries/Num.d.ts +0 -31
  277. package/build/dex/swaap-v1/libraries/Num.js +0 -167
  278. package/build/dex/swaap-v1/libraries/Num.js.map +0 -1
  279. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +0 -23
  280. package/build/dex/swaap-v1/libraries/PoolQuotations.js +0 -131
  281. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +0 -1
  282. package/build/dex/swaap-v1/libraries/Struct.d.ts +0 -56
  283. package/build/dex/swaap-v1/libraries/Struct.js +0 -3
  284. package/build/dex/swaap-v1/libraries/Struct.js.map +0 -1
  285. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +0 -45
  286. package/build/dex/swaap-v1/swaap-v1-pool.js +0 -656
  287. package/build/dex/swaap-v1/swaap-v1-pool.js.map +0 -1
  288. package/build/dex/swaap-v1/swaap-v1.d.ts +0 -61
  289. package/build/dex/swaap-v1/swaap-v1.js +0 -369
  290. package/build/dex/swaap-v1/swaap-v1.js.map +0 -1
  291. package/build/dex/swaap-v1/types.d.ts +0 -106
  292. package/build/dex/swaap-v1/types.js +0 -9
  293. package/build/dex/swaap-v1/types.js.map +0 -1
  294. package/build/dex/trader-joe-v2.1/optimizer.d.ts +0 -2
  295. package/build/dex/trader-joe-v2.1/optimizer.js +0 -44
  296. package/build/dex/trader-joe-v2.1/optimizer.js.map +0 -1
  297. package/build/dex/trader-joe-v2.1.d.ts +0 -43
  298. package/build/dex/trader-joe-v2.1.js +0 -79
  299. package/build/dex/trader-joe-v2.1.js.map +0 -1
  300. package/build/dex/trader-joe-v2.d.ts +0 -40
  301. package/build/dex/trader-joe-v2.js +0 -74
  302. package/build/dex/trader-joe-v2.js.map +0 -1
  303. package/build/dex/zerox/config.d.ts +0 -2
  304. package/build/dex/zerox/config.js +0 -33
  305. package/build/dex/zerox/config.js.map +0 -1
  306. package/build/dex/zerox/index.d.ts +0 -22
  307. package/build/dex/zerox/index.js +0 -225
  308. package/build/dex/zerox/index.js.map +0 -1
  309. package/build/dex/zerox/order.d.ts +0 -88
  310. package/build/dex/zerox/order.js +0 -53
  311. package/build/dex/zerox/order.js.map +0 -1
  312. package/build/dex/zerox/types.d.ts +0 -73
  313. package/build/dex/zerox/types.js +0 -21
  314. package/build/dex/zerox/types.js.map +0 -1
  315. package/build/executor/compressor/Compressor.d.ts +0 -23
  316. package/build/executor/compressor/Compressor.js +0 -144
  317. package/build/executor/compressor/Compressor.js.map +0 -1
  318. package/build/executor/compressor/compress.d.ts +0 -17
  319. package/build/executor/compressor/compress.js +0 -187
  320. package/build/executor/compressor/compress.js.map +0 -1
  321. package/build/executor/compressor/compress_functions/addressSubstitution.d.ts +0 -6
  322. package/build/executor/compressor/compress_functions/addressSubstitution.js +0 -29
  323. package/build/executor/compressor/compress_functions/addressSubstitution.js.map +0 -1
  324. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.d.ts +0 -10
  325. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js +0 -40
  326. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js.map +0 -1
  327. package/build/executor/compressor/compress_functions/byteSubstitution.d.ts +0 -11
  328. package/build/executor/compressor/compress_functions/byteSubstitution.js +0 -64
  329. package/build/executor/compressor/compress_functions/byteSubstitution.js.map +0 -1
  330. package/build/executor/compressor/compress_functions/ffSubstitution.d.ts +0 -7
  331. package/build/executor/compressor/compress_functions/ffSubstitution.js +0 -54
  332. package/build/executor/compressor/compress_functions/ffSubstitution.js.map +0 -1
  333. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.d.ts +0 -8
  334. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js +0 -67
  335. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js.map +0 -1
  336. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.d.ts +0 -8
  337. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js +0 -61
  338. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js.map +0 -1
  339. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.d.ts +0 -6
  340. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js +0 -37
  341. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js.map +0 -1
  342. package/build/executor/compressor/compress_functions/searchUnusedBytes.d.ts +0 -9
  343. package/build/executor/compressor/compress_functions/searchUnusedBytes.js +0 -33
  344. package/build/executor/compressor/compress_functions/searchUnusedBytes.js.map +0 -1
  345. package/build/executor/compressor/fetchSaved.d.ts +0 -0
  346. package/build/executor/compressor/fetchSaved.js +0 -17
  347. package/build/executor/compressor/fetchSaved.js.map +0 -1
  348. package/build/executor/compressor/utils/computeCostL2.d.ts +0 -2
  349. package/build/executor/compressor/utils/computeCostL2.js +0 -14
  350. package/build/executor/compressor/utils/computeCostL2.js.map +0 -1
  351. package/build/executor/compressor/utils/findLongestDuplicatedString.d.ts +0 -2
  352. package/build/executor/compressor/utils/findLongestDuplicatedString.js +0 -30
  353. package/build/executor/compressor/utils/findLongestDuplicatedString.js.map +0 -1
  354. package/build/executor/compressor/utils/getAllIndexes.d.ts +0 -2
  355. package/build/executor/compressor/utils/getAllIndexes.js +0 -12
  356. package/build/executor/compressor/utils/getAllIndexes.js.map +0 -1
  357. package/build/executor/compressor/utils/getByteForAddress.d.ts +0 -2
  358. package/build/executor/compressor/utils/getByteForAddress.js +0 -14
  359. package/build/executor/compressor/utils/getByteForAddress.js.map +0 -1
  360. package/build/executor/compressor/utils/intTo2Bytes.d.ts +0 -2
  361. package/build/executor/compressor/utils/intTo2Bytes.js +0 -14
  362. package/build/executor/compressor/utils/intTo2Bytes.js.map +0 -1
  363. package/build/executor/compressor/utils/intTo3Bytes.d.ts +0 -2
  364. package/build/executor/compressor/utils/intTo3Bytes.js +0 -18
  365. package/build/executor/compressor/utils/intTo3Bytes.js.map +0 -1
  366. package/build/executor/compressor/utils/intToByte.d.ts +0 -2
  367. package/build/executor/compressor/utils/intToByte.js +0 -10
  368. package/build/executor/compressor/utils/intToByte.js.map +0 -1
@@ -24,4 +24,6 @@ export interface IDexHelper {
24
24
  blockManager: IBlockManager;
25
25
  getLogger: LoggerConstructor;
26
26
  getTokenUSDPrice: (token: Token, amount: bigint) => Promise<number>;
27
+ dexStateSubscriber: any; // temp ?
28
+ dexStatePublisher: any; // temp ?
27
29
  }
@@ -0,0 +1,5 @@
1
+ export class DexPoolNotFoundError extends Error {
2
+ constructor(dexKey: string, poolIdentifier: string) {
3
+ super(`Pool ${poolIdentifier} not found for DEX ${dexKey}`);
4
+ }
5
+ }
@@ -0,0 +1,415 @@
1
+ import { assert, 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
+
6
+ import { MAX_BLOCKS_HISTORY } from './constants';
7
+ import { IDexHelper } from './dex-helper';
8
+ import { Utils } from './utils';
9
+
10
+ export type InitializeStateOptions<State> = {
11
+ state?: DeepReadonly<State>;
12
+ initCallback?: (state: DeepReadonly<State>) => void;
13
+ forceRegenerate?: boolean; // deprecated ?
14
+ };
15
+
16
+ type ObjectOrString<State> = DeepReadonly<State> | string;
17
+ type ObjectOrStringOrNull<State> = ObjectOrString<State> | null;
18
+
19
+ // TODO: make sure that we can get either state object or string
20
+ export abstract class StatefulDualSynchronizer<State>
21
+ implements EventSubscriber
22
+ {
23
+ //The current state and its block number
24
+ //Derived classes should not set these directly, and instead use setState()
25
+ protected state: ObjectOrStringOrNull<State> = null;
26
+ protected stateBlockNumber: number = 0;
27
+
28
+ //Derived classes should use setState() to record a new entry
29
+ protected stateHistory: {
30
+ [blockNumber: number]: ObjectOrString<State>;
31
+ } = {};
32
+
33
+ //Invalid flag - indicates that the currently stored state might not be valid
34
+ protected invalid: boolean = false;
35
+
36
+ isTracking: () => boolean = () => false;
37
+ public addressesSubscribed: string[] = [];
38
+
39
+ // parentName and Name are imposed by the interface. Prefer dexKey and poolIdentifier
40
+ public parentName: string;
41
+ public name: string;
42
+ public isInitialized = false;
43
+
44
+ constructor(
45
+ public dexKey: string,
46
+ public poolIdentifier: string,
47
+ protected dexHelper: IDexHelper,
48
+ protected logger: Logger,
49
+ ) {
50
+ this.dexKey = dexKey.toLowerCase();
51
+ this.poolIdentifier = poolIdentifier.toLowerCase();
52
+
53
+ // parentName and Name are imposed by the interface. Prefer dexKey and poolIdentifier
54
+ this.parentName = this.dexKey;
55
+ this.name = this.poolIdentifier;
56
+
57
+ if (!this.dexHelper.config.isSlave) {
58
+ this.dexHelper.dexStatePublisher.registerPool(
59
+ this.dexKey,
60
+ this.poolIdentifier,
61
+ this,
62
+ );
63
+ }
64
+ }
65
+
66
+ getStateBlockNumber(): Readonly<number> {
67
+ return this.stateBlockNumber;
68
+ }
69
+
70
+ //Function which set the initial state and bounded it to blockNumber
71
+ //There is multiple possible case:
72
+ // 1. You provide a state in options object the function will initialize with the provided state
73
+ // with blockNumber and subscribe to logs.
74
+ // 2. if you are a master instance of dex-lib and no state is provided in options object
75
+ // then the function generate a new state with blockNumber as height and set the state with
76
+ // the result.
77
+ // 3. if you are a slave instance of dex-lib
78
+ // either:
79
+ // - If a state is found in the cache and the state is not null we set our state with the
80
+ // cache state and cache blockNumber. Subscribe to logs with the cache blockNumber
81
+ // or:
82
+ // - If no valid state found in cache, we generate a new state with blockNumber
83
+ // and se state with blockNumber. Subscribe to logs with blockNumber. The function
84
+ // will also publish a message to cache to tell one master version of dex-lib that this slave
85
+ // instance subscribed to a pool from dex this.parentName and name this.name.
86
+ async initialize(
87
+ blockNumber: number,
88
+ options?: InitializeStateOptions<State>,
89
+ ) {
90
+ let masterBn: undefined | number = undefined;
91
+ if (options && options.state) {
92
+ this.setState(options.state, blockNumber);
93
+ } else {
94
+ if (this.dexHelper.config.isSlave) {
95
+ let updatedState =
96
+ await this.dexHelper.dexStateSubscriber.requestDEXPoolState(
97
+ this.dexKey,
98
+ this.poolIdentifier,
99
+ blockNumber,
100
+ );
101
+
102
+ this.setState(updatedState, blockNumber);
103
+ } else {
104
+ // if you are not a slave instance always generate new state
105
+ this.logger.info(
106
+ `${this.dexKey}: ${this.poolIdentifier}: cache generating state`,
107
+ );
108
+ const state = await this.generateState(blockNumber);
109
+ this.setState(state, blockNumber);
110
+ }
111
+ }
112
+
113
+ // apply a callback on the state
114
+ if (options && options.initCallback) {
115
+ if (this.state) {
116
+ assert(
117
+ typeof this.state !== 'string',
118
+ 'LOGIC ERROR: state is serialised',
119
+ );
120
+ options.initCallback(this.state);
121
+ }
122
+ }
123
+
124
+ if (this.dexHelper.config.isSlave) {
125
+ this.dexHelper.dexStateSubscriber.subscribeToDEXPoolUpdates(
126
+ this.dexKey,
127
+ this.poolIdentifier,
128
+ (state: string, blockNumber: number) => {
129
+ this.setState(state, blockNumber);
130
+ },
131
+ );
132
+ } else {
133
+ this.dexHelper.blockManager.subscribeToLogs(
134
+ this,
135
+ this.addressesSubscribed,
136
+ masterBn || blockNumber,
137
+ );
138
+ }
139
+
140
+ this.isInitialized = true;
141
+ }
142
+
143
+ //Function which transforms the given state for the given log event.
144
+ //If the provided log does not affect the state, return null.
145
+ protected abstract processLog(
146
+ state: DeepReadonly<State>,
147
+ log: Readonly<Log>,
148
+ blockHeader: Readonly<BlockHeader>,
149
+ ): AsyncOrSync<DeepReadonly<State> | null>;
150
+
151
+ //This function processes all logs for a single block (the block number is
152
+ //contained in each of the logs). It is not allowed to call this function
153
+ //with an empty logs array. The default implementation here will just call
154
+ //processLog for each of the logs; it may be overridden, if block specific
155
+ //handling or handling multiple logs at once is needed. Null should be
156
+ //returned if none of the provided logs affect the state.
157
+ protected async processBlockLogs(
158
+ state: DeepReadonly<State>,
159
+ logs: Readonly<Log>[],
160
+ blockHeader: Readonly<BlockHeader>,
161
+ ): Promise<DeepReadonly<State> | null> {
162
+ let nextState: DeepReadonly<State> | null = null;
163
+ for (const log of logs) {
164
+ const retState: DeepReadonly<State> | null = await this.processLog(
165
+ nextState || state,
166
+ log,
167
+ blockHeader,
168
+ );
169
+ if (retState) nextState = retState;
170
+ }
171
+ return nextState;
172
+ }
173
+
174
+ //Function used to generate a state if one is not currently present, which
175
+ //must be the state at exactly the given block number, unless one is not
176
+ //provided, in which case one should be generated for latest block. This
177
+ //function should not use any previous states to derive a new state, it should
178
+ //generate one from scratch.
179
+ abstract generateState(
180
+ blockNumber?: number | 'latest',
181
+ ): AsyncOrSync<DeepReadonly<State>>;
182
+
183
+ restart(blockNumber: number): void {
184
+ for (const _bn of Object.keys(this.stateHistory)) {
185
+ const bn = +_bn;
186
+ if (bn >= blockNumber) break;
187
+ delete this.stateHistory[bn];
188
+ }
189
+ if (this.state && this.stateBlockNumber < blockNumber) {
190
+ this.logger.info(
191
+ `StatefulDualSynchronizer restart, bn: ${blockNumber}, state_bn: ${this.stateBlockNumber}: ${this.dexKey}: ${this.poolIdentifier}`,
192
+ );
193
+ this._setState(null, blockNumber);
194
+ }
195
+ }
196
+
197
+ //Implementation must call setState() for every block in which the state
198
+ //changes and must ignore any logs that aren't newer than the oldest state
199
+ //stored. If state is not set or null, then the implementation should derive
200
+ //the state by another method for the block number of the first log, ignore
201
+ //all logs with that block number and then proceed as normal for the remaining
202
+ //logs. Remember to clear the invalid flag, even if there are no logs!
203
+ //A default implementation is provided here, but could be overridden.
204
+ async update(
205
+ logs: Readonly<Log>[],
206
+ blockHeaders: Readonly<{ [blockNumber: number]: Readonly<BlockHeader> }>,
207
+ ): Promise<void> {
208
+ if (this.dexHelper.config.isSlave) {
209
+ throw new Error(
210
+ 'LOGIC ERROR: we should expect to listen to events on slave instances',
211
+ );
212
+ }
213
+
214
+ let index = 0;
215
+ let lastBlockNumber: number | undefined;
216
+ while (index < logs.length) {
217
+ const blockNumber = logs[index].blockNumber;
218
+ if (index && blockNumber <= lastBlockNumber!) {
219
+ this.logger.error('update() received blocks out of order!');
220
+ }
221
+ const blockHeader = blockHeaders[blockNumber];
222
+ if (!blockHeader) {
223
+ this.logger.error('update() missing block header!');
224
+ }
225
+ let lastLogIndex = logs[index].logIndex;
226
+ let indexBlockEnd = index + 1;
227
+ while (
228
+ indexBlockEnd < logs.length &&
229
+ logs[indexBlockEnd].blockNumber === blockNumber
230
+ ) {
231
+ if (logs[indexBlockEnd].logIndex <= lastLogIndex) {
232
+ this.logger.error('update() received logs out of order!');
233
+ }
234
+ lastLogIndex = logs[indexBlockEnd].logIndex;
235
+ ++indexBlockEnd;
236
+ }
237
+ if (!this.state) {
238
+ const freshState = await this.generateState(blockNumber);
239
+ this.setState(freshState, blockNumber);
240
+ }
241
+ //Find the last state before the blockNumber of the logs
242
+ let stateBeforeLog: DeepReadonly<State> | string | undefined;
243
+ for (const _bn of Object.keys(this.stateHistory)) {
244
+ const bn = +_bn;
245
+ if (bn >= blockNumber) break;
246
+ stateBeforeLog = this.stateHistory[bn];
247
+ }
248
+ //Ignoring logs if there's no older state to play them onto
249
+ if (stateBeforeLog) {
250
+ assert(
251
+ typeof stateBeforeLog !== 'string',
252
+ 'LOGIC ERROR: state is serialised',
253
+ );
254
+ const nextState = await this.processBlockLogs(
255
+ stateBeforeLog,
256
+ logs.slice(index, indexBlockEnd),
257
+ blockHeader,
258
+ );
259
+ if (nextState) this.setState(nextState, blockNumber);
260
+ }
261
+ lastBlockNumber = blockNumber;
262
+ index = indexBlockEnd;
263
+ }
264
+ this.invalid = false;
265
+
266
+ if (!this.dexHelper.config.isSlave && this.state === null) {
267
+ const network = this.dexHelper.config.data.network;
268
+ const createNewState = async () => {
269
+ if (this.state !== null) {
270
+ return true;
271
+ }
272
+ const latestBlockNumber =
273
+ this.dexHelper.blockManager.getLatestBlockNumber();
274
+ this.logger.warn(
275
+ `${network}: ${this.dexKey}: ${this.poolIdentifier}: master generate (latest: ${latestBlockNumber}) new state because state is null`,
276
+ );
277
+ try {
278
+ const state = await this.generateState(latestBlockNumber);
279
+ this.setState(state, latestBlockNumber);
280
+ return true;
281
+ } catch (e) {
282
+ this.logger.error(
283
+ `${network}: ${this.dexKey} ${this.poolIdentifier}: (${latestBlockNumber}) failed fetch state:`,
284
+ e,
285
+ );
286
+ }
287
+ return false;
288
+ };
289
+ this.dexHelper.promiseScheduler.addPromise(createNewState);
290
+ }
291
+ }
292
+
293
+ //Removes all states that are beyond the given block number and sets the
294
+ //current state to the latest one that is left, if any, unless the invalid
295
+ //flag is not set, in which case the most recent state can be kept.
296
+ rollback(blockNumber: number): void {
297
+ if (this.invalid) {
298
+ let lastBn = undefined;
299
+ //loop in the ascending order of the blockNumber. V8 property when object keys are number.
300
+ for (const bn of Object.keys(this.stateHistory)) {
301
+ const bnAsNumber = +bn;
302
+ if (bnAsNumber > blockNumber) {
303
+ delete this.stateHistory[+bn];
304
+ } else {
305
+ lastBn = bnAsNumber;
306
+ }
307
+ }
308
+
309
+ if (lastBn) {
310
+ this._setState(this.stateHistory[lastBn], lastBn);
311
+ } else {
312
+ this.logger.info(
313
+ `StatefulDualSynchronizer rollback, bn: ${blockNumber}: ${this.dexKey}: ${this.poolIdentifier}`,
314
+ );
315
+ this._setState(null, blockNumber);
316
+ // TODO: explore generating new state on invalidation
317
+ }
318
+ } else {
319
+ //Keep the current state in this.state and in the history
320
+ for (const _bn of Object.keys(this.stateHistory)) {
321
+ const bn = +_bn;
322
+ if (+bn > blockNumber && +bn !== this.stateBlockNumber) {
323
+ delete this.stateHistory[bn];
324
+ }
325
+ }
326
+ }
327
+ }
328
+
329
+ invalidate(): void {
330
+ this.logger.info(
331
+ `StatefulDualSynchronizer invalidate: ${this.dexKey}: ${this.poolIdentifier}`,
332
+ );
333
+ this.invalid = true;
334
+
335
+ // TODO: explore generating new state on invalidation
336
+ }
337
+
338
+ //May return a state that is more recent than the block number specified, or
339
+ //will return null if a recent enough state cannot be found, in which case the
340
+ //caller should derive a state using another method (at an exact block
341
+ //number), possibly using generateState(), and set it on this object using
342
+ //setState. In case isTracking() returns true, it is assumed that the stored
343
+ //state is current and so the minBlockNumber will be disregarded.
344
+ getState(minBlockNumber: number): DeepReadonly<State> | null {
345
+ if (!this.state || this.invalid) return null;
346
+
347
+ if (this.dexHelper.config.isSlave) {
348
+ if (
349
+ this.dexHelper.dexStateSubscriber.isSynced(minBlockNumber) ||
350
+ this.stateBlockNumber >= minBlockNumber
351
+ ) {
352
+ if (typeof this.state === 'string') {
353
+ this.state = Utils.Parse(this.state);
354
+ }
355
+ assert(
356
+ typeof this.state !== 'string',
357
+ 'LOGIC ERROR: state is serialised',
358
+ );
359
+ return this.state;
360
+ }
361
+ } else {
362
+ if (this.isTracking() || this.stateBlockNumber >= minBlockNumber) {
363
+ if (typeof this.state === 'string') {
364
+ this.state = Utils.Parse(this.state);
365
+ }
366
+ assert(
367
+ typeof this.state !== 'string',
368
+ 'LOGIC ERROR: state is serialised',
369
+ );
370
+ return this.state;
371
+ }
372
+ }
373
+
374
+ return null; // DEX need to implement an fallback strategy here
375
+ }
376
+
377
+ // Returns the last set state. The state might be invalid or not updated.
378
+ getStaleState(): DeepReadonly<State> | null {
379
+ if (typeof this.state === 'string') {
380
+ this.state = Utils.Parse(this.state);
381
+ }
382
+ assert(typeof this.state !== 'string', 'LOGIC ERROR: state is serialised');
383
+ return this.state;
384
+ }
385
+
386
+ _setState(state: ObjectOrStringOrNull<State>, blockNumber: number) {
387
+ this.state = state;
388
+ this.stateBlockNumber = blockNumber;
389
+ }
390
+
391
+ //Saves the state into the stateHistory, and cleans up any old state that is
392
+ //no longer needed. If the blockNumber is greater than or equal to the
393
+ //current state, then the current state will be updated and the invalid flag
394
+ //can be reset.
395
+ setState(state: ObjectOrString<State>, blockNumber: number): void {
396
+ if (!blockNumber) {
397
+ this.logger.error('setState() with blockNumber', blockNumber);
398
+ return;
399
+ }
400
+ this.stateHistory[blockNumber] = state;
401
+ if (!this.state || blockNumber >= this.stateBlockNumber) {
402
+ this._setState(state, blockNumber);
403
+ this.invalid = false;
404
+ }
405
+ const minBlockNumberToKeep = this.stateBlockNumber - MAX_BLOCKS_HISTORY;
406
+ let lastBlockNumber: number | undefined;
407
+ for (const bn of Object.keys(this.stateHistory)) {
408
+ if (+bn <= minBlockNumberToKeep) {
409
+ if (lastBlockNumber) delete this.stateHistory[lastBlockNumber];
410
+ }
411
+ if (+bn >= minBlockNumberToKeep) break;
412
+ lastBlockNumber = +bn;
413
+ }
414
+ }
415
+ }
@@ -1,16 +0,0 @@
1
- {
2
- "version": "0.2.0",
3
- "configurations": [
4
- {
5
- "args": [
6
- "${workspaceFolder}/src/dex/maverick-v2/maverick-v2-integration.test.ts"
7
- ],
8
- "internalConsoleOptions": "openOnSessionStart",
9
- "name": "Dex-lib",
10
- "program": "${workspaceFolder}/node_modules/jest/bin/jest",
11
- "request": "launch",
12
- "skipFiles": ["<node_internals>/**"],
13
- "type": "node"
14
- }
15
- ]
16
- }
@@ -1,3 +0,0 @@
1
- {
2
- "typescript.tsdk": "node_modules/typescript/lib"
3
- }
@@ -1,27 +0,0 @@
1
- [
2
- {
3
- "constant": false,
4
- "inputs": [
5
- {
6
- "internalType": "address",
7
- "name": "_reserve",
8
- "type": "address"
9
- },
10
- {
11
- "internalType": "uint256",
12
- "name": "_amount",
13
- "type": "uint256"
14
- },
15
- {
16
- "internalType": "uint16",
17
- "name": "_referralCode",
18
- "type": "uint16"
19
- }
20
- ],
21
- "name": "deposit",
22
- "outputs": [],
23
- "payable": true,
24
- "stateMutability": "payable",
25
- "type": "function"
26
- }
27
- ]