@paraswap/dex-lib 4.8.30 → 4.8.31

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 (238) hide show
  1. package/build/dex/cables/constants.d.ts +1 -1
  2. package/build/dex/cables/constants.js +1 -1
  3. package/build/dex/dexalot/constants.d.ts +1 -1
  4. package/build/dex/dexalot/constants.js +1 -1
  5. package/build/dex/generic-rfq/rate-fetcher.js +1 -1
  6. package/build/dex/swaap-v2/constants.d.ts +1 -1
  7. package/build/dex/swaap-v2/constants.js +1 -1
  8. package/build/dex/uniswap-v3/contract-math/native-bridge.js +1 -1
  9. package/build/dex/uniswap-v3/contract-math/native-bridge.js.map +1 -1
  10. package/build/dex/uniswap-v4/api-go/compare-pricing.d.ts +1 -0
  11. package/build/dex/uniswap-v4/api-go/compare-pricing.js +187 -0
  12. package/build/dex/uniswap-v4/api-go/compare-pricing.js.map +1 -0
  13. package/build/dex/uniswap-v4/api-go/compare-states.d.ts +1 -0
  14. package/build/dex/uniswap-v4/api-go/compare-states.js +149 -0
  15. package/build/dex/uniswap-v4/api-go/compare-states.js.map +1 -0
  16. package/build/dex/uniswap-v4/api-go/fetch-pool-key.d.ts +0 -0
  17. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js +140 -0
  18. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js.map +1 -0
  19. package/build/tenderly-simulation.d.ts +221 -0
  20. package/build/tenderly-simulation.js +517 -0
  21. package/build/tenderly-simulation.js.map +1 -0
  22. package/package.json +1 -1
  23. package/build/abi/BProtocol.json +0 -1155
  24. package/build/abi/Jarvis.json +0 -1172
  25. package/build/abi/MStableAsset.json +0 -1545
  26. package/build/abi/OneInchLp.json +0 -1304
  27. package/build/abi/Onebit.json +0 -736
  28. package/build/abi/Shell.json +0 -1294
  29. package/build/abi/TraderJoeV2Router.json +0 -50
  30. package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
  31. package/build/abi/idle-dao/idle-cdo.json +0 -1245
  32. package/build/abi/infusion/InfusionFactory.json +0 -147
  33. package/build/abi/infusion/InfusionPair.json +0 -658
  34. package/build/abi/infusion/InfusionRouter.json +0 -442
  35. package/build/abi/maker-psm/pot.json +0 -322
  36. package/build/abi/maker-psm/psm.json +0 -243
  37. package/build/abi/maker-psm/vat.json +0 -363
  38. package/build/abi/nomiswap-v2/nomiswap-v2-pool.json +0 -773
  39. package/build/abi/quick-perps/fast-price-events.json +0 -70
  40. package/build/abi/quick-perps/fast-price-feed.json +0 -741
  41. package/build/abi/quick-perps/reader.json +0 -313
  42. package/build/abi/quick-perps/vault-price-feed.json +0 -323
  43. package/build/abi/quick-perps/vault.json +0 -1953
  44. package/build/abi/uniswap-v2/excalibur-pool.json +0 -881
  45. package/build/abi/uniswap-v2/mdex-factory.json +0 -759
  46. package/build/abi/wUSDM.json +0 -757
  47. package/build/abi/zrx.v2.json +0 -1967
  48. package/build/abi/zrx.v3.json +0 -3454
  49. package/build/abi/zrx.v4.json +0 -2193
  50. package/build/dex/OneInchLp.d.ts +0 -24
  51. package/build/dex/OneInchLp.js +0 -43
  52. package/build/dex/OneInchLp.js.map +0 -1
  53. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  54. package/build/dex/bProtocol/bProtocol.js +0 -56
  55. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  56. package/build/dex/bProtocol/types.d.ts +0 -11
  57. package/build/dex/bProtocol/types.js +0 -8
  58. package/build/dex/bProtocol/types.js.map +0 -1
  59. package/build/dex/ekubo/pools/base-pool.d.ts +0 -47
  60. package/build/dex/ekubo/pools/base-pool.js +0 -184
  61. package/build/dex/ekubo/pools/base-pool.js.map +0 -1
  62. package/build/dex/ekubo/pools/iface.d.ts +0 -46
  63. package/build/dex/ekubo/pools/iface.js +0 -75
  64. package/build/dex/ekubo/pools/iface.js.map +0 -1
  65. package/build/dex/ekubo/pools/math/price.d.ts +0 -7
  66. package/build/dex/ekubo/pools/math/price.js +0 -112
  67. package/build/dex/ekubo/pools/math/price.js.map +0 -1
  68. package/build/dex/ekubo/pools/oracle-pool.d.ts +0 -10
  69. package/build/dex/ekubo/pools/oracle-pool.js +0 -19
  70. package/build/dex/ekubo/pools/oracle-pool.js.map +0 -1
  71. package/build/dex/ekubo/pools/pool-utils.d.ts +0 -44
  72. package/build/dex/ekubo/pools/pool-utils.js +0 -240
  73. package/build/dex/ekubo/pools/pool-utils.js.map +0 -1
  74. package/build/dex/idle-dao/config.d.ts +0 -5
  75. package/build/dex/idle-dao/config.js +0 -24
  76. package/build/dex/idle-dao/config.js.map +0 -1
  77. package/build/dex/idle-dao/idle-dao.d.ts +0 -42
  78. package/build/dex/idle-dao/idle-dao.js +0 -279
  79. package/build/dex/idle-dao/idle-dao.js.map +0 -1
  80. package/build/dex/idle-dao/token_list.d.ts +0 -4
  81. package/build/dex/idle-dao/token_list.js +0 -289
  82. package/build/dex/idle-dao/token_list.js.map +0 -1
  83. package/build/dex/idle-dao/tokens.d.ts +0 -9
  84. package/build/dex/idle-dao/tokens.js +0 -68
  85. package/build/dex/idle-dao/tokens.js.map +0 -1
  86. package/build/dex/idle-dao/types.d.ts +0 -35
  87. package/build/dex/idle-dao/types.js +0 -11
  88. package/build/dex/idle-dao/types.js.map +0 -1
  89. package/build/dex/idle-dao/utils.d.ts +0 -8
  90. package/build/dex/idle-dao/utils.js +0 -149
  91. package/build/dex/idle-dao/utils.js.map +0 -1
  92. package/build/dex/infusion/config.d.ts +0 -3
  93. package/build/dex/infusion/config.js +0 -20
  94. package/build/dex/infusion/config.js.map +0 -1
  95. package/build/dex/infusion/infusion-stable-pool.d.ts +0 -4
  96. package/build/dex/infusion/infusion-stable-pool.js +0 -74
  97. package/build/dex/infusion/infusion-stable-pool.js.map +0 -1
  98. package/build/dex/infusion/infusion.d.ts +0 -51
  99. package/build/dex/infusion/infusion.js +0 -500
  100. package/build/dex/infusion/infusion.js.map +0 -1
  101. package/build/dex/infusion/types.d.ts +0 -45
  102. package/build/dex/infusion/types.js +0 -3
  103. package/build/dex/infusion/types.js.map +0 -1
  104. package/build/dex/infusion/utils/isStablePair.d.ts +0 -2
  105. package/build/dex/infusion/utils/isStablePair.js +0 -18
  106. package/build/dex/infusion/utils/isStablePair.js.map +0 -1
  107. package/build/dex/jarvis.d.ts +0 -56
  108. package/build/dex/jarvis.js +0 -163
  109. package/build/dex/jarvis.js.map +0 -1
  110. package/build/dex/mStable.d.ts +0 -44
  111. package/build/dex/mStable.js +0 -75
  112. package/build/dex/mStable.js.map +0 -1
  113. package/build/dex/maker-psm/config.d.ts +0 -11
  114. package/build/dex/maker-psm/config.js +0 -53
  115. package/build/dex/maker-psm/config.js.map +0 -1
  116. package/build/dex/maker-psm/maker-psm.d.ts +0 -103
  117. package/build/dex/maker-psm/maker-psm.js +0 -493
  118. package/build/dex/maker-psm/maker-psm.js.map +0 -1
  119. package/build/dex/maker-psm/types.d.ts +0 -39
  120. package/build/dex/maker-psm/types.js +0 -3
  121. package/build/dex/maker-psm/types.js.map +0 -1
  122. package/build/dex/onebit/onebit.d.ts +0 -16
  123. package/build/dex/onebit/onebit.js +0 -61
  124. package/build/dex/onebit/onebit.js.map +0 -1
  125. package/build/dex/onebit/types.d.ts +0 -14
  126. package/build/dex/onebit/types.js +0 -8
  127. package/build/dex/onebit/types.js.map +0 -1
  128. package/build/dex/quick-perps/config.d.ts +0 -11
  129. package/build/dex/quick-perps/config.js +0 -27
  130. package/build/dex/quick-perps/config.js.map +0 -1
  131. package/build/dex/quick-perps/fast-price-feed.d.ts +0 -26
  132. package/build/dex/quick-perps/fast-price-feed.js +0 -184
  133. package/build/dex/quick-perps/fast-price-feed.js.map +0 -1
  134. package/build/dex/quick-perps/pool.d.ts +0 -21
  135. package/build/dex/quick-perps/pool.js +0 -229
  136. package/build/dex/quick-perps/pool.js.map +0 -1
  137. package/build/dex/quick-perps/quick-perps.d.ts +0 -53
  138. package/build/dex/quick-perps/quick-perps.js +0 -247
  139. package/build/dex/quick-perps/quick-perps.js.map +0 -1
  140. package/build/dex/quick-perps/types.d.ts +0 -98
  141. package/build/dex/quick-perps/types.js +0 -3
  142. package/build/dex/quick-perps/types.js.map +0 -1
  143. package/build/dex/quick-perps/usdq.d.ts +0 -15
  144. package/build/dex/quick-perps/usdq.js +0 -62
  145. package/build/dex/quick-perps/usdq.js.map +0 -1
  146. package/build/dex/quick-perps/vault-price-feed.d.ts +0 -43
  147. package/build/dex/quick-perps/vault-price-feed.js +0 -203
  148. package/build/dex/quick-perps/vault-price-feed.js.map +0 -1
  149. package/build/dex/quick-perps/vault-utils.d.ts +0 -8
  150. package/build/dex/quick-perps/vault-utils.js +0 -42
  151. package/build/dex/quick-perps/vault-utils.js.map +0 -1
  152. package/build/dex/quick-perps/vault.d.ts +0 -46
  153. package/build/dex/quick-perps/vault.js +0 -182
  154. package/build/dex/quick-perps/vault.js.map +0 -1
  155. package/build/dex/se-vlr/config.d.ts +0 -3
  156. package/build/dex/se-vlr/config.js +0 -24
  157. package/build/dex/se-vlr/config.js.map +0 -1
  158. package/build/dex/se-vlr/se-vlr-pool.d.ts +0 -39
  159. package/build/dex/se-vlr/se-vlr-pool.js +0 -70
  160. package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
  161. package/build/dex/se-vlr/se-vlr.d.ts +0 -35
  162. package/build/dex/se-vlr/se-vlr.js +0 -131
  163. package/build/dex/se-vlr/se-vlr.js.map +0 -1
  164. package/build/dex/se-vlr/types.d.ts +0 -6
  165. package/build/dex/se-vlr/types.js +0 -3
  166. package/build/dex/se-vlr/types.js.map +0 -1
  167. package/build/dex/shell.d.ts +0 -25
  168. package/build/dex/shell.js +0 -41
  169. package/build/dex/shell.js.map +0 -1
  170. package/build/dex/solidly/forks-override/aerodrome.d.ts +0 -14
  171. package/build/dex/solidly/forks-override/aerodrome.js +0 -46
  172. package/build/dex/solidly/forks-override/aerodrome.js.map +0 -1
  173. package/build/dex/solidly/forks-override/chronos.d.ts +0 -23
  174. package/build/dex/solidly/forks-override/chronos.js +0 -141
  175. package/build/dex/solidly/forks-override/chronos.js.map +0 -1
  176. package/build/dex/solidly/forks-override/usdfi.d.ts +0 -8
  177. package/build/dex/solidly/forks-override/usdfi.js +0 -15
  178. package/build/dex/solidly/forks-override/usdfi.js.map +0 -1
  179. package/build/dex/solidly/forks-override/velocimeter.d.ts +0 -23
  180. package/build/dex/solidly/forks-override/velocimeter.js +0 -77
  181. package/build/dex/solidly/forks-override/velocimeter.js.map +0 -1
  182. package/build/dex/trader-joe-v2.d.ts +0 -40
  183. package/build/dex/trader-joe-v2.js +0 -74
  184. package/build/dex/trader-joe-v2.js.map +0 -1
  185. package/build/dex/uniswap-v2/dfyn.d.ts +0 -19
  186. package/build/dex/uniswap-v2/dfyn.js +0 -61
  187. package/build/dex/uniswap-v2/dfyn.js.map +0 -1
  188. package/build/dex/uniswap-v2/excalibur.d.ts +0 -24
  189. package/build/dex/uniswap-v2/excalibur.js +0 -47
  190. package/build/dex/uniswap-v2/excalibur.js.map +0 -1
  191. package/build/dex/uniswap-v2/mdex.d.ts +0 -24
  192. package/build/dex/uniswap-v2/mdex.js +0 -50
  193. package/build/dex/uniswap-v2/mdex.js.map +0 -1
  194. package/build/dex/uniswap-v2/nomiswap-v2.d.ts +0 -24
  195. package/build/dex/uniswap-v2/nomiswap-v2.js +0 -57
  196. package/build/dex/uniswap-v2/nomiswap-v2.js.map +0 -1
  197. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  198. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  199. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  200. package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -3
  201. package/build/dex/uniswap-v4/contract-math/Position.js +0 -10
  202. package/build/dex/uniswap-v4/contract-math/Position.js.map +0 -1
  203. package/build/dex/usual-bond/config.d.ts +0 -3
  204. package/build/dex/usual-bond/config.js +0 -13
  205. package/build/dex/usual-bond/config.js.map +0 -1
  206. package/build/dex/usual-bond/types.d.ts +0 -7
  207. package/build/dex/usual-bond/types.js +0 -3
  208. package/build/dex/usual-bond/types.js.map +0 -1
  209. package/build/dex/usual-bond/usual-bond.d.ts +0 -35
  210. package/build/dex/usual-bond/usual-bond.js +0 -176
  211. package/build/dex/usual-bond/usual-bond.js.map +0 -1
  212. package/build/dex/wusdm/config.d.ts +0 -3
  213. package/build/dex/wusdm/config.js +0 -43
  214. package/build/dex/wusdm/config.js.map +0 -1
  215. package/build/dex/wusdm/constants.d.ts +0 -2
  216. package/build/dex/wusdm/constants.js +0 -6
  217. package/build/dex/wusdm/constants.js.map +0 -1
  218. package/build/dex/wusdm/types.d.ts +0 -18
  219. package/build/dex/wusdm/types.js +0 -11
  220. package/build/dex/wusdm/types.js.map +0 -1
  221. package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
  222. package/build/dex/wusdm/wusdm-pool.js +0 -74
  223. package/build/dex/wusdm/wusdm-pool.js.map +0 -1
  224. package/build/dex/wusdm/wusdm.d.ts +0 -46
  225. package/build/dex/wusdm/wusdm.js +0 -243
  226. package/build/dex/wusdm/wusdm.js.map +0 -1
  227. package/build/dex/zerox/config.d.ts +0 -2
  228. package/build/dex/zerox/config.js +0 -33
  229. package/build/dex/zerox/config.js.map +0 -1
  230. package/build/dex/zerox/index.d.ts +0 -22
  231. package/build/dex/zerox/index.js +0 -225
  232. package/build/dex/zerox/index.js.map +0 -1
  233. package/build/dex/zerox/order.d.ts +0 -88
  234. package/build/dex/zerox/order.js +0 -53
  235. package/build/dex/zerox/order.js.map +0 -1
  236. package/build/dex/zerox/types.d.ts +0 -73
  237. package/build/dex/zerox/types.js +0 -21
  238. package/build/dex/zerox/types.js.map +0 -1
@@ -10,5 +10,5 @@ export declare const CABLES_BLACKLIST_CACHES_TTL_S = 60;
10
10
  export declare const CABLES_API_BLACKLIST_POLLING_INTERVAL_MS = 30000;
11
11
  export declare const CABLES_TOKENS_CACHES_TTL_S = 60;
12
12
  export declare const CABLES_API_TOKENS_POLLING_INTERVAL_MS = 30000;
13
- export declare const CABLES_FIRM_QUOTE_TIMEOUT_MS = 2000;
13
+ export declare const CABLES_FIRM_QUOTE_TIMEOUT_MS = 3000;
14
14
  export declare const CABLES_GAS_COST = 120000;
@@ -13,6 +13,6 @@ exports.CABLES_BLACKLIST_CACHES_TTL_S = 60;
13
13
  exports.CABLES_API_BLACKLIST_POLLING_INTERVAL_MS = 30000; // 30 sec
14
14
  exports.CABLES_TOKENS_CACHES_TTL_S = 60;
15
15
  exports.CABLES_API_TOKENS_POLLING_INTERVAL_MS = 30000; // 30 sec
16
- exports.CABLES_FIRM_QUOTE_TIMEOUT_MS = 2000;
16
+ exports.CABLES_FIRM_QUOTE_TIMEOUT_MS = 3000;
17
17
  exports.CABLES_GAS_COST = 120_000;
18
18
  //# sourceMappingURL=constants.js.map
@@ -11,4 +11,4 @@ export declare const DEXALOT_RATE_LIMITED_TTL_S: number;
11
11
  export declare const DEXALOT_RESTRICT_TTL_S: number;
12
12
  export declare const DEXALOT_RESTRICTED_CACHE_KEY = "restricted";
13
13
  export declare const DEXALOT_MIN_SLIPPAGE_FACTOR_THRESHOLD_FOR_RESTRICTION: BigNumber;
14
- export declare const DEXALOT_FIRM_QUOTE_TIMEOUT_MS = 2000;
14
+ export declare const DEXALOT_FIRM_QUOTE_TIMEOUT_MS = 4000;
@@ -17,5 +17,5 @@ exports.DEXALOT_RATE_LIMITED_TTL_S = 60 * 60; // 1 hour
17
17
  exports.DEXALOT_RESTRICT_TTL_S = 60 * 30; // 30 minutes
18
18
  exports.DEXALOT_RESTRICTED_CACHE_KEY = 'restricted';
19
19
  exports.DEXALOT_MIN_SLIPPAGE_FACTOR_THRESHOLD_FOR_RESTRICTION = new bignumber_js_1.default('0.005');
20
- exports.DEXALOT_FIRM_QUOTE_TIMEOUT_MS = 2000;
20
+ exports.DEXALOT_FIRM_QUOTE_TIMEOUT_MS = 4000;
21
21
  //# sourceMappingURL=constants.js.map
@@ -16,7 +16,7 @@ const validators_2 = require("../../lib/validators");
16
16
  const erc1271_utils_1 = require("../../lib/erc1271-utils");
17
17
  const utils_2 = require("../../utils");
18
18
  const axios_1 = require("axios");
19
- const GET_FIRM_RATE_TIMEOUT_MS = 2000;
19
+ const GET_FIRM_RATE_TIMEOUT_MS = 4000;
20
20
  const reversePrice = (price) => [
21
21
  bignumber_constants_1.BN_1.dividedBy(price[0]),
22
22
  price[1].times(price[0]),
@@ -1,6 +1,6 @@
1
1
  import BigNumber from 'bignumber.js';
2
2
  export declare const SWAAP_RFQ_PRICES_CACHES_TTL_S = 3;
3
- export declare const SWAAP_RFQ_QUOTE_TIMEOUT_MS = 2000;
3
+ export declare const SWAAP_RFQ_QUOTE_TIMEOUT_MS = 3000;
4
4
  export declare const SWAAP_RFQ_API_PRICES_POLLING_INTERVAL_MS = 1000;
5
5
  export declare const SWAAP_RFQ_API_TOKENS_POLLING_INTERVAL_MS: number;
6
6
  export declare const SWAAP_RFQ_TOKENS_CACHES_TTL_S = 7200;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SWAAP_BANNED_CODE = exports.SWAAP_NOTIFICATION_ORIGIN = exports.SWAAP_NOTIFY_TIMEOUT_MS = exports.SWAAP_MIN_SLIPPAGE_FACTOR_THRESHOLD_FOR_RESTRICTION = exports.SWAAP_ORDER_TYPE_BUY = exports.SWAAP_ORDER_TYPE_SELL = exports.CALLER_SLOT = exports.BATCH_SWAP_SELECTOR = exports.VOLATILE_SWAP_GAS_COST_ESTIMATION = exports.STABLE_SWAP_GAS_COST_ESTIMATION = exports.SWAAP_POOL_RESTRICT_TTL_S = exports.SWAAP_429_TTL_S = exports.SWAAP_403_TTL_S = exports.SWAAP_RFQ_TOKENS_ENDPOINT = exports.SWAAP_NOTIFY_ENDPOINT = exports.SWAAP_RFQ_QUOTE_ENDPOINT = exports.SWAAP_RFQ_PRICES_ENDPOINT = exports.SWAAP_PRICES_CACHE_KEY = exports.SWAAP_TOKENS_CACHE_KEY = exports.SWAAP_RFQ_API_URL = exports.SWAAP_RFQ_TOKENS_CACHES_TTL_S = exports.SWAAP_RFQ_API_TOKENS_POLLING_INTERVAL_MS = exports.SWAAP_RFQ_API_PRICES_POLLING_INTERVAL_MS = exports.SWAAP_RFQ_QUOTE_TIMEOUT_MS = exports.SWAAP_RFQ_PRICES_CACHES_TTL_S = void 0;
7
7
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
8
  exports.SWAAP_RFQ_PRICES_CACHES_TTL_S = 3;
9
- exports.SWAAP_RFQ_QUOTE_TIMEOUT_MS = 2000;
9
+ exports.SWAAP_RFQ_QUOTE_TIMEOUT_MS = 3000;
10
10
  exports.SWAAP_RFQ_API_PRICES_POLLING_INTERVAL_MS = 1000;
11
11
  exports.SWAAP_RFQ_API_TOKENS_POLLING_INTERVAL_MS = 1000 * 60 * 60; // 1 hour
12
12
  exports.SWAAP_RFQ_TOKENS_CACHES_TTL_S = 7200; // 2 hours
@@ -59,7 +59,7 @@ function toRustInit(state, variant = 'uniswap_v3') {
59
59
  * Returns null if the native addon is not available.
60
60
  */
61
61
  function createRustHandle(state, variant = 'uniswap_v3') {
62
- if (!exports.useNativeMath)
62
+ if (!exports.nativeAddonAvailable)
63
63
  return null;
64
64
  try {
65
65
  return nativeAddon.RustPoolHandle.create(toRustInit(state, variant));
@@ -1 +1 @@
1
- {"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v3/contract-math/native-bridge.ts"],"names":[],"mappings":";;;AA+FA,4CAUC;AArGD,oCAAoC;AACpC,IAAI,WAAW,GAAQ,IAAI,CAAC;AAC5B,IAAI,CAAC;IACH,WAAW,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AACvD,CAAC;AAAC,MAAM,CAAC;IACP,wDAAwD;AAC1D,CAAC;AAEY,QAAA,oBAAoB,GAAG,WAAW,KAAK,IAAI,CAAC;AAEzD,uCAAuC;AAC1B,QAAA,aAAa,GACxB,4BAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,IAAI,CAAC;AAUhE;;GAEG;AACH,SAAS,UAAU,CACjB,KAA8B,EAC9B,UAAkB,YAAY;IAE9B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAC/B,KAAK,CAAC,UAA4C,CACnD,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;QAChB,KAAK;KACN,CAAC,CAAC,CAAC;IAEJ,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAC1B,KAAK,CAAC,KAGL,CACF,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;QAChB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC,CAAC,CAAC;IAEJ,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CACjC,KAAK,CAAC,YAQL,CACF,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;QAChB,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,iCAAiC,EAAE,GAAG,CAAC,iCAAiC;QACxE,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,OAAO;QACP,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY;QACtC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;QACtB,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB;QAC9C,sBAAsB,EAAE,KAAK,CAAC,KAAK,CAAC,sBAAsB;QAC1D,0BAA0B,EAAE,KAAK,CAAC,KAAK,CAAC,0BAA0B;QAClE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;QACpC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,UAAU;QACV,KAAK;QACL,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,KAA8B,EAC9B,UAAkB,YAAY;IAE9B,IAAI,CAAC,qBAAa;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v3/contract-math/native-bridge.ts"],"names":[],"mappings":";;;AA+FA,4CAUC;AArGD,oCAAoC;AACpC,IAAI,WAAW,GAAQ,IAAI,CAAC;AAC5B,IAAI,CAAC;IACH,WAAW,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AACvD,CAAC;AAAC,MAAM,CAAC;IACP,wDAAwD;AAC1D,CAAC;AAEY,QAAA,oBAAoB,GAAG,WAAW,KAAK,IAAI,CAAC;AAEzD,uCAAuC;AAC1B,QAAA,aAAa,GACxB,4BAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,IAAI,CAAC;AAUhE;;GAEG;AACH,SAAS,UAAU,CACjB,KAA8B,EAC9B,UAAkB,YAAY;IAE9B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAC/B,KAAK,CAAC,UAA4C,CACnD,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;QAChB,KAAK;KACN,CAAC,CAAC,CAAC;IAEJ,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAC1B,KAAK,CAAC,KAGL,CACF,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;QAChB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC,CAAC,CAAC;IAEJ,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CACjC,KAAK,CAAC,YAQL,CACF,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;QAChB,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,iCAAiC,EAAE,GAAG,CAAC,iCAAiC;QACxE,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,OAAO;QACP,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY;QACtC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;QACtB,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB;QAC9C,sBAAsB,EAAE,KAAK,CAAC,KAAK,CAAC,sBAAsB;QAC1D,0BAA0B,EAAE,KAAK,CAAC,KAAK,CAAC,0BAA0B;QAClE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;QACpC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,UAAU;QACV,KAAK;QACL,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,KAA8B,EAC9B,UAAkB,YAAY;IAE9B,IAAI,CAAC,4BAAoB;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const dotenv_1 = __importDefault(require("dotenv"));
7
+ dotenv_1.default.config();
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const constants_1 = require("../../../constants");
12
+ const config_1 = require("../config");
13
+ const uniswap_v4_pool_1 = require("../uniswap-v4-pool");
14
+ const dex_helper_1 = require("../../../dex-helper");
15
+ const uniswap_v4_pool_math_1 = require("../contract-math/uniswap-v4-pool-math");
16
+ const core_1 = require("@paraswap/core");
17
+ const abi_1 = require("@ethersproject/abi");
18
+ const decoders_1 = require("../../../lib/decoders");
19
+ const quoter_abi_json_1 = __importDefault(require("../../../abi/uniswap-v4/quoter.abi.json"));
20
+ const POOL_ID = '0x54c72c46df32f2cc455e84e41e191b26ed73a29452cdd3d82f511097af9f427e';
21
+ const CHAIN_ID = constants_1.Network.MAINNET;
22
+ const DEX_KEY = 'UniswapV4';
23
+ const API_DEX_KEY = 'uniswapv4'; // cspell:disable-line
24
+ const CONFIG = config_1.UniswapV4Config[DEX_KEY][CHAIN_ID];
25
+ const POOL_KEY_CACHE_FILE = path_1.default.join(__dirname, 'pool_key_cache.json');
26
+ // ETH/WBTC pool: token0=ETH(0x0), token1=WBTC
27
+ // Swap 1 ETH -> WBTC (zeroForOne=true, SELL)
28
+ const AMOUNT = 1000000000000000000000n; // 1000 ETH (18 decimals)
29
+ function loadPoolKeyFromCache() {
30
+ try {
31
+ const raw = fs_1.default.readFileSync(POOL_KEY_CACHE_FILE, 'utf-8');
32
+ const cache = JSON.parse(raw);
33
+ return cache[CHAIN_ID]?.[POOL_ID] ?? null;
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ async function generateRpcPoolState(poolKey, blockNumber) {
40
+ const dexHelper = new dex_helper_1.DummyDexHelper(CHAIN_ID);
41
+ const logger = dexHelper.getLogger(DEX_KEY);
42
+ const pool = new uniswap_v4_pool_1.UniswapV4Pool(dexHelper, DEX_KEY, CHAIN_ID, CONFIG, logger, '', POOL_ID, poolKey.token0.id.toLowerCase(), poolKey.token1.id.toLowerCase(), poolKey.feeTier, poolKey.hooks, poolKey.tickSpacing);
43
+ return pool.generateState(blockNumber);
44
+ }
45
+ function adaptApiToPoolState(api) {
46
+ const ticks = {};
47
+ for (const [idx, tick] of Object.entries(api.dexData.ticks)) {
48
+ ticks[idx] = {
49
+ liquidityGross: BigInt(tick.liquidityGross),
50
+ liquidityNet: BigInt(tick.liquidityNet),
51
+ };
52
+ }
53
+ const tickBitmap = {};
54
+ for (const [idx, val] of Object.entries(api.dexData.tickBitmap)) {
55
+ if (val !== '0') {
56
+ tickBitmap[idx] = BigInt(val);
57
+ }
58
+ }
59
+ return {
60
+ id: api.poolId,
61
+ token0: api.tokens[0],
62
+ token1: api.tokens[1],
63
+ fee: String(api.swapFee),
64
+ hooks: api.dexData.hooks,
65
+ feeGrowthGlobal0X128: 0n,
66
+ feeGrowthGlobal1X128: 0n,
67
+ liquidity: BigInt(api.liquidity),
68
+ slot0: {
69
+ sqrtPriceX96: BigInt(api.dexData.sqrtPriceX96),
70
+ tick: BigInt(api.dexData.tick),
71
+ protocolFee: BigInt(api.dexData.protocolFee),
72
+ lpFee: BigInt(api.swapFee),
73
+ },
74
+ tickSpacing: api.dexData.tickSpacing,
75
+ ticks,
76
+ tickBitmap,
77
+ isValid: true,
78
+ };
79
+ }
80
+ function buildPool(poolKey) {
81
+ return {
82
+ id: POOL_ID,
83
+ key: {
84
+ currency0: poolKey.token0.id.toLowerCase(),
85
+ currency1: poolKey.token1.id.toLowerCase(),
86
+ fee: poolKey.feeTier,
87
+ tickSpacing: Number(poolKey.tickSpacing),
88
+ hooks: poolKey.hooks,
89
+ },
90
+ };
91
+ }
92
+ function getOutputs(pool, state, amounts, zeroForOne, side) {
93
+ try {
94
+ return uniswap_v4_pool_math_1.uniswapV4PoolMath.queryOutputs(pool, state, amounts, zeroForOne, side);
95
+ }
96
+ catch (e) {
97
+ // eslint-disable-next-line no-console
98
+ console.error('queryOutputs error:', e);
99
+ return null;
100
+ }
101
+ }
102
+ async function queryPriceFromRpc(dexHelper, pool, amounts, zeroForOne, side, blockNumber) {
103
+ const quoterIface = new abi_1.Interface(quoter_abi_json_1.default);
104
+ const quoterAddress = CONFIG.quoter;
105
+ const funcName = side === core_1.SwapSide.SELL ? 'quoteExactInputSingle' : 'quoteExactOutputSingle';
106
+ const calls = amounts.map(amount => ({
107
+ target: quoterAddress,
108
+ callData: quoterIface.encodeFunctionData(funcName, [
109
+ {
110
+ poolKey: pool.key,
111
+ zeroForOne,
112
+ exactAmount: amount.toString(),
113
+ hookData: '0x',
114
+ },
115
+ ]),
116
+ decodeFunction: (result) => {
117
+ return (0, decoders_1.generalDecoder)(result, ['uint256', 'uint256'], 0n, value => BigInt(value[0].toString()));
118
+ },
119
+ }));
120
+ const results = await dexHelper.multiWrapper.tryAggregate(false, calls, blockNumber);
121
+ return results.map(result => (result.success ? result.returnData : 0n));
122
+ }
123
+ /* eslint-disable no-console */
124
+ async function main() {
125
+ const poolKey = loadPoolKeyFromCache();
126
+ if (!poolKey) {
127
+ console.error('Pool key not found in cache. Run fetch-pool-key.ts first.');
128
+ process.exit(1);
129
+ }
130
+ console.log('Loaded pool key from cache');
131
+ const dexHelper = new dex_helper_1.DummyDexHelper(CHAIN_ID);
132
+ const latestBlock = await dexHelper.provider.getBlockNumber();
133
+ console.log(`Latest block: ${latestBlock}`);
134
+ const pool = buildPool(poolKey);
135
+ const amounts = [AMOUNT];
136
+ const zeroForOne = true;
137
+ const side = core_1.SwapSide.SELL;
138
+ const apiPoolId = `${CHAIN_ID}:${API_DEX_KEY}:${POOL_ID}`;
139
+ const apiGenerateUrl = `http://api-go.staging.paraswap.io/api/v1/pool/generate-state?poolId=${apiPoolId}`;
140
+ const apiCachedUrl = `http://api-go.staging.paraswap.io/api/v1/pool/state?poolId=${apiPoolId}`;
141
+ console.log('\nFetching all states & querying on-chain quoter...');
142
+ const [apiGenResp, apiCachedResp, rpcState, onChainOutputs] = await Promise.all([
143
+ axios_1.default.get(apiGenerateUrl, { timeout: 30_000 }),
144
+ axios_1.default.get(apiCachedUrl, { timeout: 30_000 }),
145
+ generateRpcPoolState(poolKey, latestBlock),
146
+ queryPriceFromRpc(dexHelper, pool, amounts, zeroForOne, side, latestBlock),
147
+ ]);
148
+ const apiGenData = apiGenResp.data;
149
+ const apiCachedData = apiCachedResp.data;
150
+ const apiGenState = adaptApiToPoolState(apiGenData);
151
+ const apiCachedState = adaptApiToPoolState(apiCachedData);
152
+ console.log(`Blocks — RPC: ${latestBlock}, API generate: ${apiGenData.blockNumber}, API cached: ${apiCachedData.blockNumber}`);
153
+ console.log(`\n=== Pricing Comparison ===`);
154
+ console.log(`Pool: ETH/WBTC (${POOL_ID.slice(0, 10)}...)`);
155
+ console.log(`Direction: ${zeroForOne ? 'token0 -> token1' : 'token1 -> token0'} (${side === core_1.SwapSide.SELL ? 'SELL' : 'BUY'})`);
156
+ console.log(`Amount in: ${AMOUNT} (${Number(AMOUNT) / 1e18} ETH)\n`);
157
+ const rpcStateOutputs = getOutputs(pool, rpcState, amounts, zeroForOne, side);
158
+ const apiGenOutputs = getOutputs(pool, apiGenState, amounts, zeroForOne, side);
159
+ const apiCachedOutputs = getOutputs(pool, apiCachedState, amounts, zeroForOne, side);
160
+ function formatOutput(label, output, baseline) {
161
+ if (output === null) {
162
+ console.log(` ${label} FAILED`);
163
+ return;
164
+ }
165
+ const diff = output - baseline;
166
+ const pct = baseline !== 0n ? (Number(diff) / Number(baseline)) * 100 : 0;
167
+ console.log(` ${label} ${output} (${Number(output) / 1e8} WBTC) diff: ${diff} (${pct.toFixed(6)}%)`);
168
+ }
169
+ for (let i = 0; i < amounts.length; i++) {
170
+ const onChain = onChainOutputs[i];
171
+ const fromRpc = rpcStateOutputs ? rpcStateOutputs[i] : null;
172
+ const fromApiGen = apiGenOutputs ? apiGenOutputs[i] : null;
173
+ const fromApiCached = apiCachedOutputs ? apiCachedOutputs[i] : null;
174
+ console.log(` Amount: ${amounts[i]} (${Number(amounts[i]) / 1e18} ETH)`);
175
+ console.log(` On-chain quoter: ${onChain} (${Number(onChain) / 1e8} WBTC) [baseline]`);
176
+ formatOutput('RPC state math: ', fromRpc, onChain);
177
+ formatOutput('API generated: ', fromApiGen, onChain);
178
+ formatOutput('API cached: ', fromApiCached, onChain);
179
+ }
180
+ }
181
+ /* eslint-enable no-console */
182
+ main().catch(err => {
183
+ // eslint-disable-next-line no-console
184
+ console.error('Error:', err.message);
185
+ process.exit(1);
186
+ });
187
+ //# sourceMappingURL=compare-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-pricing.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v4/api-go/compare-pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const dotenv_1 = __importDefault(require("dotenv"));
7
+ dotenv_1.default.config();
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
12
+ const { diffString } = require('json-diff');
13
+ const constants_1 = require("../../../constants");
14
+ const config_1 = require("../config");
15
+ const uniswap_v4_pool_1 = require("../uniswap-v4-pool");
16
+ const dex_helper_1 = require("../../../dex-helper");
17
+ const POOL_ID = '0x54c72c46df32f2cc455e84e41e191b26ed73a29452cdd3d82f511097af9f427e';
18
+ const CHAIN_ID = constants_1.Network.MAINNET;
19
+ const DEX_KEY = 'UniswapV4';
20
+ const API_DEX_KEY = 'uniswapv4'; // cspell:disable-line
21
+ const CONFIG = config_1.UniswapV4Config[DEX_KEY][CHAIN_ID];
22
+ const POOL_KEY_CACHE_FILE = path_1.default.join(__dirname, 'pool_key_cache.json');
23
+ function loadPoolKeyFromCache() {
24
+ try {
25
+ const raw = fs_1.default.readFileSync(POOL_KEY_CACHE_FILE, 'utf-8');
26
+ const cache = JSON.parse(raw);
27
+ return cache[CHAIN_ID]?.[POOL_ID] ?? null;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ async function generatePoolState(poolKey, blockNumber) {
34
+ const dexHelper = new dex_helper_1.DummyDexHelper(CHAIN_ID);
35
+ const logger = dexHelper.getLogger(DEX_KEY);
36
+ const pool = new uniswap_v4_pool_1.UniswapV4Pool(dexHelper, DEX_KEY, CHAIN_ID, CONFIG, logger, '', POOL_ID, poolKey.token0.id.toLowerCase(), poolKey.token1.id.toLowerCase(), poolKey.feeTier, poolKey.hooks, poolKey.tickSpacing);
37
+ return pool.generateState(blockNumber);
38
+ }
39
+ function serializePoolState(state) {
40
+ const ticks = {};
41
+ for (const [idx, tick] of Object.entries(state.ticks)) {
42
+ ticks[idx] = {
43
+ liquidityGross: tick.liquidityGross.toString(),
44
+ liquidityNet: tick.liquidityNet.toString(),
45
+ };
46
+ }
47
+ const tickBitmap = {};
48
+ for (const [idx, val] of Object.entries(state.tickBitmap)) {
49
+ tickBitmap[idx] = val.toString();
50
+ }
51
+ return {
52
+ id: state.id,
53
+ token0: state.token0,
54
+ token1: state.token1,
55
+ fee: state.fee,
56
+ hooks: state.hooks,
57
+ liquidity: state.liquidity.toString(),
58
+ slot0: {
59
+ sqrtPriceX96: state.slot0.sqrtPriceX96.toString(),
60
+ tick: state.slot0.tick.toString(),
61
+ protocolFee: state.slot0.protocolFee.toString(),
62
+ lpFee: state.slot0.lpFee.toString(),
63
+ },
64
+ tickSpacing: state.tickSpacing,
65
+ ticks,
66
+ tickBitmap,
67
+ };
68
+ }
69
+ function adaptApiToSerializedState(api) {
70
+ const ticks = {};
71
+ for (const [idx, tick] of Object.entries(api.dexData.ticks)) {
72
+ ticks[idx] = {
73
+ liquidityGross: tick.liquidityGross,
74
+ liquidityNet: tick.liquidityNet,
75
+ };
76
+ }
77
+ // Filter tickBitmap: only keep non-zero entries
78
+ const tickBitmap = {};
79
+ for (const [idx, val] of Object.entries(api.dexData.tickBitmap)) {
80
+ if (val !== '0') {
81
+ tickBitmap[idx] = val;
82
+ }
83
+ }
84
+ return {
85
+ id: api.poolId,
86
+ token0: api.tokens[0],
87
+ token1: api.tokens[1],
88
+ fee: String(api.swapFee),
89
+ hooks: api.dexData.hooks,
90
+ liquidity: String(api.liquidity),
91
+ slot0: {
92
+ sqrtPriceX96: String(api.dexData.sqrtPriceX96),
93
+ tick: String(api.dexData.tick),
94
+ protocolFee: String(api.dexData.protocolFee),
95
+ lpFee: String(api.swapFee),
96
+ },
97
+ tickSpacing: api.dexData.tickSpacing,
98
+ ticks,
99
+ tickBitmap,
100
+ };
101
+ }
102
+ /* eslint-disable no-console */
103
+ async function main() {
104
+ const poolKey = loadPoolKeyFromCache();
105
+ if (!poolKey) {
106
+ console.error('Pool key not found in cache. Run fetch-pool-key.ts first to populate the cache.');
107
+ process.exit(1);
108
+ }
109
+ console.log('Loaded pool key from cache');
110
+ const dexHelper = new dex_helper_1.DummyDexHelper(CHAIN_ID);
111
+ const latestBlock = await dexHelper.provider.getBlockNumber();
112
+ console.log(`Latest block: ${latestBlock}`);
113
+ const apiPoolId = `${CHAIN_ID}:${API_DEX_KEY}:${POOL_ID}`;
114
+ const apiGenerateUrl = `http://api-go.staging.paraswap.io/api/v1/pool/generate-state?poolId=${apiPoolId}`;
115
+ const apiCachedUrl = `http://api-go.staging.paraswap.io/api/v1/pool/state?poolId=${apiPoolId}`;
116
+ console.log('\nFetching all states...');
117
+ const [apiGenResp, apiCachedResp, rpcState] = await Promise.all([
118
+ axios_1.default.get(apiGenerateUrl, { timeout: 30_000 }),
119
+ axios_1.default.get(apiCachedUrl, { timeout: 30_000 }),
120
+ generatePoolState(poolKey, latestBlock),
121
+ ]);
122
+ const apiGenData = apiGenResp.data;
123
+ const apiCachedData = apiCachedResp.data;
124
+ console.log(`Blocks — RPC: ${latestBlock}, API generate: ${apiGenData.blockNumber}, API cached: ${apiCachedData.blockNumber}`);
125
+ const serializedRpc = serializePoolState(rpcState);
126
+ const serializedApiGen = adaptApiToSerializedState(apiGenData);
127
+ const serializedApiCached = adaptApiToSerializedState(apiCachedData);
128
+ // RPC vs API generated
129
+ console.log('\n=== RPC state vs API generated state ===\n');
130
+ const diff1 = diffString(serializedRpc, serializedApiGen, { color: true });
131
+ console.log(diff1 || 'States are identical.');
132
+ // RPC vs API cached
133
+ console.log('\n=== RPC state vs API cached state ===\n');
134
+ const diff2 = diffString(serializedRpc, serializedApiCached, { color: true });
135
+ console.log(diff2 || 'States are identical.');
136
+ // API generated vs API cached
137
+ console.log('\n=== API generated vs API cached ===\n');
138
+ const diff3 = diffString(serializedApiGen, serializedApiCached, {
139
+ color: true,
140
+ });
141
+ console.log(diff3 || 'States are identical.');
142
+ }
143
+ /* eslint-enable no-console */
144
+ main().catch(err => {
145
+ // eslint-disable-next-line no-console
146
+ console.error('Error:', err.message);
147
+ process.exit(1);
148
+ });
149
+ //# sourceMappingURL=compare-states.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-states.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v4/api-go/compare-states.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ // import dotenv from 'dotenv';
3
+ // dotenv.config();
4
+ // import axios from 'axios';
5
+ // import fs from 'fs';
6
+ // import path from 'path';
7
+ // import { UniswapV4Config } from '../config';
8
+ // import { Network } from '../../../constants';
9
+ // import { UniswapV4Pool } from '../uniswap-v4-pool';
10
+ // import { DummyDexHelper } from '../../../dex-helper';
11
+ // import { PoolState } from '../types';
12
+ // const POOL_ID =
13
+ // '0x54c72c46df32f2cc455e84e41e191b26ed73a29452cdd3d82f511097af9f427e';
14
+ // const CHAIN_ID = Network.MAINNET;
15
+ // const DEX_KEY = 'UniswapV4';
16
+ // const CONFIG = UniswapV4Config[DEX_KEY][CHAIN_ID];
17
+ // const SUBGRAPH_ID = CONFIG.subgraphURL;
18
+ // const POOL_KEY_CACHE_FILE = path.join(__dirname, 'pool_key_cache.json');
19
+ // interface PoolKey {
20
+ // id: string;
21
+ // token0: { id: string };
22
+ // token1: { id: string };
23
+ // feeTier: string;
24
+ // tickSpacing: string;
25
+ // hooks: string;
26
+ // }
27
+ // type PoolKeyCache = Record<string, Record<string, PoolKey>>;
28
+ // interface GraphQLResponse {
29
+ // data: { pool: PoolKey | null };
30
+ // errors?: { message: string }[];
31
+ // }
32
+ // function loadCache(): PoolKeyCache {
33
+ // try {
34
+ // const raw = fs.readFileSync(POOL_KEY_CACHE_FILE, 'utf-8');
35
+ // return JSON.parse(raw) as PoolKeyCache;
36
+ // } catch {
37
+ // return {};
38
+ // }
39
+ // }
40
+ // function loadPoolKeyFromCache(): PoolKey | null {
41
+ // const cache = loadCache();
42
+ // return cache[CHAIN_ID]?.[POOL_ID] ?? null;
43
+ // }
44
+ // function savePoolKeyToCache(pool: PoolKey): void {
45
+ // const cache = loadCache();
46
+ // if (!cache[CHAIN_ID]) {
47
+ // cache[CHAIN_ID] = {};
48
+ // }
49
+ // cache[CHAIN_ID][POOL_ID] = pool;
50
+ // fs.writeFileSync(POOL_KEY_CACHE_FILE, JSON.stringify(cache, null, 2));
51
+ // }
52
+ // async function fetchPoolKey(apiKey: string): Promise<PoolKey> {
53
+ // const url = `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/subgraphs/id/${SUBGRAPH_ID}`;
54
+ // const query = `{
55
+ // pool(id: "${POOL_ID}") {
56
+ // id
57
+ // token0 {
58
+ // id
59
+ // }
60
+ // token1 {
61
+ // id
62
+ // }
63
+ // feeTier
64
+ // tickSpacing
65
+ // hooks
66
+ // }
67
+ // }`;
68
+ // const resp = await axios.post<GraphQLResponse>(
69
+ // url,
70
+ // { query },
71
+ // { timeout: 30_000 },
72
+ // );
73
+ // if (resp.data.errors?.length) {
74
+ // throw new Error(`Subgraph error: ${resp.data.errors[0].message}`);
75
+ // }
76
+ // if (!resp.data.data.pool) {
77
+ // throw new Error(`Pool ${POOL_ID} not found`);
78
+ // }
79
+ // return resp.data.data.pool;
80
+ // }
81
+ // function bigintReplacer(_key: string, value: unknown): unknown {
82
+ // return typeof value === 'bigint' ? value.toString() : value;
83
+ // }
84
+ // function saveState(state: PoolState, blockNumber: number): void {
85
+ // const filename = `${CHAIN_ID}-${POOL_ID}-${blockNumber}.json`;
86
+ // const filepath = path.join(__dirname, filename);
87
+ // fs.writeFileSync(filepath, JSON.stringify(state, bigintReplacer, 2));
88
+ // console.log('State saved to:', filepath);
89
+ // }
90
+ // async function generatePoolState(
91
+ // poolKey: PoolKey,
92
+ // blockNumber: number,
93
+ // ): Promise<PoolState> {
94
+ // const dexHelper = new DummyDexHelper(CHAIN_ID);
95
+ // const logger = dexHelper.getLogger(DEX_KEY);
96
+ // const pool = new UniswapV4Pool(
97
+ // dexHelper,
98
+ // DEX_KEY,
99
+ // CHAIN_ID,
100
+ // CONFIG,
101
+ // logger,
102
+ // '',
103
+ // POOL_ID,
104
+ // poolKey.token0.id.toLowerCase(),
105
+ // poolKey.token1.id.toLowerCase(),
106
+ // poolKey.feeTier,
107
+ // poolKey.hooks,
108
+ // poolKey.tickSpacing,
109
+ // );
110
+ // return pool.generateState(blockNumber);
111
+ // }
112
+ // async function main() {
113
+ // const apiKey = 'b2f021e3ecdb7de925add6d3563e753e';
114
+ // if (!apiKey) {
115
+ // console.error('Error: THEGRAPH_API_KEY environment variable is required');
116
+ // process.exit(1);
117
+ // }
118
+ // // Step 1: Get pool key (from cache or subgraph)
119
+ // let poolKey = loadPoolKeyFromCache();
120
+ // if (poolKey) {
121
+ // console.log('Loaded pool key from cache:', POOL_KEY_CACHE_FILE);
122
+ // } else {
123
+ // console.log(`Fetching pool key for ${POOL_ID} from subgraph...`);
124
+ // poolKey = await fetchPoolKey(apiKey);
125
+ // savePoolKeyToCache(poolKey);
126
+ // console.log('Pool key cached to:', POOL_KEY_CACHE_FILE);
127
+ // }
128
+ // console.log(poolKey);
129
+ // // Step 2: Get latest block number and generate state
130
+ // const dexHelper = new DummyDexHelper(CHAIN_ID);
131
+ // const latestBlock = await dexHelper.provider.getBlockNumber();
132
+ // console.log(`\nGenerating state at block ${latestBlock}...`);
133
+ // const state = await generatePoolState(poolKey, latestBlock);
134
+ // saveState(state, latestBlock);
135
+ // }
136
+ // main().catch(err => {
137
+ // console.error('Error:', err.message);
138
+ // process.exit(1);
139
+ // });
140
+ //# sourceMappingURL=fetch-pool-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-pool-key.js","sourceRoot":"","sources":["../../../../src/dex/uniswap-v4/api-go/fetch-pool-key.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,mBAAmB;AAEnB,6BAA6B;AAC7B,uBAAuB;AACvB,2BAA2B;AAC3B,+CAA+C;AAC/C,gDAAgD;AAChD,sDAAsD;AACtD,wDAAwD;AACxD,wCAAwC;AAExC,kBAAkB;AAClB,0EAA0E;AAE1E,oCAAoC;AACpC,+BAA+B;AAC/B,qDAAqD;AACrD,0CAA0C;AAE1C,2EAA2E;AAE3E,sBAAsB;AACtB,gBAAgB;AAChB,4BAA4B;AAC5B,4BAA4B;AAC5B,qBAAqB;AACrB,yBAAyB;AACzB,mBAAmB;AACnB,IAAI;AAEJ,+DAA+D;AAE/D,8BAA8B;AAC9B,oCAAoC;AACpC,oCAAoC;AACpC,IAAI;AAEJ,uCAAuC;AACvC,UAAU;AACV,iEAAiE;AACjE,8CAA8C;AAC9C,cAAc;AACd,iBAAiB;AACjB,MAAM;AACN,IAAI;AAEJ,oDAAoD;AACpD,+BAA+B;AAC/B,+CAA+C;AAC/C,IAAI;AAEJ,qDAAqD;AACrD,+BAA+B;AAC/B,4BAA4B;AAC5B,4BAA4B;AAC5B,MAAM;AACN,qCAAqC;AACrC,2EAA2E;AAC3E,IAAI;AAEJ,kEAAkE;AAClE,2GAA2G;AAE3G,qBAAqB;AACrB,6BAA6B;AAC7B,SAAS;AACT,eAAe;AACf,WAAW;AACX,QAAQ;AACR,eAAe;AACf,WAAW;AACX,QAAQ;AACR,cAAc;AACd,kBAAkB;AAClB,YAAY;AACZ,MAAM;AACN,MAAM;AAEN,oDAAoD;AACpD,WAAW;AACX,iBAAiB;AACjB,2BAA2B;AAC3B,OAAO;AAEP,oCAAoC;AACpC,yEAAyE;AACzE,MAAM;AAEN,gCAAgC;AAChC,oDAAoD;AACpD,MAAM;AAEN,gCAAgC;AAChC,IAAI;AAEJ,mEAAmE;AACnE,iEAAiE;AACjE,IAAI;AAEJ,oEAAoE;AACpE,mEAAmE;AACnE,qDAAqD;AACrD,0EAA0E;AAC1E,8CAA8C;AAC9C,IAAI;AAEJ,oCAAoC;AACpC,sBAAsB;AACtB,yBAAyB;AACzB,0BAA0B;AAC1B,oDAAoD;AACpD,iDAAiD;AAEjD,oCAAoC;AACpC,iBAAiB;AACjB,eAAe;AACf,gBAAgB;AAChB,cAAc;AACd,cAAc;AACd,UAAU;AACV,eAAe;AACf,uCAAuC;AACvC,uCAAuC;AACvC,uBAAuB;AACvB,qBAAqB;AACrB,2BAA2B;AAC3B,OAAO;AAEP,4CAA4C;AAC5C,IAAI;AAEJ,0BAA0B;AAC1B,uDAAuD;AACvD,mBAAmB;AACnB,iFAAiF;AACjF,uBAAuB;AACvB,MAAM;AAEN,qDAAqD;AACrD,0CAA0C;AAC1C,mBAAmB;AACnB,uEAAuE;AACvE,aAAa;AACb,wEAAwE;AACxE,4CAA4C;AAC5C,mCAAmC;AACnC,+DAA+D;AAC/D,MAAM;AACN,0BAA0B;AAE1B,0DAA0D;AAC1D,oDAAoD;AACpD,mEAAmE;AACnE,kEAAkE;AAElE,iEAAiE;AACjE,mCAAmC;AACnC,IAAI;AAEJ,wBAAwB;AACxB,0CAA0C;AAC1C,qBAAqB;AACrB,MAAM"}