@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,288 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { Protocol } from '@uniswap/router-sdk';
3
+ import { FeeAmount } from '@uniswap/v3-sdk';
4
+ import { ChainId, CurrencyAmount, Token, TradeType, } from '@synthra-swap/sdk-core';
5
+ import _ from 'lodash';
6
+ import { MixedRouteWithValidQuote, usdGasTokensByChain, V2RouteWithValidQuote, V3RouteWithValidQuote, } from '../routers';
7
+ import { log, WRAPPED_NATIVE_CURRENCY } from '../util';
8
+ import { buildTrade } from './methodParameters';
9
+ export async function getV2NativePool(token, poolProvider) {
10
+ const chainId = token.chainId;
11
+ const weth = WRAPPED_NATIVE_CURRENCY[chainId];
12
+ const poolAccessor = await poolProvider.getPools([[weth, token]]);
13
+ const pool = poolAccessor.getPool(weth, token);
14
+ if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {
15
+ log.error({
16
+ weth,
17
+ token,
18
+ reserve0: pool === null || pool === void 0 ? void 0 : pool.reserve0.toExact(),
19
+ reserve1: pool === null || pool === void 0 ? void 0 : pool.reserve1.toExact(),
20
+ }, `Could not find a valid WETH V2 pool with ${token.symbol} for computing gas costs.`);
21
+ return null;
22
+ }
23
+ return pool;
24
+ }
25
+ export async function getHighestLiquidityV3NativePool(token, poolProvider, providerConfig) {
26
+ const nativeCurrency = WRAPPED_NATIVE_CURRENCY[token.chainId];
27
+ const nativePools = _([
28
+ FeeAmount.HIGH,
29
+ FeeAmount.MEDIUM,
30
+ FeeAmount.LOW,
31
+ FeeAmount.LOWEST,
32
+ ])
33
+ .map((feeAmount) => {
34
+ return [nativeCurrency, token, feeAmount];
35
+ })
36
+ .value();
37
+ const poolAccessor = await poolProvider.getPools(nativePools, providerConfig);
38
+ const pools = _([
39
+ FeeAmount.HIGH,
40
+ FeeAmount.MEDIUM,
41
+ FeeAmount.LOW,
42
+ FeeAmount.LOWEST,
43
+ ])
44
+ .map((feeAmount) => {
45
+ return poolAccessor.getPool(nativeCurrency, token, feeAmount);
46
+ })
47
+ .compact()
48
+ .value();
49
+ if (pools.length == 0) {
50
+ log.error({ pools }, `Could not find a ${nativeCurrency.symbol} pool with ${token.symbol} for computing gas costs.`);
51
+ return null;
52
+ }
53
+ const maxPool = _.maxBy(pools, (pool) => pool.liquidity);
54
+ return maxPool;
55
+ }
56
+ export async function getHighestLiquidityV3USDPool(chainId, poolProvider, providerConfig) {
57
+ const usdTokens = usdGasTokensByChain[chainId];
58
+ const wrappedCurrency = WRAPPED_NATIVE_CURRENCY[chainId];
59
+ if (!usdTokens) {
60
+ throw new Error(`Could not find a USD token for computing gas costs on ${chainId}`);
61
+ }
62
+ const usdPools = _([
63
+ FeeAmount.HIGH,
64
+ FeeAmount.MEDIUM,
65
+ FeeAmount.LOW,
66
+ FeeAmount.LOWEST,
67
+ ])
68
+ .flatMap((feeAmount) => {
69
+ return _.map(usdTokens, (usdToken) => [
70
+ wrappedCurrency,
71
+ usdToken,
72
+ feeAmount,
73
+ ]);
74
+ })
75
+ .value();
76
+ const poolAccessor = await poolProvider.getPools(usdPools, providerConfig);
77
+ const pools = _([
78
+ FeeAmount.HIGH,
79
+ FeeAmount.MEDIUM,
80
+ FeeAmount.LOW,
81
+ FeeAmount.LOWEST,
82
+ ])
83
+ .flatMap((feeAmount) => {
84
+ const pools = [];
85
+ for (const usdToken of usdTokens) {
86
+ const pool = poolAccessor.getPool(wrappedCurrency, usdToken, feeAmount);
87
+ if (pool) {
88
+ pools.push(pool);
89
+ }
90
+ }
91
+ return pools;
92
+ })
93
+ .compact()
94
+ .value();
95
+ if (pools.length == 0) {
96
+ const message = `Could not find a USD/${wrappedCurrency.symbol} pool for computing gas costs.`;
97
+ log.error({ pools }, message);
98
+ throw new Error(message);
99
+ }
100
+ const maxPool = _.maxBy(pools, (pool) => pool.liquidity);
101
+ return maxPool;
102
+ }
103
+ export function getGasCostInUSD(usdPool, costNativeCurrency) {
104
+ const nativeCurrency = costNativeCurrency.currency;
105
+ // convert fee into usd
106
+ const nativeTokenPrice = usdPool.token0.address == nativeCurrency.address
107
+ ? usdPool.token0Price
108
+ : usdPool.token1Price;
109
+ const gasCostUSD = nativeTokenPrice.quote(costNativeCurrency);
110
+ return gasCostUSD;
111
+ }
112
+ export function getGasCostInNativeCurrency(nativeCurrency, gasCostInWei) {
113
+ // wrap fee to native currency
114
+ const costNativeCurrency = CurrencyAmount.fromRawAmount(nativeCurrency, gasCostInWei.toString());
115
+ return costNativeCurrency;
116
+ }
117
+ export async function getGasCostInQuoteToken(quoteToken, nativePool, costNativeCurrency) {
118
+ const nativeTokenPrice = nativePool.token0.address == quoteToken.address
119
+ ? nativePool.token1Price
120
+ : nativePool.token0Price;
121
+ const gasCostQuoteToken = nativeTokenPrice.quote(costNativeCurrency);
122
+ return gasCostQuoteToken;
123
+ }
124
+ export function calculateArbitrumToL1FeeFromCalldata(calldata, gasData) {
125
+ const { perL2TxFee, perL1CalldataFee } = gasData;
126
+ // calculates gas amounts based on bytes of calldata, use 0 as overhead.
127
+ const l1GasUsed = getL2ToL1GasUsed(calldata, BigNumber.from(0));
128
+ // multiply by the fee per calldata and add the flat l2 fee
129
+ let l1Fee = l1GasUsed.mul(perL1CalldataFee);
130
+ l1Fee = l1Fee.add(perL2TxFee);
131
+ return [l1GasUsed, l1Fee];
132
+ }
133
+ export function calculateOptimismToL1FeeFromCalldata(calldata, gasData) {
134
+ const { l1BaseFee, scalar, decimals, overhead } = gasData;
135
+ const l1GasUsed = getL2ToL1GasUsed(calldata, overhead);
136
+ // l1BaseFee is L1 Gas Price on etherscan
137
+ const l1Fee = l1GasUsed.mul(l1BaseFee);
138
+ const unscaled = l1Fee.mul(scalar);
139
+ // scaled = unscaled / (10 ** decimals)
140
+ const scaledConversion = BigNumber.from(10).pow(decimals);
141
+ const scaled = unscaled.div(scaledConversion);
142
+ return [l1GasUsed, scaled];
143
+ }
144
+ // based on the code from the optimism OVM_GasPriceOracle contract
145
+ export function getL2ToL1GasUsed(data, overhead) {
146
+ // data is hex encoded
147
+ const dataArr = data.slice(2).match(/.{1,2}/g);
148
+ const numBytes = dataArr.length;
149
+ let count = 0;
150
+ for (let i = 0; i < numBytes; i += 1) {
151
+ const byte = parseInt(dataArr[i], 16);
152
+ if (byte == 0) {
153
+ count += 4;
154
+ }
155
+ else {
156
+ count += 16;
157
+ }
158
+ }
159
+ const unsigned = overhead.add(count);
160
+ const signedConversion = 68 * 16;
161
+ return unsigned.add(signedConversion);
162
+ }
163
+ export async function calculateGasUsed(chainId, route, simulatedGasUsed, v2PoolProvider, v3PoolProvider, l2GasData, providerConfig) {
164
+ const quoteToken = route.quote.currency.wrapped;
165
+ const gasPriceWei = route.gasPriceWei;
166
+ // calculate L2 to L1 security fee if relevant
167
+ let l2toL1FeeInWei = BigNumber.from(0);
168
+ if ([ChainId.ARBITRUM_ONE, ChainId.ARBITRUM_GOERLI].includes(chainId)) {
169
+ l2toL1FeeInWei = calculateArbitrumToL1FeeFromCalldata(route.methodParameters.calldata, l2GasData)[1];
170
+ }
171
+ else if ([
172
+ ChainId.OPTIMISM,
173
+ ChainId.OPTIMISM_GOERLI,
174
+ ChainId.BASE,
175
+ ChainId.BASE_GOERLI,
176
+ ].includes(chainId)) {
177
+ l2toL1FeeInWei = calculateOptimismToL1FeeFromCalldata(route.methodParameters.calldata, l2GasData)[1];
178
+ }
179
+ // add l2 to l1 fee and wrap fee to native currency
180
+ const gasCostInWei = gasPriceWei.mul(simulatedGasUsed).add(l2toL1FeeInWei);
181
+ const nativeCurrency = WRAPPED_NATIVE_CURRENCY[chainId];
182
+ const costNativeCurrency = getGasCostInNativeCurrency(nativeCurrency, gasCostInWei);
183
+ const usdPool = await getHighestLiquidityV3USDPool(chainId, v3PoolProvider, providerConfig);
184
+ const gasCostUSD = await getGasCostInUSD(usdPool, costNativeCurrency);
185
+ let gasCostQuoteToken = costNativeCurrency;
186
+ // get fee in terms of quote token
187
+ if (!quoteToken.equals(nativeCurrency)) {
188
+ const nativePools = await Promise.all([
189
+ getHighestLiquidityV3NativePool(quoteToken, v3PoolProvider, providerConfig),
190
+ getV2NativePool(quoteToken, v2PoolProvider),
191
+ ]);
192
+ const nativePool = nativePools.find((pool) => pool !== null);
193
+ if (!nativePool) {
194
+ log.info('Could not find any V2 or V3 pools to convert the cost into the quote token');
195
+ gasCostQuoteToken = CurrencyAmount.fromRawAmount(quoteToken, 0);
196
+ }
197
+ else {
198
+ gasCostQuoteToken = await getGasCostInQuoteToken(quoteToken, nativePool, costNativeCurrency);
199
+ }
200
+ }
201
+ // Adjust quote for gas fees
202
+ let quoteGasAdjusted;
203
+ if (route.trade.tradeType == TradeType.EXACT_OUTPUT) {
204
+ // Exact output - need more of tokenIn to get the desired amount of tokenOut
205
+ quoteGasAdjusted = route.quote.add(gasCostQuoteToken);
206
+ }
207
+ else {
208
+ // Exact input - can get less of tokenOut due to fees
209
+ quoteGasAdjusted = route.quote.subtract(gasCostQuoteToken);
210
+ }
211
+ return {
212
+ estimatedGasUsedUSD: gasCostUSD,
213
+ estimatedGasUsedQuoteToken: gasCostQuoteToken,
214
+ quoteGasAdjusted: quoteGasAdjusted,
215
+ };
216
+ }
217
+ export function initSwapRouteFromExisting(swapRoute, v2PoolProvider, v3PoolProvider, quoteGasAdjusted, estimatedGasUsed, estimatedGasUsedQuoteToken, estimatedGasUsedUSD) {
218
+ const currencyIn = swapRoute.trade.inputAmount.currency;
219
+ const currencyOut = swapRoute.trade.outputAmount.currency;
220
+ const tradeType = swapRoute.trade.tradeType.valueOf()
221
+ ? TradeType.EXACT_OUTPUT
222
+ : TradeType.EXACT_INPUT;
223
+ const routesWithValidQuote = swapRoute.route.map((route) => {
224
+ switch (route.protocol) {
225
+ case Protocol.V3:
226
+ return new V3RouteWithValidQuote({
227
+ amount: CurrencyAmount.fromFractionalAmount(route.amount.currency, route.amount.numerator, route.amount.denominator),
228
+ rawQuote: BigNumber.from(route.rawQuote),
229
+ sqrtPriceX96AfterList: route.sqrtPriceX96AfterList.map((num) => BigNumber.from(num)),
230
+ initializedTicksCrossedList: [...route.initializedTicksCrossedList],
231
+ quoterGasEstimate: BigNumber.from(route.gasEstimate),
232
+ percent: route.percent,
233
+ route: route.route,
234
+ gasModel: route.gasModel,
235
+ quoteToken: new Token(currencyIn.chainId, route.quoteToken.address, route.quoteToken.decimals, route.quoteToken.symbol, route.quoteToken.name),
236
+ tradeType: tradeType,
237
+ v3PoolProvider: v3PoolProvider,
238
+ });
239
+ case Protocol.V2:
240
+ return new V2RouteWithValidQuote({
241
+ amount: CurrencyAmount.fromFractionalAmount(route.amount.currency, route.amount.numerator, route.amount.denominator),
242
+ rawQuote: BigNumber.from(route.rawQuote),
243
+ percent: route.percent,
244
+ route: route.route,
245
+ gasModel: route.gasModel,
246
+ quoteToken: new Token(currencyIn.chainId, route.quoteToken.address, route.quoteToken.decimals, route.quoteToken.symbol, route.quoteToken.name),
247
+ tradeType: tradeType,
248
+ v2PoolProvider: v2PoolProvider,
249
+ });
250
+ case Protocol.MIXED:
251
+ return new MixedRouteWithValidQuote({
252
+ amount: CurrencyAmount.fromFractionalAmount(route.amount.currency, route.amount.numerator, route.amount.denominator),
253
+ rawQuote: BigNumber.from(route.rawQuote),
254
+ sqrtPriceX96AfterList: route.sqrtPriceX96AfterList.map((num) => BigNumber.from(num)),
255
+ initializedTicksCrossedList: [...route.initializedTicksCrossedList],
256
+ quoterGasEstimate: BigNumber.from(route.gasEstimate),
257
+ percent: route.percent,
258
+ route: route.route,
259
+ mixedRouteGasModel: route.gasModel,
260
+ v2PoolProvider,
261
+ quoteToken: new Token(currencyIn.chainId, route.quoteToken.address, route.quoteToken.decimals, route.quoteToken.symbol, route.quoteToken.name),
262
+ tradeType: tradeType,
263
+ v3PoolProvider: v3PoolProvider,
264
+ });
265
+ }
266
+ });
267
+ const trade = buildTrade(currencyIn, currencyOut, tradeType, routesWithValidQuote);
268
+ return {
269
+ quote: swapRoute.quote,
270
+ quoteGasAdjusted,
271
+ estimatedGasUsed,
272
+ estimatedGasUsedQuoteToken,
273
+ estimatedGasUsedUSD,
274
+ gasPriceWei: BigNumber.from(swapRoute.gasPriceWei),
275
+ trade,
276
+ route: routesWithValidQuote,
277
+ blockNumber: BigNumber.from(swapRoute.blockNumber),
278
+ methodParameters: swapRoute.methodParameters
279
+ ? {
280
+ calldata: swapRoute.methodParameters.calldata,
281
+ value: swapRoute.methodParameters.value,
282
+ to: swapRoute.methodParameters.to,
283
+ }
284
+ : undefined,
285
+ simulationStatus: swapRoute.simulationStatus,
286
+ };
287
+ }
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzLWZhY3RvcnktaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlsL2dhcy1mYWN0b3J5LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFRLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUNMLE9BQU8sRUFFUCxjQUFjLEVBQ2QsS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQVN2QixPQUFPLEVBRUwsd0JBQXdCLEVBRXhCLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3RCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxHQUFHLEVBQWdCLHVCQUF1QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FDbkMsS0FBWSxFQUNaLFlBQTZCO0lBRTdCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUF1QixDQUFDO0lBQzlDLE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUvQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FB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
@@ -0,0 +1,7 @@
1
+ export * from './addresses';
2
+ export * from './amounts';
3
+ export * from './chains';
4
+ export * from './log';
5
+ export * from './metric';
6
+ export * from './protocols';
7
+ export * from './routes';
@@ -0,0 +1,8 @@
1
+ export * from './addresses';
2
+ export * from './amounts';
3
+ export * from './chains';
4
+ export * from './log';
5
+ export * from './metric';
6
+ export * from './protocols';
7
+ export * from './routes';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFVBQVUsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ import Logger from 'bunyan';
2
+ export declare let log: Logger;
3
+ export declare const setGlobalLogger: (_log: Logger) => void;
@@ -0,0 +1,93 @@
1
+ /* eslint-disable */
2
+ class NullLogger {
3
+ constructor() {
4
+ this.ERROR_MESSAGE = 'NullLogger does not support. Instantiate a valid logger using "setGlobalLogger"';
5
+ this.src = true;
6
+ }
7
+ addStream(_stream) {
8
+ throw new Error(this.ERROR_MESSAGE);
9
+ }
10
+ addSerializers(_serializers) {
11
+ throw new Error(this.ERROR_MESSAGE);
12
+ }
13
+ child(_options, _simple) {
14
+ return this;
15
+ }
16
+ reopenFileStreams() {
17
+ throw new Error(this.ERROR_MESSAGE);
18
+ }
19
+ level(_value) {
20
+ return;
21
+ }
22
+ levels(_name, _value) {
23
+ return;
24
+ }
25
+ trace(..._rest) {
26
+ return true;
27
+ }
28
+ debug(..._rest) {
29
+ return true;
30
+ }
31
+ info(..._rest) {
32
+ return true;
33
+ }
34
+ warn(..._rest) {
35
+ return true;
36
+ }
37
+ error(..._rest) {
38
+ return true;
39
+ }
40
+ fatal(..._rest) {
41
+ return true;
42
+ }
43
+ addListener(_event, _listener) {
44
+ throw new Error(this.ERROR_MESSAGE);
45
+ }
46
+ on(_event, _listener) {
47
+ throw new Error(this.ERROR_MESSAGE);
48
+ }
49
+ once(_event, _listener) {
50
+ throw new Error(this.ERROR_MESSAGE);
51
+ }
52
+ removeListener(_event, _listener) {
53
+ throw new Error(this.ERROR_MESSAGE);
54
+ }
55
+ off(_event, _listener) {
56
+ throw new Error(this.ERROR_MESSAGE);
57
+ }
58
+ removeAllListeners(_event) {
59
+ throw new Error(this.ERROR_MESSAGE);
60
+ }
61
+ setMaxListeners(_n) {
62
+ throw new Error(this.ERROR_MESSAGE);
63
+ }
64
+ getMaxListeners() {
65
+ throw new Error(this.ERROR_MESSAGE);
66
+ }
67
+ listeners(_event) {
68
+ throw new Error(this.ERROR_MESSAGE);
69
+ }
70
+ rawListeners(_event) {
71
+ throw new Error(this.ERROR_MESSAGE);
72
+ }
73
+ emit(_event, ..._args) {
74
+ throw new Error(this.ERROR_MESSAGE);
75
+ }
76
+ listenerCount(_event) {
77
+ throw new Error(this.ERROR_MESSAGE);
78
+ }
79
+ prependListener(_event, _listener) {
80
+ throw new Error(this.ERROR_MESSAGE);
81
+ }
82
+ prependOnceListener(_event, _listener) {
83
+ throw new Error(this.ERROR_MESSAGE);
84
+ }
85
+ eventNames() {
86
+ throw new Error(this.ERROR_MESSAGE);
87
+ }
88
+ }
89
+ export let log = new NullLogger();
90
+ export const setGlobalLogger = (_log) => {
91
+ log = _log;
92
+ };
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWwvbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQjtBQUlwQixNQUFNLFVBQVU7SUFBaEI7UUFDVSxrQkFBYSxHQUNuQixpRkFBaUYsQ0FBQztRQXlCcEYsUUFBRyxHQUFHLElBQUksQ0FBQztJQW9HYixDQUFDO0lBNUhDLFNBQVMsQ0FBQyxPQUFzQjtRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsY0FBYyxDQUFDLFlBQWdDO1FBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxLQUFLLENBQUMsUUFBZ0IsRUFBRSxPQUFpQjtRQUN2QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxpQkFBaUI7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBR0QsS0FBSyxDQUFDLE1BQVk7UUFDaEIsT0FBTztJQUNULENBQUM7SUFJRCxNQUFNLENBQUMsS0FBVyxFQUFFLE1BQVk7UUFDOUIsT0FBTztJQUNULENBQUM7SUFPRCxLQUFLLENBQUMsR0FBRyxLQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtELEtBQUssQ0FBQyxHQUFHLEtBQVU7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS0QsSUFBSSxDQUFDLEdBQUcsS0FBVTtRQUNoQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFLRCxJQUFJLENBQUMsR0FBRyxLQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtELEtBQUssQ0FBQyxHQUFHLEtBQVU7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS0QsS0FBSyxDQUFDLEdB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
@@ -0,0 +1,5 @@
1
+ import { Trade } from '@uniswap/router-sdk';
2
+ import { ChainId, Currency, TradeType } from '@synthra-swap/sdk-core';
3
+ import { MethodParameters, RouteWithValidQuote, SwapOptions } from '..';
4
+ export declare function buildTrade<TTradeType extends TradeType>(tokenInCurrency: Currency, tokenOutCurrency: Currency, tradeType: TTradeType, routeAmounts: RouteWithValidQuote[]): Trade<Currency, Currency, TTradeType>;
5
+ export declare function buildSwapMethodParameters(trade: Trade<Currency, Currency, TradeType>, swapConfig: SwapOptions, chainId: ChainId): MethodParameters;
@@ -0,0 +1,106 @@
1
+ import { MixedRouteSDK, Protocol, SwapRouter as SwapRouter02, Trade, } from '@uniswap/router-sdk';
2
+ import { Route as V2RouteRaw } from '@uniswap/v2-sdk';
3
+ import { Route as V3RouteRaw } from '@uniswap/v3-sdk';
4
+ import { TradeType } from '@synthra-swap/sdk-core';
5
+ import { SwapRouter as UniveralRouter, UNIVERSAL_ROUTER_ADDRESS, } from '@synthra-swap/universal-router-sdk';
6
+ import _ from 'lodash';
7
+ import { CurrencyAmount, SwapType, SWAP_ROUTER_02_ADDRESSES, } from '..';
8
+ export function buildTrade(tokenInCurrency, tokenOutCurrency, tradeType, routeAmounts) {
9
+ /// Removed partition because of new mixedRoutes
10
+ const v3RouteAmounts = _.filter(routeAmounts, (routeAmount) => routeAmount.protocol === Protocol.V3);
11
+ const v2RouteAmounts = _.filter(routeAmounts, (routeAmount) => routeAmount.protocol === Protocol.V2);
12
+ const mixedRouteAmounts = _.filter(routeAmounts, (routeAmount) => routeAmount.protocol === Protocol.MIXED);
13
+ const v3Routes = _.map(v3RouteAmounts, (routeAmount) => {
14
+ const { route, amount, quote } = routeAmount;
15
+ // The route, amount and quote are all in terms of wrapped tokens.
16
+ // When constructing the Trade object the inputAmount/outputAmount must
17
+ // use native currencies if specified by the user. This is so that the Trade knows to wrap/unwrap.
18
+ if (tradeType == TradeType.EXACT_INPUT) {
19
+ const amountCurrency = CurrencyAmount.fromFractionalAmount(tokenInCurrency, amount.numerator, amount.denominator);
20
+ const quoteCurrency = CurrencyAmount.fromFractionalAmount(tokenOutCurrency, quote.numerator, quote.denominator);
21
+ const routeRaw = new V3RouteRaw(route.pools, amountCurrency.currency, quoteCurrency.currency);
22
+ return {
23
+ routev3: routeRaw,
24
+ inputAmount: amountCurrency,
25
+ outputAmount: quoteCurrency,
26
+ };
27
+ }
28
+ else {
29
+ const quoteCurrency = CurrencyAmount.fromFractionalAmount(tokenInCurrency, quote.numerator, quote.denominator);
30
+ const amountCurrency = CurrencyAmount.fromFractionalAmount(tokenOutCurrency, amount.numerator, amount.denominator);
31
+ const routeCurrency = new V3RouteRaw(route.pools, quoteCurrency.currency, amountCurrency.currency);
32
+ return {
33
+ routev3: routeCurrency,
34
+ inputAmount: quoteCurrency,
35
+ outputAmount: amountCurrency,
36
+ };
37
+ }
38
+ });
39
+ const v2Routes = _.map(v2RouteAmounts, (routeAmount) => {
40
+ const { route, amount, quote } = routeAmount;
41
+ // The route, amount and quote are all in terms of wrapped tokens.
42
+ // When constructing the Trade object the inputAmount/outputAmount must
43
+ // use native currencies if specified by the user. This is so that the Trade knows to wrap/unwrap.
44
+ if (tradeType == TradeType.EXACT_INPUT) {
45
+ const amountCurrency = CurrencyAmount.fromFractionalAmount(tokenInCurrency, amount.numerator, amount.denominator);
46
+ const quoteCurrency = CurrencyAmount.fromFractionalAmount(tokenOutCurrency, quote.numerator, quote.denominator);
47
+ const routeV2SDK = new V2RouteRaw(route.pairs, amountCurrency.currency, quoteCurrency.currency);
48
+ return {
49
+ routev2: routeV2SDK,
50
+ inputAmount: amountCurrency,
51
+ outputAmount: quoteCurrency,
52
+ };
53
+ }
54
+ else {
55
+ const quoteCurrency = CurrencyAmount.fromFractionalAmount(tokenInCurrency, quote.numerator, quote.denominator);
56
+ const amountCurrency = CurrencyAmount.fromFractionalAmount(tokenOutCurrency, amount.numerator, amount.denominator);
57
+ const routeV2SDK = new V2RouteRaw(route.pairs, quoteCurrency.currency, amountCurrency.currency);
58
+ return {
59
+ routev2: routeV2SDK,
60
+ inputAmount: quoteCurrency,
61
+ outputAmount: amountCurrency,
62
+ };
63
+ }
64
+ });
65
+ const mixedRoutes = _.map(mixedRouteAmounts, (routeAmount) => {
66
+ const { route, amount, quote } = routeAmount;
67
+ if (tradeType != TradeType.EXACT_INPUT) {
68
+ throw new Error('Mixed routes are only supported for exact input trades');
69
+ }
70
+ // The route, amount and quote are all in terms of wrapped tokens.
71
+ // When constructing the Trade object the inputAmount/outputAmount must
72
+ // use native currencies if specified by the user. This is so that the Trade knows to wrap/unwrap.
73
+ const amountCurrency = CurrencyAmount.fromFractionalAmount(tokenInCurrency, amount.numerator, amount.denominator);
74
+ const quoteCurrency = CurrencyAmount.fromFractionalAmount(tokenOutCurrency, quote.numerator, quote.denominator);
75
+ const routeRaw = new MixedRouteSDK(route.pools, amountCurrency.currency, quoteCurrency.currency);
76
+ return {
77
+ mixedRoute: routeRaw,
78
+ inputAmount: amountCurrency,
79
+ outputAmount: quoteCurrency,
80
+ };
81
+ });
82
+ const trade = new Trade({ v2Routes, v3Routes, mixedRoutes, tradeType });
83
+ return trade;
84
+ }
85
+ export function buildSwapMethodParameters(trade, swapConfig, chainId) {
86
+ if (swapConfig.type == SwapType.UNIVERSAL_ROUTER) {
87
+ return {
88
+ ...UniveralRouter.swapERC20CallParameters(trade, swapConfig),
89
+ to: UNIVERSAL_ROUTER_ADDRESS(chainId),
90
+ };
91
+ }
92
+ else if (swapConfig.type == SwapType.SWAP_ROUTER_02) {
93
+ const { recipient, slippageTolerance, deadline, inputTokenPermit } = swapConfig;
94
+ return {
95
+ ...SwapRouter02.swapCallParameters(trade, {
96
+ recipient,
97
+ slippageTolerance,
98
+ deadlineOrPreviousBlockhash: deadline,
99
+ inputTokenPermit,
100
+ }),
101
+ to: SWAP_ROUTER_02_ADDRESSES(chainId),
102
+ };
103
+ }
104
+ throw new Error(`Unsupported swap type ${swapConfig}`);
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kUGFyYW1ldGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlsL21ldGhvZFBhcmFtZXRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGFBQWEsRUFDYixRQUFRLEVBQ1IsVUFBVSxJQUFJLFlBQVksRUFDMUIsS0FBSyxHQUNOLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEtBQUssSUFBSSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsS0FBSyxJQUFJLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBcUIsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakUsT0FBTyxFQUNMLFVBQVUsSUFBSSxjQUFjLEVBQzVCLHdCQUF3QixHQUN6QixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixPQUFPLEVBQ0wsY0FBYyxFQUtkLFFBQVEsRUFDUix3QkFBd0IsR0FHekIsTUFBTSxJQUFJLENBQUM7QUFFWixNQUFNLFVBQVUsVUFBVSxDQUN4QixlQUF5QixFQUN6QixnQkFBMEIsRUFDMUIsU0FBcUIsRUFDckIsWUFBbUM7SUFFbkMsZ0RBQWdEO0lBQ2hELE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQzdCLFlBQVksRUFDWixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUN0RCxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FDN0IsWUFBWSxFQUNaLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQ3RELENBQUM7SUFDRixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQ2hDLFlB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
@@ -0,0 +1,48 @@
1
+ export declare enum MetricLoggerUnit {
2
+ Seconds = "Seconds",
3
+ Microseconds = "Microseconds",
4
+ Milliseconds = "Milliseconds",
5
+ Bytes = "Bytes",
6
+ Kilobytes = "Kilobytes",
7
+ Megabytes = "Megabytes",
8
+ Gigabytes = "Gigabytes",
9
+ Terabytes = "Terabytes",
10
+ Bits = "Bits",
11
+ Kilobits = "Kilobits",
12
+ Megabits = "Megabits",
13
+ Gigabits = "Gigabits",
14
+ Terabits = "Terabits",
15
+ Percent = "Percent",
16
+ Count = "Count",
17
+ BytesPerSecond = "Bytes/Second",
18
+ KilobytesPerSecond = "Kilobytes/Second",
19
+ MegabytesPerSecond = "Megabytes/Second",
20
+ GigabytesPerSecond = "Gigabytes/Second",
21
+ TerabytesPerSecond = "Terabytes/Second",
22
+ BitsPerSecond = "Bits/Second",
23
+ KilobitsPerSecond = "Kilobits/Second",
24
+ MegabitsPerSecond = "Megabits/Second",
25
+ GigabitsPerSecond = "Gigabits/Second",
26
+ TerabitsPerSecond = "Terabits/Second",
27
+ CountPerSecond = "Count/Second",
28
+ None = "None"
29
+ }
30
+ export declare abstract class IMetric {
31
+ abstract setProperty(key: string, value: unknown): void;
32
+ abstract putDimensions(dimensions: Record<string, string>): void;
33
+ abstract putMetric(key: string, value: number, unit?: MetricLoggerUnit): void;
34
+ }
35
+ interface MetricContext {
36
+ chainId: number;
37
+ networkName: string;
38
+ }
39
+ export declare class MetricLogger extends IMetric {
40
+ private log;
41
+ constructor(context?: MetricContext);
42
+ setProperty(key: string, value: unknown): void;
43
+ putDimensions(dimensions: Record<string, string>): void;
44
+ putMetric(key: string, value: number, unit?: MetricLoggerUnit): void;
45
+ }
46
+ export declare let metric: IMetric;
47
+ export declare const setGlobalMetric: (_metric: IMetric) => void;
48
+ export {};