@synthra-swap/smart-order-router 3.15.33 → 3.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/README.md +21 -21
  2. package/build/main/providers/caching/route/model/cached-route.d.ts +5 -5
  3. package/build/main/providers/caching/route/model/cached-routes.d.ts +5 -5
  4. package/build/main/providers/caching/route/model/cached-routes.js +1 -1
  5. package/build/main/providers/caching/route/route-caching-provider.d.ts +2 -2
  6. package/build/main/providers/caching/route/route-caching-provider.js +3 -3
  7. package/build/main/providers/caching-gas-provider.d.ts +1 -1
  8. package/build/main/providers/caching-token-list-provider.d.ts +2 -2
  9. package/build/main/providers/caching-token-list-provider.js +3 -3
  10. package/build/main/providers/caching-token-provider.d.ts +1 -1
  11. package/build/main/providers/caching-token-provider.js +34 -34
  12. package/build/main/providers/eth-estimate-gas-provider.d.ts +2 -4
  13. package/build/main/providers/eth-estimate-gas-provider.js +4 -5
  14. package/build/main/providers/index.d.ts +1 -10
  15. package/build/main/providers/index.js +2 -11
  16. package/build/main/providers/multicall-uniswap-provider.d.ts +1 -1
  17. package/build/main/providers/multicall-uniswap-provider.js +2 -2
  18. package/build/main/providers/on-chain-gas-price-provider.d.ts +1 -1
  19. package/build/main/providers/on-chain-gas-price-provider.js +5 -5
  20. package/build/main/providers/on-chain-quote-provider.d.ts +11 -19
  21. package/build/main/providers/on-chain-quote-provider.js +18 -39
  22. package/build/main/providers/simulation-provider.d.ts +1 -1
  23. package/build/main/providers/simulation-provider.js +6 -6
  24. package/build/main/providers/swap-router-provider.d.ts +2 -2
  25. package/build/main/providers/tenderly-simulation-provider.d.ts +2 -4
  26. package/build/main/providers/tenderly-simulation-provider.js +13 -14
  27. package/build/main/providers/token-provider.d.ts +1 -1
  28. package/build/main/providers/token-provider.js +112 -112
  29. package/build/main/providers/token-validator-provider.d.ts +1 -1
  30. package/build/main/providers/uri-subgraph-provider.d.ts +3 -5
  31. package/build/main/providers/uri-subgraph-provider.js +2 -3
  32. package/build/main/providers/v3/caching-pool-provider.d.ts +2 -2
  33. package/build/main/providers/v3/caching-subgraph-provider.d.ts +1 -1
  34. package/build/main/providers/v3/gas-data-provider.d.ts +1 -1
  35. package/build/main/providers/v3/gas-data-provider.js +3 -3
  36. package/build/main/providers/v3/pool-provider.d.ts +2 -2
  37. package/build/main/providers/v3/pool-provider.js +15 -7
  38. package/build/main/providers/v3/static-subgraph-provider.d.ts +1 -1
  39. package/build/main/providers/v3/static-subgraph-provider.js +48 -47
  40. package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +1 -1
  41. package/build/main/providers/v3/subgraph-provider.d.ts +1 -3
  42. package/build/main/providers/v3/subgraph-provider.js +12 -14
  43. package/build/main/routers/alpha-router/alpha-router.d.ts +17 -54
  44. package/build/main/routers/alpha-router/alpha-router.js +92 -170
  45. package/build/main/routers/alpha-router/config.d.ts +1 -2
  46. package/build/main/routers/alpha-router/config.js +11 -39
  47. package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +5 -93
  48. package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +5 -93
  49. package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +1 -1
  50. package/build/main/routers/alpha-router/functions/best-swap-route.js +12 -39
  51. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +1 -1
  52. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js +3 -3
  53. package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +4 -7
  54. package/build/main/routers/alpha-router/functions/compute-all-routes.js +2 -28
  55. package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +3 -39
  56. package/build/main/routers/alpha-router/functions/get-candidate-pools.js +28 -433
  57. package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +8 -29
  58. package/build/main/routers/alpha-router/gas-models/gas-model.js +28 -39
  59. package/build/main/routers/alpha-router/gas-models/v3/gas-costs.d.ts +1 -1
  60. package/build/main/routers/alpha-router/gas-models/v3/gas-costs.js +75 -69
  61. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +1 -1
  62. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +41 -42
  63. package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +5 -6
  64. package/build/main/routers/alpha-router/quoters/base-quoter.js +1 -1
  65. package/build/main/routers/alpha-router/quoters/index.d.ts +1 -3
  66. package/build/main/routers/alpha-router/quoters/index.js +2 -4
  67. package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +2 -2
  68. package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +1 -1
  69. package/build/main/routers/alpha-router/quoters/v3-quoter.js +3 -3
  70. package/build/main/routers/index.d.ts +1 -1
  71. package/build/main/routers/index.js +2 -2
  72. package/build/main/routers/router.d.ts +4 -11
  73. package/build/main/routers/router.js +5 -20
  74. package/build/main/routers/synthra-router/config.d.ts +5 -0
  75. package/build/main/routers/synthra-router/config.js +30 -0
  76. package/build/main/routers/synthra-router/index.d.ts +3 -0
  77. package/build/main/routers/{legacy-router → synthra-router}/index.js +4 -2
  78. package/build/main/routers/synthra-router/synthra-router.d.ts +31 -0
  79. package/build/main/routers/synthra-router/synthra-router.js +437 -0
  80. package/build/main/routers/synthra-router/types.d.ts +158 -0
  81. package/build/main/routers/synthra-router/types.js +3 -0
  82. package/build/main/tsconfig.tsbuildinfo +1 -1
  83. package/build/main/types/v3/factories/{IUniswapV3PoolState__factory.d.ts → ISynthraV3PoolState__factory.d.ts} +4 -4
  84. package/build/main/types/v3/factories/{IUniswapV3PoolState__factory.js → ISynthraV3PoolState__factory.js} +5 -5
  85. package/build/main/types/v3/factories/{UniswapInterfaceMulticall__factory.d.ts → SynthraInterfaceMulticall__factory.d.ts} +7 -7
  86. package/build/main/types/v3/factories/{UniswapInterfaceMulticall__factory.js → SynthraInterfaceMulticall__factory.js} +8 -8
  87. package/build/main/util/addresses.d.ts +1 -4
  88. package/build/main/util/addresses.js +29 -53
  89. package/build/main/util/amounts.d.ts +3 -3
  90. package/build/main/util/amounts.js +12 -12
  91. package/build/main/util/chains.d.ts +2 -31
  92. package/build/main/util/chains.js +83 -511
  93. package/build/main/util/gas-factory-helpers.d.ts +8 -11
  94. package/build/main/util/gas-factory-helpers.js +57 -103
  95. package/build/main/util/index.d.ts +0 -1
  96. package/build/main/util/index.js +1 -2
  97. package/build/main/util/methodParameters.d.ts +2 -2
  98. package/build/main/util/methodParameters.js +10 -57
  99. package/build/main/util/router-sdk.d.ts +21 -0
  100. package/build/main/util/router-sdk.js +24 -0
  101. package/build/main/util/routes.d.ts +4 -5
  102. package/build/main/util/routes.js +9 -19
  103. package/build/main/util/token-list.d.ts +28 -0
  104. package/build/main/util/token-list.js +14 -0
  105. package/build/module/providers/caching/route/model/cached-route.d.ts +5 -5
  106. package/build/module/providers/caching/route/model/cached-routes.d.ts +5 -5
  107. package/build/module/providers/caching/route/model/cached-routes.js +1 -1
  108. package/build/module/providers/caching/route/route-caching-provider.d.ts +2 -2
  109. package/build/module/providers/caching/route/route-caching-provider.js +1 -1
  110. package/build/module/providers/caching-gas-provider.d.ts +1 -1
  111. package/build/module/providers/caching-token-list-provider.d.ts +2 -2
  112. package/build/module/providers/caching-token-list-provider.js +2 -2
  113. package/build/module/providers/caching-token-provider.d.ts +1 -1
  114. package/build/module/providers/caching-token-provider.js +1 -1
  115. package/build/module/providers/eth-estimate-gas-provider.d.ts +2 -4
  116. package/build/module/providers/eth-estimate-gas-provider.js +4 -5
  117. package/build/module/providers/index.d.ts +1 -10
  118. package/build/module/providers/index.js +2 -11
  119. package/build/module/providers/multicall-uniswap-provider.d.ts +1 -1
  120. package/build/module/providers/multicall-uniswap-provider.js +2 -2
  121. package/build/module/providers/on-chain-gas-price-provider.d.ts +1 -1
  122. package/build/module/providers/on-chain-gas-price-provider.js +1 -1
  123. package/build/module/providers/on-chain-quote-provider.d.ts +11 -19
  124. package/build/module/providers/on-chain-quote-provider.js +17 -38
  125. package/build/module/providers/simulation-provider.d.ts +1 -1
  126. package/build/module/providers/simulation-provider.js +3 -3
  127. package/build/module/providers/swap-router-provider.d.ts +2 -2
  128. package/build/module/providers/tenderly-simulation-provider.d.ts +2 -4
  129. package/build/module/providers/tenderly-simulation-provider.js +6 -7
  130. package/build/module/providers/token-provider.d.ts +1 -1
  131. package/build/module/providers/token-provider.js +3 -3
  132. package/build/module/providers/token-validator-provider.d.ts +1 -1
  133. package/build/module/providers/uri-subgraph-provider.d.ts +3 -5
  134. package/build/module/providers/uri-subgraph-provider.js +2 -3
  135. package/build/module/providers/v3/caching-pool-provider.d.ts +2 -2
  136. package/build/module/providers/v3/caching-subgraph-provider.d.ts +1 -1
  137. package/build/module/providers/v3/gas-data-provider.d.ts +1 -1
  138. package/build/module/providers/v3/gas-data-provider.js +1 -1
  139. package/build/module/providers/v3/pool-provider.d.ts +2 -2
  140. package/build/module/providers/v3/pool-provider.js +13 -5
  141. package/build/module/providers/v3/static-subgraph-provider.d.ts +1 -1
  142. package/build/module/providers/v3/static-subgraph-provider.js +5 -4
  143. package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +1 -1
  144. package/build/module/providers/v3/subgraph-provider.d.ts +1 -3
  145. package/build/module/providers/v3/subgraph-provider.js +2 -3
  146. package/build/module/routers/alpha-router/alpha-router.d.ts +17 -54
  147. package/build/module/routers/alpha-router/alpha-router.js +74 -145
  148. package/build/module/routers/alpha-router/config.d.ts +1 -2
  149. package/build/module/routers/alpha-router/config.js +2 -30
  150. package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +5 -93
  151. package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +3 -89
  152. package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +1 -1
  153. package/build/module/routers/alpha-router/functions/best-swap-route.js +8 -35
  154. package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +1 -1
  155. package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.js +1 -1
  156. package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +4 -7
  157. package/build/module/routers/alpha-router/functions/compute-all-routes.js +2 -26
  158. package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +3 -39
  159. package/build/module/routers/alpha-router/functions/get-candidate-pools.js +5 -418
  160. package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +8 -29
  161. package/build/module/routers/alpha-router/gas-models/gas-model.js +7 -18
  162. package/build/module/routers/alpha-router/gas-models/v3/gas-costs.d.ts +1 -1
  163. package/build/module/routers/alpha-router/gas-models/v3/gas-costs.js +8 -2
  164. package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +1 -1
  165. package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +27 -28
  166. package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +5 -6
  167. package/build/module/routers/alpha-router/quoters/base-quoter.js +1 -1
  168. package/build/module/routers/alpha-router/quoters/index.d.ts +1 -3
  169. package/build/module/routers/alpha-router/quoters/index.js +2 -4
  170. package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +2 -2
  171. package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +1 -1
  172. package/build/module/routers/alpha-router/quoters/v3-quoter.js +1 -1
  173. package/build/module/routers/index.d.ts +1 -1
  174. package/build/module/routers/index.js +2 -2
  175. package/build/module/routers/router.d.ts +4 -11
  176. package/build/module/routers/router.js +3 -16
  177. package/build/module/routers/synthra-router/config.d.ts +5 -0
  178. package/build/module/routers/synthra-router/config.js +27 -0
  179. package/build/module/routers/synthra-router/index.d.ts +3 -0
  180. package/build/module/routers/synthra-router/index.js +4 -0
  181. package/build/module/routers/synthra-router/synthra-router.d.ts +31 -0
  182. package/build/module/routers/synthra-router/synthra-router.js +447 -0
  183. package/build/module/routers/synthra-router/types.d.ts +158 -0
  184. package/build/module/routers/synthra-router/types.js +2 -0
  185. package/build/module/tsconfig.module.tsbuildinfo +1 -1
  186. package/build/module/types/v3/factories/{IUniswapV3PoolState__factory.d.ts → ISynthraV3PoolState__factory.d.ts} +4 -4
  187. package/build/module/types/v3/factories/{IUniswapV3PoolState__factory.js → ISynthraV3PoolState__factory.js} +3 -3
  188. package/build/module/types/v3/factories/{UniswapInterfaceMulticall__factory.d.ts → SynthraInterfaceMulticall__factory.d.ts} +7 -7
  189. package/build/module/types/v3/factories/{UniswapInterfaceMulticall__factory.js → SynthraInterfaceMulticall__factory.js} +6 -6
  190. package/build/module/util/addresses.d.ts +1 -4
  191. package/build/module/util/addresses.js +7 -82
  192. package/build/module/util/amounts.d.ts +3 -3
  193. package/build/module/util/amounts.js +3 -3
  194. package/build/module/util/chains.d.ts +2 -31
  195. package/build/module/util/chains.js +3 -435
  196. package/build/module/util/gas-factory-helpers.d.ts +8 -11
  197. package/build/module/util/gas-factory-helpers.js +31 -76
  198. package/build/module/util/index.d.ts +0 -1
  199. package/build/module/util/index.js +1 -2
  200. package/build/module/util/methodParameters.d.ts +2 -2
  201. package/build/module/util/methodParameters.js +7 -54
  202. package/build/module/util/router-sdk.d.ts +21 -0
  203. package/build/module/util/router-sdk.js +19 -0
  204. package/build/module/util/routes.d.ts +4 -5
  205. package/build/module/util/routes.js +8 -18
  206. package/build/module/util/token-list.d.ts +28 -0
  207. package/build/module/util/token-list.js +11 -0
  208. package/package.json +13 -26
  209. package/build/main/providers/eth-gas-station-info-gas-price-provider.d.ts +0 -19
  210. package/build/main/providers/eth-gas-station-info-gas-price-provider.js +0 -37
  211. package/build/main/providers/v2/caching-pool-provider.d.ts +0 -33
  212. package/build/main/providers/v2/caching-pool-provider.js +0 -88
  213. package/build/main/providers/v2/caching-subgraph-provider.d.ts +0 -23
  214. package/build/main/providers/v2/caching-subgraph-provider.js +0 -34
  215. package/build/main/providers/v2/pool-provider.d.ts +0 -59
  216. package/build/main/providers/v2/pool-provider.js +0 -111
  217. package/build/main/providers/v2/quote-provider.d.ts +0 -33
  218. package/build/main/providers/v2/quote-provider.js +0 -91
  219. package/build/main/providers/v2/static-subgraph-provider.d.ts +0 -19
  220. package/build/main/providers/v2/static-subgraph-provider.js +0 -97
  221. package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +0 -19
  222. package/build/main/providers/v2/subgraph-provider-with-fallback.js +0 -35
  223. package/build/main/providers/v2/subgraph-provider.d.ts +0 -33
  224. package/build/main/providers/v2/subgraph-provider.js +0 -134
  225. package/build/main/providers/v2/uri-subgraph-provider.d.ts +0 -4
  226. package/build/main/providers/v2/uri-subgraph-provider.js +0 -8
  227. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +0 -25
  228. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +0 -175
  229. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +0 -29
  230. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +0 -167
  231. package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +0 -20
  232. package/build/main/routers/alpha-router/quoters/mixed-quoter.js +0 -130
  233. package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +0 -21
  234. package/build/main/routers/alpha-router/quoters/v2-quoter.js +0 -122
  235. package/build/main/routers/legacy-router/bases.d.ts +0 -183
  236. package/build/main/routers/legacy-router/bases.js +0 -81
  237. package/build/main/routers/legacy-router/index.d.ts +0 -1
  238. package/build/main/routers/legacy-router/legacy-router.d.ts +0 -41
  239. package/build/main/routers/legacy-router/legacy-router.js +0 -289
  240. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +0 -41
  241. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js +0 -156
  242. package/build/main/types/v2/commons.d.ts +0 -16
  243. package/build/main/types/v2/commons.js +0 -6
  244. package/build/main/types/v2/factories/IUniswapV2Pair__factory.d.ts +0 -35
  245. package/build/main/types/v2/factories/IUniswapV2Pair__factory.js +0 -671
  246. package/build/main/util/protocols.d.ts +0 -2
  247. package/build/main/util/protocols.js +0 -18
  248. package/build/main/util/unsupported-tokens.d.ts +0 -37
  249. package/build/main/util/unsupported-tokens.js +0 -1119
  250. package/build/module/providers/eth-gas-station-info-gas-price-provider.d.ts +0 -19
  251. package/build/module/providers/eth-gas-station-info-gas-price-provider.js +0 -30
  252. package/build/module/providers/v2/caching-pool-provider.d.ts +0 -33
  253. package/build/module/providers/v2/caching-pool-provider.js +0 -81
  254. package/build/module/providers/v2/caching-subgraph-provider.d.ts +0 -23
  255. package/build/module/providers/v2/caching-subgraph-provider.js +0 -30
  256. package/build/module/providers/v2/pool-provider.d.ts +0 -59
  257. package/build/module/providers/v2/pool-provider.js +0 -104
  258. package/build/module/providers/v2/quote-provider.d.ts +0 -33
  259. package/build/module/providers/v2/quote-provider.js +0 -87
  260. package/build/module/providers/v2/static-subgraph-provider.d.ts +0 -19
  261. package/build/module/providers/v2/static-subgraph-provider.js +0 -90
  262. package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +0 -19
  263. package/build/module/providers/v2/subgraph-provider-with-fallback.js +0 -31
  264. package/build/module/providers/v2/subgraph-provider.d.ts +0 -33
  265. package/build/module/providers/v2/subgraph-provider.js +0 -135
  266. package/build/module/providers/v2/uri-subgraph-provider.d.ts +0 -4
  267. package/build/module/providers/v2/uri-subgraph-provider.js +0 -4
  268. package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +0 -25
  269. package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +0 -168
  270. package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +0 -29
  271. package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +0 -160
  272. package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +0 -20
  273. package/build/module/routers/alpha-router/quoters/mixed-quoter.js +0 -123
  274. package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +0 -21
  275. package/build/module/routers/alpha-router/quoters/v2-quoter.js +0 -115
  276. package/build/module/routers/legacy-router/bases.d.ts +0 -183
  277. package/build/module/routers/legacy-router/bases.js +0 -87
  278. package/build/module/routers/legacy-router/index.d.ts +0 -1
  279. package/build/module/routers/legacy-router/index.js +0 -2
  280. package/build/module/routers/legacy-router/legacy-router.d.ts +0 -41
  281. package/build/module/routers/legacy-router/legacy-router.js +0 -290
  282. package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +0 -41
  283. package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.js +0 -152
  284. package/build/module/types/v2/commons.d.ts +0 -16
  285. package/build/module/types/v2/commons.js +0 -5
  286. package/build/module/types/v2/factories/IUniswapV2Pair__factory.d.ts +0 -35
  287. package/build/module/types/v2/factories/IUniswapV2Pair__factory.js +0 -667
  288. package/build/module/util/protocols.d.ts +0 -2
  289. package/build/module/util/protocols.js +0 -14
  290. package/build/module/util/unsupported-tokens.d.ts +0 -37
  291. package/build/module/util/unsupported-tokens.js +0 -1116
@@ -1,290 +0,0 @@
1
- import { BigNumber } from '@ethersproject/bignumber';
2
- import { Logger } from '@ethersproject/logger';
3
- import { TradeType } from '@synthra-swap/sdk-core';
4
- import { SwapRouter, Trade } from '@uniswap/router-sdk';
5
- import { FeeAmount, Route } from '@uniswap/v3-sdk';
6
- import _ from 'lodash';
7
- import { DAI_MAINNET, USDC_MAINNET, } from '../../providers/token-provider';
8
- import { SWAP_ROUTER_02_ADDRESSES } from '../../util';
9
- import { CurrencyAmount } from '../../util/amounts';
10
- import { log } from '../../util/log';
11
- import { routeToString } from '../../util/routes';
12
- import { V3RouteWithValidQuote } from '../alpha-router';
13
- import { V3Route } from '../router';
14
- import { ADDITIONAL_BASES, BASES_TO_CHECK_TRADES_AGAINST, CUSTOM_BASES, } from './bases';
15
- // Interface defaults to 2.
16
- const MAX_HOPS = 2;
17
- /**
18
- * Replicates the router implemented in the V3 interface.
19
- * Code is mostly a copy from https://github.com/Uniswap/uniswap-interface/blob/0190b5a408c13016c87e1030ffc59326c085f389/src/hooks/useBestV3Trade.ts#L22-L23
20
- * with React/Redux hooks removed, and refactoring to allow re-use in other routers.
21
- */
22
- export class LegacyRouter {
23
- constructor({ chainId, multicall2Provider, poolProvider, quoteProvider, tokenProvider, }) {
24
- this.chainId = chainId;
25
- this.multicall2Provider = multicall2Provider;
26
- this.poolProvider = poolProvider;
27
- this.quoteProvider = quoteProvider;
28
- this.tokenProvider = tokenProvider;
29
- }
30
- async route(amount, quoteCurrency, swapType, swapConfig, partialRoutingConfig) {
31
- if (swapType == TradeType.EXACT_INPUT) {
32
- return this.routeExactIn(amount.currency, quoteCurrency, amount, swapConfig, partialRoutingConfig);
33
- }
34
- return this.routeExactOut(quoteCurrency, amount.currency, amount, swapConfig, partialRoutingConfig);
35
- }
36
- async routeExactIn(currencyIn, currencyOut, amountIn, swapConfig, routingConfig) {
37
- const tokenIn = currencyIn.wrapped;
38
- const tokenOut = currencyOut.wrapped;
39
- const routes = await this.getAllRoutes(tokenIn, tokenOut, routingConfig);
40
- const routeQuote = await this.findBestRouteExactIn(amountIn, tokenOut, routes, routingConfig);
41
- if (!routeQuote) {
42
- return null;
43
- }
44
- const trade = this.buildTrade(currencyIn, currencyOut, TradeType.EXACT_INPUT, routeQuote);
45
- return {
46
- quote: routeQuote.quote,
47
- quoteGasAdjusted: routeQuote.quote,
48
- route: [routeQuote],
49
- estimatedGasUsed: BigNumber.from(0),
50
- estimatedGasUsedQuoteToken: CurrencyAmount.fromFractionalAmount(tokenOut, 0, 1),
51
- estimatedGasUsedUSD: CurrencyAmount.fromFractionalAmount(DAI_MAINNET, 0, 1),
52
- gasPriceWei: BigNumber.from(0),
53
- trade,
54
- methodParameters: swapConfig
55
- ? {
56
- ...this.buildMethodParameters(trade, swapConfig),
57
- to: SWAP_ROUTER_02_ADDRESSES(this.chainId),
58
- }
59
- : undefined,
60
- blockNumber: BigNumber.from(0),
61
- };
62
- }
63
- async routeExactOut(currencyIn, currencyOut, amountOut, swapConfig, routingConfig) {
64
- const tokenIn = currencyIn.wrapped;
65
- const tokenOut = currencyOut.wrapped;
66
- const routes = await this.getAllRoutes(tokenIn, tokenOut, routingConfig);
67
- const routeQuote = await this.findBestRouteExactOut(amountOut, tokenIn, routes, routingConfig);
68
- if (!routeQuote) {
69
- return null;
70
- }
71
- const trade = this.buildTrade(currencyIn, currencyOut, TradeType.EXACT_OUTPUT, routeQuote);
72
- return {
73
- quote: routeQuote.quote,
74
- quoteGasAdjusted: routeQuote.quote,
75
- route: [routeQuote],
76
- estimatedGasUsed: BigNumber.from(0),
77
- estimatedGasUsedQuoteToken: CurrencyAmount.fromFractionalAmount(tokenIn, 0, 1),
78
- estimatedGasUsedUSD: CurrencyAmount.fromFractionalAmount(DAI_MAINNET, 0, 1),
79
- gasPriceWei: BigNumber.from(0),
80
- trade,
81
- methodParameters: swapConfig
82
- ? {
83
- ...this.buildMethodParameters(trade, swapConfig),
84
- to: SWAP_ROUTER_02_ADDRESSES(this.chainId),
85
- }
86
- : undefined,
87
- blockNumber: BigNumber.from(0),
88
- };
89
- }
90
- async findBestRouteExactIn(amountIn, tokenOut, routes, routingConfig) {
91
- const { routesWithQuotes: quotesRaw } = await this.quoteProvider.getQuotesManyExactIn([amountIn], routes, {
92
- blockNumber: routingConfig === null || routingConfig === void 0 ? void 0 : routingConfig.blockNumber,
93
- });
94
- const quotes100Percent = _.map(quotesRaw, ([route, quotes]) => { var _a, _b; return `${routeToString(route)} : ${(_b = (_a = quotes[0]) === null || _a === void 0 ? void 0 : _a.quote) === null || _b === void 0 ? void 0 : _b.toString()}`; });
95
- log.info({ quotes100Percent }, '100% Quotes');
96
- const bestQuote = await this.getBestQuote(routes, quotesRaw, tokenOut, TradeType.EXACT_INPUT);
97
- return bestQuote;
98
- }
99
- async findBestRouteExactOut(amountOut, tokenIn, routes, routingConfig) {
100
- const { routesWithQuotes: quotesRaw } = await this.quoteProvider.getQuotesManyExactOut([amountOut], routes, {
101
- blockNumber: routingConfig === null || routingConfig === void 0 ? void 0 : routingConfig.blockNumber,
102
- });
103
- const bestQuote = await this.getBestQuote(routes, quotesRaw, tokenIn, TradeType.EXACT_OUTPUT);
104
- return bestQuote;
105
- }
106
- async getBestQuote(routes, quotesRaw, quoteToken, routeType) {
107
- log.debug(`Got ${_.filter(quotesRaw, ([_, quotes]) => !!quotes[0]).length} valid quotes from ${routes.length} possible routes.`);
108
- const routeQuotesRaw = [];
109
- for (let i = 0; i < quotesRaw.length; i++) {
110
- const [route, quotes] = quotesRaw[i];
111
- const { quote, amount } = quotes[0];
112
- if (!quote) {
113
- Logger.globalLogger().debug(`No quote for ${routeToString(route)}`);
114
- continue;
115
- }
116
- routeQuotesRaw.push({ route, quote, amount });
117
- }
118
- if (routeQuotesRaw.length == 0) {
119
- return null;
120
- }
121
- routeQuotesRaw.sort((routeQuoteA, routeQuoteB) => {
122
- if (routeType == TradeType.EXACT_INPUT) {
123
- return routeQuoteA.quote.gt(routeQuoteB.quote) ? -1 : 1;
124
- }
125
- else {
126
- return routeQuoteA.quote.lt(routeQuoteB.quote) ? -1 : 1;
127
- }
128
- });
129
- const routeQuotes = _.map(routeQuotesRaw, ({ route, quote, amount }) => {
130
- return new V3RouteWithValidQuote({
131
- route,
132
- rawQuote: quote,
133
- amount,
134
- percent: 100,
135
- gasModel: {
136
- estimateGasCost: () => ({
137
- gasCostInToken: CurrencyAmount.fromRawAmount(quoteToken, 0),
138
- gasCostInUSD: CurrencyAmount.fromRawAmount(USDC_MAINNET, 0),
139
- gasEstimate: BigNumber.from(0),
140
- }),
141
- },
142
- sqrtPriceX96AfterList: [],
143
- initializedTicksCrossedList: [],
144
- quoterGasEstimate: BigNumber.from(0),
145
- tradeType: routeType,
146
- quoteToken,
147
- v3PoolProvider: this.poolProvider,
148
- });
149
- });
150
- for (const rq of routeQuotes) {
151
- log.debug(`Quote: ${rq.amount.toFixed(Math.min(rq.amount.currency.decimals, 2))} Route: ${routeToString(rq.route)}`);
152
- }
153
- return routeQuotes[0];
154
- }
155
- async getAllRoutes(tokenIn, tokenOut, routingConfig) {
156
- const tokenPairs = await this.getAllPossiblePairings(tokenIn, tokenOut);
157
- const poolAccessor = await this.poolProvider.getPools(tokenPairs, {
158
- blockNumber: routingConfig === null || routingConfig === void 0 ? void 0 : routingConfig.blockNumber,
159
- });
160
- const pools = poolAccessor.getAllPools();
161
- const routes = this.computeAllRoutes(tokenIn, tokenOut, pools, this.chainId, [], [], tokenIn, MAX_HOPS);
162
- log.info({ routes: _.map(routes, routeToString) }, `Computed ${routes.length} possible routes.`);
163
- return routes;
164
- }
165
- async getAllPossiblePairings(tokenIn, tokenOut) {
166
- var _a, _b, _c, _d, _e;
167
- const common = (_a = BASES_TO_CHECK_TRADES_AGAINST(this.tokenProvider)[this.chainId]) !== null && _a !== void 0 ? _a : [];
168
- const additionalA = (_c = (_b = (await ADDITIONAL_BASES(this.tokenProvider))[this.chainId]) === null || _b === void 0 ? void 0 : _b[tokenIn.address]) !== null && _c !== void 0 ? _c : [];
169
- const additionalB = (_e = (_d = (await ADDITIONAL_BASES(this.tokenProvider))[this.chainId]) === null || _d === void 0 ? void 0 : _d[tokenOut.address]) !== null && _e !== void 0 ? _e : [];
170
- const bases = [...common, ...additionalA, ...additionalB];
171
- const basePairs = _.flatMap(bases, (base) => bases.map((otherBase) => [base, otherBase]));
172
- const customBases = (await CUSTOM_BASES(this.tokenProvider))[this.chainId];
173
- const allPairs = _([
174
- // the direct pair
175
- [tokenIn, tokenOut],
176
- // token A against all bases
177
- ...bases.map((base) => [tokenIn, base]),
178
- // token B against all bases
179
- ...bases.map((base) => [tokenOut, base]),
180
- // each base against all bases
181
- ...basePairs,
182
- ])
183
- .filter((tokens) => Boolean(tokens[0] && tokens[1]))
184
- .filter(([tokenA, tokenB]) => tokenA.address !== tokenB.address && !tokenA.equals(tokenB))
185
- .filter(([tokenA, tokenB]) => {
186
- const customBasesA = customBases === null || customBases === void 0 ? void 0 : customBases[tokenA.address];
187
- const customBasesB = customBases === null || customBases === void 0 ? void 0 : customBases[tokenB.address];
188
- if (!customBasesA && !customBasesB)
189
- return true;
190
- if (customBasesA && !customBasesA.find((base) => tokenB.equals(base)))
191
- return false;
192
- if (customBasesB && !customBasesB.find((base) => tokenA.equals(base)))
193
- return false;
194
- return true;
195
- })
196
- .flatMap(([tokenA, tokenB]) => {
197
- return [
198
- [tokenA, tokenB, FeeAmount.LOW],
199
- [tokenA, tokenB, FeeAmount.MEDIUM],
200
- [tokenA, tokenB, FeeAmount.HIGH],
201
- ];
202
- })
203
- .value();
204
- return allPairs;
205
- }
206
- computeAllRoutes(tokenIn, tokenOut, pools, chainId, currentPath = [], allPaths = [], startTokenIn = tokenIn, maxHops = 2) {
207
- for (const pool of pools) {
208
- if (currentPath.indexOf(pool) !== -1 || !pool.involvesToken(tokenIn))
209
- continue;
210
- const outputToken = pool.token0.equals(tokenIn)
211
- ? pool.token1
212
- : pool.token0;
213
- if (outputToken.equals(tokenOut)) {
214
- allPaths.push(new V3Route([...currentPath, pool], startTokenIn, tokenOut));
215
- }
216
- else if (maxHops > 1) {
217
- this.computeAllRoutes(outputToken, tokenOut, pools, chainId, [...currentPath, pool], allPaths, startTokenIn, maxHops - 1);
218
- }
219
- }
220
- return allPaths;
221
- }
222
- buildTrade(tokenInCurrency, tokenOutCurrency, tradeType, routeAmount) {
223
- const { route, amount, quote } = routeAmount;
224
- // The route, amount and quote are all in terms of wrapped tokens.
225
- // When constructing the Trade object the inputAmount/outputAmount must
226
- // use native currencies if necessary. This is so that the Trade knows to wrap/unwrap.
227
- if (tradeType == TradeType.EXACT_INPUT) {
228
- const amountCurrency = CurrencyAmount.fromFractionalAmount(tokenInCurrency, amount.numerator, amount.denominator);
229
- const quoteCurrency = CurrencyAmount.fromFractionalAmount(tokenOutCurrency, quote.numerator, quote.denominator);
230
- const routeCurrency = new Route(route.pools, amountCurrency.currency, quoteCurrency.currency);
231
- return new Trade({
232
- v3Routes: [
233
- {
234
- routev3: routeCurrency,
235
- inputAmount: amountCurrency,
236
- outputAmount: quoteCurrency,
237
- },
238
- ],
239
- v2Routes: [],
240
- tradeType: tradeType,
241
- });
242
- }
243
- else {
244
- const quoteCurrency = CurrencyAmount.fromFractionalAmount(tokenInCurrency, quote.numerator, quote.denominator);
245
- const amountCurrency = CurrencyAmount.fromFractionalAmount(tokenOutCurrency, amount.numerator, amount.denominator);
246
- const routeCurrency = new Route(route.pools, quoteCurrency.currency, amountCurrency.currency);
247
- return new Trade({
248
- v3Routes: [
249
- {
250
- routev3: routeCurrency,
251
- inputAmount: quoteCurrency,
252
- outputAmount: amountCurrency,
253
- },
254
- ],
255
- v2Routes: [],
256
- tradeType: tradeType,
257
- });
258
- }
259
- }
260
- buildMethodParameters(trade, swapConfig) {
261
- const { recipient, slippageTolerance, deadline } = swapConfig;
262
- const methodParameters = SwapRouter.swapCallParameters(trade, {
263
- recipient,
264
- slippageTolerance,
265
- deadlineOrPreviousBlockhash: deadline,
266
- // ...(signatureData
267
- // ? {
268
- // inputTokenPermit:
269
- // 'allowed' in signatureData
270
- // ? {
271
- // expiry: signatureData.deadline,
272
- // nonce: signatureData.nonce,
273
- // s: signatureData.s,
274
- // r: signatureData.r,
275
- // v: signatureData.v as any,
276
- // }
277
- // : {
278
- // deadline: signatureData.deadline,
279
- // amount: signatureData.amount,
280
- // s: signatureData.s,
281
- // r: signatureData.r,
282
- // v: signatureData.v as any,
283
- // },
284
- // }
285
- // : {}),
286
- });
287
- return methodParameters;
288
- }
289
- }
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LXJvdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2xlZ2FjeS1yb3V0ZXIvbGVnYWN5LXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBNEIsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUEwQixLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFJdkIsT0FBTyxFQUNMLFdBQVcsRUFFWCxZQUFZLEdBQ2IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFzQyxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQiw2QkFBNkIsRUFDN0IsWUFBWSxHQUNiLE1BQU0sU0FBUyxDQUFDO0FBVWpCLDJCQUEyQjtBQUMzQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFNbkI7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBT3ZCLFlBQVksRUFDVixPQUFPLEVBQ1Asa0JB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
@@ -1,41 +0,0 @@
1
- import { Provider } from "@ethersproject/providers";
2
- import { Signer } from "ethers";
3
- import type { IMixedRouteQuoterV1, IMixedRouteQuoterV1Interface } from "../IMixedRouteQuoterV1";
4
- export declare class IMixedRouteQuoterV1__factory {
5
- static readonly abi: ({
6
- inputs: {
7
- internalType: string;
8
- name: string;
9
- type: string;
10
- }[];
11
- name: string;
12
- outputs: {
13
- internalType: string;
14
- name: string;
15
- type: string;
16
- }[];
17
- stateMutability: string;
18
- type: string;
19
- } | {
20
- inputs: {
21
- components: {
22
- internalType: string;
23
- name: string;
24
- type: string;
25
- }[];
26
- internalType: string;
27
- name: string;
28
- type: string;
29
- }[];
30
- name: string;
31
- outputs: {
32
- internalType: string;
33
- name: string;
34
- type: string;
35
- }[];
36
- stateMutability: string;
37
- type: string;
38
- })[];
39
- static createInterface(): IMixedRouteQuoterV1Interface;
40
- static connect(address: string, signerOrProvider: Signer | Provider): IMixedRouteQuoterV1;
41
- }
@@ -1,152 +0,0 @@
1
- /* Autogenerated file. Do not edit manually. */
2
- /* tslint:disable */
3
- /* eslint-disable */
4
- import { Contract, utils } from "ethers";
5
- const _abi = [
6
- {
7
- inputs: [
8
- {
9
- internalType: "bytes",
10
- name: "path",
11
- type: "bytes",
12
- },
13
- {
14
- internalType: "uint256",
15
- name: "amountIn",
16
- type: "uint256",
17
- },
18
- ],
19
- name: "quoteExactInput",
20
- outputs: [
21
- {
22
- internalType: "uint256",
23
- name: "amountOut",
24
- type: "uint256",
25
- },
26
- {
27
- internalType: "uint160[]",
28
- name: "v3SqrtPriceX96AfterList",
29
- type: "uint160[]",
30
- },
31
- {
32
- internalType: "uint32[]",
33
- name: "v3InitializedTicksCrossedList",
34
- type: "uint32[]",
35
- },
36
- {
37
- internalType: "uint256",
38
- name: "v3SwapGasEstimate",
39
- type: "uint256",
40
- },
41
- ],
42
- stateMutability: "nonpayable",
43
- type: "function",
44
- },
45
- {
46
- inputs: [
47
- {
48
- components: [
49
- {
50
- internalType: "address",
51
- name: "tokenIn",
52
- type: "address",
53
- },
54
- {
55
- internalType: "address",
56
- name: "tokenOut",
57
- type: "address",
58
- },
59
- {
60
- internalType: "uint256",
61
- name: "amountIn",
62
- type: "uint256",
63
- },
64
- ],
65
- internalType: "struct IMixedRouteQuoterV1.QuoteExactInputSingleV2Params",
66
- name: "params",
67
- type: "tuple",
68
- },
69
- ],
70
- name: "quoteExactInputSingleV2",
71
- outputs: [
72
- {
73
- internalType: "uint256",
74
- name: "amountOut",
75
- type: "uint256",
76
- },
77
- ],
78
- stateMutability: "nonpayable",
79
- type: "function",
80
- },
81
- {
82
- inputs: [
83
- {
84
- components: [
85
- {
86
- internalType: "address",
87
- name: "tokenIn",
88
- type: "address",
89
- },
90
- {
91
- internalType: "address",
92
- name: "tokenOut",
93
- type: "address",
94
- },
95
- {
96
- internalType: "uint256",
97
- name: "amountIn",
98
- type: "uint256",
99
- },
100
- {
101
- internalType: "uint24",
102
- name: "fee",
103
- type: "uint24",
104
- },
105
- {
106
- internalType: "uint160",
107
- name: "sqrtPriceLimitX96",
108
- type: "uint160",
109
- },
110
- ],
111
- internalType: "struct IMixedRouteQuoterV1.QuoteExactInputSingleV3Params",
112
- name: "params",
113
- type: "tuple",
114
- },
115
- ],
116
- name: "quoteExactInputSingleV3",
117
- outputs: [
118
- {
119
- internalType: "uint256",
120
- name: "amountOut",
121
- type: "uint256",
122
- },
123
- {
124
- internalType: "uint160",
125
- name: "sqrtPriceX96After",
126
- type: "uint160",
127
- },
128
- {
129
- internalType: "uint32",
130
- name: "initializedTicksCrossed",
131
- type: "uint32",
132
- },
133
- {
134
- internalType: "uint256",
135
- name: "gasEstimate",
136
- type: "uint256",
137
- },
138
- ],
139
- stateMutability: "nonpayable",
140
- type: "function",
141
- },
142
- ];
143
- export class IMixedRouteQuoterV1__factory {
144
- static createInterface() {
145
- return new utils.Interface(_abi);
146
- }
147
- static connect(address, signerOrProvider) {
148
- return new Contract(address, _abi, signerOrProvider);
149
- }
150
- }
151
- IMixedRouteQuoterV1__factory.abi = _abi;
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSU1peGVkUm91dGVRdW90ZXJWMV9fZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90eXBlcy9vdGhlci9mYWN0b3JpZXMvSU1peGVkUm91dGVRdW90ZXJWMV9fZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUdwQixPQUFPLEVBQUUsUUFBUSxFQUFVLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQU1qRCxNQUFNLElBQUksR0FBRztJQUNYO1FBQ0UsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsWUFBWSxFQUFFLE9BQU87Z0JBQ3JCLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSxPQUFPO2FBQ2Q7WUFDRDtnQkFDRSxZQUFZLEVBQUUsU0FBUztnQkFDdkIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxTQUFTO2FBQ2hCO1NBQ0Y7UUFDRCxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLE9BQU8sRUFBRTtZQUNQO2dCQUNFLFlBQVksRUFBRSxTQUFTO2dCQUN2QixJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLFNBQVM7YUFDaEI7WUFDRDtnQkFDRSxZQUFZLEVBQUUsV0FBVztnQkFDekIsSUFBSSxFQUFFLHlCQUF5QjtnQkFDL0IsSUFBSSxFQUFFLFdBQVc7YUFDbEI7WUFDRDtnQkFDRSxZQUFZLEVBQUUsVUFBVTtnQkFDeEIsSUFBSSxFQUFFLCtCQUErQjtnQkFDckMsSUFBSSxFQUFFLFVBQVU7YUFDakI7WUFDRDtnQkFDRSxZQUFZLEVBQUUsU0FBUztnQkFDdkIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsSUFBSSxFQUFFLFNBQVM7YUFDaEI7U0FDRjtRQUNELGVBQWUsRUFBRSxZQUFZO1FBQzdCLElBQUksRUFBRSxVQUFVO0tBQ2pCO0lBQ0Q7UUFDRSxNQUFNLEVBQUU7WUFDTjtnQkFDRSxVQUFV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
@@ -1,16 +0,0 @@
1
- import { Result } from "@ethersproject/abi";
2
- import { Event, EventFilter } from "ethers";
3
- export interface TypedEventFilter<_EventArgsArray, _EventArgsObject> extends EventFilter {
4
- }
5
- export interface TypedEvent<EventArgs extends Result> extends Event {
6
- args: EventArgs;
7
- }
8
- export declare type TypedListener<EventArgsArray extends Array<any>, EventArgsObject> = (...listenerArg: [
9
- ...EventArgsArray,
10
- TypedEvent<EventArgsArray & EventArgsObject>
11
- ]) => void;
12
- export declare type MinEthersFactory<C, ARGS> = {
13
- deploy(...a: ARGS[]): Promise<C>;
14
- };
15
- export declare type GetContractTypeFromFactory<F> = F extends MinEthersFactory<infer C, any> ? C : never;
16
- export declare type GetARGsTypeFromFactory<F> = F extends MinEthersFactory<any, any> ? Parameters<F["deploy"]> : never;
@@ -1,5 +0,0 @@
1
- /* Autogenerated file. Do not edit manually. */
2
- /* tslint:disable */
3
- /* eslint-disable */
4
- export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90eXBlcy92Mi9jb21tb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxvQkFBb0I7QUFDcEIsb0JBQW9CIn0=
@@ -1,35 +0,0 @@
1
- import { Provider } from "@ethersproject/providers";
2
- import { Signer } from "ethers";
3
- import type { IUniswapV2Pair, IUniswapV2PairInterface } from "../IUniswapV2Pair";
4
- export declare class IUniswapV2Pair__factory {
5
- static readonly abi: ({
6
- anonymous: boolean;
7
- inputs: {
8
- indexed: boolean;
9
- internalType: string;
10
- name: string;
11
- type: string;
12
- }[];
13
- name: string;
14
- type: string;
15
- outputs?: undefined;
16
- stateMutability?: undefined;
17
- } | {
18
- inputs: {
19
- internalType: string;
20
- name: string;
21
- type: string;
22
- }[];
23
- name: string;
24
- outputs: {
25
- internalType: string;
26
- name: string;
27
- type: string;
28
- }[];
29
- stateMutability: string;
30
- type: string;
31
- anonymous?: undefined;
32
- })[];
33
- static createInterface(): IUniswapV2PairInterface;
34
- static connect(address: string, signerOrProvider: Signer | Provider): IUniswapV2Pair;
35
- }