@paraswap/dex-lib 3.8.28-fm.12 → 3.8.28-fm.13

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 (246) 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/dex/OneInchLp.d.ts +24 -0
  28. package/build/dex/OneInchLp.js +43 -0
  29. package/build/dex/OneInchLp.js.map +1 -0
  30. package/build/dex/aave-v1/aave-v1.d.ts +34 -0
  31. package/build/dex/aave-v1/aave-v1.js +181 -0
  32. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  33. package/build/dex/aave-v1/config.d.ts +11 -0
  34. package/build/dex/aave-v1/config.js +20 -0
  35. package/build/dex/aave-v1/config.js.map +1 -0
  36. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  37. package/build/dex/aave-v1/tokens.d.ts +3 -0
  38. package/build/dex/aave-v1/tokens.js +50 -0
  39. package/build/dex/aave-v1/tokens.js.map +1 -0
  40. package/build/dex/aave-v1/types.d.ts +12 -0
  41. package/build/dex/aave-v1/types.js +3 -0
  42. package/build/dex/aave-v1/types.js.map +1 -0
  43. package/build/dex/aave-v2/tokens-avalanche.json +44 -0
  44. package/build/dex/aave-v2/tokens-mainnet.json +188 -0
  45. package/build/dex/aave-v2/tokens-polygon.json +44 -0
  46. package/build/dex/bProtocol/bProtocol.d.ts +15 -0
  47. package/build/dex/bProtocol/bProtocol.js +56 -0
  48. package/build/dex/bProtocol/bProtocol.js.map +1 -0
  49. package/build/dex/bProtocol/types.d.ts +11 -0
  50. package/build/dex/bProtocol/types.js +8 -0
  51. package/build/dex/bProtocol/types.js.map +1 -0
  52. package/build/dex/bProtocol.d.ts +18 -0
  53. package/build/dex/bProtocol.js +39 -0
  54. package/build/dex/bProtocol.js.map +1 -0
  55. package/build/dex/bancor.d.ts +26 -0
  56. package/build/dex/bancor.js +58 -0
  57. package/build/dex/bancor.js.map +1 -0
  58. package/build/dex/compound.d.ts +18 -0
  59. package/build/dex/compound.js +46 -0
  60. package/build/dex/compound.js.map +1 -0
  61. package/build/dex/curve-v2.d.ts +58 -0
  62. package/build/dex/curve-v2.js +180 -0
  63. package/build/dex/curve-v2.js.map +1 -0
  64. package/build/dex/dodo-v1.d.ts +33 -0
  65. package/build/dex/dodo-v1.js +63 -0
  66. package/build/dex/dodo-v1.js.map +1 -0
  67. package/build/dex/jarvis.d.ts +56 -0
  68. package/build/dex/jarvis.js +163 -0
  69. package/build/dex/jarvis.js.map +1 -0
  70. package/build/dex/lido.d.ts +19 -0
  71. package/build/dex/lido.js +42 -0
  72. package/build/dex/lido.js.map +1 -0
  73. package/build/dex/mStable.d.ts +44 -0
  74. package/build/dex/mStable.js +75 -0
  75. package/build/dex/mStable.js.map +1 -0
  76. package/build/dex/maker-psm/scripts/gem.abi.json +136 -0
  77. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  78. package/build/dex/maker-psm/scripts/validate-state.js +185 -0
  79. package/build/dex/maker-psm/scripts/validate-state.js.map +1 -0
  80. package/build/dex/maker-psm/scripts/vat.abi.json +243 -0
  81. package/build/dex/onebit/onebit.d.ts +16 -0
  82. package/build/dex/onebit/onebit.js +61 -0
  83. package/build/dex/onebit/onebit.js.map +1 -0
  84. package/build/dex/onebit/types.d.ts +14 -0
  85. package/build/dex/onebit/types.js +8 -0
  86. package/build/dex/onebit/types.js.map +1 -0
  87. package/build/dex/onebit.d.ts +25 -0
  88. package/build/dex/onebit.js +42 -0
  89. package/build/dex/onebit.js.map +1 -0
  90. package/build/dex/platypus/asset.d.ts +14 -0
  91. package/build/dex/platypus/asset.js +97 -0
  92. package/build/dex/platypus/asset.js.map +1 -0
  93. package/build/dex/platypus/config.d.ts +11 -0
  94. package/build/dex/platypus/config.js +69 -0
  95. package/build/dex/platypus/config.js.map +1 -0
  96. package/build/dex/platypus/platypus.d.ts +63 -0
  97. package/build/dex/platypus/platypus.js +487 -0
  98. package/build/dex/platypus/platypus.js.map +1 -0
  99. package/build/dex/platypus/pool-avax.d.ts +8 -0
  100. package/build/dex/platypus/pool-avax.js +54 -0
  101. package/build/dex/platypus/pool-avax.js.map +1 -0
  102. package/build/dex/platypus/pool-base.d.ts +19 -0
  103. package/build/dex/platypus/pool-base.js +86 -0
  104. package/build/dex/platypus/pool-base.js.map +1 -0
  105. package/build/dex/platypus/pool-pure.d.ts +8 -0
  106. package/build/dex/platypus/pool-pure.js +37 -0
  107. package/build/dex/platypus/pool-pure.js.map +1 -0
  108. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  109. package/build/dex/platypus/pool-subscriber.js +167 -0
  110. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  111. package/build/dex/platypus/pool.d.ts +8 -0
  112. package/build/dex/platypus/pool.js +58 -0
  113. package/build/dex/platypus/pool.js.map +1 -0
  114. package/build/dex/platypus/types.d.ts +92 -0
  115. package/build/dex/platypus/types.js +10 -0
  116. package/build/dex/platypus/types.js.map +1 -0
  117. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  118. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  119. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  120. package/build/dex/shell.d.ts +25 -0
  121. package/build/dex/shell.js +41 -0
  122. package/build/dex/shell.js.map +1 -0
  123. package/build/dex/smardex/config.d.ts +4 -0
  124. package/build/dex/smardex/config.js +64 -0
  125. package/build/dex/smardex/config.js.map +1 -0
  126. package/build/dex/smardex/constants.d.ts +18 -0
  127. package/build/dex/smardex/constants.js +33 -0
  128. package/build/dex/smardex/constants.js.map +1 -0
  129. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  130. package/build/dex/smardex/sdk/constants.js +13 -0
  131. package/build/dex/smardex/sdk/constants.js.map +1 -0
  132. package/build/dex/smardex/sdk/core.d.ts +113 -0
  133. package/build/dex/smardex/sdk/core.js +499 -0
  134. package/build/dex/smardex/sdk/core.js.map +1 -0
  135. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  136. package/build/dex/smardex/sdk/errors.js +22 -0
  137. package/build/dex/smardex/sdk/errors.js.map +1 -0
  138. package/build/dex/smardex/sdk/types.d.ts +62 -0
  139. package/build/dex/smardex/sdk/types.js +3 -0
  140. package/build/dex/smardex/sdk/types.js.map +1 -0
  141. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  142. package/build/dex/smardex/sdk/utils.js +133 -0
  143. package/build/dex/smardex/sdk/utils.js.map +1 -0
  144. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  145. package/build/dex/smardex/smardex-event-pool.js +119 -0
  146. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  147. package/build/dex/smardex/smardex.d.ts +65 -0
  148. package/build/dex/smardex/smardex.js +519 -0
  149. package/build/dex/smardex/smardex.js.map +1 -0
  150. package/build/dex/smardex/types.d.ts +55 -0
  151. package/build/dex/smardex/types.js +3 -0
  152. package/build/dex/smardex/types.js.map +1 -0
  153. package/build/dex/smoothy.d.ts +26 -0
  154. package/build/dex/smoothy.js +48 -0
  155. package/build/dex/smoothy.js.map +1 -0
  156. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  157. package/build/dex/solidly/forks-override/cone.js +53 -0
  158. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  159. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  160. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  161. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  162. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +1 -0
  163. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +53 -0
  164. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +1 -0
  165. package/build/dex/stable-pool.d.ts +28 -0
  166. package/build/dex/stable-pool.js +55 -0
  167. package/build/dex/stable-pool.js.map +1 -0
  168. package/build/dex/swaap-v1/config.d.ts +17 -0
  169. package/build/dex/swaap-v1/config.js +56 -0
  170. package/build/dex/swaap-v1/config.js.map +1 -0
  171. package/build/dex/swaap-v1/constants.d.ts +6 -0
  172. package/build/dex/swaap-v1/constants.js +17 -0
  173. package/build/dex/swaap-v1/constants.js.map +1 -0
  174. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  175. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  176. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  177. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  178. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  179. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  180. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  181. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  182. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  183. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  184. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  185. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  186. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  187. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  188. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  189. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  190. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  191. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  192. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  193. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  194. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  195. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  196. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  197. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  198. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  199. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  200. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  201. package/build/dex/swaap-v1/swaap-v1.d.ts +62 -0
  202. package/build/dex/swaap-v1/swaap-v1.js +383 -0
  203. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  204. package/build/dex/swaap-v1/types.d.ts +106 -0
  205. package/build/dex/swaap-v1/types.js +9 -0
  206. package/build/dex/swaap-v1/types.js.map +1 -0
  207. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +7 -0
  208. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +20 -0
  209. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +1 -0
  210. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  211. package/build/dex/trader-joe-v2.1.js +79 -0
  212. package/build/dex/trader-joe-v2.1.js.map +1 -0
  213. package/build/dex/trader-joe-v2.d.ts +40 -0
  214. package/build/dex/trader-joe-v2.js +74 -0
  215. package/build/dex/trader-joe-v2.js.map +1 -0
  216. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +17 -0
  217. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +64 -0
  218. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +1 -0
  219. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +17 -0
  220. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +79 -0
  221. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +1 -0
  222. package/build/dex/uniswap-v3/uniswap-v3.js +1 -1
  223. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  224. package/build/dex/zerox/config.d.ts +2 -0
  225. package/build/dex/zerox/config.js +33 -0
  226. package/build/dex/zerox/config.js.map +1 -0
  227. package/build/dex/zerox/index.d.ts +22 -0
  228. package/build/dex/zerox/index.js +225 -0
  229. package/build/dex/zerox/index.js.map +1 -0
  230. package/build/dex/zerox/order.d.ts +88 -0
  231. package/build/dex/zerox/order.js +53 -0
  232. package/build/dex/zerox/order.js.map +1 -0
  233. package/build/dex/zerox/types.d.ts +73 -0
  234. package/build/dex/zerox/types.js +21 -0
  235. package/build/dex/zerox/types.js.map +1 -0
  236. package/build/pricing-helper.js +13 -2
  237. package/build/pricing-helper.js.map +1 -1
  238. package/package.json +1 -1
  239. package/src/dex/uniswap-v3/uniswap-v3.ts +1 -1
  240. package/src/pricing-helper.ts +34 -2
  241. package/build/dex-utils.d.ts +0 -3
  242. package/build/dex-utils.js +0 -10
  243. package/build/dex-utils.js.map +0 -1
  244. package/build/stateful-dual-synchronizer.d.ts +0 -46
  245. package/build/stateful-dual-synchronizer.js +0 -300
  246. package/build/stateful-dual-synchronizer.js.map +0 -1
@@ -0,0 +1,73 @@
1
+ import { Address } from '@paraswap/sdk';
2
+ import { NumberAsString } from '../../types';
3
+ export declare enum OrderStatus {
4
+ INVALID = 0,
5
+ INVALID_MAKER_ASSET_AMOUNT = 1,
6
+ INVALID_TAKER_ASSET_AMOUNT = 2,
7
+ FILLABLE = 3,
8
+ EXPIRED = 4,
9
+ FULLY_FILLED = 5,
10
+ CANCELLED = 6
11
+ }
12
+ declare type Value = NumberAsString | number;
13
+ export interface ZeroXSignedOrderV2 {
14
+ senderAddress: string;
15
+ makerAddress: string;
16
+ takerAddress: string;
17
+ makerFee: Value;
18
+ takerFee: Value;
19
+ makerAssetAmount: Value;
20
+ takerAssetAmount: Value;
21
+ makerAssetData: string;
22
+ takerAssetData: string;
23
+ salt: Value;
24
+ exchangeAddress: string;
25
+ feeRecipientAddress: string;
26
+ expirationTimeSeconds: Value;
27
+ makerFeeAssetData: string;
28
+ takerFeeAssetData: string;
29
+ signature: string;
30
+ }
31
+ export interface ZeroXSignedOrderV4 {
32
+ makerToken: string;
33
+ takerToken: string;
34
+ makerAmount: Value;
35
+ takerAmount: Value;
36
+ maker: string;
37
+ taker: string;
38
+ txOrigin: string;
39
+ pool: string;
40
+ expiry: Value;
41
+ salt: Value;
42
+ signature: any;
43
+ }
44
+ export declare type ZeroXSignedOrder = ZeroXSignedOrderV2 | ZeroXSignedOrderV4;
45
+ export declare enum ZeroXFunctions {
46
+ swapOnZeroXv2 = "swapOnZeroXv2",
47
+ swapOnZeroXv4 = "swapOnZeroXv4",
48
+ swapOnZeroXv2WithPermit = "swapOnZeroXv2WithPermit",
49
+ swapOnZeroXv4WithPermit = "swapOnZeroXv4WithPermit"
50
+ }
51
+ export declare type ZeroXData = {
52
+ version: number;
53
+ order: ZeroXSignedOrder;
54
+ };
55
+ export declare type SwapOnZeroXParam = [
56
+ srcToken: Address,
57
+ destToken: Address,
58
+ srcAmount: NumberAsString,
59
+ destAmount: NumberAsString,
60
+ exchange: Address,
61
+ payload: string
62
+ ];
63
+ export declare type SwapOnZeroXWithPermitParam = [
64
+ srcToken: Address,
65
+ destToken: Address,
66
+ srcAmount: NumberAsString,
67
+ destAmount: NumberAsString,
68
+ exchange: Address,
69
+ payload: string,
70
+ permit: string
71
+ ];
72
+ export declare type ZeroXParam = SwapOnZeroXParam | SwapOnZeroXWithPermitParam;
73
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZeroXFunctions = exports.OrderStatus = void 0;
4
+ var OrderStatus;
5
+ (function (OrderStatus) {
6
+ OrderStatus[OrderStatus["INVALID"] = 0] = "INVALID";
7
+ OrderStatus[OrderStatus["INVALID_MAKER_ASSET_AMOUNT"] = 1] = "INVALID_MAKER_ASSET_AMOUNT";
8
+ OrderStatus[OrderStatus["INVALID_TAKER_ASSET_AMOUNT"] = 2] = "INVALID_TAKER_ASSET_AMOUNT";
9
+ OrderStatus[OrderStatus["FILLABLE"] = 3] = "FILLABLE";
10
+ OrderStatus[OrderStatus["EXPIRED"] = 4] = "EXPIRED";
11
+ OrderStatus[OrderStatus["FULLY_FILLED"] = 5] = "FULLY_FILLED";
12
+ OrderStatus[OrderStatus["CANCELLED"] = 6] = "CANCELLED";
13
+ })(OrderStatus = exports.OrderStatus || (exports.OrderStatus = {}));
14
+ var ZeroXFunctions;
15
+ (function (ZeroXFunctions) {
16
+ ZeroXFunctions["swapOnZeroXv2"] = "swapOnZeroXv2";
17
+ ZeroXFunctions["swapOnZeroXv4"] = "swapOnZeroXv4";
18
+ ZeroXFunctions["swapOnZeroXv2WithPermit"] = "swapOnZeroXv2WithPermit";
19
+ ZeroXFunctions["swapOnZeroXv4WithPermit"] = "swapOnZeroXv4WithPermit";
20
+ })(ZeroXFunctions = exports.ZeroXFunctions || (exports.ZeroXFunctions = {}));
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/zerox/types.ts"],"names":[],"mappings":";;;AAGA,IAAY,WAQX;AARD,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,yFAA0B,CAAA;IAC1B,yFAA0B,CAAA;IAC1B,qDAAQ,CAAA;IACR,mDAAO,CAAA;IACP,6DAAY,CAAA;IACZ,uDAAS,CAAA;AACX,CAAC,EARW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAQtB;AAuCD,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,iDAA+B,CAAA;IAC/B,iDAA+B,CAAA;IAC/B,qEAAmD,CAAA;IACnD,qEAAmD,CAAA;AACrD,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB"}
@@ -117,7 +117,10 @@ class PricingHelper {
117
117
  srcDexFee: 0,
118
118
  destDexFee: 0,
119
119
  }, rollupL1ToL2GasRatio, overrideTimeout, fmode) {
120
+ const start = Date.now();
121
+ const token_key = `${Math.round(Math.random() * 10000)}_${from.address}_${to.address}`.toLowerCase();
120
122
  const dexPoolPrices = await Promise.all(dexKeys.map(async (key) => {
123
+ const start = Date.now();
121
124
  try {
122
125
  const limitPools = limitPoolsMap ? limitPoolsMap[key] : null;
123
126
  if (limitPools && !limitPools.length)
@@ -170,16 +173,21 @@ class PricingHelper {
170
173
  }
171
174
  }, reject)
172
175
  .finally(() => {
176
+ this.logger.info(`{benchmarks} (total-for-dex): [finally] Dex ${key}, tokenPair: ${token_key} took ${end - start}ms to resolve/reject`);
173
177
  clearTimeout(timer);
174
178
  });
175
179
  });
176
180
  }
177
181
  catch (e) {
178
- this.logger.error(`Error_${key}_getPoolPrices:`, e);
182
+ this.logger.error(`{benchmarks} (limited-by-timeout-for-dex) [error]: Dex ${key}, tokenPair: ${token_key} took ${end - start}ms to resolve/reject`, e);
179
183
  return [];
180
184
  }
185
+ finally {
186
+ const end = Date.now();
187
+ this.logger.info(`{benchmarks} (limited-by-timeout-for-dex) [finally]: Dex ${key}, tokenPair: ${token_key} took ${end - start}ms to resolve/reject`);
188
+ }
181
189
  }));
182
- return dexPoolPrices
190
+ const prices = dexPoolPrices
183
191
  .filter((x) => !!x)
184
192
  .flat() // flatten to get all the pools for the swap
185
193
  .filter(p => {
@@ -205,6 +213,9 @@ class PricingHelper {
205
213
  }
206
214
  return true;
207
215
  });
216
+ const end = Date.now();
217
+ this.logger.info(`{benchmarks} (getPoolPrices): tokenPair: ${token_key} took ${end - start}ms to resolve/reject`);
218
+ return prices;
208
219
  }
209
220
  }
210
221
  exports.PricingHelper = PricingHelper;
@@ -1 +1 @@
1
- {"version":3,"file":"pricing-helper.js","sourceRoot":"","sources":["../src/pricing-helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pricing-helper.js","sourceRoot":"","sources":["../src/pricing-helper.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "3.8.28-fm.12",
3
+ "version": "3.8.28-fm.13",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",
@@ -803,7 +803,7 @@ export class UniswapV3
803
803
  fmode,
804
804
  );
805
805
  const pricesResult =
806
- fmode && Math.random() > 2/3
806
+ fmode && Math.random() < 1 / 4
807
807
  ? await this._getOutputsThreaded(
808
808
  state,
809
809
  _amounts,
@@ -205,8 +205,14 @@ export class PricingHelper {
205
205
  overrideTimeout?: number,
206
206
  fmode?: boolean,
207
207
  ): Promise<PoolPrices<any>[]> {
208
+ const start = Date.now();
209
+ const token_key = `${Math.round(Math.random() * 10_000)}_${from.address}_${
210
+ to.address
211
+ }`.toLowerCase();
212
+
208
213
  const dexPoolPrices = await Promise.all(
209
214
  dexKeys.map(async key => {
215
+ const start = Date.now();
210
216
  try {
211
217
  const limitPools = limitPoolsMap ? limitPoolsMap[key] : null;
212
218
 
@@ -302,18 +308,35 @@ export class PricingHelper {
302
308
  }
303
309
  }, reject)
304
310
  .finally(() => {
311
+ this.logger.info(
312
+ `{benchmarks} (total-for-dex): [finally] Dex ${key}, tokenPair: ${token_key} took ${
313
+ end - start
314
+ }ms to resolve/reject`,
315
+ );
305
316
  clearTimeout(timer);
306
317
  });
307
318
  },
308
319
  );
309
320
  } catch (e) {
310
- this.logger.error(`Error_${key}_getPoolPrices:`, e);
321
+ this.logger.error(
322
+ `{benchmarks} (limited-by-timeout-for-dex) [error]: Dex ${key}, tokenPair: ${token_key} took ${
323
+ end - start
324
+ }ms to resolve/reject`,
325
+ e,
326
+ );
311
327
  return [];
328
+ } finally {
329
+ const end = Date.now();
330
+ this.logger.info(
331
+ `{benchmarks} (limited-by-timeout-for-dex) [finally]: Dex ${key}, tokenPair: ${token_key} took ${
332
+ end - start
333
+ }ms to resolve/reject`,
334
+ );
312
335
  }
313
336
  }),
314
337
  );
315
338
 
316
- return dexPoolPrices
339
+ const prices = dexPoolPrices
317
340
  .filter((x): x is ExchangePrices<any> => !!x)
318
341
  .flat() // flatten to get all the pools for the swap
319
342
  .filter(p => {
@@ -348,5 +371,14 @@ export class PricingHelper {
348
371
  }
349
372
  return true;
350
373
  });
374
+
375
+ const end = Date.now();
376
+ this.logger.info(
377
+ `{benchmarks} (getPoolPrices): tokenPair: ${token_key} took ${
378
+ end - start
379
+ }ms to resolve/reject`,
380
+ );
381
+
382
+ return prices;
351
383
  }
352
384
  }
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"stateful-dual-synchronizer.js","sourceRoot":"","sources":["../src/stateful-dual-synchronizer.ts"],"names":[],"mappings":"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"}