@synthra-swap/smart-order-router 3.15.33 → 3.16.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 (291) hide show
  1. package/README.md +21 -21
  2. package/build/main/providers/caching/route/model/cached-route.d.ts +5 -5
  3. package/build/main/providers/caching/route/model/cached-routes.d.ts +5 -5
  4. package/build/main/providers/caching/route/model/cached-routes.js +1 -1
  5. package/build/main/providers/caching/route/route-caching-provider.d.ts +2 -2
  6. package/build/main/providers/caching/route/route-caching-provider.js +3 -3
  7. package/build/main/providers/caching-gas-provider.d.ts +1 -1
  8. package/build/main/providers/caching-token-list-provider.d.ts +2 -2
  9. package/build/main/providers/caching-token-list-provider.js +3 -3
  10. package/build/main/providers/caching-token-provider.d.ts +1 -1
  11. package/build/main/providers/caching-token-provider.js +34 -34
  12. package/build/main/providers/eth-estimate-gas-provider.d.ts +2 -4
  13. package/build/main/providers/eth-estimate-gas-provider.js +4 -5
  14. package/build/main/providers/index.d.ts +1 -10
  15. package/build/main/providers/index.js +2 -11
  16. package/build/main/providers/multicall-uniswap-provider.d.ts +1 -1
  17. package/build/main/providers/multicall-uniswap-provider.js +2 -2
  18. package/build/main/providers/on-chain-gas-price-provider.d.ts +1 -1
  19. package/build/main/providers/on-chain-gas-price-provider.js +5 -5
  20. package/build/main/providers/on-chain-quote-provider.d.ts +11 -19
  21. package/build/main/providers/on-chain-quote-provider.js +18 -39
  22. package/build/main/providers/simulation-provider.d.ts +1 -1
  23. package/build/main/providers/simulation-provider.js +6 -6
  24. package/build/main/providers/swap-router-provider.d.ts +2 -2
  25. package/build/main/providers/tenderly-simulation-provider.d.ts +2 -4
  26. package/build/main/providers/tenderly-simulation-provider.js +13 -14
  27. package/build/main/providers/token-provider.d.ts +1 -1
  28. package/build/main/providers/token-provider.js +112 -112
  29. package/build/main/providers/token-validator-provider.d.ts +1 -1
  30. package/build/main/providers/uri-subgraph-provider.d.ts +3 -5
  31. package/build/main/providers/uri-subgraph-provider.js +2 -3
  32. package/build/main/providers/v3/caching-pool-provider.d.ts +2 -2
  33. package/build/main/providers/v3/caching-subgraph-provider.d.ts +1 -1
  34. package/build/main/providers/v3/gas-data-provider.d.ts +1 -1
  35. package/build/main/providers/v3/gas-data-provider.js +3 -3
  36. package/build/main/providers/v3/pool-provider.d.ts +2 -2
  37. package/build/main/providers/v3/pool-provider.js +15 -7
  38. package/build/main/providers/v3/static-subgraph-provider.d.ts +1 -1
  39. package/build/main/providers/v3/static-subgraph-provider.js +48 -47
  40. package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +1 -1
  41. package/build/main/providers/v3/subgraph-provider.d.ts +1 -3
  42. package/build/main/providers/v3/subgraph-provider.js +12 -14
  43. package/build/main/routers/alpha-router/alpha-router.d.ts +17 -54
  44. package/build/main/routers/alpha-router/alpha-router.js +92 -170
  45. package/build/main/routers/alpha-router/config.d.ts +1 -2
  46. package/build/main/routers/alpha-router/config.js +11 -39
  47. package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +5 -93
  48. package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +5 -93
  49. package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +1 -1
  50. package/build/main/routers/alpha-router/functions/best-swap-route.js +12 -39
  51. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +1 -1
  52. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js +3 -3
  53. package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +4 -7
  54. package/build/main/routers/alpha-router/functions/compute-all-routes.js +2 -28
  55. package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +3 -39
  56. package/build/main/routers/alpha-router/functions/get-candidate-pools.js +28 -433
  57. package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +8 -29
  58. package/build/main/routers/alpha-router/gas-models/gas-model.js +28 -39
  59. package/build/main/routers/alpha-router/gas-models/v3/gas-costs.d.ts +1 -1
  60. package/build/main/routers/alpha-router/gas-models/v3/gas-costs.js +75 -69
  61. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +1 -1
  62. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +41 -42
  63. package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +5 -6
  64. package/build/main/routers/alpha-router/quoters/base-quoter.js +1 -1
  65. package/build/main/routers/alpha-router/quoters/index.d.ts +1 -3
  66. package/build/main/routers/alpha-router/quoters/index.js +2 -4
  67. package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +2 -2
  68. package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +1 -1
  69. package/build/main/routers/alpha-router/quoters/v3-quoter.js +3 -3
  70. package/build/main/routers/index.d.ts +1 -1
  71. package/build/main/routers/index.js +2 -2
  72. package/build/main/routers/router.d.ts +4 -11
  73. package/build/main/routers/router.js +5 -20
  74. package/build/main/routers/synthra-router/config.d.ts +5 -0
  75. package/build/main/routers/synthra-router/config.js +30 -0
  76. package/build/main/routers/synthra-router/index.d.ts +3 -0
  77. package/build/main/routers/{legacy-router → synthra-router}/index.js +4 -2
  78. package/build/main/routers/synthra-router/synthra-router.d.ts +31 -0
  79. package/build/main/routers/synthra-router/synthra-router.js +437 -0
  80. package/build/main/routers/synthra-router/types.d.ts +158 -0
  81. package/build/main/routers/synthra-router/types.js +3 -0
  82. package/build/main/tsconfig.tsbuildinfo +1 -1
  83. package/build/main/types/v3/factories/{IUniswapV3PoolState__factory.d.ts → ISynthraV3PoolState__factory.d.ts} +4 -4
  84. package/build/main/types/v3/factories/{IUniswapV3PoolState__factory.js → ISynthraV3PoolState__factory.js} +5 -5
  85. package/build/main/types/v3/factories/{UniswapInterfaceMulticall__factory.d.ts → SynthraInterfaceMulticall__factory.d.ts} +7 -7
  86. package/build/main/types/v3/factories/{UniswapInterfaceMulticall__factory.js → SynthraInterfaceMulticall__factory.js} +8 -8
  87. package/build/main/util/addresses.d.ts +1 -4
  88. package/build/main/util/addresses.js +29 -53
  89. package/build/main/util/amounts.d.ts +3 -3
  90. package/build/main/util/amounts.js +12 -12
  91. package/build/main/util/chains.d.ts +2 -31
  92. package/build/main/util/chains.js +83 -511
  93. package/build/main/util/gas-factory-helpers.d.ts +8 -11
  94. package/build/main/util/gas-factory-helpers.js +57 -103
  95. package/build/main/util/index.d.ts +0 -1
  96. package/build/main/util/index.js +1 -2
  97. package/build/main/util/methodParameters.d.ts +2 -2
  98. package/build/main/util/methodParameters.js +10 -57
  99. package/build/main/util/router-sdk.d.ts +21 -0
  100. package/build/main/util/router-sdk.js +24 -0
  101. package/build/main/util/routes.d.ts +4 -5
  102. package/build/main/util/routes.js +9 -19
  103. package/build/main/util/token-list.d.ts +28 -0
  104. package/build/main/util/token-list.js +14 -0
  105. package/build/module/providers/caching/route/model/cached-route.d.ts +5 -5
  106. package/build/module/providers/caching/route/model/cached-routes.d.ts +5 -5
  107. package/build/module/providers/caching/route/model/cached-routes.js +1 -1
  108. package/build/module/providers/caching/route/route-caching-provider.d.ts +2 -2
  109. package/build/module/providers/caching/route/route-caching-provider.js +1 -1
  110. package/build/module/providers/caching-gas-provider.d.ts +1 -1
  111. package/build/module/providers/caching-token-list-provider.d.ts +2 -2
  112. package/build/module/providers/caching-token-list-provider.js +2 -2
  113. package/build/module/providers/caching-token-provider.d.ts +1 -1
  114. package/build/module/providers/caching-token-provider.js +1 -1
  115. package/build/module/providers/eth-estimate-gas-provider.d.ts +2 -4
  116. package/build/module/providers/eth-estimate-gas-provider.js +4 -5
  117. package/build/module/providers/index.d.ts +1 -10
  118. package/build/module/providers/index.js +2 -11
  119. package/build/module/providers/multicall-uniswap-provider.d.ts +1 -1
  120. package/build/module/providers/multicall-uniswap-provider.js +2 -2
  121. package/build/module/providers/on-chain-gas-price-provider.d.ts +1 -1
  122. package/build/module/providers/on-chain-gas-price-provider.js +1 -1
  123. package/build/module/providers/on-chain-quote-provider.d.ts +11 -19
  124. package/build/module/providers/on-chain-quote-provider.js +17 -38
  125. package/build/module/providers/simulation-provider.d.ts +1 -1
  126. package/build/module/providers/simulation-provider.js +3 -3
  127. package/build/module/providers/swap-router-provider.d.ts +2 -2
  128. package/build/module/providers/tenderly-simulation-provider.d.ts +2 -4
  129. package/build/module/providers/tenderly-simulation-provider.js +6 -7
  130. package/build/module/providers/token-provider.d.ts +1 -1
  131. package/build/module/providers/token-provider.js +3 -3
  132. package/build/module/providers/token-validator-provider.d.ts +1 -1
  133. package/build/module/providers/uri-subgraph-provider.d.ts +3 -5
  134. package/build/module/providers/uri-subgraph-provider.js +2 -3
  135. package/build/module/providers/v3/caching-pool-provider.d.ts +2 -2
  136. package/build/module/providers/v3/caching-subgraph-provider.d.ts +1 -1
  137. package/build/module/providers/v3/gas-data-provider.d.ts +1 -1
  138. package/build/module/providers/v3/gas-data-provider.js +1 -1
  139. package/build/module/providers/v3/pool-provider.d.ts +2 -2
  140. package/build/module/providers/v3/pool-provider.js +13 -5
  141. package/build/module/providers/v3/static-subgraph-provider.d.ts +1 -1
  142. package/build/module/providers/v3/static-subgraph-provider.js +5 -4
  143. package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +1 -1
  144. package/build/module/providers/v3/subgraph-provider.d.ts +1 -3
  145. package/build/module/providers/v3/subgraph-provider.js +2 -3
  146. package/build/module/routers/alpha-router/alpha-router.d.ts +17 -54
  147. package/build/module/routers/alpha-router/alpha-router.js +74 -145
  148. package/build/module/routers/alpha-router/config.d.ts +1 -2
  149. package/build/module/routers/alpha-router/config.js +2 -30
  150. package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +5 -93
  151. package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +3 -89
  152. package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +1 -1
  153. package/build/module/routers/alpha-router/functions/best-swap-route.js +8 -35
  154. package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +1 -1
  155. package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.js +1 -1
  156. package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +4 -7
  157. package/build/module/routers/alpha-router/functions/compute-all-routes.js +2 -26
  158. package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +3 -39
  159. package/build/module/routers/alpha-router/functions/get-candidate-pools.js +5 -418
  160. package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +8 -29
  161. package/build/module/routers/alpha-router/gas-models/gas-model.js +7 -18
  162. package/build/module/routers/alpha-router/gas-models/v3/gas-costs.d.ts +1 -1
  163. package/build/module/routers/alpha-router/gas-models/v3/gas-costs.js +8 -2
  164. package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +1 -1
  165. package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +27 -28
  166. package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +5 -6
  167. package/build/module/routers/alpha-router/quoters/base-quoter.js +1 -1
  168. package/build/module/routers/alpha-router/quoters/index.d.ts +1 -3
  169. package/build/module/routers/alpha-router/quoters/index.js +2 -4
  170. package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +2 -2
  171. package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +1 -1
  172. package/build/module/routers/alpha-router/quoters/v3-quoter.js +1 -1
  173. package/build/module/routers/index.d.ts +1 -1
  174. package/build/module/routers/index.js +2 -2
  175. package/build/module/routers/router.d.ts +4 -11
  176. package/build/module/routers/router.js +3 -16
  177. package/build/module/routers/synthra-router/config.d.ts +5 -0
  178. package/build/module/routers/synthra-router/config.js +27 -0
  179. package/build/module/routers/synthra-router/index.d.ts +3 -0
  180. package/build/module/routers/synthra-router/index.js +4 -0
  181. package/build/module/routers/synthra-router/synthra-router.d.ts +31 -0
  182. package/build/module/routers/synthra-router/synthra-router.js +447 -0
  183. package/build/module/routers/synthra-router/types.d.ts +158 -0
  184. package/build/module/routers/synthra-router/types.js +2 -0
  185. package/build/module/tsconfig.module.tsbuildinfo +1 -1
  186. package/build/module/types/v3/factories/{IUniswapV3PoolState__factory.d.ts → ISynthraV3PoolState__factory.d.ts} +4 -4
  187. package/build/module/types/v3/factories/{IUniswapV3PoolState__factory.js → ISynthraV3PoolState__factory.js} +3 -3
  188. package/build/module/types/v3/factories/{UniswapInterfaceMulticall__factory.d.ts → SynthraInterfaceMulticall__factory.d.ts} +7 -7
  189. package/build/module/types/v3/factories/{UniswapInterfaceMulticall__factory.js → SynthraInterfaceMulticall__factory.js} +6 -6
  190. package/build/module/util/addresses.d.ts +1 -4
  191. package/build/module/util/addresses.js +7 -82
  192. package/build/module/util/amounts.d.ts +3 -3
  193. package/build/module/util/amounts.js +3 -3
  194. package/build/module/util/chains.d.ts +2 -31
  195. package/build/module/util/chains.js +3 -435
  196. package/build/module/util/gas-factory-helpers.d.ts +8 -11
  197. package/build/module/util/gas-factory-helpers.js +31 -76
  198. package/build/module/util/index.d.ts +0 -1
  199. package/build/module/util/index.js +1 -2
  200. package/build/module/util/methodParameters.d.ts +2 -2
  201. package/build/module/util/methodParameters.js +7 -54
  202. package/build/module/util/router-sdk.d.ts +21 -0
  203. package/build/module/util/router-sdk.js +19 -0
  204. package/build/module/util/routes.d.ts +4 -5
  205. package/build/module/util/routes.js +8 -18
  206. package/build/module/util/token-list.d.ts +28 -0
  207. package/build/module/util/token-list.js +11 -0
  208. package/package.json +13 -26
  209. package/build/main/providers/eth-gas-station-info-gas-price-provider.d.ts +0 -19
  210. package/build/main/providers/eth-gas-station-info-gas-price-provider.js +0 -37
  211. package/build/main/providers/v2/caching-pool-provider.d.ts +0 -33
  212. package/build/main/providers/v2/caching-pool-provider.js +0 -88
  213. package/build/main/providers/v2/caching-subgraph-provider.d.ts +0 -23
  214. package/build/main/providers/v2/caching-subgraph-provider.js +0 -34
  215. package/build/main/providers/v2/pool-provider.d.ts +0 -59
  216. package/build/main/providers/v2/pool-provider.js +0 -111
  217. package/build/main/providers/v2/quote-provider.d.ts +0 -33
  218. package/build/main/providers/v2/quote-provider.js +0 -91
  219. package/build/main/providers/v2/static-subgraph-provider.d.ts +0 -19
  220. package/build/main/providers/v2/static-subgraph-provider.js +0 -97
  221. package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +0 -19
  222. package/build/main/providers/v2/subgraph-provider-with-fallback.js +0 -35
  223. package/build/main/providers/v2/subgraph-provider.d.ts +0 -33
  224. package/build/main/providers/v2/subgraph-provider.js +0 -134
  225. package/build/main/providers/v2/uri-subgraph-provider.d.ts +0 -4
  226. package/build/main/providers/v2/uri-subgraph-provider.js +0 -8
  227. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +0 -25
  228. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +0 -175
  229. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +0 -29
  230. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +0 -167
  231. package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +0 -20
  232. package/build/main/routers/alpha-router/quoters/mixed-quoter.js +0 -130
  233. package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +0 -21
  234. package/build/main/routers/alpha-router/quoters/v2-quoter.js +0 -122
  235. package/build/main/routers/legacy-router/bases.d.ts +0 -183
  236. package/build/main/routers/legacy-router/bases.js +0 -81
  237. package/build/main/routers/legacy-router/index.d.ts +0 -1
  238. package/build/main/routers/legacy-router/legacy-router.d.ts +0 -41
  239. package/build/main/routers/legacy-router/legacy-router.js +0 -289
  240. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +0 -41
  241. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js +0 -156
  242. package/build/main/types/v2/commons.d.ts +0 -16
  243. package/build/main/types/v2/commons.js +0 -6
  244. package/build/main/types/v2/factories/IUniswapV2Pair__factory.d.ts +0 -35
  245. package/build/main/types/v2/factories/IUniswapV2Pair__factory.js +0 -671
  246. package/build/main/util/protocols.d.ts +0 -2
  247. package/build/main/util/protocols.js +0 -18
  248. package/build/main/util/unsupported-tokens.d.ts +0 -37
  249. package/build/main/util/unsupported-tokens.js +0 -1119
  250. package/build/module/providers/eth-gas-station-info-gas-price-provider.d.ts +0 -19
  251. package/build/module/providers/eth-gas-station-info-gas-price-provider.js +0 -30
  252. package/build/module/providers/v2/caching-pool-provider.d.ts +0 -33
  253. package/build/module/providers/v2/caching-pool-provider.js +0 -81
  254. package/build/module/providers/v2/caching-subgraph-provider.d.ts +0 -23
  255. package/build/module/providers/v2/caching-subgraph-provider.js +0 -30
  256. package/build/module/providers/v2/pool-provider.d.ts +0 -59
  257. package/build/module/providers/v2/pool-provider.js +0 -104
  258. package/build/module/providers/v2/quote-provider.d.ts +0 -33
  259. package/build/module/providers/v2/quote-provider.js +0 -87
  260. package/build/module/providers/v2/static-subgraph-provider.d.ts +0 -19
  261. package/build/module/providers/v2/static-subgraph-provider.js +0 -90
  262. package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +0 -19
  263. package/build/module/providers/v2/subgraph-provider-with-fallback.js +0 -31
  264. package/build/module/providers/v2/subgraph-provider.d.ts +0 -33
  265. package/build/module/providers/v2/subgraph-provider.js +0 -135
  266. package/build/module/providers/v2/uri-subgraph-provider.d.ts +0 -4
  267. package/build/module/providers/v2/uri-subgraph-provider.js +0 -4
  268. package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +0 -25
  269. package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +0 -168
  270. package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +0 -29
  271. package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +0 -160
  272. package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +0 -20
  273. package/build/module/routers/alpha-router/quoters/mixed-quoter.js +0 -123
  274. package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +0 -21
  275. package/build/module/routers/alpha-router/quoters/v2-quoter.js +0 -115
  276. package/build/module/routers/legacy-router/bases.d.ts +0 -183
  277. package/build/module/routers/legacy-router/bases.js +0 -87
  278. package/build/module/routers/legacy-router/index.d.ts +0 -1
  279. package/build/module/routers/legacy-router/index.js +0 -2
  280. package/build/module/routers/legacy-router/legacy-router.d.ts +0 -41
  281. package/build/module/routers/legacy-router/legacy-router.js +0 -290
  282. package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +0 -41
  283. package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.js +0 -152
  284. package/build/module/types/v2/commons.d.ts +0 -16
  285. package/build/module/types/v2/commons.js +0 -5
  286. package/build/module/types/v2/factories/IUniswapV2Pair__factory.d.ts +0 -35
  287. package/build/module/types/v2/factories/IUniswapV2Pair__factory.js +0 -667
  288. package/build/module/util/protocols.d.ts +0 -2
  289. package/build/module/util/protocols.js +0 -14
  290. package/build/module/util/unsupported-tokens.d.ts +0 -37
  291. package/build/module/util/unsupported-tokens.js +0 -1116
@@ -1,183 +0,0 @@
1
- import { ChainId, Token } from '@synthra-swap/sdk-core';
2
- import { ITokenProvider } from '../../providers/token-provider';
3
- declare type ChainTokenList = {
4
- readonly [chainId in ChainId]: Token[];
5
- };
6
- export declare const BASES_TO_CHECK_TRADES_AGAINST: (_tokenProvider: ITokenProvider) => ChainTokenList;
7
- export declare const ADDITIONAL_BASES: (tokenProvider: ITokenProvider) => Promise<{
8
- 1?: {
9
- [tokenAddress: string]: Token[];
10
- } | undefined;
11
- 5?: {
12
- [tokenAddress: string]: Token[];
13
- } | undefined;
14
- 11155111?: {
15
- [tokenAddress: string]: Token[];
16
- } | undefined;
17
- 10?: {
18
- [tokenAddress: string]: Token[];
19
- } | undefined;
20
- 420?: {
21
- [tokenAddress: string]: Token[];
22
- } | undefined;
23
- 11155420?: {
24
- [tokenAddress: string]: Token[];
25
- } | undefined;
26
- 42161?: {
27
- [tokenAddress: string]: Token[];
28
- } | undefined;
29
- 421613?: {
30
- [tokenAddress: string]: Token[];
31
- } | undefined;
32
- 421614?: {
33
- [tokenAddress: string]: Token[];
34
- } | undefined;
35
- 137?: {
36
- [tokenAddress: string]: Token[];
37
- } | undefined;
38
- 80001?: {
39
- [tokenAddress: string]: Token[];
40
- } | undefined;
41
- 42220?: {
42
- [tokenAddress: string]: Token[];
43
- } | undefined;
44
- 44787?: {
45
- [tokenAddress: string]: Token[];
46
- } | undefined;
47
- 100?: {
48
- [tokenAddress: string]: Token[];
49
- } | undefined;
50
- 1284?: {
51
- [tokenAddress: string]: Token[];
52
- } | undefined;
53
- 56?: {
54
- [tokenAddress: string]: Token[];
55
- } | undefined;
56
- 43114?: {
57
- [tokenAddress: string]: Token[];
58
- } | undefined;
59
- 84531?: {
60
- [tokenAddress: string]: Token[];
61
- } | undefined;
62
- 8453?: {
63
- [tokenAddress: string]: Token[];
64
- } | undefined;
65
- 7777777?: {
66
- [tokenAddress: string]: Token[];
67
- } | undefined;
68
- 999999999?: {
69
- [tokenAddress: string]: Token[];
70
- } | undefined;
71
- 30?: {
72
- [tokenAddress: string]: Token[];
73
- } | undefined;
74
- 81457?: {
75
- [tokenAddress: string]: Token[];
76
- } | undefined;
77
- 4386?: {
78
- [tokenAddress: string]: Token[];
79
- } | undefined;
80
- 1270?: {
81
- [tokenAddress: string]: Token[];
82
- } | undefined;
83
- 42000?: {
84
- [tokenAddress: string]: Token[];
85
- } | undefined;
86
- 5042002?: {
87
- [tokenAddress: string]: Token[];
88
- } | undefined;
89
- 46630?: {
90
- [tokenAddress: string]: Token[];
91
- } | undefined;
92
- }>;
93
- /**
94
- * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these
95
- * tokens.
96
- */
97
- export declare const CUSTOM_BASES: (tokenProvider: ITokenProvider) => Promise<{
98
- 1?: {
99
- [tokenAddress: string]: Token[];
100
- } | undefined;
101
- 5?: {
102
- [tokenAddress: string]: Token[];
103
- } | undefined;
104
- 11155111?: {
105
- [tokenAddress: string]: Token[];
106
- } | undefined;
107
- 10?: {
108
- [tokenAddress: string]: Token[];
109
- } | undefined;
110
- 420?: {
111
- [tokenAddress: string]: Token[];
112
- } | undefined;
113
- 11155420?: {
114
- [tokenAddress: string]: Token[];
115
- } | undefined;
116
- 42161?: {
117
- [tokenAddress: string]: Token[];
118
- } | undefined;
119
- 421613?: {
120
- [tokenAddress: string]: Token[];
121
- } | undefined;
122
- 421614?: {
123
- [tokenAddress: string]: Token[];
124
- } | undefined;
125
- 137?: {
126
- [tokenAddress: string]: Token[];
127
- } | undefined;
128
- 80001?: {
129
- [tokenAddress: string]: Token[];
130
- } | undefined;
131
- 42220?: {
132
- [tokenAddress: string]: Token[];
133
- } | undefined;
134
- 44787?: {
135
- [tokenAddress: string]: Token[];
136
- } | undefined;
137
- 100?: {
138
- [tokenAddress: string]: Token[];
139
- } | undefined;
140
- 1284?: {
141
- [tokenAddress: string]: Token[];
142
- } | undefined;
143
- 56?: {
144
- [tokenAddress: string]: Token[];
145
- } | undefined;
146
- 43114?: {
147
- [tokenAddress: string]: Token[];
148
- } | undefined;
149
- 84531?: {
150
- [tokenAddress: string]: Token[];
151
- } | undefined;
152
- 8453?: {
153
- [tokenAddress: string]: Token[];
154
- } | undefined;
155
- 7777777?: {
156
- [tokenAddress: string]: Token[];
157
- } | undefined;
158
- 999999999?: {
159
- [tokenAddress: string]: Token[];
160
- } | undefined;
161
- 30?: {
162
- [tokenAddress: string]: Token[];
163
- } | undefined;
164
- 81457?: {
165
- [tokenAddress: string]: Token[];
166
- } | undefined;
167
- 4386?: {
168
- [tokenAddress: string]: Token[];
169
- } | undefined;
170
- 1270?: {
171
- [tokenAddress: string]: Token[];
172
- } | undefined;
173
- 42000?: {
174
- [tokenAddress: string]: Token[];
175
- } | undefined;
176
- 5042002?: {
177
- [tokenAddress: string]: Token[];
178
- } | undefined;
179
- 46630?: {
180
- [tokenAddress: string]: Token[];
181
- } | undefined;
182
- }>;
183
- export {};
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CUSTOM_BASES = exports.ADDITIONAL_BASES = exports.BASES_TO_CHECK_TRADES_AGAINST = void 0;
4
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
5
- const sdk_core_1 = require("@synthra-swap/sdk-core");
6
- const token_provider_1 = require("../../providers/token-provider");
7
- const chains_1 = require("../../util/chains");
8
- const BASES_TO_CHECK_TRADES_AGAINST = (_tokenProvider) => {
9
- return {
10
- [sdk_core_1.ChainId.MAINNET]: [
11
- chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.MAINNET],
12
- token_provider_1.DAI_MAINNET,
13
- token_provider_1.USDC_MAINNET,
14
- token_provider_1.USDT_MAINNET,
15
- token_provider_1.WBTC_MAINNET,
16
- ],
17
- [sdk_core_1.ChainId.GOERLI]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.GOERLI]],
18
- [sdk_core_1.ChainId.SEPOLIA]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.SEPOLIA]],
19
- [sdk_core_1.ChainId.OPTIMISM]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.OPTIMISM]],
20
- [sdk_core_1.ChainId.OPTIMISM_GOERLI]: [
21
- chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.OPTIMISM_GOERLI],
22
- ],
23
- [sdk_core_1.ChainId.ARBITRUM_ONE]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.ARBITRUM_ONE]],
24
- [sdk_core_1.ChainId.ARBITRUM_GOERLI]: [
25
- chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.ARBITRUM_GOERLI],
26
- ],
27
- [sdk_core_1.ChainId.POLYGON]: [token_provider_1.WMATIC_POLYGON],
28
- [sdk_core_1.ChainId.POLYGON_MUMBAI]: [token_provider_1.WMATIC_POLYGON_MUMBAI],
29
- [sdk_core_1.ChainId.CELO]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.CELO]],
30
- [sdk_core_1.ChainId.CELO_ALFAJORES]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.CELO_ALFAJORES]],
31
- [sdk_core_1.ChainId.GNOSIS]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.GNOSIS]],
32
- [sdk_core_1.ChainId.MOONBEAM]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.MOONBEAM]],
33
- [sdk_core_1.ChainId.BNB]: [
34
- chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.BNB],
35
- token_provider_1.BUSD_BNB,
36
- token_provider_1.DAI_BNB,
37
- token_provider_1.USDC_BNB,
38
- token_provider_1.USDT_BNB,
39
- token_provider_1.BTC_BNB,
40
- ],
41
- [sdk_core_1.ChainId.AVALANCHE]: [
42
- chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.AVALANCHE],
43
- token_provider_1.USDC_AVAX,
44
- token_provider_1.DAI_AVAX,
45
- ],
46
- [sdk_core_1.ChainId.BASE]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.BASE], token_provider_1.USDC_BASE],
47
- [sdk_core_1.ChainId.BASE_GOERLI]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.BASE_GOERLI]],
48
- [sdk_core_1.ChainId.UOMI]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.UOMI], token_provider_1.USDC_UOMI],
49
- [sdk_core_1.ChainId.IRYS]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.IRYS], token_provider_1.USDC_IRYS],
50
- [sdk_core_1.ChainId.HELIOS]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.HELIOS], token_provider_1.USDC_HELIOS],
51
- [sdk_core_1.ChainId.ARC]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.ARC], token_provider_1.USDT_ARC],
52
- [sdk_core_1.ChainId.ROBINHOOD]: [chains_1.WRAPPED_NATIVE_CURRENCY[sdk_core_1.ChainId.ROBINHOOD], token_provider_1.USDC_ROBINHOOD],
53
- };
54
- };
55
- exports.BASES_TO_CHECK_TRADES_AGAINST = BASES_TO_CHECK_TRADES_AGAINST;
56
- const getBasePairByAddress = async (tokenProvider, _chainId, fromAddress, toAddress) => {
57
- const accessor = await tokenProvider.getTokens([toAddress]);
58
- const toToken = accessor.getTokenByAddress(toAddress);
59
- if (!toToken)
60
- return {};
61
- return {
62
- [fromAddress]: [toToken],
63
- };
64
- };
65
- const ADDITIONAL_BASES = async (tokenProvider) => {
66
- return {
67
- [sdk_core_1.ChainId.MAINNET]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0xA948E86885e12Fb09AfEF8C52142EBDbDf73cD18', '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'))), (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0x561a4717537ff4AF5c687328c0f7E90a319705C0', '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'))), (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B'))), (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B', '0x956F47F50A910163D8BF957Cf5846D573E7f87CA'))), (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0x853d955acef822db058eb8505911ed77f175b99e', '0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0'))), (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0', '0x853d955acef822db058eb8505911ed77f175b99e'))), (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', '0xeb4c2781e4eba804ce9a9803c67d0893436bb27d'))), (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0xeb4c2781e4eba804ce9a9803c67d0893436bb27d', '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599'))),
68
- };
69
- };
70
- exports.ADDITIONAL_BASES = ADDITIONAL_BASES;
71
- /**
72
- * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these
73
- * tokens.
74
- */
75
- const CUSTOM_BASES = async (tokenProvider) => {
76
- return {
77
- [sdk_core_1.ChainId.MAINNET]: Object.assign(Object.assign({}, (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0xd46ba6d942050d489dbd938a2c909a5d5039a161', token_provider_1.DAI_MAINNET.address))), (await getBasePairByAddress(tokenProvider, sdk_core_1.ChainId.MAINNET, '0xd46ba6d942050d489dbd938a2c909a5d5039a161', chains_1.WRAPPED_NATIVE_CURRENCY[1].address))),
78
- };
79
- };
80
- exports.CUSTOM_BASES = CUSTOM_BASES;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcm91dGVycy9sZWdhY3ktcm91dGVyL2Jhc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUE2RDtBQUM3RCxxREFBd0Q7QUFFeEQsbUVBcUJ3QztBQUN4Qyw4Q0FBNEQ7QUFNckQsTUFBTSw2QkFBNkIsR0FBRyxDQUMzQyxjQUE4QixFQUNkLEVBQUU7SUFDbEIsT0FBTztRQUNMLENBQUMsa0JBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNqQixnQ0FBdUIsQ0FBQyxrQkFBTyxDQUFDLE9BQU8sQ0FBRTtZQUN6Qyw0QkFBVztZQUNYLDZCQUFZO1lBQ1osNkJBQVk7WUFDWiw2QkFBWTtTQUNiO1FBQ0QsQ0FBQyxrQkFBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0NBQXVCLENBQUMsa0JBQU8sQ0FBQyxNQUFNLENBQUUsQ0FBQztRQUM1RCxDQUFDLGtCQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxnQ0FBdUIsQ0FBQyxrQkFBTyxDQUFDLE9BQU8sQ0FBRSxDQUFDO1FBQzlELENBQUMsa0JBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdDQUF1QixDQUFDLGtCQUFPLENBQUMsUUFBUSxDQUFFLENBQUM7UUFDaEUsQ0FBQyxrQkFBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ3pCLGdDQUF1QixDQUFDLGtCQUFPLENBQUMsZUFBZSxDQUFFO1NBQ2xEO1FBQ0QsQ0FBQyxrQkFBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsZ0NBQXVCLENBQUMsa0JBQU8sQ0FBQyxZQUFZLENBQUUsQ0FBQztRQUN4RSxDQUFDLGtCQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDekIsZ0NBQXVCLENBQUMsa0JBQU8sQ0FBQyxlQUFlLENBQUU7U0FDbEQ7UUFDRCxDQUFDLGtCQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQywrQkFBYyxDQUFD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
@@ -1 +0,0 @@
1
- export * from './legacy-router';
@@ -1,41 +0,0 @@
1
- import { ChainId, Currency, TradeType } from '@synthra-swap/sdk-core';
2
- import { IOnChainQuoteProvider } from '../../providers';
3
- import { IMulticallProvider } from '../../providers/multicall-provider';
4
- import { ITokenProvider } from '../../providers/token-provider';
5
- import { IV3PoolProvider } from '../../providers/v3/pool-provider';
6
- import { CurrencyAmount } from '../../util/amounts';
7
- import { SwapOptionsSwapRouter02, SwapRoute } from '../router';
8
- export declare type LegacyRouterParams = {
9
- chainId: ChainId;
10
- multicall2Provider: IMulticallProvider;
11
- poolProvider: IV3PoolProvider;
12
- quoteProvider: IOnChainQuoteProvider;
13
- tokenProvider: ITokenProvider;
14
- };
15
- export declare type LegacyRoutingConfig = {
16
- blockNumber?: number;
17
- };
18
- /**
19
- * Replicates the router implemented in the V3 interface.
20
- * Code is mostly a copy from https://github.com/Uniswap/uniswap-interface/blob/0190b5a408c13016c87e1030ffc59326c085f389/src/hooks/useBestV3Trade.ts#L22-L23
21
- * with React/Redux hooks removed, and refactoring to allow re-use in other routers.
22
- */
23
- export declare class LegacyRouter {
24
- protected chainId: ChainId;
25
- protected multicall2Provider: IMulticallProvider;
26
- protected poolProvider: IV3PoolProvider;
27
- protected quoteProvider: IOnChainQuoteProvider;
28
- protected tokenProvider: ITokenProvider;
29
- constructor({ chainId, multicall2Provider, poolProvider, quoteProvider, tokenProvider, }: LegacyRouterParams);
30
- route(amount: CurrencyAmount, quoteCurrency: Currency, swapType: TradeType, swapConfig?: SwapOptionsSwapRouter02, partialRoutingConfig?: Partial<LegacyRoutingConfig>): Promise<SwapRoute | null>;
31
- routeExactIn(currencyIn: Currency, currencyOut: Currency, amountIn: CurrencyAmount, swapConfig?: SwapOptionsSwapRouter02, routingConfig?: LegacyRoutingConfig): Promise<SwapRoute | null>;
32
- routeExactOut(currencyIn: Currency, currencyOut: Currency, amountOut: CurrencyAmount, swapConfig?: SwapOptionsSwapRouter02, routingConfig?: LegacyRoutingConfig): Promise<SwapRoute | null>;
33
- private findBestRouteExactIn;
34
- private findBestRouteExactOut;
35
- private getBestQuote;
36
- private getAllRoutes;
37
- private getAllPossiblePairings;
38
- private computeAllRoutes;
39
- private buildTrade;
40
- private buildMethodParameters;
41
- }
@@ -1,289 +0,0 @@
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
- exports.LegacyRouter = void 0;
7
- const bignumber_1 = require("@ethersproject/bignumber");
8
- const logger_1 = require("@ethersproject/logger");
9
- const sdk_core_1 = require("@synthra-swap/sdk-core");
10
- const router_sdk_1 = require("@uniswap/router-sdk");
11
- const v3_sdk_1 = require("@uniswap/v3-sdk");
12
- const lodash_1 = __importDefault(require("lodash"));
13
- const token_provider_1 = require("../../providers/token-provider");
14
- const util_1 = require("../../util");
15
- const amounts_1 = require("../../util/amounts");
16
- const log_1 = require("../../util/log");
17
- const routes_1 = require("../../util/routes");
18
- const alpha_router_1 = require("../alpha-router");
19
- const router_1 = require("../router");
20
- const bases_1 = require("./bases");
21
- // Interface defaults to 2.
22
- const MAX_HOPS = 2;
23
- /**
24
- * Replicates the router implemented in the V3 interface.
25
- * Code is mostly a copy from https://github.com/Uniswap/uniswap-interface/blob/0190b5a408c13016c87e1030ffc59326c085f389/src/hooks/useBestV3Trade.ts#L22-L23
26
- * with React/Redux hooks removed, and refactoring to allow re-use in other routers.
27
- */
28
- class LegacyRouter {
29
- constructor({ chainId, multicall2Provider, poolProvider, quoteProvider, tokenProvider, }) {
30
- this.chainId = chainId;
31
- this.multicall2Provider = multicall2Provider;
32
- this.poolProvider = poolProvider;
33
- this.quoteProvider = quoteProvider;
34
- this.tokenProvider = tokenProvider;
35
- }
36
- async route(amount, quoteCurrency, swapType, swapConfig, partialRoutingConfig) {
37
- if (swapType == sdk_core_1.TradeType.EXACT_INPUT) {
38
- return this.routeExactIn(amount.currency, quoteCurrency, amount, swapConfig, partialRoutingConfig);
39
- }
40
- return this.routeExactOut(quoteCurrency, amount.currency, amount, swapConfig, partialRoutingConfig);
41
- }
42
- async routeExactIn(currencyIn, currencyOut, amountIn, swapConfig, routingConfig) {
43
- const tokenIn = currencyIn.wrapped;
44
- const tokenOut = currencyOut.wrapped;
45
- const routes = await this.getAllRoutes(tokenIn, tokenOut, routingConfig);
46
- const routeQuote = await this.findBestRouteExactIn(amountIn, tokenOut, routes, routingConfig);
47
- if (!routeQuote) {
48
- return null;
49
- }
50
- const trade = this.buildTrade(currencyIn, currencyOut, sdk_core_1.TradeType.EXACT_INPUT, routeQuote);
51
- return {
52
- quote: routeQuote.quote,
53
- quoteGasAdjusted: routeQuote.quote,
54
- route: [routeQuote],
55
- estimatedGasUsed: bignumber_1.BigNumber.from(0),
56
- estimatedGasUsedQuoteToken: amounts_1.CurrencyAmount.fromFractionalAmount(tokenOut, 0, 1),
57
- estimatedGasUsedUSD: amounts_1.CurrencyAmount.fromFractionalAmount(token_provider_1.DAI_MAINNET, 0, 1),
58
- gasPriceWei: bignumber_1.BigNumber.from(0),
59
- trade,
60
- methodParameters: swapConfig
61
- ? Object.assign(Object.assign({}, this.buildMethodParameters(trade, swapConfig)), { to: (0, util_1.SWAP_ROUTER_02_ADDRESSES)(this.chainId) }) : undefined,
62
- blockNumber: bignumber_1.BigNumber.from(0),
63
- };
64
- }
65
- async routeExactOut(currencyIn, currencyOut, amountOut, swapConfig, routingConfig) {
66
- const tokenIn = currencyIn.wrapped;
67
- const tokenOut = currencyOut.wrapped;
68
- const routes = await this.getAllRoutes(tokenIn, tokenOut, routingConfig);
69
- const routeQuote = await this.findBestRouteExactOut(amountOut, tokenIn, routes, routingConfig);
70
- if (!routeQuote) {
71
- return null;
72
- }
73
- const trade = this.buildTrade(currencyIn, currencyOut, sdk_core_1.TradeType.EXACT_OUTPUT, routeQuote);
74
- return {
75
- quote: routeQuote.quote,
76
- quoteGasAdjusted: routeQuote.quote,
77
- route: [routeQuote],
78
- estimatedGasUsed: bignumber_1.BigNumber.from(0),
79
- estimatedGasUsedQuoteToken: amounts_1.CurrencyAmount.fromFractionalAmount(tokenIn, 0, 1),
80
- estimatedGasUsedUSD: amounts_1.CurrencyAmount.fromFractionalAmount(token_provider_1.DAI_MAINNET, 0, 1),
81
- gasPriceWei: bignumber_1.BigNumber.from(0),
82
- trade,
83
- methodParameters: swapConfig
84
- ? Object.assign(Object.assign({}, this.buildMethodParameters(trade, swapConfig)), { to: (0, util_1.SWAP_ROUTER_02_ADDRESSES)(this.chainId) }) : undefined,
85
- blockNumber: bignumber_1.BigNumber.from(0),
86
- };
87
- }
88
- async findBestRouteExactIn(amountIn, tokenOut, routes, routingConfig) {
89
- const { routesWithQuotes: quotesRaw } = await this.quoteProvider.getQuotesManyExactIn([amountIn], routes, {
90
- blockNumber: routingConfig === null || routingConfig === void 0 ? void 0 : routingConfig.blockNumber,
91
- });
92
- const quotes100Percent = lodash_1.default.map(quotesRaw, ([route, quotes]) => { var _a, _b; return `${(0, routes_1.routeToString)(route)} : ${(_b = (_a = quotes[0]) === null || _a === void 0 ? void 0 : _a.quote) === null || _b === void 0 ? void 0 : _b.toString()}`; });
93
- log_1.log.info({ quotes100Percent }, '100% Quotes');
94
- const bestQuote = await this.getBestQuote(routes, quotesRaw, tokenOut, sdk_core_1.TradeType.EXACT_INPUT);
95
- return bestQuote;
96
- }
97
- async findBestRouteExactOut(amountOut, tokenIn, routes, routingConfig) {
98
- const { routesWithQuotes: quotesRaw } = await this.quoteProvider.getQuotesManyExactOut([amountOut], routes, {
99
- blockNumber: routingConfig === null || routingConfig === void 0 ? void 0 : routingConfig.blockNumber,
100
- });
101
- const bestQuote = await this.getBestQuote(routes, quotesRaw, tokenIn, sdk_core_1.TradeType.EXACT_OUTPUT);
102
- return bestQuote;
103
- }
104
- async getBestQuote(routes, quotesRaw, quoteToken, routeType) {
105
- log_1.log.debug(`Got ${lodash_1.default.filter(quotesRaw, ([_, quotes]) => !!quotes[0]).length} valid quotes from ${routes.length} possible routes.`);
106
- const routeQuotesRaw = [];
107
- for (let i = 0; i < quotesRaw.length; i++) {
108
- const [route, quotes] = quotesRaw[i];
109
- const { quote, amount } = quotes[0];
110
- if (!quote) {
111
- logger_1.Logger.globalLogger().debug(`No quote for ${(0, routes_1.routeToString)(route)}`);
112
- continue;
113
- }
114
- routeQuotesRaw.push({ route, quote, amount });
115
- }
116
- if (routeQuotesRaw.length == 0) {
117
- return null;
118
- }
119
- routeQuotesRaw.sort((routeQuoteA, routeQuoteB) => {
120
- if (routeType == sdk_core_1.TradeType.EXACT_INPUT) {
121
- return routeQuoteA.quote.gt(routeQuoteB.quote) ? -1 : 1;
122
- }
123
- else {
124
- return routeQuoteA.quote.lt(routeQuoteB.quote) ? -1 : 1;
125
- }
126
- });
127
- const routeQuotes = lodash_1.default.map(routeQuotesRaw, ({ route, quote, amount }) => {
128
- return new alpha_router_1.V3RouteWithValidQuote({
129
- route,
130
- rawQuote: quote,
131
- amount,
132
- percent: 100,
133
- gasModel: {
134
- estimateGasCost: () => ({
135
- gasCostInToken: amounts_1.CurrencyAmount.fromRawAmount(quoteToken, 0),
136
- gasCostInUSD: amounts_1.CurrencyAmount.fromRawAmount(token_provider_1.USDC_MAINNET, 0),
137
- gasEstimate: bignumber_1.BigNumber.from(0),
138
- }),
139
- },
140
- sqrtPriceX96AfterList: [],
141
- initializedTicksCrossedList: [],
142
- quoterGasEstimate: bignumber_1.BigNumber.from(0),
143
- tradeType: routeType,
144
- quoteToken,
145
- v3PoolProvider: this.poolProvider,
146
- });
147
- });
148
- for (const rq of routeQuotes) {
149
- log_1.log.debug(`Quote: ${rq.amount.toFixed(Math.min(rq.amount.currency.decimals, 2))} Route: ${(0, routes_1.routeToString)(rq.route)}`);
150
- }
151
- return routeQuotes[0];
152
- }
153
- async getAllRoutes(tokenIn, tokenOut, routingConfig) {
154
- const tokenPairs = await this.getAllPossiblePairings(tokenIn, tokenOut);
155
- const poolAccessor = await this.poolProvider.getPools(tokenPairs, {
156
- blockNumber: routingConfig === null || routingConfig === void 0 ? void 0 : routingConfig.blockNumber,
157
- });
158
- const pools = poolAccessor.getAllPools();
159
- const routes = this.computeAllRoutes(tokenIn, tokenOut, pools, this.chainId, [], [], tokenIn, MAX_HOPS);
160
- log_1.log.info({ routes: lodash_1.default.map(routes, routes_1.routeToString) }, `Computed ${routes.length} possible routes.`);
161
- return routes;
162
- }
163
- async getAllPossiblePairings(tokenIn, tokenOut) {
164
- var _a, _b, _c, _d, _e;
165
- const common = (_a = (0, bases_1.BASES_TO_CHECK_TRADES_AGAINST)(this.tokenProvider)[this.chainId]) !== null && _a !== void 0 ? _a : [];
166
- const additionalA = (_c = (_b = (await (0, bases_1.ADDITIONAL_BASES)(this.tokenProvider))[this.chainId]) === null || _b === void 0 ? void 0 : _b[tokenIn.address]) !== null && _c !== void 0 ? _c : [];
167
- const additionalB = (_e = (_d = (await (0, bases_1.ADDITIONAL_BASES)(this.tokenProvider))[this.chainId]) === null || _d === void 0 ? void 0 : _d[tokenOut.address]) !== null && _e !== void 0 ? _e : [];
168
- const bases = [...common, ...additionalA, ...additionalB];
169
- const basePairs = lodash_1.default.flatMap(bases, (base) => bases.map((otherBase) => [base, otherBase]));
170
- const customBases = (await (0, bases_1.CUSTOM_BASES)(this.tokenProvider))[this.chainId];
171
- const allPairs = (0, lodash_1.default)([
172
- // the direct pair
173
- [tokenIn, tokenOut],
174
- // token A against all bases
175
- ...bases.map((base) => [tokenIn, base]),
176
- // token B against all bases
177
- ...bases.map((base) => [tokenOut, base]),
178
- // each base against all bases
179
- ...basePairs,
180
- ])
181
- .filter((tokens) => Boolean(tokens[0] && tokens[1]))
182
- .filter(([tokenA, tokenB]) => tokenA.address !== tokenB.address && !tokenA.equals(tokenB))
183
- .filter(([tokenA, tokenB]) => {
184
- const customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address];
185
- const customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address];
186
- if (!customBasesA && !customBasesB)
187
- return true;
188
- if (customBasesA && !customBasesA.find((base) => tokenB.equals(base)))
189
- return false;
190
- if (customBasesB && !customBasesB.find((base) => tokenA.equals(base)))
191
- return false;
192
- return true;
193
- })
194
- .flatMap(([tokenA, tokenB]) => {
195
- return [
196
- [tokenA, tokenB, v3_sdk_1.FeeAmount.LOW],
197
- [tokenA, tokenB, v3_sdk_1.FeeAmount.MEDIUM],
198
- [tokenA, tokenB, v3_sdk_1.FeeAmount.HIGH],
199
- ];
200
- })
201
- .value();
202
- return allPairs;
203
- }
204
- computeAllRoutes(tokenIn, tokenOut, pools, chainId, currentPath = [], allPaths = [], startTokenIn = tokenIn, maxHops = 2) {
205
- for (const pool of pools) {
206
- if (currentPath.indexOf(pool) !== -1 || !pool.involvesToken(tokenIn))
207
- continue;
208
- const outputToken = pool.token0.equals(tokenIn)
209
- ? pool.token1
210
- : pool.token0;
211
- if (outputToken.equals(tokenOut)) {
212
- allPaths.push(new router_1.V3Route([...currentPath, pool], startTokenIn, tokenOut));
213
- }
214
- else if (maxHops > 1) {
215
- this.computeAllRoutes(outputToken, tokenOut, pools, chainId, [...currentPath, pool], allPaths, startTokenIn, maxHops - 1);
216
- }
217
- }
218
- return allPaths;
219
- }
220
- buildTrade(tokenInCurrency, tokenOutCurrency, tradeType, routeAmount) {
221
- const { route, amount, quote } = routeAmount;
222
- // The route, amount and quote are all in terms of wrapped tokens.
223
- // When constructing the Trade object the inputAmount/outputAmount must
224
- // use native currencies if necessary. This is so that the Trade knows to wrap/unwrap.
225
- if (tradeType == sdk_core_1.TradeType.EXACT_INPUT) {
226
- const amountCurrency = amounts_1.CurrencyAmount.fromFractionalAmount(tokenInCurrency, amount.numerator, amount.denominator);
227
- const quoteCurrency = amounts_1.CurrencyAmount.fromFractionalAmount(tokenOutCurrency, quote.numerator, quote.denominator);
228
- const routeCurrency = new v3_sdk_1.Route(route.pools, amountCurrency.currency, quoteCurrency.currency);
229
- return new router_sdk_1.Trade({
230
- v3Routes: [
231
- {
232
- routev3: routeCurrency,
233
- inputAmount: amountCurrency,
234
- outputAmount: quoteCurrency,
235
- },
236
- ],
237
- v2Routes: [],
238
- tradeType: tradeType,
239
- });
240
- }
241
- else {
242
- const quoteCurrency = amounts_1.CurrencyAmount.fromFractionalAmount(tokenInCurrency, quote.numerator, quote.denominator);
243
- const amountCurrency = amounts_1.CurrencyAmount.fromFractionalAmount(tokenOutCurrency, amount.numerator, amount.denominator);
244
- const routeCurrency = new v3_sdk_1.Route(route.pools, quoteCurrency.currency, amountCurrency.currency);
245
- return new router_sdk_1.Trade({
246
- v3Routes: [
247
- {
248
- routev3: routeCurrency,
249
- inputAmount: quoteCurrency,
250
- outputAmount: amountCurrency,
251
- },
252
- ],
253
- v2Routes: [],
254
- tradeType: tradeType,
255
- });
256
- }
257
- }
258
- buildMethodParameters(trade, swapConfig) {
259
- const { recipient, slippageTolerance, deadline } = swapConfig;
260
- const methodParameters = router_sdk_1.SwapRouter.swapCallParameters(trade, {
261
- recipient,
262
- slippageTolerance,
263
- deadlineOrPreviousBlockhash: deadline,
264
- // ...(signatureData
265
- // ? {
266
- // inputTokenPermit:
267
- // 'allowed' in signatureData
268
- // ? {
269
- // expiry: signatureData.deadline,
270
- // nonce: signatureData.nonce,
271
- // s: signatureData.s,
272
- // r: signatureData.r,
273
- // v: signatureData.v as any,
274
- // }
275
- // : {
276
- // deadline: signatureData.deadline,
277
- // amount: signatureData.amount,
278
- // s: signatureData.s,
279
- // r: signatureData.r,
280
- // v: signatureData.v as any,
281
- // },
282
- // }
283
- // : {}),
284
- });
285
- return methodParameters;
286
- }
287
- }
288
- exports.LegacyRouter = LegacyRouter;
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LXJvdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2xlZ2FjeS1yb3V0ZXIvbGVnYWN5LXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx3REFBcUQ7QUFDckQsa0RBQStDO0FBQy9DLHFEQUE2RTtBQUM3RSxvREFBd0Q7QUFDeEQsNENBQTJFO0FBQzNFLG9EQUF1QjtBQUl2QixtRUFJd0M7QUFFeEMscUNBQXNEO0FBQ3RELGdEQUFvRDtBQUNwRCx3Q0FBcUM7QUFDckMsOENBQWtEO0FBQ2xELGtEQUF3RDtBQUN4RCxzQ0FBd0U7QUFFeEUsbUNBSWlCO0FBVWpCLDJCQUEyQjtBQUMzQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFNbkI7Ozs7R0FJRztBQUNILE1BQWEsWUFBWTtJQU92QixZQUFZLEVBQ1YsT0FBTyxFQUNQLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osYUFBYSxFQUNiLGFBQWEsR0FDTTtRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUNNLEtBQUssQ0FBQyxLQUFLLENBQ2hCLE1BQXNCLEVBQ3RCLGFBQXVCLEVBQ3ZCLFFBQW1CLEVBQ25CLFVBQW9DLEVBQ3BDLG9CQUFtRDtRQUVuRCxJQUFJLFFBQVEsSUFBSSxvQkFBUyxDQUFDLFdBQVcsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQ3RCLE1BQU0sQ0FBQyxRQUFRLEVBQ2YsYUFBYSxFQUNiLE1BQU0sRUFDTixVQUFVLEVBQ1Ysb0JBQW9CLENBQ3JCLENBQUM7U0FDSDtR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