@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,167 +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.V2HeuristicGasModelFactory = exports.COST_PER_EXTRA_HOP = exports.BASE_SWAP_COST = void 0;
7
- const bignumber_1 = require("@ethersproject/bignumber");
8
- const lodash_1 = __importDefault(require("lodash"));
9
- const util_1 = require("../../../../util");
10
- const amounts_1 = require("../../../../util/amounts");
11
- const gas_model_1 = require("../gas-model");
12
- // Constant cost for doing any swap regardless of pools.
13
- exports.BASE_SWAP_COST = bignumber_1.BigNumber.from(135000); // 115000, bumped up by 20_000 @eric 7/8/2022
14
- // Constant per extra hop in the route.
15
- exports.COST_PER_EXTRA_HOP = bignumber_1.BigNumber.from(50000); // 20000, bumped up by 30_000 @eric 7/8/2022
16
- /**
17
- * Computes a gas estimate for a V2 swap using heuristics.
18
- * Considers number of hops in the route and the typical base cost for a swap.
19
- *
20
- * We compute gas estimates off-chain because
21
- * 1/ Calling eth_estimateGas for a swaps requires the caller to have
22
- * the full balance token being swapped, and approvals.
23
- * 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
24
- * due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
25
- * 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
26
- *
27
- * Note, certain tokens e.g. rebasing/fee-on-transfer, may incur higher gas costs than
28
- * what we estimate here. This is because they run extra logic on token transfer.
29
- *
30
- * @export
31
- * @class V2HeuristicGasModelFactory
32
- */
33
- class V2HeuristicGasModelFactory extends gas_model_1.IV2GasModelFactory {
34
- constructor() {
35
- super();
36
- }
37
- async buildGasModel({ chainId, gasPriceWei, poolProvider, token, }) {
38
- if (token.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])) {
39
- const usdPool = await this.getHighestLiquidityUSDPool(chainId, poolProvider);
40
- return {
41
- estimateGasCost: (routeWithValidQuote) => {
42
- const { gasCostInEth, gasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId);
43
- const ethToken0 = usdPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address;
44
- const ethTokenPrice = ethToken0
45
- ? usdPool.token0Price
46
- : usdPool.token1Price;
47
- const gasCostInTermsOfUSD = ethTokenPrice.quote(gasCostInEth);
48
- return {
49
- gasEstimate: gasUse,
50
- gasCostInToken: gasCostInEth,
51
- gasCostInUSD: gasCostInTermsOfUSD,
52
- };
53
- },
54
- };
55
- }
56
- // If the quote token is not WETH, we convert the gas cost to be in terms of the quote token.
57
- // We do this by getting the highest liquidity <token>/ETH pool.
58
- const ethPool = await this.getEthPool(chainId, token, poolProvider);
59
- if (!ethPool) {
60
- util_1.log.info('Unable to find ETH pool with the quote token to produce gas adjusted costs. Route will not account for gas.');
61
- }
62
- const usdPool = await this.getHighestLiquidityUSDPool(chainId, poolProvider);
63
- return {
64
- estimateGasCost: (routeWithValidQuote) => {
65
- const usdToken = usdPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address
66
- ? usdPool.token1
67
- : usdPool.token0;
68
- const { gasCostInEth, gasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId);
69
- if (!ethPool) {
70
- return {
71
- gasEstimate: gasUse,
72
- gasCostInToken: amounts_1.CurrencyAmount.fromRawAmount(token, 0),
73
- gasCostInUSD: amounts_1.CurrencyAmount.fromRawAmount(usdToken, 0),
74
- };
75
- }
76
- const ethToken0 = ethPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address;
77
- const ethTokenPrice = ethToken0
78
- ? ethPool.token0Price
79
- : ethPool.token1Price;
80
- let gasCostInTermsOfQuoteToken;
81
- try {
82
- gasCostInTermsOfQuoteToken = ethTokenPrice.quote(gasCostInEth);
83
- }
84
- catch (err) {
85
- util_1.log.error({
86
- ethTokenPriceBase: ethTokenPrice.baseCurrency,
87
- ethTokenPriceQuote: ethTokenPrice.quoteCurrency,
88
- gasCostInEth: gasCostInEth.currency,
89
- }, 'Debug eth price token issue');
90
- throw err;
91
- }
92
- const ethToken0USDPool = usdPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address;
93
- const ethTokenPriceUSDPool = ethToken0USDPool
94
- ? usdPool.token0Price
95
- : usdPool.token1Price;
96
- let gasCostInTermsOfUSD;
97
- try {
98
- gasCostInTermsOfUSD = ethTokenPriceUSDPool.quote(gasCostInEth);
99
- }
100
- catch (err) {
101
- util_1.log.error({
102
- usdT1: usdPool.token0.symbol,
103
- usdT2: usdPool.token1.symbol,
104
- gasCostInEthToken: gasCostInEth.currency.symbol,
105
- }, 'Failed to compute USD gas price');
106
- throw err;
107
- }
108
- return {
109
- gasEstimate: gasUse,
110
- gasCostInToken: gasCostInTermsOfQuoteToken,
111
- gasCostInUSD: gasCostInTermsOfUSD,
112
- };
113
- },
114
- };
115
- }
116
- estimateGas(routeWithValidQuote, gasPriceWei, chainId) {
117
- const hops = routeWithValidQuote.route.pairs.length;
118
- const gasUse = exports.BASE_SWAP_COST.add(exports.COST_PER_EXTRA_HOP.mul(hops - 1));
119
- const totalGasCostWei = gasPriceWei.mul(gasUse);
120
- const weth = util_1.WRAPPED_NATIVE_CURRENCY[chainId];
121
- const gasCostInEth = amounts_1.CurrencyAmount.fromRawAmount(weth, totalGasCostWei.toString());
122
- return { gasCostInEth, gasUse };
123
- }
124
- async getEthPool(chainId, token, poolProvider) {
125
- const weth = util_1.WRAPPED_NATIVE_CURRENCY[chainId];
126
- const poolAccessor = await poolProvider.getPools([[weth, token]]);
127
- const pool = poolAccessor.getPool(weth, token);
128
- if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {
129
- util_1.log.error({
130
- weth,
131
- token,
132
- reserve0: pool === null || pool === void 0 ? void 0 : pool.reserve0.toExact(),
133
- reserve1: pool === null || pool === void 0 ? void 0 : pool.reserve1.toExact(),
134
- }, `Could not find a valid WETH pool with ${token.symbol} for computing gas costs.`);
135
- return null;
136
- }
137
- return pool;
138
- }
139
- async getHighestLiquidityUSDPool(chainId, poolProvider) {
140
- const usdTokens = gas_model_1.usdGasTokensByChain[chainId];
141
- if (!usdTokens) {
142
- throw new Error(`Could not find a USD token for computing gas costs on ${chainId}`);
143
- }
144
- const usdPools = lodash_1.default.map(usdTokens, (usdToken) => [
145
- usdToken,
146
- util_1.WRAPPED_NATIVE_CURRENCY[chainId],
147
- ]);
148
- const poolAccessor = await poolProvider.getPools(usdPools);
149
- const poolsRaw = poolAccessor.getAllPools();
150
- const pools = lodash_1.default.filter(poolsRaw, (pool) => pool.reserve0.greaterThan(0) && pool.reserve1.greaterThan(0));
151
- if (pools.length == 0) {
152
- util_1.log.error({ pools }, `Could not find a USD/WETH pool for computing gas costs.`);
153
- throw new Error(`Can't find USD/WETH pool for computing gas costs.`);
154
- }
155
- const maxPool = lodash_1.default.maxBy(pools, (pool) => {
156
- if (pool.token0.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])) {
157
- return parseFloat(pool.reserve0.toSignificant(2));
158
- }
159
- else {
160
- return parseFloat(pool.reserve1.toSignificant(2));
161
- }
162
- });
163
- return maxPool;
164
- }
165
- }
166
- exports.V2HeuristicGasModelFactory = V2HeuristicGasModelFactory;
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjItaGV1cmlzdGljLWdhcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2FscGhhLXJvdXRlci9nYXMtbW9kZWxzL3YyL3YyLWhldXJpc3RpYy1nYXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQXFEO0FBR3JELG9EQUF1QjtBQUd2QiwyQ0FBZ0U7QUFDaEUsc0RBQTBEO0FBRTFELDRDQUtzQjtBQUV0Qix3REFBd0Q7QUFDM0MsUUFBQSxjQUFjLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7QUFFbkcsdUNBQXVDO0FBQzFCLFFBQUEsa0JBQWtCLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw0Q0FBNEM7QUFFckc7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFhLDBCQUEyQixTQUFRLDhCQUFrQjtJQUNoRTtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDekIsT0FBTyxFQUNQLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxHQUNzQjtRQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsOEJBQXVCLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBRTtZQUNuRCxNQUFNLE9BQU8sR0FBUyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FDekQsT0FBTyxFQUNQLFlBQVksQ0FDYixDQUFDO1lBRUYsT0FBTztnQkFDTCxlQUFlLEVBQUUsQ0FBQyxtQkFBMEMsRUFBRSxFQUFFO29CQUM5RCxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQy9DLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsT0FBTyxDQUNSLENBQUM7b0JBRUYsTUFBTSxTQUFTLEdBQ2IsT0FBTyxDQUFD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
@@ -1,20 +0,0 @@
1
- import { ChainId, Token, TradeType } from '@synthra-swap/sdk-core';
2
- import { IOnChainQuoteProvider, ITokenListProvider, ITokenProvider, ITokenValidatorProvider, IV2PoolProvider, IV2SubgraphProvider, IV3PoolProvider, IV3SubgraphProvider } from '../../../providers';
3
- import { CurrencyAmount } from '../../../util';
4
- import { MixedRoute } from '../../router';
5
- import { AlphaRouterConfig } from '../alpha-router';
6
- import { MixedRouteWithValidQuote } from '../entities';
7
- import { CandidatePoolsBySelectionCriteria } from '../functions/get-candidate-pools';
8
- import { IGasModel } from '../gas-models';
9
- import { BaseQuoter } from './base-quoter';
10
- import { GetQuotesResult, GetRoutesResult } from './model';
11
- export declare class MixedQuoter extends BaseQuoter<MixedRoute> {
12
- protected v3SubgraphProvider: IV3SubgraphProvider;
13
- protected v3PoolProvider: IV3PoolProvider;
14
- protected v2SubgraphProvider: IV2SubgraphProvider;
15
- protected v2PoolProvider: IV2PoolProvider;
16
- protected onChainQuoteProvider: IOnChainQuoteProvider;
17
- constructor(v3SubgraphProvider: IV3SubgraphProvider, v3PoolProvider: IV3PoolProvider, v2SubgraphProvider: IV2SubgraphProvider, v2PoolProvider: IV2PoolProvider, onChainQuoteProvider: IOnChainQuoteProvider, tokenProvider: ITokenProvider, chainId: ChainId, blockedTokenListProvider?: ITokenListProvider, tokenValidatorProvider?: ITokenValidatorProvider);
18
- protected getRoutes(tokenIn: Token, tokenOut: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig): Promise<GetRoutesResult<MixedRoute>>;
19
- getQuotes(routes: MixedRoute[], amounts: CurrencyAmount[], percents: number[], quoteToken: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig, candidatePools?: CandidatePoolsBySelectionCriteria, gasModel?: IGasModel<MixedRouteWithValidQuote>): Promise<GetQuotesResult>;
20
- }
@@ -1,130 +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.MixedQuoter = void 0;
7
- const sdk_core_1 = require("@synthra-swap/sdk-core");
8
- const lodash_1 = __importDefault(require("lodash"));
9
- const providers_1 = require("../../../providers");
10
- const util_1 = require("../../../util");
11
- const entities_1 = require("../entities");
12
- const compute_all_routes_1 = require("../functions/compute-all-routes");
13
- const get_candidate_pools_1 = require("../functions/get-candidate-pools");
14
- const base_quoter_1 = require("./base-quoter");
15
- class MixedQuoter extends base_quoter_1.BaseQuoter {
16
- constructor(v3SubgraphProvider, v3PoolProvider, v2SubgraphProvider, v2PoolProvider, onChainQuoteProvider, tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {
17
- super(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider);
18
- this.v3SubgraphProvider = v3SubgraphProvider;
19
- this.v3PoolProvider = v3PoolProvider;
20
- this.v2SubgraphProvider = v2SubgraphProvider;
21
- this.v2PoolProvider = v2PoolProvider;
22
- this.onChainQuoteProvider = onChainQuoteProvider;
23
- }
24
- async getRoutes(tokenIn, tokenOut, tradeType, routingConfig) {
25
- if (tradeType != sdk_core_1.TradeType.EXACT_INPUT) {
26
- throw new Error('Mixed route quotes are not supported for EXACT_OUTPUT');
27
- }
28
- const { V2poolAccessor, V3poolAccessor, candidatePools: mixedRouteCandidatePools, } = await (0, get_candidate_pools_1.getMixedRouteCandidatePools)({
29
- tokenIn,
30
- tokenOut,
31
- tokenProvider: this.tokenProvider,
32
- blockedTokenListProvider: this.blockedTokenListProvider,
33
- v3poolProvider: this.v3PoolProvider,
34
- v2poolProvider: this.v2PoolProvider,
35
- routeType: tradeType,
36
- v3subgraphProvider: this.v3SubgraphProvider,
37
- v2subgraphProvider: this.v2SubgraphProvider,
38
- routingConfig,
39
- chainId: this.chainId,
40
- });
41
- const V3poolsRaw = V3poolAccessor.getAllPools();
42
- const V2poolsRaw = V2poolAccessor.getAllPools();
43
- const poolsRaw = [...V3poolsRaw, ...V2poolsRaw];
44
- const candidatePools = mixedRouteCandidatePools;
45
- // Drop any pools that contain fee on transfer tokens (not supported by v3) or have issues with being transferred.
46
- const pools = await this.applyTokenValidatorToPools(poolsRaw, (token, tokenValidation) => {
47
- // If there is no available validation result we assume the token is fine.
48
- if (!tokenValidation) {
49
- return false;
50
- }
51
- // Only filters out *intermediate* pools that involve tokens that we detect
52
- // cant be transferred. This prevents us trying to route through tokens that may
53
- // not be transferrable, but allows users to still swap those tokens if they
54
- // specify.
55
- //
56
- if (tokenValidation == providers_1.TokenValidationResult.STF &&
57
- (token.equals(tokenIn) || token.equals(tokenOut))) {
58
- return false;
59
- }
60
- return (tokenValidation == providers_1.TokenValidationResult.FOT ||
61
- tokenValidation == providers_1.TokenValidationResult.STF);
62
- });
63
- const { maxSwapsPerPath } = routingConfig;
64
- const routes = (0, compute_all_routes_1.computeAllMixedRoutes)(tokenIn, tokenOut, pools, maxSwapsPerPath);
65
- return {
66
- routes,
67
- candidatePools,
68
- };
69
- }
70
- async getQuotes(routes, amounts, percents, quoteToken, tradeType, routingConfig, candidatePools, gasModel) {
71
- util_1.log.info('Starting to get mixed quotes');
72
- if (gasModel === undefined) {
73
- throw new Error('GasModel for MixedRouteWithValidQuote is required to getQuotes');
74
- }
75
- if (routes.length == 0) {
76
- return { routesWithValidQuotes: [], candidatePools };
77
- }
78
- // For all our routes, and all the fractional amounts, fetch quotes on-chain.
79
- const quoteFn = this.onChainQuoteProvider.getQuotesManyExactIn.bind(this.onChainQuoteProvider);
80
- const beforeQuotes = Date.now();
81
- util_1.log.info(`Getting quotes for mixed for ${routes.length} routes with ${amounts.length} amounts per route.`);
82
- const { routesWithQuotes } = await quoteFn(amounts, routes, {
83
- blockNumber: routingConfig.blockNumber,
84
- });
85
- util_1.metric.putMetric('MixedQuotesLoad', Date.now() - beforeQuotes, util_1.MetricLoggerUnit.Milliseconds);
86
- util_1.metric.putMetric('MixedQuotesFetched', (0, lodash_1.default)(routesWithQuotes)
87
- .map(([, quotes]) => quotes.length)
88
- .sum(), util_1.MetricLoggerUnit.Count);
89
- const routesWithValidQuotes = [];
90
- for (const routeWithQuote of routesWithQuotes) {
91
- const [route, quotes] = routeWithQuote;
92
- for (let i = 0; i < quotes.length; i++) {
93
- const percent = percents[i];
94
- const amountQuote = quotes[i];
95
- const { quote, amount, sqrtPriceX96AfterList, initializedTicksCrossedList, gasEstimate, } = amountQuote;
96
- if (!quote ||
97
- !sqrtPriceX96AfterList ||
98
- !initializedTicksCrossedList ||
99
- !gasEstimate) {
100
- util_1.log.debug({
101
- route: (0, util_1.routeToString)(route),
102
- amountQuote,
103
- }, 'Dropping a null mixed quote for route.');
104
- continue;
105
- }
106
- const routeWithValidQuote = new entities_1.MixedRouteWithValidQuote({
107
- route,
108
- rawQuote: quote,
109
- amount,
110
- percent,
111
- sqrtPriceX96AfterList,
112
- initializedTicksCrossedList,
113
- quoterGasEstimate: gasEstimate,
114
- mixedRouteGasModel: gasModel,
115
- quoteToken,
116
- tradeType,
117
- v3PoolProvider: this.v3PoolProvider,
118
- v2PoolProvider: this.v2PoolProvider,
119
- });
120
- routesWithValidQuotes.push(routeWithValidQuote);
121
- }
122
- }
123
- return {
124
- routesWithValidQuotes,
125
- candidatePools,
126
- };
127
- }
128
- }
129
- exports.MixedQuoter = MixedQuoter;
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWQtcXVvdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL3F1b3RlcnMvbWl4ZWQtcXVvdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUE2RTtBQUM3RSxvREFBdUI7QUFFdkIsa0RBVTRCO0FBQzVCLHdDQU11QjtBQUd2QiwwQ0FBdUQ7QUFDdkQsd0VBQXdFO0FBQ3hFLDBFQUcwQztBQUcxQywrQ0FBMkM7QUFHM0MsTUFBYSxXQUFZLFNBQVEsd0JBQXNCO0lBT3JELFlBQ0Usa0JBQXVDLEVBQ3ZDLGNBQStCLEVBQy9CLGtCQUF1QyxFQUN2QyxjQUErQixFQUMvQixvQkFBMkMsRUFDM0MsYUFBNkIsRUFDN0IsT0FBZ0IsRUFDaEIsd0JBQTZDLEVBQzdDLHNCQUFnRDtRQUVoRCxLQUFLLENBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCx3QkFBd0IsRUFDeEIsc0JBQXNCLENBQ3ZCLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVMsQ0FDdkIsT0FBYyxFQUNkLFFBQWUsRUFDZixTQUFvQixFQUNwQixhQUFnQztRQUVoQyxJQUFJLFNBQVMsSUFBSSxvQkFBUyxDQUFDLFdBQVcsRUFBRTtZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7U0FDMUU7UUFFRCxNQUFNLEVBQ0osY0FBYyxFQUNkLGNBQWMsRUFDZCxjQUFjLEVBQUUsd0JBQXdCLEdBQ3pDLEdBQUcsTUFB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
@@ -1,21 +0,0 @@
1
- import { BigNumber } from '@ethersproject/bignumber';
2
- import { ChainId, Token, TradeType } from '@synthra-swap/sdk-core';
3
- import { ITokenListProvider, ITokenProvider, ITokenValidatorProvider, IV2PoolProvider, IV2QuoteProvider, IV2SubgraphProvider } from '../../../providers';
4
- import { CurrencyAmount } from '../../../util';
5
- import { V2Route } from '../../router';
6
- import { AlphaRouterConfig } from '../alpha-router';
7
- import { V2RouteWithValidQuote } from '../entities';
8
- import { CandidatePoolsBySelectionCriteria } from '../functions/get-candidate-pools';
9
- import { IGasModel, IV2GasModelFactory } from '../gas-models';
10
- import { BaseQuoter } from './base-quoter';
11
- import { GetQuotesResult } from './model/results/get-quotes-result';
12
- import { GetRoutesResult } from './model/results/get-routes-result';
13
- export declare class V2Quoter extends BaseQuoter<V2Route> {
14
- protected v2SubgraphProvider: IV2SubgraphProvider;
15
- protected v2PoolProvider: IV2PoolProvider;
16
- protected v2QuoteProvider: IV2QuoteProvider;
17
- protected v2GasModelFactory: IV2GasModelFactory;
18
- constructor(v2SubgraphProvider: IV2SubgraphProvider, v2PoolProvider: IV2PoolProvider, v2QuoteProvider: IV2QuoteProvider, v2GasModelFactory: IV2GasModelFactory, tokenProvider: ITokenProvider, chainId: ChainId, blockedTokenListProvider?: ITokenListProvider, tokenValidatorProvider?: ITokenValidatorProvider);
19
- protected getRoutes(tokenIn: Token, tokenOut: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig): Promise<GetRoutesResult<V2Route>>;
20
- getQuotes(routes: V2Route[], amounts: CurrencyAmount[], percents: number[], quoteToken: Token, tradeType: TradeType, _routingConfig: AlphaRouterConfig, candidatePools?: CandidatePoolsBySelectionCriteria, _gasModel?: IGasModel<V2RouteWithValidQuote>, gasPriceWei?: BigNumber): Promise<GetQuotesResult>;
21
- }
@@ -1,122 +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.V2Quoter = void 0;
7
- const sdk_core_1 = require("@synthra-swap/sdk-core");
8
- const lodash_1 = __importDefault(require("lodash"));
9
- const providers_1 = require("../../../providers");
10
- const util_1 = require("../../../util");
11
- const entities_1 = require("../entities");
12
- const compute_all_routes_1 = require("../functions/compute-all-routes");
13
- const get_candidate_pools_1 = require("../functions/get-candidate-pools");
14
- const base_quoter_1 = require("./base-quoter");
15
- class V2Quoter extends base_quoter_1.BaseQuoter {
16
- constructor(v2SubgraphProvider, v2PoolProvider, v2QuoteProvider, v2GasModelFactory, tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {
17
- super(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider);
18
- this.v2SubgraphProvider = v2SubgraphProvider;
19
- this.v2PoolProvider = v2PoolProvider;
20
- this.v2QuoteProvider = v2QuoteProvider;
21
- this.v2GasModelFactory = v2GasModelFactory;
22
- }
23
- async getRoutes(tokenIn, tokenOut, tradeType, routingConfig) {
24
- // Fetch all the pools that we will consider routing via. There are thousands
25
- // of pools, so we filter them to a set of candidate pools that we expect will
26
- // result in good prices.
27
- const { poolAccessor, candidatePools } = await (0, get_candidate_pools_1.getV2CandidatePools)({
28
- tokenIn,
29
- tokenOut,
30
- tokenProvider: this.tokenProvider,
31
- blockedTokenListProvider: this.blockedTokenListProvider,
32
- poolProvider: this.v2PoolProvider,
33
- routeType: tradeType,
34
- subgraphProvider: this.v2SubgraphProvider,
35
- routingConfig,
36
- chainId: this.chainId,
37
- });
38
- const poolsRaw = poolAccessor.getAllPools();
39
- // Drop any pools that contain tokens that can not be transferred according to the token validator.
40
- const pools = await this.applyTokenValidatorToPools(poolsRaw, (token, tokenValidation) => {
41
- // If there is no available validation result we assume the token is fine.
42
- if (!tokenValidation) {
43
- return false;
44
- }
45
- // Only filters out *intermediate* pools that involve tokens that we detect
46
- // cant be transferred. This prevents us trying to route through tokens that may
47
- // not be transferrable, but allows users to still swap those tokens if they
48
- // specify.
49
- if (tokenValidation == providers_1.TokenValidationResult.STF &&
50
- (token.equals(tokenIn) || token.equals(tokenOut))) {
51
- return false;
52
- }
53
- return tokenValidation == providers_1.TokenValidationResult.STF;
54
- });
55
- // Given all our candidate pools, compute all the possible ways to route from tokenIn to tokenOut.
56
- const { maxSwapsPerPath } = routingConfig;
57
- const routes = (0, compute_all_routes_1.computeAllV2Routes)(tokenIn, tokenOut, pools, maxSwapsPerPath);
58
- return {
59
- routes,
60
- candidatePools,
61
- };
62
- }
63
- async getQuotes(routes, amounts, percents, quoteToken, tradeType, _routingConfig, candidatePools, _gasModel, gasPriceWei) {
64
- util_1.log.info('Starting to get V2 quotes');
65
- if (gasPriceWei === undefined) {
66
- throw new Error('GasPriceWei for V2Routes is required to getQuotes');
67
- }
68
- if (routes.length == 0) {
69
- return { routesWithValidQuotes: [], candidatePools };
70
- }
71
- // For all our routes, and all the fractional amounts, fetch quotes on-chain.
72
- const quoteFn = tradeType == sdk_core_1.TradeType.EXACT_INPUT
73
- ? this.v2QuoteProvider.getQuotesManyExactIn.bind(this.v2QuoteProvider)
74
- : this.v2QuoteProvider.getQuotesManyExactOut.bind(this.v2QuoteProvider);
75
- const beforeQuotes = Date.now();
76
- util_1.log.info(`Getting quotes for V2 for ${routes.length} routes with ${amounts.length} amounts per route.`);
77
- const { routesWithQuotes } = await quoteFn(amounts, routes);
78
- const v2GasModel = await this.v2GasModelFactory.buildGasModel({
79
- chainId: this.chainId,
80
- gasPriceWei,
81
- poolProvider: this.v2PoolProvider,
82
- token: quoteToken,
83
- });
84
- util_1.metric.putMetric('V2QuotesLoad', Date.now() - beforeQuotes, util_1.MetricLoggerUnit.Milliseconds);
85
- util_1.metric.putMetric('V2QuotesFetched', (0, lodash_1.default)(routesWithQuotes)
86
- .map(([, quotes]) => quotes.length)
87
- .sum(), util_1.MetricLoggerUnit.Count);
88
- const routesWithValidQuotes = [];
89
- for (const routeWithQuote of routesWithQuotes) {
90
- const [route, quotes] = routeWithQuote;
91
- for (let i = 0; i < quotes.length; i++) {
92
- const percent = percents[i];
93
- const amountQuote = quotes[i];
94
- const { quote, amount } = amountQuote;
95
- if (!quote) {
96
- util_1.log.debug({
97
- route: (0, util_1.routeToString)(route),
98
- amountQuote,
99
- }, 'Dropping a null V2 quote for route.');
100
- continue;
101
- }
102
- const routeWithValidQuote = new entities_1.V2RouteWithValidQuote({
103
- route,
104
- rawQuote: quote,
105
- amount,
106
- percent,
107
- gasModel: v2GasModel,
108
- quoteToken,
109
- tradeType,
110
- v2PoolProvider: this.v2PoolProvider,
111
- });
112
- routesWithValidQuotes.push(routeWithValidQuote);
113
- }
114
- }
115
- return {
116
- routesWithValidQuotes,
117
- candidatePools,
118
- };
119
- }
120
- }
121
- exports.V2Quoter = V2Quoter;
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjItcXVvdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL3F1b3RlcnMvdjItcXVvdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHFEQUE2RTtBQUM3RSxvREFBdUI7QUFFdkIsa0RBUTRCO0FBQzVCLHdDQU11QjtBQUd2QiwwQ0FBb0Q7QUFDcEQsd0VBQXFFO0FBQ3JFLDBFQUcwQztBQUcxQywrQ0FBMkM7QUFJM0MsTUFBYSxRQUFTLFNBQVEsd0JBQW1CO0lBTS9DLFlBQ0Usa0JBQXVDLEVBQ3ZDLGNBQStCLEVBQy9CLGVBQWlDLEVBQ2pDLGlCQUFxQyxFQUNyQyxhQUE2QixFQUM3QixPQUFnQixFQUNoQix3QkFBNkMsRUFDN0Msc0JBQWdEO1FBRWhELEtBQUssQ0FDSCxhQUFhLEVBQ2IsT0FBTyxFQUNQLHdCQUF3QixFQUN4QixzQkFBc0IsQ0FDdkIsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFDN0MsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTLENBQ3ZCLE9BQWMsRUFDZCxRQUFlLEVBQ2YsU0FBb0IsRUFDcEIsYUFBZ0M7UUFFaEMsNkVBQTZFO1FBQzdFLDhFQUE4RTtRQUM5RSx5QkFBeUI7UUFDekIsTUFBTSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUEseUNBQW1CLEVBQUM7WUFDakUsT0FBTztZQUNQLFFBQVE7WUFDUixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtZQUN2RCxZQUFZLEVBQUUsSUFBSSxDQUFDLGNB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