@ring-protocol/smart-order-router 0.5.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 (606) hide show
  1. package/CHANGELOG.md +255 -0
  2. package/LICENSE +674 -0
  3. package/README.md +307 -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 +10 -0
  7. package/build/main/providers/cache-node.js +33 -0
  8. package/build/main/providers/cache.d.ts +14 -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 +29 -0
  15. package/build/main/providers/caching/route/model/cached-route.js +77 -0
  16. package/build/main/providers/caching/route/model/cached-routes.d.ts +67 -0
  17. package/build/main/providers/caching/route/model/cached-routes.js +81 -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 +111 -0
  21. package/build/main/providers/caching/route/route-caching-provider.js +86 -0
  22. package/build/main/providers/caching-gas-provider.d.ts +23 -0
  23. package/build/main/providers/caching-gas-provider.js +41 -0
  24. package/build/main/providers/caching-subgraph-provider.d.ts +33 -0
  25. package/build/main/providers/caching-subgraph-provider.js +186 -0
  26. package/build/main/providers/caching-token-list-provider.d.ts +52 -0
  27. package/build/main/providers/caching-token-list-provider.js +147 -0
  28. package/build/main/providers/caching-token-provider.d.ts +24 -0
  29. package/build/main/providers/caching-token-provider.js +234 -0
  30. package/build/main/providers/eip-1559-gas-price-provider.d.ts +31 -0
  31. package/build/main/providers/eip-1559-gas-price-provider.js +71 -0
  32. package/build/main/providers/eth-estimate-gas-provider.d.ts +21 -0
  33. package/build/main/providers/eth-estimate-gas-provider.js +91 -0
  34. package/build/main/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
  35. package/build/main/providers/eth-gas-station-info-gas-price-provider.js +36 -0
  36. package/build/main/providers/fewV2/ring-caching-pool-provider.d.ts +33 -0
  37. package/build/main/providers/fewV2/ring-caching-pool-provider.js +89 -0
  38. package/build/main/providers/fewV2/ring-caching-subgraph-provider.d.ts +19 -0
  39. package/build/main/providers/fewV2/ring-caching-subgraph-provider.js +24 -0
  40. package/build/main/providers/fewV2/ring-pool-provider.d.ts +63 -0
  41. package/build/main/providers/fewV2/ring-pool-provider.js +148 -0
  42. package/build/main/providers/fewV2/ring-quote-provider.d.ts +34 -0
  43. package/build/main/providers/fewV2/ring-quote-provider.js +90 -0
  44. package/build/main/providers/fewV2/ring-static-subgraph-provider.d.ts +24 -0
  45. package/build/main/providers/fewV2/ring-static-subgraph-provider.js +284 -0
  46. package/build/main/providers/fewV2/ring-subgraph-provider-with-fallback.d.ts +16 -0
  47. package/build/main/providers/fewV2/ring-subgraph-provider-with-fallback.js +23 -0
  48. package/build/main/providers/fewV2/ring-subgraph-provider.d.ts +52 -0
  49. package/build/main/providers/fewV2/ring-subgraph-provider.js +183 -0
  50. package/build/main/providers/fewV2/ring-uri-subgraph-provider.d.ts +4 -0
  51. package/build/main/providers/fewV2/ring-uri-subgraph-provider.js +8 -0
  52. package/build/main/providers/gas-price-provider.d.ts +10 -0
  53. package/build/main/providers/gas-price-provider.js +10 -0
  54. package/build/main/providers/index.d.ts +56 -0
  55. package/build/main/providers/index.js +73 -0
  56. package/build/main/providers/legacy-gas-price-provider.d.ts +7 -0
  57. package/build/main/providers/legacy-gas-price-provider.js +18 -0
  58. package/build/main/providers/multicall-provider.d.ts +83 -0
  59. package/build/main/providers/multicall-provider.js +15 -0
  60. package/build/main/providers/multicall-ringswap-provider.d.ts +35 -0
  61. package/build/main/providers/multicall-ringswap-provider.js +164 -0
  62. package/build/main/providers/multicall-uniswap-provider.d.ts +37 -0
  63. package/build/main/providers/multicall-uniswap-provider.js +164 -0
  64. package/build/main/providers/on-chain-gas-price-provider.d.ts +19 -0
  65. package/build/main/providers/on-chain-gas-price-provider.js +37 -0
  66. package/build/main/providers/on-chain-quote-provider.d.ts +260 -0
  67. package/build/main/providers/on-chain-quote-provider.js +702 -0
  68. package/build/main/providers/pool-provider.d.ts +45 -0
  69. package/build/main/providers/pool-provider.js +73 -0
  70. package/build/main/providers/portion-provider.d.ts +86 -0
  71. package/build/main/providers/portion-provider.js +118 -0
  72. package/build/main/providers/provider.d.ts +38 -0
  73. package/build/main/providers/provider.js +3 -0
  74. package/build/main/providers/simulation-provider.d.ts +46 -0
  75. package/build/main/providers/simulation-provider.js +138 -0
  76. package/build/main/providers/static-gas-price-provider.d.ts +7 -0
  77. package/build/main/providers/static-gas-price-provider.js +13 -0
  78. package/build/main/providers/subgraph-provider-with-fallback.d.ts +11 -0
  79. package/build/main/providers/subgraph-provider-with-fallback.js +25 -0
  80. package/build/main/providers/subgraph-provider.d.ts +56 -0
  81. package/build/main/providers/subgraph-provider.js +287 -0
  82. package/build/main/providers/swap-router-provider.d.ts +30 -0
  83. package/build/main/providers/swap-router-provider.js +42 -0
  84. package/build/main/providers/tenderly-simulation-provider.d.ts +63 -0
  85. package/build/main/providers/tenderly-simulation-provider.js +446 -0
  86. package/build/main/providers/token-fee-fetcher.d.ts +31 -0
  87. package/build/main/providers/token-fee-fetcher.js +114 -0
  88. package/build/main/providers/token-properties-provider.d.ts +31 -0
  89. package/build/main/providers/token-properties-provider.js +118 -0
  90. package/build/main/providers/token-provider.d.ts +167 -0
  91. package/build/main/providers/token-provider.js +414 -0
  92. package/build/main/providers/token-validator-provider.d.ts +42 -0
  93. package/build/main/providers/token-validator-provider.js +99 -0
  94. package/build/main/providers/uri-subgraph-provider.d.ts +21 -0
  95. package/build/main/providers/uri-subgraph-provider.js +65 -0
  96. package/build/main/providers/v2/caching-pool-provider.d.ts +33 -0
  97. package/build/main/providers/v2/caching-pool-provider.js +89 -0
  98. package/build/main/providers/v2/caching-subgraph-provider.d.ts +19 -0
  99. package/build/main/providers/v2/caching-subgraph-provider.js +24 -0
  100. package/build/main/providers/v2/pool-provider.d.ts +63 -0
  101. package/build/main/providers/v2/pool-provider.js +148 -0
  102. package/build/main/providers/v2/quote-provider.d.ts +34 -0
  103. package/build/main/providers/v2/quote-provider.js +90 -0
  104. package/build/main/providers/v2/static-subgraph-provider.d.ts +19 -0
  105. package/build/main/providers/v2/static-subgraph-provider.js +183 -0
  106. package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +16 -0
  107. package/build/main/providers/v2/subgraph-provider-with-fallback.js +23 -0
  108. package/build/main/providers/v2/subgraph-provider.d.ts +52 -0
  109. package/build/main/providers/v2/subgraph-provider.js +334 -0
  110. package/build/main/providers/v2/uri-subgraph-provider.d.ts +4 -0
  111. package/build/main/providers/v2/uri-subgraph-provider.js +8 -0
  112. package/build/main/providers/v3/caching-pool-provider.d.ts +32 -0
  113. package/build/main/providers/v3/caching-pool-provider.js +84 -0
  114. package/build/main/providers/v3/caching-subgraph-provider.d.ts +19 -0
  115. package/build/main/providers/v3/caching-subgraph-provider.js +24 -0
  116. package/build/main/providers/v3/gas-data-provider.d.ts +39 -0
  117. package/build/main/providers/v3/gas-data-provider.js +26 -0
  118. package/build/main/providers/v3/pool-provider.d.ts +77 -0
  119. package/build/main/providers/v3/pool-provider.js +108 -0
  120. package/build/main/providers/v3/static-subgraph-provider.d.ts +21 -0
  121. package/build/main/providers/v3/static-subgraph-provider.js +229 -0
  122. package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +12 -0
  123. package/build/main/providers/v3/subgraph-provider-with-fallback.js +19 -0
  124. package/build/main/providers/v3/subgraph-provider.d.ts +45 -0
  125. package/build/main/providers/v3/subgraph-provider.js +46 -0
  126. package/build/main/providers/v3/uri-subgraph-provider.d.ts +4 -0
  127. package/build/main/providers/v3/uri-subgraph-provider.js +8 -0
  128. package/build/main/providers/v4/caching-pool-provider.d.ts +24 -0
  129. package/build/main/providers/v4/caching-pool-provider.js +81 -0
  130. package/build/main/providers/v4/caching-subgraph-provider.d.ts +19 -0
  131. package/build/main/providers/v4/caching-subgraph-provider.js +24 -0
  132. package/build/main/providers/v4/euler-swap-hooks-subgraph-provider.d.ts +25 -0
  133. package/build/main/providers/v4/euler-swap-hooks-subgraph-provider.js +160 -0
  134. package/build/main/providers/v4/pool-provider.d.ts +58 -0
  135. package/build/main/providers/v4/pool-provider.js +115 -0
  136. package/build/main/providers/v4/static-subgraph-provider.d.ts +15 -0
  137. package/build/main/providers/v4/static-subgraph-provider.js +78 -0
  138. package/build/main/providers/v4/subgraph-provider-with-fallback.d.ts +5 -0
  139. package/build/main/providers/v4/subgraph-provider-with-fallback.js +12 -0
  140. package/build/main/providers/v4/subgraph-provider.d.ts +63 -0
  141. package/build/main/providers/v4/subgraph-provider.js +63 -0
  142. package/build/main/providers/v4/uri-subgraph-provider.d.ts +4 -0
  143. package/build/main/providers/v4/uri-subgraph-provider.js +8 -0
  144. package/build/main/routers/alpha-router/alpha-router.d.ts +483 -0
  145. package/build/main/routers/alpha-router/alpha-router.js +2267 -0
  146. package/build/main/routers/alpha-router/config.d.ts +4 -0
  147. package/build/main/routers/alpha-router/config.js +129 -0
  148. package/build/main/routers/alpha-router/entities/index.d.ts +1 -0
  149. package/build/main/routers/alpha-router/entities/index.js +18 -0
  150. package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +329 -0
  151. package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +319 -0
  152. package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +25 -0
  153. package/build/main/routers/alpha-router/functions/best-swap-route.js +597 -0
  154. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
  155. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js +18 -0
  156. package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +16 -0
  157. package/build/main/routers/alpha-router/functions/compute-all-routes.js +158 -0
  158. package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +192 -0
  159. package/build/main/routers/alpha-router/functions/get-candidate-pools.js +3025 -0
  160. package/build/main/routers/alpha-router/gas-models/fewV2/v2-heuristic-gas-model.d.ts +31 -0
  161. package/build/main/routers/alpha-router/gas-models/fewV2/v2-heuristic-gas-model.js +169 -0
  162. package/build/main/routers/alpha-router/gas-models/gas-costs.d.ts +12 -0
  163. package/build/main/routers/alpha-router/gas-models/gas-costs.js +200 -0
  164. package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +111 -0
  165. package/build/main/routers/alpha-router/gas-models/gas-model.js +120 -0
  166. package/build/main/routers/alpha-router/gas-models/index.d.ts +5 -0
  167. package/build/main/routers/alpha-router/gas-models/index.js +22 -0
  168. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +24 -0
  169. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +161 -0
  170. package/build/main/routers/alpha-router/gas-models/ring-gas-model.d.ts +111 -0
  171. package/build/main/routers/alpha-router/gas-models/ring-gas-model.js +169 -0
  172. package/build/main/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.d.ts +21 -0
  173. package/build/main/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.js +366 -0
  174. package/build/main/routers/alpha-router/gas-models/uniswapFewV3/v3-heuristic-gas-model.d.ts +26 -0
  175. package/build/main/routers/alpha-router/gas-models/uniswapFewV3/v3-heuristic-gas-model.js +41 -0
  176. package/build/main/routers/alpha-router/gas-models/uniswapFewV4/v4-heuristic-gas-model.d.ts +15 -0
  177. package/build/main/routers/alpha-router/gas-models/uniswapFewV4/v4-heuristic-gas-model.js +40 -0
  178. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +31 -0
  179. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +169 -0
  180. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +26 -0
  181. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +41 -0
  182. package/build/main/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.d.ts +15 -0
  183. package/build/main/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.js +40 -0
  184. package/build/main/routers/alpha-router/index.d.ts +4 -0
  185. package/build/main/routers/alpha-router/index.js +21 -0
  186. package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +78 -0
  187. package/build/main/routers/alpha-router/quoters/base-quoter.js +77 -0
  188. package/build/main/routers/alpha-router/quoters/few-v2-quoter.d.ts +24 -0
  189. package/build/main/routers/alpha-router/quoters/few-v2-quoter.js +141 -0
  190. package/build/main/routers/alpha-router/quoters/index.d.ts +5 -0
  191. package/build/main/routers/alpha-router/quoters/index.js +22 -0
  192. package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +34 -0
  193. package/build/main/routers/alpha-router/quoters/mixed-quoter.js +156 -0
  194. package/build/main/routers/alpha-router/quoters/model/index.d.ts +1 -0
  195. package/build/main/routers/alpha-router/quoters/model/index.js +18 -0
  196. package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
  197. package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.js +3 -0
  198. package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
  199. package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.js +3 -0
  200. package/build/main/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
  201. package/build/main/routers/alpha-router/quoters/model/results/index.js +19 -0
  202. package/build/main/routers/alpha-router/quoters/uniswap-few-v3-quoter.d.ts +19 -0
  203. package/build/main/routers/alpha-router/quoters/uniswap-few-v3-quoter.js +118 -0
  204. package/build/main/routers/alpha-router/quoters/uniswap-few-v4-quoter.d.ts +18 -0
  205. package/build/main/routers/alpha-router/quoters/uniswap-few-v4-quoter.js +121 -0
  206. package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +24 -0
  207. package/build/main/routers/alpha-router/quoters/v2-quoter.js +141 -0
  208. package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
  209. package/build/main/routers/alpha-router/quoters/v3-quoter.js +125 -0
  210. package/build/main/routers/alpha-router/quoters/v4-quoter.d.ts +18 -0
  211. package/build/main/routers/alpha-router/quoters/v4-quoter.js +121 -0
  212. package/build/main/routers/index.d.ts +4 -0
  213. package/build/main/routers/index.js +21 -0
  214. package/build/main/routers/legacy-router/bases.d.ts +225 -0
  215. package/build/main/routers/legacy-router/bases.js +132 -0
  216. package/build/main/routers/legacy-router/index.d.ts +1 -0
  217. package/build/main/routers/legacy-router/index.js +18 -0
  218. package/build/main/routers/legacy-router/legacy-router.d.ts +41 -0
  219. package/build/main/routers/legacy-router/legacy-router.js +291 -0
  220. package/build/main/routers/router.d.ts +195 -0
  221. package/build/main/routers/router.js +68 -0
  222. package/build/main/tsconfig.tsbuildinfo +1 -0
  223. package/build/main/types/other/commons.d.ts +16 -0
  224. package/build/main/types/other/commons.js +6 -0
  225. package/build/main/types/other/factories/Erc20__factory.d.ts +45 -0
  226. package/build/main/types/other/factories/Erc20__factory.js +240 -0
  227. package/build/main/types/other/factories/GasDataArbitrum__factory.d.ts +18 -0
  228. package/build/main/types/other/factories/GasDataArbitrum__factory.js +58 -0
  229. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
  230. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js +156 -0
  231. package/build/main/types/other/factories/ITokenValidator__factory.d.ts +22 -0
  232. package/build/main/types/other/factories/ITokenValidator__factory.js +78 -0
  233. package/build/main/types/other/factories/MixedRouteQuoterV2__factory.d.ts +86 -0
  234. package/build/main/types/other/factories/MixedRouteQuoterV2__factory.js +477 -0
  235. package/build/main/types/other/factories/Permit2__factory.d.ts +87 -0
  236. package/build/main/types/other/factories/Permit2__factory.js +936 -0
  237. package/build/main/types/other/factories/StateView__factory.d.ts +32 -0
  238. package/build/main/types/other/factories/StateView__factory.js +383 -0
  239. package/build/main/types/other/factories/SwapRouter02__factory.d.ts +67 -0
  240. package/build/main/types/other/factories/SwapRouter02__factory.js +1098 -0
  241. package/build/main/types/other/factories/TokenFeeDetector__factory.d.ts +47 -0
  242. package/build/main/types/other/factories/TokenFeeDetector__factory.js +243 -0
  243. package/build/main/types/other/factories/V4Quoter__factory.d.ts +37 -0
  244. package/build/main/types/other/factories/V4Quoter__factory.js +312 -0
  245. package/build/main/types/v2/commons.d.ts +16 -0
  246. package/build/main/types/v2/commons.js +6 -0
  247. package/build/main/types/v2/factories/IUniswapV2Pair__factory.d.ts +35 -0
  248. package/build/main/types/v2/factories/IUniswapV2Pair__factory.js +671 -0
  249. package/build/main/types/v3/commons.d.ts +16 -0
  250. package/build/main/types/v3/commons.js +6 -0
  251. package/build/main/types/v3/factories/IERC20Metadata__factory.d.ts +35 -0
  252. package/build/main/types/v3/factories/IERC20Metadata__factory.js +242 -0
  253. package/build/main/types/v3/factories/IQuoterV2__factory.d.ts +41 -0
  254. package/build/main/types/v3/factories/IQuoterV2__factory.js +220 -0
  255. package/build/main/types/v3/factories/IUniswapV3PoolState__factory.d.ts +22 -0
  256. package/build/main/types/v3/factories/IUniswapV3PoolState__factory.js +266 -0
  257. package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +61 -0
  258. package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.js +127 -0
  259. package/build/main/util/addresses.d.ts +34 -0
  260. package/build/main/util/addresses.js +140 -0
  261. package/build/main/util/amounts.d.ts +10 -0
  262. package/build/main/util/amounts.js +94 -0
  263. package/build/main/util/callData.d.ts +1 -0
  264. package/build/main/util/callData.js +6 -0
  265. package/build/main/util/chains.d.ts +75 -0
  266. package/build/main/util/chains.js +780 -0
  267. package/build/main/util/defaultBlocksToLive.d.ts +4 -0
  268. package/build/main/util/defaultBlocksToLive.js +57 -0
  269. package/build/main/util/fewAddress.d.ts +48 -0
  270. package/build/main/util/fewAddress.js +624 -0
  271. package/build/main/util/gas-factory-helpers.d.ts +38 -0
  272. package/build/main/util/gas-factory-helpers.js +596 -0
  273. package/build/main/util/hooksOptions.d.ts +5 -0
  274. package/build/main/util/hooksOptions.js +10 -0
  275. package/build/main/util/index.d.ts +10 -0
  276. package/build/main/util/index.js +27 -0
  277. package/build/main/util/intent.d.ts +6 -0
  278. package/build/main/util/intent.js +13 -0
  279. package/build/main/util/l2FeeChains.d.ts +2 -0
  280. package/build/main/util/l2FeeChains.js +18 -0
  281. package/build/main/util/log.d.ts +3 -0
  282. package/build/main/util/log.js +97 -0
  283. package/build/main/util/methodParameters.d.ts +5 -0
  284. package/build/main/util/methodParameters.js +176 -0
  285. package/build/main/util/metric.d.ts +48 -0
  286. package/build/main/util/metric.js +59 -0
  287. package/build/main/util/mixedRouteFilterOutV4Pools.d.ts +3 -0
  288. package/build/main/util/mixedRouteFilterOutV4Pools.js +17 -0
  289. package/build/main/util/onchainQuoteProviderConfigs.d.ts +42 -0
  290. package/build/main/util/onchainQuoteProviderConfigs.js +72 -0
  291. package/build/main/util/pool.d.ts +5 -0
  292. package/build/main/util/pool.js +46 -0
  293. package/build/main/util/protocols.d.ts +2 -0
  294. package/build/main/util/protocols.js +22 -0
  295. package/build/main/util/routes.d.ts +11 -0
  296. package/build/main/util/routes.js +159 -0
  297. package/build/main/util/serializeRouteIds.d.ts +2 -0
  298. package/build/main/util/serializeRouteIds.js +12 -0
  299. package/build/main/util/simple-perf-tracker.d.ts +27 -0
  300. package/build/main/util/simple-perf-tracker.js +171 -0
  301. package/build/main/util/tenderlySimulationErrorBreakDown.d.ts +3 -0
  302. package/build/main/util/tenderlySimulationErrorBreakDown.js +33 -0
  303. package/build/main/util/unsupported-tokens.d.ts +37 -0
  304. package/build/main/util/unsupported-tokens.js +1119 -0
  305. package/build/module/index.d.ts +3 -0
  306. package/build/module/index.js +4 -0
  307. package/build/module/providers/cache-node.d.ts +10 -0
  308. package/build/module/providers/cache-node.js +29 -0
  309. package/build/module/providers/cache.d.ts +14 -0
  310. package/build/module/providers/cache.js +2 -0
  311. package/build/module/providers/caching/route/index.d.ts +2 -0
  312. package/build/module/providers/caching/route/index.js +3 -0
  313. package/build/module/providers/caching/route/model/cache-mode.d.ts +16 -0
  314. package/build/module/providers/caching/route/model/cache-mode.js +18 -0
  315. package/build/module/providers/caching/route/model/cached-route.d.ts +29 -0
  316. package/build/module/providers/caching/route/model/cached-route.js +73 -0
  317. package/build/module/providers/caching/route/model/cached-routes.d.ts +67 -0
  318. package/build/module/providers/caching/route/model/cached-routes.js +74 -0
  319. package/build/module/providers/caching/route/model/index.d.ts +3 -0
  320. package/build/module/providers/caching/route/model/index.js +4 -0
  321. package/build/module/providers/caching/route/route-caching-provider.d.ts +111 -0
  322. package/build/module/providers/caching/route/route-caching-provider.js +82 -0
  323. package/build/module/providers/caching-gas-provider.d.ts +23 -0
  324. package/build/module/providers/caching-gas-provider.js +37 -0
  325. package/build/module/providers/caching-subgraph-provider.d.ts +33 -0
  326. package/build/module/providers/caching-subgraph-provider.js +182 -0
  327. package/build/module/providers/caching-token-list-provider.d.ts +52 -0
  328. package/build/module/providers/caching-token-list-provider.js +140 -0
  329. package/build/module/providers/caching-token-provider.d.ts +24 -0
  330. package/build/module/providers/caching-token-provider.js +227 -0
  331. package/build/module/providers/eip-1559-gas-price-provider.d.ts +31 -0
  332. package/build/module/providers/eip-1559-gas-price-provider.js +64 -0
  333. package/build/module/providers/eth-estimate-gas-provider.d.ts +21 -0
  334. package/build/module/providers/eth-estimate-gas-provider.js +99 -0
  335. package/build/module/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
  336. package/build/module/providers/eth-gas-station-info-gas-price-provider.js +29 -0
  337. package/build/module/providers/fewV2/ring-caching-pool-provider.d.ts +33 -0
  338. package/build/module/providers/fewV2/ring-caching-pool-provider.js +85 -0
  339. package/build/module/providers/fewV2/ring-caching-subgraph-provider.d.ts +19 -0
  340. package/build/module/providers/fewV2/ring-caching-subgraph-provider.js +20 -0
  341. package/build/module/providers/fewV2/ring-pool-provider.d.ts +63 -0
  342. package/build/module/providers/fewV2/ring-pool-provider.js +141 -0
  343. package/build/module/providers/fewV2/ring-quote-provider.d.ts +34 -0
  344. package/build/module/providers/fewV2/ring-quote-provider.js +86 -0
  345. package/build/module/providers/fewV2/ring-static-subgraph-provider.d.ts +24 -0
  346. package/build/module/providers/fewV2/ring-static-subgraph-provider.js +319 -0
  347. package/build/module/providers/fewV2/ring-subgraph-provider-with-fallback.d.ts +16 -0
  348. package/build/module/providers/fewV2/ring-subgraph-provider-with-fallback.js +19 -0
  349. package/build/module/providers/fewV2/ring-subgraph-provider.d.ts +52 -0
  350. package/build/module/providers/fewV2/ring-subgraph-provider.js +176 -0
  351. package/build/module/providers/fewV2/ring-uri-subgraph-provider.d.ts +4 -0
  352. package/build/module/providers/fewV2/ring-uri-subgraph-provider.js +4 -0
  353. package/build/module/providers/gas-price-provider.d.ts +10 -0
  354. package/build/module/providers/gas-price-provider.js +6 -0
  355. package/build/module/providers/index.d.ts +56 -0
  356. package/build/module/providers/index.js +57 -0
  357. package/build/module/providers/legacy-gas-price-provider.d.ts +7 -0
  358. package/build/module/providers/legacy-gas-price-provider.js +14 -0
  359. package/build/module/providers/multicall-provider.d.ts +83 -0
  360. package/build/module/providers/multicall-provider.js +11 -0
  361. package/build/module/providers/multicall-ringswap-provider.d.ts +35 -0
  362. package/build/module/providers/multicall-ringswap-provider.js +157 -0
  363. package/build/module/providers/multicall-uniswap-provider.d.ts +37 -0
  364. package/build/module/providers/multicall-uniswap-provider.js +157 -0
  365. package/build/module/providers/on-chain-gas-price-provider.d.ts +19 -0
  366. package/build/module/providers/on-chain-gas-price-provider.js +33 -0
  367. package/build/module/providers/on-chain-quote-provider.d.ts +260 -0
  368. package/build/module/providers/on-chain-quote-provider.js +696 -0
  369. package/build/module/providers/pool-provider.d.ts +45 -0
  370. package/build/module/providers/pool-provider.js +66 -0
  371. package/build/module/providers/portion-provider.d.ts +86 -0
  372. package/build/module/providers/portion-provider.js +114 -0
  373. package/build/module/providers/provider.d.ts +38 -0
  374. package/build/module/providers/provider.js +2 -0
  375. package/build/module/providers/simulation-provider.d.ts +46 -0
  376. package/build/module/providers/simulation-provider.js +140 -0
  377. package/build/module/providers/static-gas-price-provider.d.ts +7 -0
  378. package/build/module/providers/static-gas-price-provider.js +9 -0
  379. package/build/module/providers/subgraph-provider-with-fallback.d.ts +11 -0
  380. package/build/module/providers/subgraph-provider-with-fallback.js +21 -0
  381. package/build/module/providers/subgraph-provider.d.ts +56 -0
  382. package/build/module/providers/subgraph-provider.js +284 -0
  383. package/build/module/providers/swap-router-provider.d.ts +30 -0
  384. package/build/module/providers/swap-router-provider.js +38 -0
  385. package/build/module/providers/tenderly-simulation-provider.d.ts +63 -0
  386. package/build/module/providers/tenderly-simulation-provider.js +444 -0
  387. package/build/module/providers/token-fee-fetcher.d.ts +31 -0
  388. package/build/module/providers/token-fee-fetcher.js +110 -0
  389. package/build/module/providers/token-properties-provider.d.ts +31 -0
  390. package/build/module/providers/token-properties-provider.js +114 -0
  391. package/build/module/providers/token-provider.d.ts +167 -0
  392. package/build/module/providers/token-provider.js +401 -0
  393. package/build/module/providers/token-validator-provider.d.ts +42 -0
  394. package/build/module/providers/token-validator-provider.js +92 -0
  395. package/build/module/providers/uri-subgraph-provider.d.ts +21 -0
  396. package/build/module/providers/uri-subgraph-provider.js +58 -0
  397. package/build/module/providers/v2/caching-pool-provider.d.ts +33 -0
  398. package/build/module/providers/v2/caching-pool-provider.js +85 -0
  399. package/build/module/providers/v2/caching-subgraph-provider.d.ts +19 -0
  400. package/build/module/providers/v2/caching-subgraph-provider.js +20 -0
  401. package/build/module/providers/v2/pool-provider.d.ts +63 -0
  402. package/build/module/providers/v2/pool-provider.js +141 -0
  403. package/build/module/providers/v2/quote-provider.d.ts +34 -0
  404. package/build/module/providers/v2/quote-provider.js +86 -0
  405. package/build/module/providers/v2/static-subgraph-provider.d.ts +19 -0
  406. package/build/module/providers/v2/static-subgraph-provider.js +178 -0
  407. package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +16 -0
  408. package/build/module/providers/v2/subgraph-provider-with-fallback.js +19 -0
  409. package/build/module/providers/v2/subgraph-provider.d.ts +52 -0
  410. package/build/module/providers/v2/subgraph-provider.js +331 -0
  411. package/build/module/providers/v2/uri-subgraph-provider.d.ts +4 -0
  412. package/build/module/providers/v2/uri-subgraph-provider.js +4 -0
  413. package/build/module/providers/v3/caching-pool-provider.d.ts +32 -0
  414. package/build/module/providers/v3/caching-pool-provider.js +77 -0
  415. package/build/module/providers/v3/caching-subgraph-provider.d.ts +19 -0
  416. package/build/module/providers/v3/caching-subgraph-provider.js +20 -0
  417. package/build/module/providers/v3/gas-data-provider.d.ts +39 -0
  418. package/build/module/providers/v3/gas-data-provider.js +22 -0
  419. package/build/module/providers/v3/pool-provider.d.ts +77 -0
  420. package/build/module/providers/v3/pool-provider.js +101 -0
  421. package/build/module/providers/v3/static-subgraph-provider.d.ts +21 -0
  422. package/build/module/providers/v3/static-subgraph-provider.js +224 -0
  423. package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +12 -0
  424. package/build/module/providers/v3/subgraph-provider-with-fallback.js +15 -0
  425. package/build/module/providers/v3/subgraph-provider.d.ts +45 -0
  426. package/build/module/providers/v3/subgraph-provider.js +42 -0
  427. package/build/module/providers/v3/uri-subgraph-provider.d.ts +4 -0
  428. package/build/module/providers/v3/uri-subgraph-provider.js +4 -0
  429. package/build/module/providers/v4/caching-pool-provider.d.ts +24 -0
  430. package/build/module/providers/v4/caching-pool-provider.js +74 -0
  431. package/build/module/providers/v4/caching-subgraph-provider.d.ts +19 -0
  432. package/build/module/providers/v4/caching-subgraph-provider.js +20 -0
  433. package/build/module/providers/v4/euler-swap-hooks-subgraph-provider.d.ts +25 -0
  434. package/build/module/providers/v4/euler-swap-hooks-subgraph-provider.js +153 -0
  435. package/build/module/providers/v4/pool-provider.d.ts +58 -0
  436. package/build/module/providers/v4/pool-provider.js +106 -0
  437. package/build/module/providers/v4/static-subgraph-provider.d.ts +15 -0
  438. package/build/module/providers/v4/static-subgraph-provider.js +71 -0
  439. package/build/module/providers/v4/subgraph-provider-with-fallback.d.ts +5 -0
  440. package/build/module/providers/v4/subgraph-provider-with-fallback.js +8 -0
  441. package/build/module/providers/v4/subgraph-provider.d.ts +63 -0
  442. package/build/module/providers/v4/subgraph-provider.js +59 -0
  443. package/build/module/providers/v4/uri-subgraph-provider.d.ts +4 -0
  444. package/build/module/providers/v4/uri-subgraph-provider.js +4 -0
  445. package/build/module/routers/alpha-router/alpha-router.d.ts +483 -0
  446. package/build/module/routers/alpha-router/alpha-router.js +2280 -0
  447. package/build/module/routers/alpha-router/config.d.ts +4 -0
  448. package/build/module/routers/alpha-router/config.js +125 -0
  449. package/build/module/routers/alpha-router/entities/index.d.ts +1 -0
  450. package/build/module/routers/alpha-router/entities/index.js +2 -0
  451. package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +329 -0
  452. package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +306 -0
  453. package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +25 -0
  454. package/build/module/routers/alpha-router/functions/best-swap-route.js +586 -0
  455. package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
  456. package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.js +14 -0
  457. package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +16 -0
  458. package/build/module/routers/alpha-router/functions/compute-all-routes.js +147 -0
  459. package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +192 -0
  460. package/build/module/routers/alpha-router/functions/get-candidate-pools.js +3010 -0
  461. package/build/module/routers/alpha-router/gas-models/fewV2/v2-heuristic-gas-model.d.ts +31 -0
  462. package/build/module/routers/alpha-router/gas-models/fewV2/v2-heuristic-gas-model.js +162 -0
  463. package/build/module/routers/alpha-router/gas-models/gas-costs.d.ts +12 -0
  464. package/build/module/routers/alpha-router/gas-models/gas-costs.js +189 -0
  465. package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +111 -0
  466. package/build/module/routers/alpha-router/gas-models/gas-model.js +114 -0
  467. package/build/module/routers/alpha-router/gas-models/index.d.ts +5 -0
  468. package/build/module/routers/alpha-router/gas-models/index.js +6 -0
  469. package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +24 -0
  470. package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +154 -0
  471. package/build/module/routers/alpha-router/gas-models/ring-gas-model.d.ts +111 -0
  472. package/build/module/routers/alpha-router/gas-models/ring-gas-model.js +163 -0
  473. package/build/module/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.d.ts +21 -0
  474. package/build/module/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.js +362 -0
  475. package/build/module/routers/alpha-router/gas-models/uniswapFewV3/v3-heuristic-gas-model.d.ts +26 -0
  476. package/build/module/routers/alpha-router/gas-models/uniswapFewV3/v3-heuristic-gas-model.js +37 -0
  477. package/build/module/routers/alpha-router/gas-models/uniswapFewV4/v4-heuristic-gas-model.d.ts +15 -0
  478. package/build/module/routers/alpha-router/gas-models/uniswapFewV4/v4-heuristic-gas-model.js +36 -0
  479. package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +31 -0
  480. package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +162 -0
  481. package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +26 -0
  482. package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +37 -0
  483. package/build/module/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.d.ts +15 -0
  484. package/build/module/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.js +36 -0
  485. package/build/module/routers/alpha-router/index.d.ts +4 -0
  486. package/build/module/routers/alpha-router/index.js +5 -0
  487. package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +78 -0
  488. package/build/module/routers/alpha-router/quoters/base-quoter.js +70 -0
  489. package/build/module/routers/alpha-router/quoters/few-v2-quoter.d.ts +24 -0
  490. package/build/module/routers/alpha-router/quoters/few-v2-quoter.js +138 -0
  491. package/build/module/routers/alpha-router/quoters/index.d.ts +5 -0
  492. package/build/module/routers/alpha-router/quoters/index.js +6 -0
  493. package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +34 -0
  494. package/build/module/routers/alpha-router/quoters/mixed-quoter.js +149 -0
  495. package/build/module/routers/alpha-router/quoters/model/index.d.ts +1 -0
  496. package/build/module/routers/alpha-router/quoters/model/index.js +2 -0
  497. package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
  498. package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.js +2 -0
  499. package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
  500. package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.js +2 -0
  501. package/build/module/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
  502. package/build/module/routers/alpha-router/quoters/model/results/index.js +3 -0
  503. package/build/module/routers/alpha-router/quoters/uniswap-few-v3-quoter.d.ts +19 -0
  504. package/build/module/routers/alpha-router/quoters/uniswap-few-v3-quoter.js +111 -0
  505. package/build/module/routers/alpha-router/quoters/uniswap-few-v4-quoter.d.ts +18 -0
  506. package/build/module/routers/alpha-router/quoters/uniswap-few-v4-quoter.js +114 -0
  507. package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +24 -0
  508. package/build/module/routers/alpha-router/quoters/v2-quoter.js +138 -0
  509. package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
  510. package/build/module/routers/alpha-router/quoters/v3-quoter.js +118 -0
  511. package/build/module/routers/alpha-router/quoters/v4-quoter.d.ts +18 -0
  512. package/build/module/routers/alpha-router/quoters/v4-quoter.js +114 -0
  513. package/build/module/routers/index.d.ts +4 -0
  514. package/build/module/routers/index.js +5 -0
  515. package/build/module/routers/legacy-router/bases.d.ts +225 -0
  516. package/build/module/routers/legacy-router/bases.js +138 -0
  517. package/build/module/routers/legacy-router/index.d.ts +1 -0
  518. package/build/module/routers/legacy-router/index.js +2 -0
  519. package/build/module/routers/legacy-router/legacy-router.d.ts +41 -0
  520. package/build/module/routers/legacy-router/legacy-router.js +292 -0
  521. package/build/module/routers/router.d.ts +195 -0
  522. package/build/module/routers/router.js +58 -0
  523. package/build/module/tsconfig.module.tsbuildinfo +1 -0
  524. package/build/module/types/other/commons.d.ts +16 -0
  525. package/build/module/types/other/commons.js +5 -0
  526. package/build/module/types/other/factories/Erc20__factory.d.ts +45 -0
  527. package/build/module/types/other/factories/Erc20__factory.js +236 -0
  528. package/build/module/types/other/factories/GasDataArbitrum__factory.d.ts +18 -0
  529. package/build/module/types/other/factories/GasDataArbitrum__factory.js +54 -0
  530. package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
  531. package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.js +152 -0
  532. package/build/module/types/other/factories/ITokenValidator__factory.d.ts +22 -0
  533. package/build/module/types/other/factories/ITokenValidator__factory.js +74 -0
  534. package/build/module/types/other/factories/MixedRouteQuoterV2__factory.d.ts +86 -0
  535. package/build/module/types/other/factories/MixedRouteQuoterV2__factory.js +473 -0
  536. package/build/module/types/other/factories/Permit2__factory.d.ts +87 -0
  537. package/build/module/types/other/factories/Permit2__factory.js +932 -0
  538. package/build/module/types/other/factories/StateView__factory.d.ts +32 -0
  539. package/build/module/types/other/factories/StateView__factory.js +379 -0
  540. package/build/module/types/other/factories/SwapRouter02__factory.d.ts +67 -0
  541. package/build/module/types/other/factories/SwapRouter02__factory.js +1094 -0
  542. package/build/module/types/other/factories/TokenFeeDetector__factory.d.ts +47 -0
  543. package/build/module/types/other/factories/TokenFeeDetector__factory.js +239 -0
  544. package/build/module/types/other/factories/V4Quoter__factory.d.ts +37 -0
  545. package/build/module/types/other/factories/V4Quoter__factory.js +308 -0
  546. package/build/module/types/v2/commons.d.ts +16 -0
  547. package/build/module/types/v2/commons.js +5 -0
  548. package/build/module/types/v2/factories/IUniswapV2Pair__factory.d.ts +35 -0
  549. package/build/module/types/v2/factories/IUniswapV2Pair__factory.js +667 -0
  550. package/build/module/types/v3/commons.d.ts +16 -0
  551. package/build/module/types/v3/commons.js +5 -0
  552. package/build/module/types/v3/factories/IERC20Metadata__factory.d.ts +35 -0
  553. package/build/module/types/v3/factories/IERC20Metadata__factory.js +238 -0
  554. package/build/module/types/v3/factories/IQuoterV2__factory.d.ts +41 -0
  555. package/build/module/types/v3/factories/IQuoterV2__factory.js +216 -0
  556. package/build/module/types/v3/factories/IUniswapV3PoolState__factory.d.ts +22 -0
  557. package/build/module/types/v3/factories/IUniswapV3PoolState__factory.js +262 -0
  558. package/build/module/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +61 -0
  559. package/build/module/types/v3/factories/UniswapInterfaceMulticall__factory.js +123 -0
  560. package/build/module/util/addresses.d.ts +34 -0
  561. package/build/module/util/addresses.js +280 -0
  562. package/build/module/util/amounts.d.ts +10 -0
  563. package/build/module/util/amounts.js +82 -0
  564. package/build/module/util/callData.d.ts +1 -0
  565. package/build/module/util/callData.js +3 -0
  566. package/build/module/util/chains.d.ts +75 -0
  567. package/build/module/util/chains.js +772 -0
  568. package/build/module/util/defaultBlocksToLive.d.ts +4 -0
  569. package/build/module/util/defaultBlocksToLive.js +54 -0
  570. package/build/module/util/fewAddress.d.ts +48 -0
  571. package/build/module/util/fewAddress.js +627 -0
  572. package/build/module/util/gas-factory-helpers.d.ts +38 -0
  573. package/build/module/util/gas-factory-helpers.js +575 -0
  574. package/build/module/util/hooksOptions.d.ts +5 -0
  575. package/build/module/util/hooksOptions.js +7 -0
  576. package/build/module/util/index.d.ts +10 -0
  577. package/build/module/util/index.js +11 -0
  578. package/build/module/util/intent.d.ts +6 -0
  579. package/build/module/util/intent.js +10 -0
  580. package/build/module/util/l2FeeChains.d.ts +2 -0
  581. package/build/module/util/l2FeeChains.js +15 -0
  582. package/build/module/util/log.d.ts +3 -0
  583. package/build/module/util/log.js +93 -0
  584. package/build/module/util/methodParameters.d.ts +5 -0
  585. package/build/module/util/methodParameters.js +176 -0
  586. package/build/module/util/metric.d.ts +48 -0
  587. package/build/module/util/metric.js +53 -0
  588. package/build/module/util/mixedRouteFilterOutV4Pools.d.ts +3 -0
  589. package/build/module/util/mixedRouteFilterOutV4Pools.js +12 -0
  590. package/build/module/util/onchainQuoteProviderConfigs.d.ts +42 -0
  591. package/build/module/util/onchainQuoteProviderConfigs.js +74 -0
  592. package/build/module/util/pool.d.ts +5 -0
  593. package/build/module/util/pool.js +43 -0
  594. package/build/module/util/protocols.d.ts +2 -0
  595. package/build/module/util/protocols.js +18 -0
  596. package/build/module/util/routes.d.ts +11 -0
  597. package/build/module/util/routes.js +147 -0
  598. package/build/module/util/serializeRouteIds.d.ts +2 -0
  599. package/build/module/util/serializeRouteIds.js +7 -0
  600. package/build/module/util/simple-perf-tracker.d.ts +27 -0
  601. package/build/module/util/simple-perf-tracker.js +161 -0
  602. package/build/module/util/tenderlySimulationErrorBreakDown.d.ts +3 -0
  603. package/build/module/util/tenderlySimulationErrorBreakDown.js +29 -0
  604. package/build/module/util/unsupported-tokens.d.ts +37 -0
  605. package/build/module/util/unsupported-tokens.js +1116 -0
  606. package/package.json +127 -0
@@ -0,0 +1,31 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { BaseProvider } from '@ethersproject/providers';
3
+ import { RingFewV2RouteWithValidQuote } from '../../entities/route-with-valid-quote';
4
+ import { BuildRingFewV2GasModelFactoryType, IRingFewV2GasModelFactory, IRingGasModel } from '../ring-gas-model';
5
+ export declare const BASE_SWAP_COST: BigNumber;
6
+ export declare const COST_PER_EXTRA_HOP: BigNumber;
7
+ /**
8
+ * Computes a gas estimate for a V2 swap using heuristics.
9
+ * Considers number of hops in the route and the typical base cost for a swap.
10
+ *
11
+ * We compute gas estimates off-chain because
12
+ * 1/ Calling eth_estimateGas for a swaps requires the caller to have
13
+ * the full balance token being swapped, and approvals.
14
+ * 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
15
+ * due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
16
+ * 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
17
+ *
18
+ * Note, certain tokens e.g. rebasing/fee-on-transfer, may incur higher gas costs than
19
+ * what we estimate here. This is because they run extra logic on token transfer.
20
+ *
21
+ * @export
22
+ * @class V2HeuristicGasModelFactory
23
+ */
24
+ export declare class RingFewV2HeuristicGasModelFactory extends IRingFewV2GasModelFactory {
25
+ private provider;
26
+ constructor(provider: BaseProvider);
27
+ buildGasModel({ chainId, gasPriceWei, poolProvider, token, l2GasDataProvider, providerConfig, }: BuildRingFewV2GasModelFactoryType): Promise<IRingGasModel<RingFewV2RouteWithValidQuote>>;
28
+ private estimateGas;
29
+ private getEthPool;
30
+ private getHighestLiquidityUSDPool;
31
+ }
@@ -0,0 +1,162 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import _ from 'lodash';
3
+ import { FEW_WRAPPED_NATIVE_CURRENCY, log } from '../../../../util';
4
+ import { CurrencyAmount } from '../../../../util/amounts';
5
+ import { calculateL1GasFeesHelper, getRingFewV2NativePool, } from '../../../../util/gas-factory-helpers';
6
+ import { getRingQuoteThroughNativePool, IRingFewV2GasModelFactory, ringUsdGasTokensByChain, } from '../ring-gas-model';
7
+ // Constant cost for doing any swap regardless of pools.
8
+ export const BASE_SWAP_COST = BigNumber.from(135000); // 115000, bumped up by 20_000 @eric 7/8/2022
9
+ // Constant per extra hop in the route.
10
+ export const COST_PER_EXTRA_HOP = BigNumber.from(50000); // 20000, bumped up by 30_000 @eric 7/8/2022
11
+ /**
12
+ * Computes a gas estimate for a V2 swap using heuristics.
13
+ * Considers number of hops in the route and the typical base cost for a swap.
14
+ *
15
+ * We compute gas estimates off-chain because
16
+ * 1/ Calling eth_estimateGas for a swaps requires the caller to have
17
+ * the full balance token being swapped, and approvals.
18
+ * 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
19
+ * due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
20
+ * 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
21
+ *
22
+ * Note, certain tokens e.g. rebasing/fee-on-transfer, may incur higher gas costs than
23
+ * what we estimate here. This is because they run extra logic on token transfer.
24
+ *
25
+ * @export
26
+ * @class V2HeuristicGasModelFactory
27
+ */
28
+ export class RingFewV2HeuristicGasModelFactory extends IRingFewV2GasModelFactory {
29
+ constructor(provider) {
30
+ super();
31
+ this.provider = provider;
32
+ }
33
+ async buildGasModel({ chainId, gasPriceWei, poolProvider, token, l2GasDataProvider, providerConfig, }) {
34
+ const l2GasData = l2GasDataProvider
35
+ ? await l2GasDataProvider.getGasData(providerConfig)
36
+ : undefined;
37
+ const usdPoolPromise = this.getHighestLiquidityUSDPool(chainId, poolProvider, providerConfig);
38
+ // Only fetch the native gasToken pool if specified by the config AND the gas token is not the native currency.
39
+ const nativeAndSpecifiedGasTokenPoolPromise = (providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.gasToken) &&
40
+ !(providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.gasToken.equals(FEW_WRAPPED_NATIVE_CURRENCY[chainId]))
41
+ ? this.getEthPool(chainId, providerConfig.gasToken, poolProvider, providerConfig)
42
+ : Promise.resolve(null);
43
+ const [usdPool, nativeAndSpecifiedGasTokenPool] = await Promise.all([
44
+ usdPoolPromise,
45
+ nativeAndSpecifiedGasTokenPoolPromise,
46
+ ]);
47
+ let ethPool = null;
48
+ if (!token.equals(FEW_WRAPPED_NATIVE_CURRENCY[chainId])) {
49
+ ethPool = await this.getEthPool(chainId, token, poolProvider, providerConfig);
50
+ }
51
+ const usdToken = usdPool.token0.address == FEW_WRAPPED_NATIVE_CURRENCY[chainId].address
52
+ ? usdPool.token1
53
+ : usdPool.token0;
54
+ const calculateL1GasFees = async (route) => {
55
+ const nativePool = !token.equals(FEW_WRAPPED_NATIVE_CURRENCY[chainId])
56
+ ? await getRingFewV2NativePool(token, poolProvider, providerConfig)
57
+ : null;
58
+ return await calculateL1GasFeesHelper(route, chainId, usdPool, token, nativePool, this.provider, l2GasData);
59
+ };
60
+ return {
61
+ estimateGasCost: (routeWithValidQuote) => {
62
+ var _a;
63
+ const { gasCostInEth, gasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId, providerConfig);
64
+ /** ------ MARK: USD logic -------- */
65
+ const gasCostInTermsOfUSD = getRingQuoteThroughNativePool(chainId, gasCostInEth, usdPool);
66
+ /** ------ MARK: Conditional logic run if gasToken is specified -------- */
67
+ let gasCostInTermsOfGasToken = undefined;
68
+ if (nativeAndSpecifiedGasTokenPool) {
69
+ gasCostInTermsOfGasToken = getRingQuoteThroughNativePool(chainId, gasCostInEth, nativeAndSpecifiedGasTokenPool);
70
+ }
71
+ // if the gasToken is the native currency, we can just use the gasCostInEth
72
+ else if ((_a = providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.gasToken) === null || _a === void 0 ? void 0 : _a.equals(FEW_WRAPPED_NATIVE_CURRENCY[chainId])) {
73
+ gasCostInTermsOfGasToken = gasCostInEth;
74
+ }
75
+ /** ------ MARK: return early if quoteToken is wrapped native currency ------- */
76
+ if (token.equals(FEW_WRAPPED_NATIVE_CURRENCY[chainId])) {
77
+ return {
78
+ gasEstimate: gasUse,
79
+ gasCostInToken: gasCostInEth,
80
+ gasCostInUSD: gasCostInTermsOfUSD,
81
+ gasCostInGasToken: gasCostInTermsOfGasToken,
82
+ };
83
+ }
84
+ // If the quote token is not WETH, we convert the gas cost to be in terms of the quote token.
85
+ // We do this by getting the highest liquidity <token>/ETH pool.
86
+ if (!ethPool) {
87
+ log.info('Unable to find ETH pool with the quote token to produce gas adjusted costs. Route will not account for gas.');
88
+ return {
89
+ gasEstimate: gasUse,
90
+ gasCostInToken: CurrencyAmount.fromRawAmount(token, 0),
91
+ gasCostInUSD: CurrencyAmount.fromRawAmount(usdToken, 0),
92
+ };
93
+ }
94
+ const gasCostInTermsOfQuoteToken = getRingQuoteThroughNativePool(chainId, gasCostInEth, ethPool);
95
+ return {
96
+ gasEstimate: gasUse,
97
+ gasCostInToken: gasCostInTermsOfQuoteToken,
98
+ gasCostInUSD: gasCostInTermsOfUSD,
99
+ gasCostInGasToken: gasCostInTermsOfGasToken,
100
+ };
101
+ },
102
+ calculateL1GasFees,
103
+ };
104
+ }
105
+ estimateGas(routeWithValidQuote, gasPriceWei, chainId, providerConfig) {
106
+ const hops = routeWithValidQuote.route.pairs.length;
107
+ let gasUse = BASE_SWAP_COST.add(COST_PER_EXTRA_HOP.mul(hops - 1));
108
+ if (providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.additionalGasOverhead) {
109
+ gasUse = gasUse.add(providerConfig.additionalGasOverhead);
110
+ }
111
+ const totalGasCostWei = gasPriceWei.mul(gasUse);
112
+ const weth = FEW_WRAPPED_NATIVE_CURRENCY[chainId];
113
+ const gasCostInEth = CurrencyAmount.fromRawAmount(weth, totalGasCostWei.toString());
114
+ return { gasCostInEth, gasUse };
115
+ }
116
+ async getEthPool(chainId, token, poolProvider, providerConfig) {
117
+ const weth = FEW_WRAPPED_NATIVE_CURRENCY[chainId];
118
+ const poolAccessor = await poolProvider.getPools([[weth, token]], providerConfig);
119
+ const pool = poolAccessor.getPool(weth, token);
120
+ if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {
121
+ log.error({
122
+ weth,
123
+ token,
124
+ reserve0: pool === null || pool === void 0 ? void 0 : pool.reserve0.toExact(),
125
+ reserve1: pool === null || pool === void 0 ? void 0 : pool.reserve1.toExact(),
126
+ }, `Could not find a valid WETH pool with ${token.symbol} for computing gas costs.`);
127
+ return null;
128
+ }
129
+ return pool;
130
+ }
131
+ async getHighestLiquidityUSDPool(chainId, poolProvider, providerConfig) {
132
+ const usdTokens = ringUsdGasTokensByChain[chainId];
133
+ if (!usdTokens) {
134
+ throw new Error(`Could not find a USD token for computing gas costs on ${chainId}`);
135
+ }
136
+ const usdPools = _.map(usdTokens, (usdToken) => [
137
+ usdToken,
138
+ FEW_WRAPPED_NATIVE_CURRENCY[chainId],
139
+ ]);
140
+ const poolAccessor = await poolProvider.getPools(usdPools, providerConfig);
141
+ const poolsRaw = poolAccessor.getAllPools();
142
+ const pools = _.filter(poolsRaw, (pool) => pool.reserve0.greaterThan(0) &&
143
+ pool.reserve1.greaterThan(0) &&
144
+ // this case should never happen in production, but when we mock the pool provider it may return non native pairs
145
+ (pool.token0.equals(FEW_WRAPPED_NATIVE_CURRENCY[chainId]) ||
146
+ pool.token1.equals(FEW_WRAPPED_NATIVE_CURRENCY[chainId])));
147
+ if (pools.length == 0) {
148
+ log.error({ pools }, `Could not find a USD/WETH pool for computing gas costs.`);
149
+ throw new Error(`Can't find fwUSD/fwWETH pool for computing gas costs.`);
150
+ }
151
+ const maxPool = _.maxBy(pools, (pool) => {
152
+ if (pool.token0.equals(FEW_WRAPPED_NATIVE_CURRENCY[chainId])) {
153
+ return parseFloat(pool.reserve0.toSignificant(2));
154
+ }
155
+ else {
156
+ return parseFloat(pool.reserve1.toSignificant(2));
157
+ }
158
+ });
159
+ return maxPool;
160
+ }
161
+ }
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjItaGV1cmlzdGljLWdhcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2FscGhhLXJvdXRlci9nYXMtbW9kZWxzL2Zld1YyL3YyLWhldXJpc3RpYy1nYXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3JELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUt2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEdBQ3ZCLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUdMLDZCQUE2QixFQUM3Qix5QkFBeUIsRUFFekIsdUJBQXVCLEdBQ3hCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0Isd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsNkNBQTZDO0FBRW5HLHVDQUF1QztBQUN2QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNENBQTRDO0FBRXJHOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxPQUFPLGlDQUFrQyxTQUFRLHlCQUF5QjtJQUc5RSxZQUFZLFFBQXNCO1FBQ2hDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDekIsT0FBTyxFQUNQLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLGlCQUFpQixFQUNq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
@@ -0,0 +1,12 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { ChainId, Currency } from '@ring-protocol/sdk-core';
3
+ import { V3Route, V4Route } from '../../router';
4
+ export declare const COST_PER_UNINIT_TICK: BigNumber;
5
+ export declare const BASE_SWAP_COST: (id: ChainId) => BigNumber;
6
+ export declare const COST_PER_INIT_TICK: (id: ChainId) => BigNumber;
7
+ export declare const COST_PER_HOP: (id: ChainId) => BigNumber;
8
+ export declare const SINGLE_HOP_OVERHEAD: (_id: ChainId) => BigNumber;
9
+ export declare const TOKEN_OVERHEAD: (id: ChainId, route: V3Route | V4Route) => BigNumber;
10
+ export declare const NATIVE_WRAP_OVERHEAD: (id: ChainId) => BigNumber;
11
+ export declare const NATIVE_UNWRAP_OVERHEAD: (id: ChainId) => BigNumber;
12
+ export declare const NATIVE_OVERHEAD: (chainId: ChainId, amount: Currency, quote: Currency) => BigNumber;
@@ -0,0 +1,189 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { Protocol } from '@ring-protocol/router-sdk';
3
+ import { ChainId } from '@ring-protocol/sdk-core';
4
+ import { AAVE_MAINNET, LIDO_MAINNET } from '../../../providers';
5
+ // Cost for crossing an uninitialized tick.
6
+ export const COST_PER_UNINIT_TICK = BigNumber.from(0);
7
+ //l2 execution fee on optimism is roughly the same as mainnet
8
+ export const BASE_SWAP_COST = (id) => {
9
+ switch (id) {
10
+ case ChainId.HYPER_MAINNET:
11
+ case ChainId.MAINNET:
12
+ case ChainId.GOERLI:
13
+ case ChainId.SEPOLIA:
14
+ case ChainId.OPTIMISM:
15
+ case ChainId.OPTIMISM_GOERLI:
16
+ case ChainId.OPTIMISM_SEPOLIA:
17
+ case ChainId.BNB:
18
+ case ChainId.AVALANCHE:
19
+ case ChainId.BASE:
20
+ case ChainId.BASE_GOERLI:
21
+ case ChainId.ZORA:
22
+ case ChainId.ZORA_SEPOLIA:
23
+ case ChainId.ROOTSTOCK:
24
+ case ChainId.BLAST:
25
+ case ChainId.BLAST_SEPOLIA:
26
+ case ChainId.ZKSYNC:
27
+ case ChainId.WORLDCHAIN:
28
+ case ChainId.UNICHAIN_SEPOLIA:
29
+ case ChainId.UNICHAIN:
30
+ case ChainId.BASE_SEPOLIA:
31
+ case ChainId.MONAD_TESTNET: // TODO: double check on monad gas
32
+ case ChainId.MONAD: // TODO: double check on monad gas
33
+ case ChainId.SONEIUM:
34
+ case ChainId.STORY_ODYSSEY:
35
+ case ChainId.STORY_MAINNET:
36
+ return BigNumber.from(2000);
37
+ case ChainId.ARBITRUM_ONE:
38
+ case ChainId.ARBITRUM_GOERLI:
39
+ case ChainId.ARBITRUM_SEPOLIA:
40
+ return BigNumber.from(5000);
41
+ case ChainId.POLYGON:
42
+ case ChainId.POLYGON_MUMBAI:
43
+ return BigNumber.from(2000);
44
+ case ChainId.CELO:
45
+ case ChainId.CELO_ALFAJORES:
46
+ return BigNumber.from(2000);
47
+ //TODO determine if sufficient
48
+ case ChainId.GNOSIS:
49
+ return BigNumber.from(2000);
50
+ case ChainId.MOONBEAM:
51
+ return BigNumber.from(2000);
52
+ }
53
+ };
54
+ export const COST_PER_INIT_TICK = (id) => {
55
+ switch (id) {
56
+ case ChainId.HYPER_MAINNET:
57
+ case ChainId.MAINNET:
58
+ case ChainId.GOERLI:
59
+ case ChainId.SEPOLIA:
60
+ case ChainId.BNB:
61
+ case ChainId.AVALANCHE:
62
+ return BigNumber.from(31000);
63
+ case ChainId.OPTIMISM:
64
+ case ChainId.OPTIMISM_GOERLI:
65
+ case ChainId.OPTIMISM_SEPOLIA:
66
+ case ChainId.BASE:
67
+ case ChainId.BASE_GOERLI:
68
+ case ChainId.ZORA:
69
+ case ChainId.ZORA_SEPOLIA:
70
+ case ChainId.ROOTSTOCK:
71
+ case ChainId.BLAST:
72
+ case ChainId.ZKSYNC:
73
+ case ChainId.WORLDCHAIN:
74
+ case ChainId.UNICHAIN_SEPOLIA:
75
+ case ChainId.UNICHAIN:
76
+ case ChainId.BASE_SEPOLIA:
77
+ case ChainId.MONAD_TESTNET: // TODO: double check on monad gas
78
+ case ChainId.MONAD: // TODO: double check on monad gas
79
+ case ChainId.SONEIUM:
80
+ case ChainId.BLAST_SEPOLIA:
81
+ case ChainId.STORY_ODYSSEY:
82
+ case ChainId.STORY_MAINNET:
83
+ return BigNumber.from(31000);
84
+ case ChainId.ARBITRUM_ONE:
85
+ case ChainId.ARBITRUM_GOERLI:
86
+ case ChainId.ARBITRUM_SEPOLIA:
87
+ return BigNumber.from(31000);
88
+ case ChainId.POLYGON:
89
+ case ChainId.POLYGON_MUMBAI:
90
+ return BigNumber.from(31000);
91
+ case ChainId.CELO:
92
+ case ChainId.CELO_ALFAJORES:
93
+ return BigNumber.from(31000);
94
+ case ChainId.GNOSIS:
95
+ return BigNumber.from(31000);
96
+ case ChainId.MOONBEAM:
97
+ return BigNumber.from(31000);
98
+ }
99
+ };
100
+ export const COST_PER_HOP = (id) => {
101
+ switch (id) {
102
+ case ChainId.HYPER_MAINNET:
103
+ case ChainId.MAINNET:
104
+ case ChainId.GOERLI:
105
+ case ChainId.SEPOLIA:
106
+ case ChainId.BNB:
107
+ case ChainId.OPTIMISM:
108
+ case ChainId.OPTIMISM_GOERLI:
109
+ case ChainId.OPTIMISM_SEPOLIA:
110
+ case ChainId.AVALANCHE:
111
+ case ChainId.BASE:
112
+ case ChainId.BASE_GOERLI:
113
+ case ChainId.ZORA:
114
+ case ChainId.ZORA_SEPOLIA:
115
+ case ChainId.ROOTSTOCK:
116
+ case ChainId.BLAST:
117
+ case ChainId.ZKSYNC:
118
+ case ChainId.WORLDCHAIN:
119
+ case ChainId.UNICHAIN_SEPOLIA:
120
+ case ChainId.UNICHAIN:
121
+ case ChainId.BASE_SEPOLIA:
122
+ case ChainId.MONAD_TESTNET: // TODO: double check on monad gas
123
+ case ChainId.MONAD: // TODO: double check on monad gas
124
+ case ChainId.SONEIUM:
125
+ case ChainId.BLAST_SEPOLIA:
126
+ case ChainId.STORY_ODYSSEY:
127
+ case ChainId.STORY_MAINNET:
128
+ return BigNumber.from(80000);
129
+ case ChainId.ARBITRUM_ONE:
130
+ case ChainId.ARBITRUM_GOERLI:
131
+ case ChainId.ARBITRUM_SEPOLIA:
132
+ return BigNumber.from(80000);
133
+ case ChainId.POLYGON:
134
+ case ChainId.POLYGON_MUMBAI:
135
+ return BigNumber.from(80000);
136
+ case ChainId.CELO:
137
+ case ChainId.CELO_ALFAJORES:
138
+ return BigNumber.from(80000);
139
+ case ChainId.GNOSIS:
140
+ return BigNumber.from(80000);
141
+ case ChainId.MOONBEAM:
142
+ return BigNumber.from(80000);
143
+ }
144
+ };
145
+ export const SINGLE_HOP_OVERHEAD = (_id) => {
146
+ return BigNumber.from(15000);
147
+ };
148
+ export const TOKEN_OVERHEAD = (id, route) => {
149
+ const currencies = route.protocol === Protocol.V4 ? route.currencyPath : route.tokenPath;
150
+ let overhead = BigNumber.from(0);
151
+ if (id == ChainId.MAINNET) {
152
+ // AAVE's transfer contains expensive governance snapshotting logic. We estimate
153
+ // it at around 150k.
154
+ if (currencies.some((t) => t.equals(AAVE_MAINNET))) {
155
+ overhead = overhead.add(150000);
156
+ }
157
+ // LDO's reaches out to an external token controller which adds a large overhead
158
+ // of around 150k.
159
+ if (currencies.some((t) => t.equals(LIDO_MAINNET))) {
160
+ overhead = overhead.add(150000);
161
+ }
162
+ }
163
+ return overhead;
164
+ };
165
+ // TODO: change per chain
166
+ export const NATIVE_WRAP_OVERHEAD = (id) => {
167
+ switch (id) {
168
+ default:
169
+ return BigNumber.from(27938);
170
+ }
171
+ };
172
+ export const NATIVE_UNWRAP_OVERHEAD = (id) => {
173
+ switch (id) {
174
+ default:
175
+ return BigNumber.from(36000);
176
+ }
177
+ };
178
+ export const NATIVE_OVERHEAD = (chainId, amount, quote) => {
179
+ if (amount.isNative) {
180
+ // need to wrap eth in
181
+ return NATIVE_WRAP_OVERHEAD(chainId);
182
+ }
183
+ if (quote.isNative) {
184
+ // need to unwrap eth out
185
+ return NATIVE_UNWRAP_OVERHEAD(chainId);
186
+ }
187
+ return BigNumber.from(0);
188
+ };
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzLWNvc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL2dhcy1tb2RlbHMvZ2FzLWNvc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBWSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEUsMkNBQTJDO0FBQzNDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdEQsNkRBQTZEO0FBQzdELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQVcsRUFBYSxFQUFFO0lBQ3ZELFFBQVEsRUFBRSxFQUFFO1FBQ1YsS0FBSyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNCLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNyQixLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDcEIsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3JCLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUN0QixLQUFLLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDN0IsS0FBSyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDOUIsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN2QixLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbEIsS0FBSyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3pCLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQztRQUNsQixLQUFLLE9BQU8sQ0FBQyxZQUFZLENB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
@@ -0,0 +1,111 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { ChainId, CurrencyAmount as CurrencyAmountRaw, Token } from '@ring-protocol/sdk-core';
3
+ import { Pair } from '@ring-protocol/v2-sdk';
4
+ import { Pool } from '@ring-protocol/v3-sdk';
5
+ import { ProviderConfig } from '../../../providers/provider';
6
+ import { IV2PoolProvider } from '../../../providers/v2/pool-provider';
7
+ import { ArbitrumGasData, IL2GasDataProvider } from '../../../providers/v3/gas-data-provider';
8
+ import { CurrencyAmount } from '../../../util/amounts';
9
+ import { MixedRouteWithValidQuote, RingFewV2RouteWithValidQuote, RouteWithValidQuote, UniswapFewV3RouteWithValidQuote, UniswapFewV4RouteWithValidQuote, V2RouteWithValidQuote, V3RouteWithValidQuote, V4RouteWithValidQuote } from '../entities/route-with-valid-quote';
10
+ export declare const usdGasTokensByChain: {
11
+ [chainId in ChainId]?: Token[];
12
+ };
13
+ export declare type L1ToL2GasCosts = {
14
+ gasUsedL1: BigNumber;
15
+ gasUsedL1OnL2: BigNumber;
16
+ gasCostL1USD: CurrencyAmount;
17
+ gasCostL1QuoteToken: CurrencyAmount;
18
+ };
19
+ export declare type GasModelProviderConfig = ProviderConfig & {
20
+ additionalGasOverhead?: BigNumber;
21
+ gasToken?: Token;
22
+ };
23
+ export declare type BuildOnChainGasModelFactoryType = {
24
+ chainId: ChainId;
25
+ gasPriceWei: BigNumber;
26
+ pools: LiquidityCalculationPools | null;
27
+ amountToken: Token;
28
+ quoteToken: Token;
29
+ v2poolProvider: IV2PoolProvider;
30
+ l2GasDataProvider?: IL2GasDataProvider<ArbitrumGasData>;
31
+ providerConfig?: GasModelProviderConfig;
32
+ };
33
+ export declare type BuildV2GasModelFactoryType = {
34
+ chainId: ChainId;
35
+ gasPriceWei: BigNumber;
36
+ poolProvider: IV2PoolProvider;
37
+ token: Token;
38
+ l2GasDataProvider?: IL2GasDataProvider<ArbitrumGasData>;
39
+ providerConfig?: GasModelProviderConfig;
40
+ };
41
+ export declare type LiquidityCalculationPools = {
42
+ usdPool: Pool | null;
43
+ nativeAndQuoteTokenV3Pool: Pool | null;
44
+ nativeAndAmountTokenV3Pool: Pool | null;
45
+ nativeAndSpecifiedGasTokenV3Pool: Pool | null;
46
+ };
47
+ export declare type GasModelType = {
48
+ ringFewV2GasModel?: IGasModel<RingFewV2RouteWithValidQuote>;
49
+ v2GasModel?: IGasModel<V2RouteWithValidQuote>;
50
+ fewV2GasModel?: IGasModel<V2RouteWithValidQuote>;
51
+ v3GasModel: IGasModel<V3RouteWithValidQuote>;
52
+ fewV3GasModel: IGasModel<UniswapFewV3RouteWithValidQuote>;
53
+ v4GasModel: IGasModel<V4RouteWithValidQuote>;
54
+ fewV4GasModel: IGasModel<UniswapFewV4RouteWithValidQuote>;
55
+ mixedRouteGasModel: IGasModel<MixedRouteWithValidQuote>;
56
+ };
57
+ /**
58
+ * Contains functions for generating gas estimates for given routes.
59
+ *
60
+ * We generally compute gas estimates off-chain because
61
+ * 1/ Calling eth_estimateGas for a swaps requires the caller to have
62
+ * the full balance token being swapped, and approvals.
63
+ * 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
64
+ * due to EIP-2929
65
+ * 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
66
+ *
67
+ * Generally these models should be optimized to return quickly by performing any
68
+ * long running operations (like fetching external data) outside of the functions defined.
69
+ * This is because the functions in the model are called once for every route and every
70
+ * amount that is considered in the algorithm so it is important to minimize the number of
71
+ * long running operations.
72
+ */
73
+ export declare type IGasModel<TRouteWithValidQuote extends RouteWithValidQuote> = {
74
+ estimateGasCost(routeWithValidQuote: TRouteWithValidQuote): {
75
+ gasEstimate: BigNumber;
76
+ gasCostInToken: CurrencyAmount;
77
+ gasCostInUSD: CurrencyAmount;
78
+ gasCostInGasToken?: CurrencyAmount;
79
+ };
80
+ calculateL1GasFees?(routes: TRouteWithValidQuote[]): Promise<L1ToL2GasCosts>;
81
+ };
82
+ /**
83
+ * Factory for building gas models that can be used with any route to generate
84
+ * gas estimates.
85
+ *
86
+ * Factory model is used so that any supporting data can be fetched once and
87
+ * returned as part of the model.
88
+ *
89
+ * @export
90
+ * @abstract
91
+ * @class IV2GasModelFactory
92
+ */
93
+ export declare abstract class IV2GasModelFactory {
94
+ abstract buildGasModel({ chainId, gasPriceWei, poolProvider, token, providerConfig, }: BuildV2GasModelFactoryType): Promise<IGasModel<V2RouteWithValidQuote>>;
95
+ }
96
+ /**
97
+ * Factory for building gas models that can be used with any route to generate
98
+ * gas estimates.
99
+ *
100
+ * Factory model is used so that any supporting data can be fetched once and
101
+ * returned as part of the model.
102
+ *
103
+ * @export
104
+ * @abstract
105
+ * @class IOnChainGasModelFactory
106
+ */
107
+ export declare abstract class IOnChainGasModelFactory<TRouteWithValidQuote extends RouteWithValidQuote> {
108
+ abstract buildGasModel({ chainId, gasPriceWei, pools, amountToken, quoteToken, v2poolProvider, l2GasDataProvider, providerConfig, }: BuildOnChainGasModelFactoryType): Promise<IGasModel<TRouteWithValidQuote>>;
109
+ protected totalInitializedTicksCrossed(initializedTicksCrossedList: number[]): number;
110
+ }
111
+ export declare const getQuoteThroughNativePool: (chainId: ChainId, nativeTokenAmount: CurrencyAmountRaw<Token>, nativeTokenPool: Pool | Pair | null) => CurrencyAmount;
@@ -0,0 +1,114 @@
1
+ import { ChainId, Token, } from '@ring-protocol/sdk-core';
2
+ import { CUSD_CELO, CUSD_CELO_ALFAJORES, DAI_ARBITRUM, DAI_AVAX, DAI_BNB, DAI_GOERLI, DAI_MAINNET, DAI_OPTIMISM, DAI_OPTIMISM_GOERLI, DAI_OPTIMISM_SEPOLIA, DAI_POLYGON_MUMBAI, DAI_SEPOLIA, DAI_UNICHAIN, DAI_ZKSYNC, USDB_BLAST, USDC_ARBITRUM, USDC_ARBITRUM_GOERLI, USDC_ARBITRUM_SEPOLIA, USDC_AVAX, USDC_BASE, USDC_BASE_SEPOLIA, USDC_BNB, USDC_BRIDGED_AVAX, USDC_CELO, USDC_ETHEREUM_GNOSIS, USDC_GOERLI, USDC_MAINNET, USDC_MOONBEAM, USDC_NATIVE_ARBITRUM, USDC_NATIVE_AVAX, USDC_NATIVE_BASE, USDC_NATIVE_CELO, USDC_NATIVE_OPTIMISM, USDC_NATIVE_POLYGON, USDC_OPTIMISM, USDC_OPTIMISM_GOERLI, USDC_OPTIMISM_SEPOLIA, USDC_POLYGON, USDC_SEPOLIA, USDC_SONEIUM, USDC_STORY_MAINNET, USDC_UNICHAIN, USDC_UNICHAIN_SEPOLIA, USDC_WORLDCHAIN, USDC_WORMHOLE_CELO, USDC_ZKSYNC, USDC_ZORA, USDCE_ZKSYNC, USDT_ARBITRUM, USDT_BNB, USDT_GOERLI, USDT_HYPER_MAINNET, USDT_MAINNET, USDT_MONAD_TESTNET, USDT_OPTIMISM, USDT_OPTIMISM_GOERLI, USDT_OPTIMISM_SEPOLIA, WBTC_GOERLI, } from '../../../providers/token-provider';
3
+ import { WRAPPED_NATIVE_CURRENCY } from '../../../util';
4
+ import { CurrencyAmount } from '../../../util/amounts';
5
+ // When adding new usd gas tokens, ensure the tokens are ordered
6
+ // from tokens with highest decimals to lowest decimals. For example,
7
+ // DAI_AVAX has 18 decimals and comes before USDC_AVAX which has 6 decimals.
8
+ export const usdGasTokensByChain = {
9
+ [ChainId.HYPER_MAINNET]: [USDT_HYPER_MAINNET],
10
+ [ChainId.MAINNET]: [DAI_MAINNET, USDC_MAINNET, USDT_MAINNET],
11
+ [ChainId.ARBITRUM_ONE]: [
12
+ DAI_ARBITRUM,
13
+ USDC_ARBITRUM,
14
+ USDC_NATIVE_ARBITRUM,
15
+ USDT_ARBITRUM,
16
+ ],
17
+ [ChainId.OPTIMISM]: [
18
+ DAI_OPTIMISM,
19
+ USDC_OPTIMISM,
20
+ USDC_NATIVE_OPTIMISM,
21
+ USDT_OPTIMISM,
22
+ ],
23
+ [ChainId.OPTIMISM_GOERLI]: [
24
+ DAI_OPTIMISM_GOERLI,
25
+ USDC_OPTIMISM_GOERLI,
26
+ USDT_OPTIMISM_GOERLI,
27
+ ],
28
+ [ChainId.OPTIMISM_SEPOLIA]: [
29
+ DAI_OPTIMISM_SEPOLIA,
30
+ USDC_OPTIMISM_SEPOLIA,
31
+ USDT_OPTIMISM_SEPOLIA,
32
+ ],
33
+ [ChainId.ARBITRUM_GOERLI]: [USDC_ARBITRUM_GOERLI],
34
+ [ChainId.ARBITRUM_SEPOLIA]: [USDC_ARBITRUM_SEPOLIA],
35
+ [ChainId.GOERLI]: [DAI_GOERLI, USDC_GOERLI, USDT_GOERLI, WBTC_GOERLI],
36
+ [ChainId.SEPOLIA]: [USDC_SEPOLIA, DAI_SEPOLIA],
37
+ [ChainId.POLYGON]: [USDC_POLYGON, USDC_NATIVE_POLYGON],
38
+ [ChainId.POLYGON_MUMBAI]: [DAI_POLYGON_MUMBAI],
39
+ [ChainId.CELO]: [CUSD_CELO, USDC_CELO, USDC_NATIVE_CELO, USDC_WORMHOLE_CELO],
40
+ [ChainId.CELO_ALFAJORES]: [CUSD_CELO_ALFAJORES],
41
+ [ChainId.GNOSIS]: [USDC_ETHEREUM_GNOSIS],
42
+ [ChainId.MOONBEAM]: [USDC_MOONBEAM],
43
+ [ChainId.BNB]: [USDT_BNB, USDC_BNB, DAI_BNB],
44
+ [ChainId.AVALANCHE]: [
45
+ DAI_AVAX,
46
+ USDC_AVAX,
47
+ USDC_NATIVE_AVAX,
48
+ USDC_BRIDGED_AVAX,
49
+ ],
50
+ [ChainId.BASE]: [USDC_BASE, USDC_NATIVE_BASE],
51
+ [ChainId.BLAST]: [USDB_BLAST],
52
+ [ChainId.ZORA]: [USDC_ZORA],
53
+ [ChainId.ZKSYNC]: [DAI_ZKSYNC, USDCE_ZKSYNC, USDC_ZKSYNC],
54
+ [ChainId.WORLDCHAIN]: [USDC_WORLDCHAIN],
55
+ [ChainId.UNICHAIN_SEPOLIA]: [USDC_UNICHAIN_SEPOLIA],
56
+ [ChainId.MONAD_TESTNET]: [USDT_MONAD_TESTNET],
57
+ [ChainId.BASE_SEPOLIA]: [USDC_BASE_SEPOLIA],
58
+ [ChainId.UNICHAIN]: [DAI_UNICHAIN, USDC_UNICHAIN],
59
+ [ChainId.SONEIUM]: [USDC_SONEIUM],
60
+ [ChainId.STORY_MAINNET]: [USDC_STORY_MAINNET],
61
+ };
62
+ /**
63
+ * Factory for building gas models that can be used with any route to generate
64
+ * gas estimates.
65
+ *
66
+ * Factory model is used so that any supporting data can be fetched once and
67
+ * returned as part of the model.
68
+ *
69
+ * @export
70
+ * @abstract
71
+ * @class IV2GasModelFactory
72
+ */
73
+ export class IV2GasModelFactory {
74
+ }
75
+ /**
76
+ * Factory for building gas models that can be used with any route to generate
77
+ * gas estimates.
78
+ *
79
+ * Factory model is used so that any supporting data can be fetched once and
80
+ * returned as part of the model.
81
+ *
82
+ * @export
83
+ * @abstract
84
+ * @class IOnChainGasModelFactory
85
+ */
86
+ export class IOnChainGasModelFactory {
87
+ totalInitializedTicksCrossed(initializedTicksCrossedList) {
88
+ let ticksCrossed = 0;
89
+ for (let i = 0; i < initializedTicksCrossedList.length; i++) {
90
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
91
+ if (initializedTicksCrossedList[i] > 0) {
92
+ // Quoter returns Array<number of calls to crossTick + 1>, so we need to subtract 1 here.
93
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
94
+ ticksCrossed += initializedTicksCrossedList[i] - 1;
95
+ }
96
+ }
97
+ return ticksCrossed;
98
+ }
99
+ }
100
+ // Determines if native currency is token0
101
+ // Gets the native price of the pool, dependent on 0 or 1
102
+ // quotes across the pool
103
+ export const getQuoteThroughNativePool = (chainId, nativeTokenAmount, nativeTokenPool) => {
104
+ const nativeCurrency = WRAPPED_NATIVE_CURRENCY[chainId];
105
+ const isToken0 = nativeTokenPool != null ? nativeTokenPool.token0.equals(nativeCurrency) : false;
106
+ // returns mid price in terms of the native currency (the ratio of token/nativeToken)
107
+ const nativeTokenPrice = isToken0
108
+ ? nativeTokenPool != null ? nativeTokenPool.token0Price : null
109
+ : nativeTokenPool != null ? nativeTokenPool.token1Price : null;
110
+ // return gas cost in terms of the non native currency
111
+ return nativeTokenPrice != null ? nativeTokenPrice.quote(nativeTokenAmount) : CurrencyAmount.fromRawAmount(nativeTokenAmount.currency instanceof Token ? nativeTokenAmount.currency : nativeCurrency, 0);
112
+ // return nativeTokenPrice != null ? nativeTokenPrice.quote(nativeTokenAmount) as CurrencyAmount : CurrencyAmount.fromRawAmount(nativeTokenAmount.token, 0);
113
+ };
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL2dhcy1tb2RlbHMvZ2FzLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxPQUFPLEVBRVAsS0FBSyxHQUNOLE1BQU0seUJBQXlCLENBQUM7QUFLakMsT0FBTyxFQUNMLFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsVUFBVSxFQUNWLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsU0FBUyxFQUNULG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsWUFBWSxFQUNaLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osWUFBWSxFQUNaLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGFBQWEsRUFDYixRQUFRLEVBQ1IsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLFdBQVcsR0FDWixNQUFNLG1DQUFtQyxDQUFDO0FBTTNDLE9BQU8s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