@synthra-swap/smart-order-router 3.15.0

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 (414) hide show
  1. package/CHANGELOG.md +255 -0
  2. package/LICENSE +674 -0
  3. package/README.md +262 -0
  4. package/build/main/index.d.ts +3 -0
  5. package/build/main/index.js +20 -0
  6. package/build/main/providers/cache-node.d.ts +9 -0
  7. package/build/main/providers/cache-node.js +19 -0
  8. package/build/main/providers/cache.d.ts +13 -0
  9. package/build/main/providers/cache.js +3 -0
  10. package/build/main/providers/caching/route/index.d.ts +2 -0
  11. package/build/main/providers/caching/route/index.js +19 -0
  12. package/build/main/providers/caching/route/model/cache-mode.d.ts +16 -0
  13. package/build/main/providers/caching/route/model/cache-mode.js +21 -0
  14. package/build/main/providers/caching/route/model/cached-route.d.ts +26 -0
  15. package/build/main/providers/caching/route/model/cached-route.js +30 -0
  16. package/build/main/providers/caching/route/model/cached-routes.d.ts +66 -0
  17. package/build/main/providers/caching/route/model/cached-routes.js +77 -0
  18. package/build/main/providers/caching/route/model/index.d.ts +3 -0
  19. package/build/main/providers/caching/route/model/index.js +20 -0
  20. package/build/main/providers/caching/route/route-caching-provider.d.ts +90 -0
  21. package/build/main/providers/caching/route/route-caching-provider.js +70 -0
  22. package/build/main/providers/caching-gas-provider.d.ts +23 -0
  23. package/build/main/providers/caching-gas-provider.js +37 -0
  24. package/build/main/providers/caching-token-list-provider.d.ts +40 -0
  25. package/build/main/providers/caching-token-list-provider.js +122 -0
  26. package/build/main/providers/caching-token-provider.d.ts +25 -0
  27. package/build/main/providers/caching-token-provider.js +191 -0
  28. package/build/main/providers/eip-1559-gas-price-provider.d.ts +31 -0
  29. package/build/main/providers/eip-1559-gas-price-provider.js +66 -0
  30. package/build/main/providers/eth-estimate-gas-provider.d.ts +20 -0
  31. package/build/main/providers/eth-estimate-gas-provider.js +84 -0
  32. package/build/main/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
  33. package/build/main/providers/eth-gas-station-info-gas-price-provider.js +37 -0
  34. package/build/main/providers/gas-price-provider.d.ts +10 -0
  35. package/build/main/providers/gas-price-provider.js +10 -0
  36. package/build/main/providers/index.d.ts +37 -0
  37. package/build/main/providers/index.js +54 -0
  38. package/build/main/providers/legacy-gas-price-provider.d.ts +7 -0
  39. package/build/main/providers/legacy-gas-price-provider.js +20 -0
  40. package/build/main/providers/multicall-provider.d.ts +82 -0
  41. package/build/main/providers/multicall-provider.js +15 -0
  42. package/build/main/providers/multicall-uniswap-provider.d.ts +37 -0
  43. package/build/main/providers/multicall-uniswap-provider.js +163 -0
  44. package/build/main/providers/on-chain-gas-price-provider.d.ts +19 -0
  45. package/build/main/providers/on-chain-gas-price-provider.js +34 -0
  46. package/build/main/providers/on-chain-quote-provider.d.ts +221 -0
  47. package/build/main/providers/on-chain-quote-provider.js +523 -0
  48. package/build/main/providers/provider.d.ts +10 -0
  49. package/build/main/providers/provider.js +3 -0
  50. package/build/main/providers/simulation-provider.d.ts +43 -0
  51. package/build/main/providers/simulation-provider.js +130 -0
  52. package/build/main/providers/static-gas-price-provider.d.ts +7 -0
  53. package/build/main/providers/static-gas-price-provider.js +13 -0
  54. package/build/main/providers/swap-router-provider.d.ts +30 -0
  55. package/build/main/providers/swap-router-provider.js +42 -0
  56. package/build/main/providers/tenderly-simulation-provider.d.ts +46 -0
  57. package/build/main/providers/tenderly-simulation-provider.js +266 -0
  58. package/build/main/providers/token-provider.d.ts +102 -0
  59. package/build/main/providers/token-provider.js +299 -0
  60. package/build/main/providers/token-validator-provider.d.ts +42 -0
  61. package/build/main/providers/token-validator-provider.js +95 -0
  62. package/build/main/providers/uri-subgraph-provider.d.ts +20 -0
  63. package/build/main/providers/uri-subgraph-provider.js +65 -0
  64. package/build/main/providers/v2/caching-pool-provider.d.ts +34 -0
  65. package/build/main/providers/v2/caching-pool-provider.js +88 -0
  66. package/build/main/providers/v2/caching-subgraph-provider.d.ts +23 -0
  67. package/build/main/providers/v2/caching-subgraph-provider.js +34 -0
  68. package/build/main/providers/v2/pool-provider.d.ts +59 -0
  69. package/build/main/providers/v2/pool-provider.js +120 -0
  70. package/build/main/providers/v2/quote-provider.d.ts +33 -0
  71. package/build/main/providers/v2/quote-provider.js +91 -0
  72. package/build/main/providers/v2/static-subgraph-provider.d.ts +20 -0
  73. package/build/main/providers/v2/static-subgraph-provider.js +98 -0
  74. package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +19 -0
  75. package/build/main/providers/v2/subgraph-provider-with-fallback.js +35 -0
  76. package/build/main/providers/v2/subgraph-provider.d.ts +33 -0
  77. package/build/main/providers/v2/subgraph-provider.js +134 -0
  78. package/build/main/providers/v2/uri-subgraph-provider.d.ts +4 -0
  79. package/build/main/providers/v2/uri-subgraph-provider.js +8 -0
  80. package/build/main/providers/v3/caching-pool-provider.d.ts +33 -0
  81. package/build/main/providers/v3/caching-pool-provider.js +80 -0
  82. package/build/main/providers/v3/caching-subgraph-provider.d.ts +23 -0
  83. package/build/main/providers/v3/caching-subgraph-provider.js +34 -0
  84. package/build/main/providers/v3/gas-data-provider.d.ts +57 -0
  85. package/build/main/providers/v3/gas-data-provider.js +67 -0
  86. package/build/main/providers/v3/pool-provider.d.ts +60 -0
  87. package/build/main/providers/v3/pool-provider.js +123 -0
  88. package/build/main/providers/v3/static-subgraph-provider.d.ts +22 -0
  89. package/build/main/providers/v3/static-subgraph-provider.js +171 -0
  90. package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +15 -0
  91. package/build/main/providers/v3/subgraph-provider-with-fallback.js +31 -0
  92. package/build/main/providers/v3/subgraph-provider.d.ts +36 -0
  93. package/build/main/providers/v3/subgraph-provider.js +146 -0
  94. package/build/main/providers/v3/uri-subgraph-provider.d.ts +4 -0
  95. package/build/main/providers/v3/uri-subgraph-provider.js +8 -0
  96. package/build/main/routers/alpha-router/alpha-router.d.ts +267 -0
  97. package/build/main/routers/alpha-router/alpha-router.js +848 -0
  98. package/build/main/routers/alpha-router/config.d.ts +4 -0
  99. package/build/main/routers/alpha-router/config.js +93 -0
  100. package/build/main/routers/alpha-router/entities/index.d.ts +1 -0
  101. package/build/main/routers/alpha-router/entities/index.js +18 -0
  102. package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +163 -0
  103. package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +143 -0
  104. package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +19 -0
  105. package/build/main/routers/alpha-router/functions/best-swap-route.js +364 -0
  106. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
  107. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js +18 -0
  108. package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +8 -0
  109. package/build/main/routers/alpha-router/functions/compute-all-routes.js +72 -0
  110. package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +78 -0
  111. package/build/main/routers/alpha-router/functions/get-candidate-pools.js +749 -0
  112. package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +90 -0
  113. package/build/main/routers/alpha-router/gas-models/gas-model.js +60 -0
  114. package/build/main/routers/alpha-router/gas-models/index.d.ts +2 -0
  115. package/build/main/routers/alpha-router/gas-models/index.js +19 -0
  116. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +25 -0
  117. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +175 -0
  118. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +29 -0
  119. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +167 -0
  120. package/build/main/routers/alpha-router/gas-models/v3/gas-costs.d.ts +10 -0
  121. package/build/main/routers/alpha-router/gas-models/v3/gas-costs.js +124 -0
  122. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +31 -0
  123. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +300 -0
  124. package/build/main/routers/alpha-router/index.d.ts +4 -0
  125. package/build/main/routers/alpha-router/index.js +21 -0
  126. package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +68 -0
  127. package/build/main/routers/alpha-router/quoters/base-quoter.js +60 -0
  128. package/build/main/routers/alpha-router/quoters/index.d.ts +5 -0
  129. package/build/main/routers/alpha-router/quoters/index.js +22 -0
  130. package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +20 -0
  131. package/build/main/routers/alpha-router/quoters/mixed-quoter.js +130 -0
  132. package/build/main/routers/alpha-router/quoters/model/index.d.ts +1 -0
  133. package/build/main/routers/alpha-router/quoters/model/index.js +18 -0
  134. package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
  135. package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.js +3 -0
  136. package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
  137. package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.js +3 -0
  138. package/build/main/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
  139. package/build/main/routers/alpha-router/quoters/model/results/index.js +19 -0
  140. package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +21 -0
  141. package/build/main/routers/alpha-router/quoters/v2-quoter.js +122 -0
  142. package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
  143. package/build/main/routers/alpha-router/quoters/v3-quoter.js +125 -0
  144. package/build/main/routers/index.d.ts +4 -0
  145. package/build/main/routers/index.js +21 -0
  146. package/build/main/routers/legacy-router/bases.d.ts +160 -0
  147. package/build/main/routers/legacy-router/bases.js +77 -0
  148. package/build/main/routers/legacy-router/index.d.ts +1 -0
  149. package/build/main/routers/legacy-router/index.js +18 -0
  150. package/build/main/routers/legacy-router/legacy-router.d.ts +42 -0
  151. package/build/main/routers/legacy-router/legacy-router.js +289 -0
  152. package/build/main/routers/router.d.ts +165 -0
  153. package/build/main/routers/router.js +52 -0
  154. package/build/main/tsconfig.tsbuildinfo +1 -0
  155. package/build/main/types/other/commons.d.ts +16 -0
  156. package/build/main/types/other/commons.js +6 -0
  157. package/build/main/types/other/factories/Erc20__factory.d.ts +45 -0
  158. package/build/main/types/other/factories/Erc20__factory.js +240 -0
  159. package/build/main/types/other/factories/GasDataArbitrum__factory.d.ts +18 -0
  160. package/build/main/types/other/factories/GasDataArbitrum__factory.js +58 -0
  161. package/build/main/types/other/factories/GasPriceOracle__factory.d.ts +46 -0
  162. package/build/main/types/other/factories/GasPriceOracle__factory.js +316 -0
  163. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
  164. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js +156 -0
  165. package/build/main/types/other/factories/ITokenValidator__factory.d.ts +22 -0
  166. package/build/main/types/other/factories/ITokenValidator__factory.js +78 -0
  167. package/build/main/types/other/factories/Permit2__factory.d.ts +87 -0
  168. package/build/main/types/other/factories/Permit2__factory.js +936 -0
  169. package/build/main/types/other/factories/SwapRouter02__factory.d.ts +67 -0
  170. package/build/main/types/other/factories/SwapRouter02__factory.js +1098 -0
  171. package/build/main/types/v2/commons.d.ts +16 -0
  172. package/build/main/types/v2/commons.js +6 -0
  173. package/build/main/types/v2/factories/IUniswapV2Pair__factory.d.ts +35 -0
  174. package/build/main/types/v2/factories/IUniswapV2Pair__factory.js +671 -0
  175. package/build/main/types/v3/commons.d.ts +16 -0
  176. package/build/main/types/v3/commons.js +6 -0
  177. package/build/main/types/v3/factories/IERC20Metadata__factory.d.ts +35 -0
  178. package/build/main/types/v3/factories/IERC20Metadata__factory.js +242 -0
  179. package/build/main/types/v3/factories/IQuoterV2__factory.d.ts +41 -0
  180. package/build/main/types/v3/factories/IQuoterV2__factory.js +220 -0
  181. package/build/main/types/v3/factories/IUniswapV3PoolState__factory.d.ts +22 -0
  182. package/build/main/types/v3/factories/IUniswapV3PoolState__factory.js +266 -0
  183. package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +61 -0
  184. package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.js +127 -0
  185. package/build/main/util/addresses.d.ts +25 -0
  186. package/build/main/util/addresses.js +55 -0
  187. package/build/main/util/amounts.d.ts +8 -0
  188. package/build/main/util/amounts.js +51 -0
  189. package/build/main/util/callData.d.ts +1 -0
  190. package/build/main/util/callData.js +6 -0
  191. package/build/main/util/chains.d.ts +55 -0
  192. package/build/main/util/chains.js +505 -0
  193. package/build/main/util/gas-factory-helpers.d.ts +25 -0
  194. package/build/main/util/gas-factory-helpers.js +305 -0
  195. package/build/main/util/index.d.ts +7 -0
  196. package/build/main/util/index.js +24 -0
  197. package/build/main/util/log.d.ts +3 -0
  198. package/build/main/util/log.js +97 -0
  199. package/build/main/util/methodParameters.d.ts +5 -0
  200. package/build/main/util/methodParameters.js +108 -0
  201. package/build/main/util/metric.d.ts +48 -0
  202. package/build/main/util/metric.js +59 -0
  203. package/build/main/util/protocols.d.ts +2 -0
  204. package/build/main/util/protocols.js +18 -0
  205. package/build/main/util/routes.d.ts +8 -0
  206. package/build/main/util/routes.js +60 -0
  207. package/build/main/util/unsupported-tokens.d.ts +37 -0
  208. package/build/main/util/unsupported-tokens.js +1119 -0
  209. package/build/module/index.d.ts +3 -0
  210. package/build/module/index.js +4 -0
  211. package/build/module/providers/cache-node.d.ts +9 -0
  212. package/build/module/providers/cache-node.js +15 -0
  213. package/build/module/providers/cache.d.ts +13 -0
  214. package/build/module/providers/cache.js +2 -0
  215. package/build/module/providers/caching/route/index.d.ts +2 -0
  216. package/build/module/providers/caching/route/index.js +3 -0
  217. package/build/module/providers/caching/route/model/cache-mode.d.ts +16 -0
  218. package/build/module/providers/caching/route/model/cache-mode.js +18 -0
  219. package/build/module/providers/caching/route/model/cached-route.d.ts +26 -0
  220. package/build/module/providers/caching/route/model/cached-route.js +26 -0
  221. package/build/module/providers/caching/route/model/cached-routes.d.ts +66 -0
  222. package/build/module/providers/caching/route/model/cached-routes.js +70 -0
  223. package/build/module/providers/caching/route/model/index.d.ts +3 -0
  224. package/build/module/providers/caching/route/model/index.js +4 -0
  225. package/build/module/providers/caching/route/route-caching-provider.d.ts +90 -0
  226. package/build/module/providers/caching/route/route-caching-provider.js +66 -0
  227. package/build/module/providers/caching-gas-provider.d.ts +23 -0
  228. package/build/module/providers/caching-gas-provider.js +33 -0
  229. package/build/module/providers/caching-token-list-provider.d.ts +40 -0
  230. package/build/module/providers/caching-token-list-provider.js +115 -0
  231. package/build/module/providers/caching-token-provider.d.ts +25 -0
  232. package/build/module/providers/caching-token-provider.js +184 -0
  233. package/build/module/providers/eip-1559-gas-price-provider.d.ts +31 -0
  234. package/build/module/providers/eip-1559-gas-price-provider.js +59 -0
  235. package/build/module/providers/eth-estimate-gas-provider.d.ts +20 -0
  236. package/build/module/providers/eth-estimate-gas-provider.js +92 -0
  237. package/build/module/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
  238. package/build/module/providers/eth-gas-station-info-gas-price-provider.js +30 -0
  239. package/build/module/providers/gas-price-provider.d.ts +10 -0
  240. package/build/module/providers/gas-price-provider.js +6 -0
  241. package/build/module/providers/index.d.ts +37 -0
  242. package/build/module/providers/index.js +38 -0
  243. package/build/module/providers/legacy-gas-price-provider.d.ts +7 -0
  244. package/build/module/providers/legacy-gas-price-provider.js +16 -0
  245. package/build/module/providers/multicall-provider.d.ts +82 -0
  246. package/build/module/providers/multicall-provider.js +11 -0
  247. package/build/module/providers/multicall-uniswap-provider.d.ts +37 -0
  248. package/build/module/providers/multicall-uniswap-provider.js +156 -0
  249. package/build/module/providers/on-chain-gas-price-provider.d.ts +19 -0
  250. package/build/module/providers/on-chain-gas-price-provider.js +30 -0
  251. package/build/module/providers/on-chain-quote-provider.d.ts +221 -0
  252. package/build/module/providers/on-chain-quote-provider.js +517 -0
  253. package/build/module/providers/provider.d.ts +10 -0
  254. package/build/module/providers/provider.js +2 -0
  255. package/build/module/providers/simulation-provider.d.ts +43 -0
  256. package/build/module/providers/simulation-provider.js +132 -0
  257. package/build/module/providers/static-gas-price-provider.d.ts +7 -0
  258. package/build/module/providers/static-gas-price-provider.js +9 -0
  259. package/build/module/providers/swap-router-provider.d.ts +30 -0
  260. package/build/module/providers/swap-router-provider.js +38 -0
  261. package/build/module/providers/tenderly-simulation-provider.d.ts +46 -0
  262. package/build/module/providers/tenderly-simulation-provider.js +261 -0
  263. package/build/module/providers/token-provider.d.ts +102 -0
  264. package/build/module/providers/token-provider.js +287 -0
  265. package/build/module/providers/token-validator-provider.d.ts +42 -0
  266. package/build/module/providers/token-validator-provider.js +88 -0
  267. package/build/module/providers/uri-subgraph-provider.d.ts +20 -0
  268. package/build/module/providers/uri-subgraph-provider.js +58 -0
  269. package/build/module/providers/v2/caching-pool-provider.d.ts +34 -0
  270. package/build/module/providers/v2/caching-pool-provider.js +81 -0
  271. package/build/module/providers/v2/caching-subgraph-provider.d.ts +23 -0
  272. package/build/module/providers/v2/caching-subgraph-provider.js +30 -0
  273. package/build/module/providers/v2/pool-provider.d.ts +59 -0
  274. package/build/module/providers/v2/pool-provider.js +113 -0
  275. package/build/module/providers/v2/quote-provider.d.ts +33 -0
  276. package/build/module/providers/v2/quote-provider.js +87 -0
  277. package/build/module/providers/v2/static-subgraph-provider.d.ts +20 -0
  278. package/build/module/providers/v2/static-subgraph-provider.js +91 -0
  279. package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +19 -0
  280. package/build/module/providers/v2/subgraph-provider-with-fallback.js +31 -0
  281. package/build/module/providers/v2/subgraph-provider.d.ts +33 -0
  282. package/build/module/providers/v2/subgraph-provider.js +135 -0
  283. package/build/module/providers/v2/uri-subgraph-provider.d.ts +4 -0
  284. package/build/module/providers/v2/uri-subgraph-provider.js +4 -0
  285. package/build/module/providers/v3/caching-pool-provider.d.ts +33 -0
  286. package/build/module/providers/v3/caching-pool-provider.js +73 -0
  287. package/build/module/providers/v3/caching-subgraph-provider.d.ts +23 -0
  288. package/build/module/providers/v3/caching-subgraph-provider.js +30 -0
  289. package/build/module/providers/v3/gas-data-provider.d.ts +57 -0
  290. package/build/module/providers/v3/gas-data-provider.js +62 -0
  291. package/build/module/providers/v3/pool-provider.d.ts +60 -0
  292. package/build/module/providers/v3/pool-provider.js +116 -0
  293. package/build/module/providers/v3/static-subgraph-provider.d.ts +22 -0
  294. package/build/module/providers/v3/static-subgraph-provider.js +164 -0
  295. package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +15 -0
  296. package/build/module/providers/v3/subgraph-provider-with-fallback.js +27 -0
  297. package/build/module/providers/v3/subgraph-provider.d.ts +36 -0
  298. package/build/module/providers/v3/subgraph-provider.js +133 -0
  299. package/build/module/providers/v3/uri-subgraph-provider.d.ts +4 -0
  300. package/build/module/providers/v3/uri-subgraph-provider.js +4 -0
  301. package/build/module/routers/alpha-router/alpha-router.d.ts +267 -0
  302. package/build/module/routers/alpha-router/alpha-router.js +846 -0
  303. package/build/module/routers/alpha-router/config.d.ts +4 -0
  304. package/build/module/routers/alpha-router/config.js +89 -0
  305. package/build/module/routers/alpha-router/entities/index.d.ts +1 -0
  306. package/build/module/routers/alpha-router/entities/index.js +2 -0
  307. package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +163 -0
  308. package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +134 -0
  309. package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +19 -0
  310. package/build/module/routers/alpha-router/functions/best-swap-route.js +356 -0
  311. package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
  312. package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.js +14 -0
  313. package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +8 -0
  314. package/build/module/routers/alpha-router/functions/compute-all-routes.js +65 -0
  315. package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +78 -0
  316. package/build/module/routers/alpha-router/functions/get-candidate-pools.js +760 -0
  317. package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +90 -0
  318. package/build/module/routers/alpha-router/gas-models/gas-model.js +55 -0
  319. package/build/module/routers/alpha-router/gas-models/index.d.ts +2 -0
  320. package/build/module/routers/alpha-router/gas-models/index.js +3 -0
  321. package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +25 -0
  322. package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +168 -0
  323. package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +29 -0
  324. package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +160 -0
  325. package/build/module/routers/alpha-router/gas-models/v3/gas-costs.d.ts +10 -0
  326. package/build/module/routers/alpha-router/gas-models/v3/gas-costs.js +116 -0
  327. package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +31 -0
  328. package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +293 -0
  329. package/build/module/routers/alpha-router/index.d.ts +4 -0
  330. package/build/module/routers/alpha-router/index.js +5 -0
  331. package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +68 -0
  332. package/build/module/routers/alpha-router/quoters/base-quoter.js +53 -0
  333. package/build/module/routers/alpha-router/quoters/index.d.ts +5 -0
  334. package/build/module/routers/alpha-router/quoters/index.js +6 -0
  335. package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +20 -0
  336. package/build/module/routers/alpha-router/quoters/mixed-quoter.js +123 -0
  337. package/build/module/routers/alpha-router/quoters/model/index.d.ts +1 -0
  338. package/build/module/routers/alpha-router/quoters/model/index.js +2 -0
  339. package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
  340. package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.js +2 -0
  341. package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
  342. package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.js +2 -0
  343. package/build/module/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
  344. package/build/module/routers/alpha-router/quoters/model/results/index.js +3 -0
  345. package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +21 -0
  346. package/build/module/routers/alpha-router/quoters/v2-quoter.js +115 -0
  347. package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
  348. package/build/module/routers/alpha-router/quoters/v3-quoter.js +118 -0
  349. package/build/module/routers/index.d.ts +4 -0
  350. package/build/module/routers/index.js +5 -0
  351. package/build/module/routers/legacy-router/bases.d.ts +160 -0
  352. package/build/module/routers/legacy-router/bases.js +83 -0
  353. package/build/module/routers/legacy-router/index.d.ts +1 -0
  354. package/build/module/routers/legacy-router/index.js +2 -0
  355. package/build/module/routers/legacy-router/legacy-router.d.ts +42 -0
  356. package/build/module/routers/legacy-router/legacy-router.js +290 -0
  357. package/build/module/routers/router.d.ts +165 -0
  358. package/build/module/routers/router.js +44 -0
  359. package/build/module/tsconfig.module.tsbuildinfo +1 -0
  360. package/build/module/types/other/commons.d.ts +16 -0
  361. package/build/module/types/other/commons.js +5 -0
  362. package/build/module/types/other/factories/Erc20__factory.d.ts +45 -0
  363. package/build/module/types/other/factories/Erc20__factory.js +236 -0
  364. package/build/module/types/other/factories/GasDataArbitrum__factory.d.ts +18 -0
  365. package/build/module/types/other/factories/GasDataArbitrum__factory.js +54 -0
  366. package/build/module/types/other/factories/GasPriceOracle__factory.d.ts +46 -0
  367. package/build/module/types/other/factories/GasPriceOracle__factory.js +312 -0
  368. package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
  369. package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.js +152 -0
  370. package/build/module/types/other/factories/ITokenValidator__factory.d.ts +22 -0
  371. package/build/module/types/other/factories/ITokenValidator__factory.js +74 -0
  372. package/build/module/types/other/factories/Permit2__factory.d.ts +87 -0
  373. package/build/module/types/other/factories/Permit2__factory.js +932 -0
  374. package/build/module/types/other/factories/SwapRouter02__factory.d.ts +67 -0
  375. package/build/module/types/other/factories/SwapRouter02__factory.js +1094 -0
  376. package/build/module/types/v2/commons.d.ts +16 -0
  377. package/build/module/types/v2/commons.js +5 -0
  378. package/build/module/types/v2/factories/IUniswapV2Pair__factory.d.ts +35 -0
  379. package/build/module/types/v2/factories/IUniswapV2Pair__factory.js +667 -0
  380. package/build/module/types/v3/commons.d.ts +16 -0
  381. package/build/module/types/v3/commons.js +5 -0
  382. package/build/module/types/v3/factories/IERC20Metadata__factory.d.ts +35 -0
  383. package/build/module/types/v3/factories/IERC20Metadata__factory.js +238 -0
  384. package/build/module/types/v3/factories/IQuoterV2__factory.d.ts +41 -0
  385. package/build/module/types/v3/factories/IQuoterV2__factory.js +216 -0
  386. package/build/module/types/v3/factories/IUniswapV3PoolState__factory.d.ts +22 -0
  387. package/build/module/types/v3/factories/IUniswapV3PoolState__factory.js +262 -0
  388. package/build/module/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +61 -0
  389. package/build/module/types/v3/factories/UniswapInterfaceMulticall__factory.js +123 -0
  390. package/build/module/util/addresses.d.ts +25 -0
  391. package/build/module/util/addresses.js +89 -0
  392. package/build/module/util/amounts.d.ts +8 -0
  393. package/build/module/util/amounts.js +41 -0
  394. package/build/module/util/callData.d.ts +1 -0
  395. package/build/module/util/callData.js +3 -0
  396. package/build/module/util/chains.d.ts +55 -0
  397. package/build/module/util/chains.js +496 -0
  398. package/build/module/util/gas-factory-helpers.d.ts +25 -0
  399. package/build/module/util/gas-factory-helpers.js +288 -0
  400. package/build/module/util/index.d.ts +7 -0
  401. package/build/module/util/index.js +8 -0
  402. package/build/module/util/log.d.ts +3 -0
  403. package/build/module/util/log.js +93 -0
  404. package/build/module/util/methodParameters.d.ts +5 -0
  405. package/build/module/util/methodParameters.js +106 -0
  406. package/build/module/util/metric.d.ts +48 -0
  407. package/build/module/util/metric.js +53 -0
  408. package/build/module/util/protocols.d.ts +2 -0
  409. package/build/module/util/protocols.js +14 -0
  410. package/build/module/util/routes.d.ts +8 -0
  411. package/build/module/util/routes.js +50 -0
  412. package/build/module/util/unsupported-tokens.d.ts +37 -0
  413. package/build/module/util/unsupported-tokens.js +1116 -0
  414. package/package.json +119 -0
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TOKEN_OVERHEAD = exports.SINGLE_HOP_OVERHEAD = exports.COST_PER_HOP = exports.COST_PER_INIT_TICK = exports.BASE_SWAP_COST = exports.COST_PER_UNINIT_TICK = void 0;
4
+ const bignumber_1 = require("@ethersproject/bignumber");
5
+ const sdk_core_1 = require("@synthra-swap/sdk-core");
6
+ const providers_1 = require("../../../../providers");
7
+ // Cost for crossing an uninitialized tick.
8
+ exports.COST_PER_UNINIT_TICK = bignumber_1.BigNumber.from(0);
9
+ //l2 execution fee on optimism is roughly the same as mainnet
10
+ const BASE_SWAP_COST = (id) => {
11
+ switch (id) {
12
+ case sdk_core_1.ChainId.MAINNET:
13
+ case sdk_core_1.ChainId.GOERLI:
14
+ case sdk_core_1.ChainId.SEPOLIA:
15
+ case sdk_core_1.ChainId.OPTIMISM:
16
+ case sdk_core_1.ChainId.OPTIMISM_GOERLI:
17
+ case sdk_core_1.ChainId.BNB:
18
+ case sdk_core_1.ChainId.AVALANCHE:
19
+ case sdk_core_1.ChainId.BASE:
20
+ case sdk_core_1.ChainId.BASE_GOERLI:
21
+ return bignumber_1.BigNumber.from(2000);
22
+ case sdk_core_1.ChainId.ARBITRUM_ONE:
23
+ case sdk_core_1.ChainId.ARBITRUM_GOERLI:
24
+ return bignumber_1.BigNumber.from(5000);
25
+ case sdk_core_1.ChainId.POLYGON:
26
+ case sdk_core_1.ChainId.POLYGON_MUMBAI:
27
+ return bignumber_1.BigNumber.from(2000);
28
+ case sdk_core_1.ChainId.CELO:
29
+ case sdk_core_1.ChainId.CELO_ALFAJORES:
30
+ return bignumber_1.BigNumber.from(2000);
31
+ //TODO determine if sufficient
32
+ case sdk_core_1.ChainId.GNOSIS:
33
+ return bignumber_1.BigNumber.from(2000);
34
+ case sdk_core_1.ChainId.MOONBEAM:
35
+ return bignumber_1.BigNumber.from(2000);
36
+ case sdk_core_1.ChainId.UOMI:
37
+ return bignumber_1.BigNumber.from(2000);
38
+ }
39
+ };
40
+ exports.BASE_SWAP_COST = BASE_SWAP_COST;
41
+ const COST_PER_INIT_TICK = (id) => {
42
+ switch (id) {
43
+ case sdk_core_1.ChainId.MAINNET:
44
+ case sdk_core_1.ChainId.GOERLI:
45
+ case sdk_core_1.ChainId.SEPOLIA:
46
+ case sdk_core_1.ChainId.BNB:
47
+ case sdk_core_1.ChainId.AVALANCHE:
48
+ return bignumber_1.BigNumber.from(31000);
49
+ case sdk_core_1.ChainId.OPTIMISM:
50
+ case sdk_core_1.ChainId.OPTIMISM_GOERLI:
51
+ case sdk_core_1.ChainId.BASE:
52
+ case sdk_core_1.ChainId.BASE_GOERLI:
53
+ return bignumber_1.BigNumber.from(31000);
54
+ case sdk_core_1.ChainId.ARBITRUM_ONE:
55
+ case sdk_core_1.ChainId.ARBITRUM_GOERLI:
56
+ return bignumber_1.BigNumber.from(31000);
57
+ case sdk_core_1.ChainId.POLYGON:
58
+ case sdk_core_1.ChainId.POLYGON_MUMBAI:
59
+ return bignumber_1.BigNumber.from(31000);
60
+ case sdk_core_1.ChainId.CELO:
61
+ case sdk_core_1.ChainId.CELO_ALFAJORES:
62
+ return bignumber_1.BigNumber.from(31000);
63
+ case sdk_core_1.ChainId.GNOSIS:
64
+ return bignumber_1.BigNumber.from(31000);
65
+ case sdk_core_1.ChainId.MOONBEAM:
66
+ return bignumber_1.BigNumber.from(31000);
67
+ case sdk_core_1.ChainId.UOMI:
68
+ return bignumber_1.BigNumber.from(31000);
69
+ }
70
+ };
71
+ exports.COST_PER_INIT_TICK = COST_PER_INIT_TICK;
72
+ const COST_PER_HOP = (id) => {
73
+ switch (id) {
74
+ case sdk_core_1.ChainId.MAINNET:
75
+ case sdk_core_1.ChainId.GOERLI:
76
+ case sdk_core_1.ChainId.SEPOLIA:
77
+ case sdk_core_1.ChainId.BNB:
78
+ case sdk_core_1.ChainId.OPTIMISM:
79
+ case sdk_core_1.ChainId.OPTIMISM_GOERLI:
80
+ case sdk_core_1.ChainId.AVALANCHE:
81
+ case sdk_core_1.ChainId.BASE:
82
+ case sdk_core_1.ChainId.BASE_GOERLI:
83
+ return bignumber_1.BigNumber.from(80000);
84
+ case sdk_core_1.ChainId.ARBITRUM_ONE:
85
+ case sdk_core_1.ChainId.ARBITRUM_GOERLI:
86
+ return bignumber_1.BigNumber.from(80000);
87
+ case sdk_core_1.ChainId.POLYGON:
88
+ case sdk_core_1.ChainId.POLYGON_MUMBAI:
89
+ return bignumber_1.BigNumber.from(80000);
90
+ case sdk_core_1.ChainId.CELO:
91
+ case sdk_core_1.ChainId.CELO_ALFAJORES:
92
+ return bignumber_1.BigNumber.from(80000);
93
+ case sdk_core_1.ChainId.GNOSIS:
94
+ return bignumber_1.BigNumber.from(80000);
95
+ case sdk_core_1.ChainId.MOONBEAM:
96
+ return bignumber_1.BigNumber.from(80000);
97
+ case sdk_core_1.ChainId.UOMI:
98
+ return bignumber_1.BigNumber.from(80000);
99
+ }
100
+ };
101
+ exports.COST_PER_HOP = COST_PER_HOP;
102
+ const SINGLE_HOP_OVERHEAD = (_id) => {
103
+ return bignumber_1.BigNumber.from(15000);
104
+ };
105
+ exports.SINGLE_HOP_OVERHEAD = SINGLE_HOP_OVERHEAD;
106
+ const TOKEN_OVERHEAD = (id, route) => {
107
+ const tokens = route.tokenPath;
108
+ let overhead = bignumber_1.BigNumber.from(0);
109
+ if (id == sdk_core_1.ChainId.MAINNET) {
110
+ // AAVE's transfer contains expensive governance snapshotting logic. We estimate
111
+ // it at around 150k.
112
+ if (tokens.some((t) => t.equals(providers_1.AAVE_MAINNET))) {
113
+ overhead = overhead.add(150000);
114
+ }
115
+ // LDO's reaches out to an external token controller which adds a large overhead
116
+ // of around 150k.
117
+ if (tokens.some((t) => t.equals(providers_1.LIDO_MAINNET))) {
118
+ overhead = overhead.add(150000);
119
+ }
120
+ }
121
+ return overhead;
122
+ };
123
+ exports.TOKEN_OVERHEAD = TOKEN_OVERHEAD;
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzLWNvc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL2dhcy1tb2RlbHMvdjMvZ2FzLWNvc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQUFxRDtBQUNyRCxnREFBbUQ7QUFFbkQscURBQW1FO0FBSW5FLDJDQUEyQztBQUM5QixRQUFBLG9CQUFvQixHQUFHLHFCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXRELDZEQUE2RDtBQUN0RCxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQWdCLEVBQWEsRUFBRTtJQUM1RCxRQUFRLEVBQUUsRUFBRTtRQUNWLEtBQUssa0JBQU8sQ0FBQyxPQUFPLENBQUM7UUFDckIsS0FBSyxrQkFBTyxDQUFDLE1BQU0sQ0FBQztRQUNwQixLQUFLLGtCQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3JCLEtBQUssa0JBQU8sQ0FBQyxRQUFRLENBQUM7UUFDdEIsS0FBSyxrQkFBTyxDQUFDLGVBQWUsQ0FBQztRQUM3QixLQUFLLGtCQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEtBQUssa0JBQU8sQ0FBQyxTQUFTLENBQUM7UUFDdkIsS0FBSyxrQkFBTyxDQUFDLElBQUksQ0FBQztRQUNsQixLQUFLLGtCQUFPLENBQUMsV0FBVztZQUN0QixPQUFPLHFCQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLEtBQUssa0JBQU8sQ0FBQyxZQUFZLENBQUM7UUFDMUIsS0FBSyxrQkFBTyxDQUFDLGVBQWU7WUFDMUIsT0FBTyxxQkFBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixLQUFLLGtCQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3JCLEtBQUssa0JBQU8sQ0FBQyxjQUFjO1lBQ3pCLE9BQU8scUJBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUIsS0FBSyxr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
@@ -0,0 +1,31 @@
1
+ import { V3RouteWithValidQuote } from '../../entities/route-with-valid-quote';
2
+ import { BuildOnChainGasModelFactoryType, IGasModel, IOnChainGasModelFactory } from '../gas-model';
3
+ /**
4
+ * Computes a gas estimate for a V3 swap using heuristics.
5
+ * Considers number of hops in the route, number of ticks crossed
6
+ * and the typical base cost for a swap.
7
+ *
8
+ * We get the number of ticks crossed in a swap from the QuoterV2
9
+ * contract.
10
+ *
11
+ * We compute gas estimates off-chain because
12
+ * 1/ Calling eth_estimateGas for a swaps requires the caller to have
13
+ * the full balance token being swapped, and approvals.
14
+ * 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
15
+ * due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
16
+ * 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
17
+ *
18
+ * @export
19
+ * @class V3HeuristicGasModelFactory
20
+ */
21
+ export declare class V3HeuristicGasModelFactory extends IOnChainGasModelFactory {
22
+ constructor();
23
+ buildGasModel({ chainId, gasPriceWei, pools, amountToken, quoteToken, l2GasDataProvider, }: BuildOnChainGasModelFactoryType): Promise<IGasModel<V3RouteWithValidQuote>>;
24
+ private estimateGas;
25
+ /**
26
+ * To avoid having a call to optimism's L1 security fee contract for every route and amount combination,
27
+ * we replicate the gas cost accounting here.
28
+ */
29
+ private calculateOptimismToL1SecurityFee;
30
+ private calculateArbitrumToL1SecurityFee;
31
+ }
@@ -0,0 +1,300 @@
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.V3HeuristicGasModelFactory = void 0;
7
+ const bignumber_1 = require("@ethersproject/bignumber");
8
+ const sdk_core_1 = require("@synthra-swap/sdk-core");
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const __1 = require("../../../..");
11
+ const amounts_1 = require("../../../../util/amounts");
12
+ const gas_factory_helpers_1 = require("../../../../util/gas-factory-helpers");
13
+ const log_1 = require("../../../../util/log");
14
+ const methodParameters_1 = require("../../../../util/methodParameters");
15
+ const gas_model_1 = require("../gas-model");
16
+ const gas_costs_1 = require("./gas-costs");
17
+ /**
18
+ * Computes a gas estimate for a V3 swap using heuristics.
19
+ * Considers number of hops in the route, number of ticks crossed
20
+ * and the typical base cost for a swap.
21
+ *
22
+ * We get the number of ticks crossed in a swap from the QuoterV2
23
+ * contract.
24
+ *
25
+ * We compute gas estimates off-chain because
26
+ * 1/ Calling eth_estimateGas for a swaps requires the caller to have
27
+ * the full balance token being swapped, and approvals.
28
+ * 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
29
+ * due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
30
+ * 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
31
+ *
32
+ * @export
33
+ * @class V3HeuristicGasModelFactory
34
+ */
35
+ class V3HeuristicGasModelFactory extends gas_model_1.IOnChainGasModelFactory {
36
+ constructor() {
37
+ super();
38
+ }
39
+ async buildGasModel({ chainId, gasPriceWei, pools, amountToken, quoteToken, l2GasDataProvider, }) {
40
+ const l2GasData = l2GasDataProvider
41
+ ? await l2GasDataProvider.getGasData()
42
+ : undefined;
43
+ const usdPool = pools.usdPool;
44
+ const calculateL1GasFees = async (route) => {
45
+ const swapOptions = {
46
+ type: __1.SwapType.UNIVERSAL_ROUTER,
47
+ recipient: '0x0000000000000000000000000000000000000001',
48
+ deadlineOrPreviousBlockhash: 100,
49
+ slippageTolerance: new sdk_core_1.Percent(5, 10000),
50
+ };
51
+ let l1Used = bignumber_1.BigNumber.from(0);
52
+ let l1FeeInWei = bignumber_1.BigNumber.from(0);
53
+ const opStackChains = [
54
+ sdk_core_1.ChainId.OPTIMISM,
55
+ sdk_core_1.ChainId.OPTIMISM_GOERLI,
56
+ sdk_core_1.ChainId.BASE,
57
+ sdk_core_1.ChainId.BASE_GOERLI,
58
+ ];
59
+ if (opStackChains.includes(chainId)) {
60
+ [l1Used, l1FeeInWei] = this.calculateOptimismToL1SecurityFee(route, swapOptions, l2GasData);
61
+ }
62
+ else if (chainId == sdk_core_1.ChainId.ARBITRUM_ONE ||
63
+ chainId == sdk_core_1.ChainId.ARBITRUM_GOERLI) {
64
+ [l1Used, l1FeeInWei] = this.calculateArbitrumToL1SecurityFee(route, swapOptions, l2GasData);
65
+ }
66
+ // wrap fee to native currency
67
+ const nativeCurrency = __1.WRAPPED_NATIVE_CURRENCY[chainId];
68
+ const costNativeCurrency = amounts_1.CurrencyAmount.fromRawAmount(nativeCurrency, l1FeeInWei.toString());
69
+ // convert fee into usd
70
+ const nativeTokenPrice = usdPool.token0.address == nativeCurrency.address
71
+ ? usdPool.token0Price
72
+ : usdPool.token1Price;
73
+ const gasCostL1USD = nativeTokenPrice.quote(costNativeCurrency);
74
+ let gasCostL1QuoteToken = costNativeCurrency;
75
+ // if the inputted token is not in the native currency, quote a native/quote token pool to get the gas cost in terms of the quote token
76
+ if (!quoteToken.equals(nativeCurrency)) {
77
+ const nativePool = pools.nativeQuoteTokenV3Pool;
78
+ if (!nativePool) {
79
+ log_1.log.info('Could not find a pool to convert the cost into the quote token');
80
+ gasCostL1QuoteToken = amounts_1.CurrencyAmount.fromRawAmount(quoteToken, 0);
81
+ }
82
+ else {
83
+ const nativeTokenPrice = nativePool.token0.address == nativeCurrency.address
84
+ ? nativePool.token0Price
85
+ : nativePool.token1Price;
86
+ gasCostL1QuoteToken = nativeTokenPrice.quote(costNativeCurrency);
87
+ }
88
+ }
89
+ // gasUsedL1 is the gas units used calculated from the bytes of the calldata
90
+ // gasCostL1USD and gasCostL1QuoteToken is the cost of gas in each of those tokens
91
+ return {
92
+ gasUsedL1: l1Used,
93
+ gasCostL1USD,
94
+ gasCostL1QuoteToken,
95
+ };
96
+ };
97
+ // If our quote token is WETH, we don't need to convert our gas use to be in terms
98
+ // of the quote token in order to produce a gas adjusted amount.
99
+ // We do return a gas use in USD however, so we still convert to usd.
100
+ const nativeCurrency = __1.WRAPPED_NATIVE_CURRENCY[chainId];
101
+ if (quoteToken.equals(nativeCurrency)) {
102
+ const estimateGasCost = (routeWithValidQuote) => {
103
+ const { totalGasCostNativeCurrency, baseGasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId);
104
+ const token0 = usdPool.token0.address == nativeCurrency.address;
105
+ const nativeTokenPrice = token0
106
+ ? usdPool.token0Price
107
+ : usdPool.token1Price;
108
+ const gasCostInTermsOfUSD = nativeTokenPrice.quote(totalGasCostNativeCurrency);
109
+ return {
110
+ gasEstimate: baseGasUse,
111
+ gasCostInToken: totalGasCostNativeCurrency,
112
+ gasCostInUSD: gasCostInTermsOfUSD,
113
+ };
114
+ };
115
+ return {
116
+ estimateGasCost,
117
+ calculateL1GasFees,
118
+ };
119
+ }
120
+ // If the quote token is not in the native currency, we convert the gas cost to be in terms of the quote token.
121
+ // We do this by getting the highest liquidity <quoteToken>/<nativeCurrency> pool. eg. <quoteToken>/ETH pool.
122
+ const nativePool = pools.nativeQuoteTokenV3Pool;
123
+ let nativeAmountPool = null;
124
+ if (!amountToken.equals(nativeCurrency)) {
125
+ nativeAmountPool = pools.nativeAmountTokenV3Pool;
126
+ }
127
+ const usdToken = usdPool.token0.address == nativeCurrency.address
128
+ ? usdPool.token1
129
+ : usdPool.token0;
130
+ const estimateGasCost = (routeWithValidQuote) => {
131
+ const { totalGasCostNativeCurrency, baseGasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId);
132
+ let gasCostInTermsOfQuoteToken = null;
133
+ if (nativePool) {
134
+ const token0 = nativePool.token0.address == nativeCurrency.address;
135
+ // returns mid price in terms of the native currency (the ratio of quoteToken/nativeToken)
136
+ const nativeTokenPrice = token0
137
+ ? nativePool.token0Price
138
+ : nativePool.token1Price;
139
+ try {
140
+ // native token is base currency
141
+ gasCostInTermsOfQuoteToken = nativeTokenPrice.quote(totalGasCostNativeCurrency);
142
+ }
143
+ catch (err) {
144
+ log_1.log.info({
145
+ nativeTokenPriceBase: nativeTokenPrice.baseCurrency,
146
+ nativeTokenPriceQuote: nativeTokenPrice.quoteCurrency,
147
+ gasCostInEth: totalGasCostNativeCurrency.currency,
148
+ }, 'Debug eth price token issue');
149
+ throw err;
150
+ }
151
+ }
152
+ // we have a nativeAmountPool, but not a nativePool
153
+ else {
154
+ log_1.log.info(`Unable to find ${nativeCurrency.symbol} pool with the quote token, ${quoteToken.symbol} to produce gas adjusted costs. Using amountToken to calculate gas costs.`);
155
+ }
156
+ // Highest liquidity pool for the non quote token / ETH
157
+ // A pool with the non quote token / ETH should not be required and errors should be handled separately
158
+ if (nativeAmountPool) {
159
+ // get current execution price (amountToken / quoteToken)
160
+ const executionPrice = new sdk_core_1.Price(routeWithValidQuote.amount.currency, routeWithValidQuote.quote.currency, routeWithValidQuote.amount.quotient, routeWithValidQuote.quote.quotient);
161
+ const inputIsToken0 = nativeAmountPool.token0.address == nativeCurrency.address;
162
+ // ratio of input / native
163
+ const nativeAmountTokenPrice = inputIsToken0
164
+ ? nativeAmountPool.token0Price
165
+ : nativeAmountPool.token1Price;
166
+ const gasCostInTermsOfAmountToken = nativeAmountTokenPrice.quote(totalGasCostNativeCurrency);
167
+ // Convert gasCostInTermsOfAmountToken to quote token using execution price
168
+ const syntheticGasCostInTermsOfQuoteToken = executionPrice.quote(gasCostInTermsOfAmountToken);
169
+ // Note that the syntheticGasCost being lessThan the original quoted value is not always strictly better
170
+ // e.g. the scenario where the amountToken/ETH pool is very illiquid as well and returns an extremely small number
171
+ // however, it is better to have the gasEstimation be almost 0 than almost infinity, as the user will still receive a quote
172
+ if (gasCostInTermsOfQuoteToken === null ||
173
+ syntheticGasCostInTermsOfQuoteToken.lessThan(gasCostInTermsOfQuoteToken.asFraction)) {
174
+ log_1.log.info({
175
+ nativeAmountTokenPrice: nativeAmountTokenPrice.toSignificant(6),
176
+ gasCostInTermsOfQuoteToken: gasCostInTermsOfQuoteToken
177
+ ? gasCostInTermsOfQuoteToken.toExact()
178
+ : 0,
179
+ gasCostInTermsOfAmountToken: gasCostInTermsOfAmountToken.toExact(),
180
+ executionPrice: executionPrice.toSignificant(6),
181
+ syntheticGasCostInTermsOfQuoteToken: syntheticGasCostInTermsOfQuoteToken.toSignificant(6),
182
+ }, 'New gasCostInTermsOfQuoteToken calculated with synthetic quote token price is less than original');
183
+ gasCostInTermsOfQuoteToken = syntheticGasCostInTermsOfQuoteToken;
184
+ }
185
+ }
186
+ // true if token0 is the native currency
187
+ const token0USDPool = usdPool.token0.address == nativeCurrency.address;
188
+ // gets the mid price of the pool in terms of the native token
189
+ const nativeTokenPriceUSDPool = token0USDPool
190
+ ? usdPool.token0Price
191
+ : usdPool.token1Price;
192
+ let gasCostInTermsOfUSD;
193
+ try {
194
+ gasCostInTermsOfUSD = nativeTokenPriceUSDPool.quote(totalGasCostNativeCurrency);
195
+ }
196
+ catch (err) {
197
+ log_1.log.info({
198
+ usdT1: usdPool.token0.symbol,
199
+ usdT2: usdPool.token1.symbol,
200
+ gasCostInNativeToken: totalGasCostNativeCurrency.currency.symbol,
201
+ }, 'Failed to compute USD gas price');
202
+ throw err;
203
+ }
204
+ // If gasCostInTermsOfQuoteToken is null, both attempts to calculate gasCostInTermsOfQuoteToken failed (nativePool and amountNativePool)
205
+ if (gasCostInTermsOfQuoteToken === null) {
206
+ log_1.log.info(`Unable to find ${nativeCurrency.symbol} pool with the quote token, ${quoteToken.symbol}, or amount Token, ${amountToken.symbol} to produce gas adjusted costs. Route will not account for gas.`);
207
+ return {
208
+ gasEstimate: baseGasUse,
209
+ gasCostInToken: amounts_1.CurrencyAmount.fromRawAmount(quoteToken, 0),
210
+ gasCostInUSD: amounts_1.CurrencyAmount.fromRawAmount(usdToken, 0),
211
+ };
212
+ }
213
+ return {
214
+ gasEstimate: baseGasUse,
215
+ gasCostInToken: gasCostInTermsOfQuoteToken,
216
+ gasCostInUSD: gasCostInTermsOfUSD,
217
+ };
218
+ };
219
+ return {
220
+ estimateGasCost: estimateGasCost.bind(this),
221
+ calculateL1GasFees,
222
+ };
223
+ }
224
+ estimateGas(routeWithValidQuote, gasPriceWei, chainId) {
225
+ const totalInitializedTicksCrossed = bignumber_1.BigNumber.from(Math.max(1, lodash_1.default.sum(routeWithValidQuote.initializedTicksCrossedList)));
226
+ const totalHops = bignumber_1.BigNumber.from(routeWithValidQuote.route.pools.length);
227
+ let hopsGasUse = (0, gas_costs_1.COST_PER_HOP)(chainId).mul(totalHops);
228
+ // We have observed that this algorithm tends to underestimate single hop swaps.
229
+ // We add a buffer in the case of a single hop swap.
230
+ if (totalHops.eq(1)) {
231
+ hopsGasUse = hopsGasUse.add((0, gas_costs_1.SINGLE_HOP_OVERHEAD)(chainId));
232
+ }
233
+ // Some tokens have extremely expensive transferFrom functions, which causes
234
+ // us to underestimate them by a large amount. For known tokens, we apply an
235
+ // adjustment.
236
+ const tokenOverhead = (0, gas_costs_1.TOKEN_OVERHEAD)(chainId, routeWithValidQuote.route);
237
+ const tickGasUse = (0, gas_costs_1.COST_PER_INIT_TICK)(chainId).mul(totalInitializedTicksCrossed);
238
+ const uninitializedTickGasUse = gas_costs_1.COST_PER_UNINIT_TICK.mul(0);
239
+ // base estimate gas used based on chainId estimates for hops and ticks gas useage
240
+ const baseGasUse = (0, gas_costs_1.BASE_SWAP_COST)(chainId)
241
+ .add(hopsGasUse)
242
+ .add(tokenOverhead)
243
+ .add(tickGasUse)
244
+ .add(uninitializedTickGasUse);
245
+ const baseGasCostWei = gasPriceWei.mul(baseGasUse);
246
+ const wrappedCurrency = __1.WRAPPED_NATIVE_CURRENCY[chainId];
247
+ const totalGasCostNativeCurrency = amounts_1.CurrencyAmount.fromRawAmount(wrappedCurrency, baseGasCostWei.toString());
248
+ return {
249
+ totalGasCostNativeCurrency,
250
+ totalInitializedTicksCrossed,
251
+ baseGasUse,
252
+ };
253
+ }
254
+ /**
255
+ * To avoid having a call to optimism's L1 security fee contract for every route and amount combination,
256
+ * we replicate the gas cost accounting here.
257
+ */
258
+ calculateOptimismToL1SecurityFee(routes, swapConfig, gasData) {
259
+ const { l1BaseFee, scalar, decimals, overhead } = gasData;
260
+ const route = routes[0];
261
+ const amountToken = route.tradeType == sdk_core_1.TradeType.EXACT_INPUT
262
+ ? route.amount.currency
263
+ : route.quote.currency;
264
+ const outputToken = route.tradeType == sdk_core_1.TradeType.EXACT_INPUT
265
+ ? route.quote.currency
266
+ : route.amount.currency;
267
+ // build trade for swap calldata
268
+ const trade = (0, methodParameters_1.buildTrade)(amountToken, outputToken, route.tradeType, routes);
269
+ const data = (0, methodParameters_1.buildSwapMethodParameters)(trade, swapConfig, sdk_core_1.ChainId.OPTIMISM).calldata;
270
+ const l1GasUsed = (0, gas_factory_helpers_1.getL2ToL1GasUsed)(data, overhead);
271
+ // l1BaseFee is L1 Gas Price on etherscan
272
+ const l1Fee = l1GasUsed.mul(l1BaseFee);
273
+ const unscaled = l1Fee.mul(scalar);
274
+ // scaled = unscaled / (10 ** decimals)
275
+ const scaledConversion = bignumber_1.BigNumber.from(10).pow(decimals);
276
+ const scaled = unscaled.div(scaledConversion);
277
+ return [l1GasUsed, scaled];
278
+ }
279
+ calculateArbitrumToL1SecurityFee(routes, swapConfig, gasData) {
280
+ const { perL2TxFee, perL1CalldataFee } = gasData;
281
+ const route = routes[0];
282
+ const amountToken = route.tradeType == sdk_core_1.TradeType.EXACT_INPUT
283
+ ? route.amount.currency
284
+ : route.quote.currency;
285
+ const outputToken = route.tradeType == sdk_core_1.TradeType.EXACT_INPUT
286
+ ? route.quote.currency
287
+ : route.amount.currency;
288
+ // build trade for swap calldata
289
+ const trade = (0, methodParameters_1.buildTrade)(amountToken, outputToken, route.tradeType, routes);
290
+ const data = (0, methodParameters_1.buildSwapMethodParameters)(trade, swapConfig, sdk_core_1.ChainId.ARBITRUM_ONE).calldata;
291
+ // calculates gas amounts based on bytes of calldata, use 0 as overhead.
292
+ const l1GasUsed = (0, gas_factory_helpers_1.getL2ToL1GasUsed)(data, bignumber_1.BigNumber.from(0));
293
+ // multiply by the fee per calldata and add the flat l2 fee
294
+ let l1Fee = l1GasUsed.mul(perL1CalldataFee);
295
+ l1Fee = l1Fee.add(perL2TxFee);
296
+ return [l1GasUsed, l1Fee];
297
+ }
298
+ }
299
+ exports.V3HeuristicGasModelFactory = V3HeuristicGasModelFactory;
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjMtaGV1cmlzdGljLWdhcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2FscGhhLXJvdXRlci9nYXMtbW9kZWxzL3YzL3YzLWhldXJpc3RpYy1nYXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQXFEO0FBRXJELGdEQUF1RTtBQUN2RSxvREFBdUI7QUFFdkIsbUNBSXFCO0FBS3JCLHNEQUEwRDtBQUUxRCw4RUFBd0U7QUFDeEUsOENBQTJDO0FBQzNDLHdFQUcyQztBQUUzQyw0Q0FJc0I7QUFFdEIsMkNBT3FCO0FBRXJCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsMEJBQTJCLFNBQVEsbUNBQXVCO0lBQ3JFO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUN6QixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssRUFDTCxXQUFXLEVBQ1gsVUFBVSxFQUNWLGlCQUFpQixHQUNlO1FBR2hDLE1BQU0sU0FBUyxHQUFHLGlCQUFpQjtZQUNqQyxDQUFDLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUU7WUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLE1BQU0sT0FBTyxHQUFTLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFcEMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQzlCLEtBQThCLEVBSzdCLEVBQUU7WUFDSCxNQUFNLFdBQVcsR0FBK0I7Z0JBQzlDLElBQUksRUFBRSxZQUFRLENBQUMsZ0JBQWdCO2dCQUMvQixTQUFTLEVBQUUsNENBQTRDO2dCQUN2RCwyQkFBMkIsRUFBRSxHQUFHO2dCQUNoQyxpQkFBaUIsRUFBRSxJQUFJLGtCQUFPLENBQUMsQ0FBQyxFQUFFLEtBQU0sQ0FBQzthQUMxQyxDQUFDO1lBQ0YsSUFBSSxNQUFNLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENB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
@@ -0,0 +1,4 @@
1
+ export * from './alpha-router';
2
+ export * from './entities';
3
+ export * from './gas-models';
4
+ export * from './quoters';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./alpha-router"), exports);
18
+ __exportStar(require("./entities"), exports);
19
+ __exportStar(require("./gas-models"), exports);
20
+ __exportStar(require("./quoters"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcm91dGVycy9hbHBoYS1yb3V0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQjtBQUMvQiw2Q0FBMkI7QUFDM0IsK0NBQTZCO0FBQzdCLDRDQUEwQiJ9
@@ -0,0 +1,68 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { Pair } from '@uniswap/v2-sdk';
3
+ import { Pool } from '@uniswap/v3-sdk';
4
+ import { Currency, Token, TradeType } from '@synthra-swap/sdk-core';
5
+ import { ITokenListProvider, ITokenProvider, ITokenValidatorProvider, TokenValidationResult } from '../../../providers';
6
+ import { CurrencyAmount, SupportedIds } from '../../../util';
7
+ import { MixedRoute, V2Route, V3Route } from '../../router';
8
+ import { AlphaRouterConfig } from '../alpha-router';
9
+ import { RouteWithValidQuote } from '../entities/route-with-valid-quote';
10
+ import { CandidatePoolsBySelectionCriteria } from '../functions/get-candidate-pools';
11
+ import { IGasModel } from '../gas-models';
12
+ import { GetQuotesResult, GetRoutesResult } from './model/results';
13
+ /**
14
+ * Interface for a Quoter.
15
+ * Defines the base dependencies, helper methods and interface for how to fetch quotes.
16
+ *
17
+ * @abstract
18
+ * @template Route
19
+ */
20
+ export declare abstract class BaseQuoter<Route extends V2Route | V3Route | MixedRoute> {
21
+ protected tokenProvider: ITokenProvider;
22
+ protected chainId: SupportedIds;
23
+ protected blockedTokenListProvider?: ITokenListProvider;
24
+ protected tokenValidatorProvider?: ITokenValidatorProvider;
25
+ constructor(tokenProvider: ITokenProvider, chainId: SupportedIds, blockedTokenListProvider?: ITokenListProvider, tokenValidatorProvider?: ITokenValidatorProvider);
26
+ /**
27
+ * Protected method in charge of fetching the routes for the tokenIn/tokenOut pair.
28
+ *
29
+ * @protected
30
+ * @abstract
31
+ * @param tokenIn The token that the user wants to provide
32
+ * @param tokenOut The token that the usaw wants to receive
33
+ * @param tradeType The type of quote the user wants. He could want to provide exactly X tokenIn or receive exactly X tokenOut
34
+ * @param routingConfig
35
+ * @returns Promise<GetRoutesResult<Route>>
36
+ */
37
+ protected abstract getRoutes(tokenIn: Token, tokenOut: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig): Promise<GetRoutesResult<Route>>;
38
+ /**
39
+ * Public method that will fetch quotes for the combination of every route and every amount.
40
+ *
41
+ * @param routes the list of route that can be used to fetch a quote.
42
+ * @param amounts the list of amounts to query for EACH route.
43
+ * @param percents the percentage of each amount.
44
+ * @param quoteToken
45
+ * @param tradeType
46
+ * @param routingConfig
47
+ * @param candidatePools the candidate pools that were used to generate the routes
48
+ * @param gasModel the gasModel to be used for estimating gas cost
49
+ * @param gasPriceWei instead of passing gasModel, gasPriceWei is used to generate a gasModel
50
+ * @returns Promise<GetQuotesResult<Route>>
51
+ */
52
+ abstract getQuotes(routes: Route[], amounts: CurrencyAmount[], percents: number[], quoteToken: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig, candidatePools?: CandidatePoolsBySelectionCriteria, gasModel?: IGasModel<RouteWithValidQuote>, gasPriceWei?: BigNumber): Promise<GetQuotesResult>;
53
+ /**
54
+ * Public method which would first get the routes and then get the quotes.
55
+ *
56
+ * @param tokenIn The token that the user wants to provide
57
+ * @param tokenOut The token that the usaw wants to receive
58
+ * @param amounts the list of amounts to query for EACH route.
59
+ * @param percents the percentage of each amount.
60
+ * @param quoteToken
61
+ * @param tradeType
62
+ * @param routingConfig
63
+ * @param gasModel the gasModel to be used for estimating gas cost
64
+ * @param gasPriceWei instead of passing gasModel, gasPriceWei is used to generate a gasModel
65
+ */
66
+ getRoutesThenQuotes(tokenIn: Token, tokenOut: Token, amounts: CurrencyAmount[], percents: number[], quoteToken: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig, gasModel?: IGasModel<RouteWithValidQuote>, gasPriceWei?: BigNumber): Promise<GetQuotesResult>;
67
+ protected applyTokenValidatorToPools<T extends Pool | Pair>(pools: T[], isInvalidFn: (token: Currency, tokenValidation: TokenValidationResult | undefined) => boolean): Promise<T[]>;
68
+ }
@@ -0,0 +1,60 @@
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.BaseQuoter = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const util_1 = require("../../../util");
9
+ /**
10
+ * Interface for a Quoter.
11
+ * Defines the base dependencies, helper methods and interface for how to fetch quotes.
12
+ *
13
+ * @abstract
14
+ * @template Route
15
+ */
16
+ class BaseQuoter {
17
+ constructor(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {
18
+ this.tokenProvider = tokenProvider;
19
+ this.chainId = chainId;
20
+ this.blockedTokenListProvider = blockedTokenListProvider;
21
+ this.tokenValidatorProvider = tokenValidatorProvider;
22
+ }
23
+ /**
24
+ * Public method which would first get the routes and then get the quotes.
25
+ *
26
+ * @param tokenIn The token that the user wants to provide
27
+ * @param tokenOut The token that the usaw wants to receive
28
+ * @param amounts the list of amounts to query for EACH route.
29
+ * @param percents the percentage of each amount.
30
+ * @param quoteToken
31
+ * @param tradeType
32
+ * @param routingConfig
33
+ * @param gasModel the gasModel to be used for estimating gas cost
34
+ * @param gasPriceWei instead of passing gasModel, gasPriceWei is used to generate a gasModel
35
+ */
36
+ getRoutesThenQuotes(tokenIn, tokenOut, amounts, percents, quoteToken, tradeType, routingConfig, gasModel, gasPriceWei) {
37
+ return this.getRoutes(tokenIn, tokenOut, tradeType, routingConfig).then((routesResult) => this.getQuotes(routesResult.routes, amounts, percents, quoteToken, tradeType, routingConfig, routesResult.candidatePools, gasModel, gasPriceWei));
38
+ }
39
+ async applyTokenValidatorToPools(pools, isInvalidFn) {
40
+ if (!this.tokenValidatorProvider) {
41
+ return pools;
42
+ }
43
+ util_1.log.info(`Running token validator on ${pools.length} pools`);
44
+ const tokens = lodash_1.default.flatMap(pools, (pool) => [pool.token0, pool.token1]);
45
+ const tokenValidationResults = await this.tokenValidatorProvider.validateTokens(tokens);
46
+ const poolsFiltered = lodash_1.default.filter(pools, (pool) => {
47
+ const token0Validation = tokenValidationResults.getValidationByToken(pool.token0);
48
+ const token1Validation = tokenValidationResults.getValidationByToken(pool.token1);
49
+ const token0Invalid = isInvalidFn(pool.token0, token0Validation);
50
+ const token1Invalid = isInvalidFn(pool.token1, token1Validation);
51
+ if (token0Invalid || token1Invalid) {
52
+ util_1.log.info(`Dropping pool ${(0, util_1.poolToString)(pool)} because token is invalid. ${pool.token0.symbol}: ${token0Validation}, ${pool.token1.symbol}: ${token1Validation}`);
53
+ }
54
+ return !token0Invalid && !token1Invalid;
55
+ });
56
+ return poolsFiltered;
57
+ }
58
+ }
59
+ exports.BaseQuoter = BaseQuoter;
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1xdW90ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcm91dGVycy9hbHBoYS1yb3V0ZXIvcXVvdGVycy9iYXNlLXF1b3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxvREFBdUI7QUFRdkIsd0NBQWdGO0FBU2hGOzs7Ozs7R0FNRztBQUNILE1BQXNCLFVBQVU7SUFNOUIsWUFDRSxhQUE2QixFQUM3QixPQUFxQixFQUNyQix3QkFBNkMsRUFDN0Msc0JBQWdEO1FBRWhELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx3QkFBd0IsQ0FBQztRQUN6RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7SUFDdkQsQ0FBQztJQThDRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxtQkFBbUIsQ0FDeEIsT0FBYyxFQUNkLFFBQWUsRUFDZixPQUF5QixFQUN6QixRQUFrQixFQUNsQixVQUFpQixFQUNqQixTQUFvQixFQUNwQixhQUFnQyxFQUNoQyxRQUF5QyxFQUN6QyxXQUF1QjtRQUV2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUNyRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FDWixZQUFZLENBQUMsTUFBTSxFQUNuQixPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1QsYUFBYSxFQUNiLFlBQVksQ0FBQyxjQUFjLEVBQzNCLFFBQVEsRUFDUixXQUFXLENBQ1osQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVTLEtBQUssQ0FBQywwQkFBMEIsQ0FDeEMsS0FBVSxFQUNWLFdBR1k7UUFFWixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ2hDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxVQUFHLENBQUMsSUFBSSxDQUFDLDhCQUE4QixLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztRQUU3RCxNQUFNLE1BQU0sR0FBRyxnQkFBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV0RSxNQUFNLHNCQUFzQixHQUMxQixNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0QsTUFBTSxhQUFhLEdBQUcsZ0JBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBTyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FDbEUsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FDbEUsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1lBRUYsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRWpFLElBQUksYUFBYSxJQUFJLGFBQWEsRUFBRTtnQkFDbEMsVUFBRyxDQUFDLElBQUksQ0FDTixpQkFBaUIsSUFBQSxtQkFBWSxFQUFDLElBQUksQ0FBQyw4QkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUNkLEtBQUssZ0JBQWdCLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLEVBQUUsQ0FDcEUsQ0FBQzthQUNIO1lBRUQsT0FBTyxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQWhKRCxnQ0FnSkMifQ==