@mento-protocol/mento-sdk 3.2.3 → 3.2.4

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 (396) hide show
  1. package/dist/cache/routes.d.ts +13 -0
  2. package/dist/cache/routes.js +14089 -0
  3. package/dist/cache/tokens.d.ts +68 -0
  4. package/dist/cache/tokens.js +460 -0
  5. package/dist/core/abis/activePool.d.ts +2 -0
  6. package/dist/core/abis/activePool.js +14 -0
  7. package/dist/core/abis/addressesRegistry.d.ts +2 -0
  8. package/dist/core/abis/addressesRegistry.js +26 -0
  9. package/dist/core/abis/bipoolmanager.d.ts +34 -0
  10. package/dist/core/abis/bipoolmanager.js +72 -0
  11. package/dist/core/abis/borrowerOperations.d.ts +9 -0
  12. package/dist/core/abis/borrowerOperations.js +89 -0
  13. package/dist/core/abis/breakerbox.d.ts +13 -0
  14. package/dist/core/abis/breakerbox.js +8 -0
  15. package/dist/core/abis/broker.d.ts +2 -0
  16. package/dist/core/abis/broker.js +9 -0
  17. package/dist/core/abis/erc20.d.ts +9 -0
  18. package/dist/core/abis/erc20.js +21 -0
  19. package/dist/core/abis/fpmm.d.ts +270 -0
  20. package/dist/core/abis/fpmm.js +49 -0
  21. package/dist/core/abis/fpmmFactory.d.ts +85 -0
  22. package/dist/core/abis/fpmmFactory.js +26 -0
  23. package/dist/core/abis/hintHelpers.d.ts +2 -0
  24. package/dist/core/abis/hintHelpers.js +14 -0
  25. package/dist/core/abis/index.d.ts +22 -0
  26. package/dist/core/abis/index.js +38 -0
  27. package/dist/core/abis/liquidityStrategy.d.ts +132 -0
  28. package/dist/core/abis/liquidityStrategy.js +10 -0
  29. package/dist/core/abis/multiTroveGetter.d.ts +8 -0
  30. package/dist/core/abis/multiTroveGetter.js +15 -0
  31. package/dist/core/abis/priceFeed.d.ts +7 -0
  32. package/dist/core/abis/priceFeed.js +16 -0
  33. package/dist/core/abis/pricingmodule.d.ts +2 -0
  34. package/dist/core/abis/pricingmodule.js +6 -0
  35. package/dist/core/abis/reserve.d.ts +3 -0
  36. package/dist/core/abis/reserve.js +18 -0
  37. package/dist/core/abis/router.d.ts +521 -0
  38. package/dist/core/abis/router.js +45 -0
  39. package/dist/core/abis/sortedTroves.d.ts +2 -0
  40. package/dist/core/abis/sortedTroves.js +15 -0
  41. package/dist/core/abis/systemParams.d.ts +2 -0
  42. package/dist/core/abis/systemParams.js +14 -0
  43. package/dist/core/abis/troveManager.d.ts +2 -0
  44. package/dist/core/abis/troveManager.js +27 -0
  45. package/dist/core/abis/troveNFT.d.ts +2 -0
  46. package/dist/core/abis/troveNFT.js +9 -0
  47. package/dist/core/abis/virtualPool.d.ts +50 -0
  48. package/dist/core/abis/virtualPool.js +11 -0
  49. package/dist/core/abis/virtualPoolFactory.d.ts +59 -0
  50. package/dist/core/abis/virtualPoolFactory.js +17 -0
  51. package/dist/core/constants/addresses.d.ts +18 -0
  52. package/dist/core/constants/addresses.js +113 -0
  53. package/dist/core/constants/borrowConstants.d.ts +10 -0
  54. package/dist/core/constants/borrowConstants.js +16 -0
  55. package/dist/core/constants/borrowRegistries.d.ts +7 -0
  56. package/dist/core/constants/borrowRegistries.js +30 -0
  57. package/dist/core/constants/chainId.d.ts +7 -0
  58. package/dist/{cjs/enums → core/constants}/chainId.js +4 -1
  59. package/dist/core/constants/contractNames.d.ts +21 -0
  60. package/dist/core/constants/contractNames.js +24 -0
  61. package/dist/core/constants/index.d.ts +6 -0
  62. package/dist/core/constants/index.js +22 -0
  63. package/dist/core/errors/base.d.ts +8 -0
  64. package/dist/core/errors/base.js +17 -0
  65. package/dist/core/errors/index.d.ts +4 -0
  66. package/dist/{cjs/constants → core/errors}/index.js +4 -4
  67. package/dist/core/errors/oracle.d.ts +9 -0
  68. package/dist/core/errors/oracle.js +15 -0
  69. package/dist/core/errors/router.d.ts +14 -0
  70. package/dist/core/errors/router.js +24 -0
  71. package/dist/core/types/borrow.d.ts +87 -0
  72. package/dist/{cjs/interfaces/tradingLimitsConfig.js → core/types/borrow.js} +1 -0
  73. package/dist/core/types/contractAddresses.d.ts +42 -0
  74. package/dist/{cjs → core}/types/contractAddresses.js +1 -0
  75. package/dist/core/types/index.d.ts +10 -0
  76. package/dist/core/types/index.js +26 -0
  77. package/dist/core/types/liquidity.d.ts +194 -0
  78. package/dist/core/types/liquidity.js +3 -0
  79. package/dist/core/types/pool.d.ts +208 -0
  80. package/dist/core/types/pool.js +14 -0
  81. package/dist/core/types/provider.d.ts +45 -0
  82. package/dist/{cjs/interfaces/tradingLimitsState.js → core/types/provider.js} +1 -0
  83. package/dist/core/types/route.d.ts +62 -0
  84. package/dist/{cjs/interfaces/IChainClient.js → core/types/route.js} +1 -0
  85. package/dist/core/types/token.d.ts +21 -0
  86. package/dist/{cjs/interfaces/tradingLimit.js → core/types/token.js} +1 -0
  87. package/dist/core/types/tradingLimits.d.ts +91 -0
  88. package/dist/core/types/tradingLimits.js +3 -0
  89. package/dist/core/types/tradingMode.d.ts +24 -0
  90. package/dist/core/types/tradingMode.js +31 -0
  91. package/dist/core/types/transaction.d.ts +45 -0
  92. package/dist/core/types/transaction.js +3 -0
  93. package/dist/esm/cache/routes.js +14084 -0
  94. package/dist/esm/cache/tokens.js +452 -0
  95. package/dist/esm/core/abis/activePool.js +10 -0
  96. package/dist/esm/core/abis/addressesRegistry.js +22 -0
  97. package/dist/esm/core/abis/bipoolmanager.js +68 -0
  98. package/dist/esm/core/abis/borrowerOperations.js +85 -0
  99. package/dist/esm/core/abis/breakerbox.js +4 -0
  100. package/dist/esm/core/abis/broker.js +5 -0
  101. package/dist/esm/core/abis/erc20.js +17 -0
  102. package/dist/esm/core/abis/fpmm.js +45 -0
  103. package/dist/esm/core/abis/fpmmFactory.js +22 -0
  104. package/dist/esm/core/abis/hintHelpers.js +10 -0
  105. package/dist/esm/core/abis/index.js +21 -0
  106. package/dist/esm/core/abis/liquidityStrategy.js +6 -0
  107. package/dist/esm/core/abis/multiTroveGetter.js +11 -0
  108. package/dist/esm/core/abis/priceFeed.js +12 -0
  109. package/dist/esm/core/abis/pricingmodule.js +2 -0
  110. package/dist/esm/core/abis/reserve.js +14 -0
  111. package/dist/esm/core/abis/router.js +41 -0
  112. package/dist/esm/core/abis/sortedTroves.js +11 -0
  113. package/dist/esm/core/abis/systemParams.js +10 -0
  114. package/dist/esm/core/abis/troveManager.js +23 -0
  115. package/dist/esm/core/abis/troveNFT.js +5 -0
  116. package/dist/esm/core/abis/virtualPool.js +7 -0
  117. package/dist/esm/core/abis/virtualPoolFactory.js +13 -0
  118. package/dist/esm/core/constants/addresses.js +107 -0
  119. package/dist/esm/core/constants/borrowConstants.js +12 -0
  120. package/dist/esm/core/constants/borrowRegistries.js +25 -0
  121. package/dist/esm/{enums → core/constants}/chainId.js +2 -0
  122. package/dist/esm/core/constants/contractNames.js +20 -0
  123. package/dist/esm/core/constants/index.js +5 -0
  124. package/dist/esm/core/errors/base.js +12 -0
  125. package/dist/esm/core/errors/index.js +3 -0
  126. package/dist/esm/core/errors/oracle.js +10 -0
  127. package/dist/esm/core/errors/router.js +18 -0
  128. package/dist/esm/core/types/index.js +9 -0
  129. package/dist/esm/core/types/pool.js +10 -0
  130. package/dist/esm/core/types/tradingLimits.js +1 -0
  131. package/dist/esm/core/types/tradingMode.js +26 -0
  132. package/dist/esm/core/types/transaction.js +1 -0
  133. package/dist/esm/index.js +138 -6
  134. package/dist/esm/package.json +1 -0
  135. package/dist/esm/services/borrow/BorrowService.js +455 -0
  136. package/dist/esm/services/borrow/borrowHelpers.js +3 -0
  137. package/dist/esm/services/borrow/borrowMath.js +127 -0
  138. package/dist/esm/services/borrow/index.js +3 -0
  139. package/dist/esm/services/borrow/internal/borrowApprovalService.js +48 -0
  140. package/dist/esm/services/borrow/internal/borrowContextStore.js +35 -0
  141. package/dist/esm/services/borrow/internal/borrowErc20.js +38 -0
  142. package/dist/esm/services/borrow/internal/borrowHints.js +27 -0
  143. package/dist/esm/services/borrow/internal/borrowPositionParser.js +82 -0
  144. package/dist/esm/services/borrow/internal/borrowReadService.js +271 -0
  145. package/dist/esm/services/borrow/internal/borrowRegistryReader.js +108 -0
  146. package/dist/esm/services/borrow/internal/borrowTransactionService.js +271 -0
  147. package/dist/esm/services/borrow/internal/borrowTypes.js +1 -0
  148. package/dist/esm/services/borrow/internal/borrowValidation.js +89 -0
  149. package/dist/esm/services/index.js +8 -0
  150. package/dist/esm/services/liquidity/LiquidityService.js +163 -0
  151. package/dist/esm/services/liquidity/basicLiquidity.js +162 -0
  152. package/dist/esm/services/liquidity/index.js +1 -0
  153. package/dist/esm/services/liquidity/liquidityHelpers.js +95 -0
  154. package/dist/esm/services/liquidity/rebalance.js +59 -0
  155. package/dist/esm/services/liquidity/zapHelpers.js +120 -0
  156. package/dist/esm/services/liquidity/zapIn.js +112 -0
  157. package/dist/esm/services/liquidity/zapOut.js +248 -0
  158. package/dist/esm/services/pools/PoolService.js +204 -0
  159. package/dist/esm/services/pools/index.js +1 -0
  160. package/dist/esm/services/pools/poolDetails.js +209 -0
  161. package/dist/esm/services/pools/poolDiscovery.js +112 -0
  162. package/dist/esm/services/pools/rebalancePreview.js +181 -0
  163. package/dist/esm/services/quotes/QuoteService.js +85 -0
  164. package/dist/esm/services/quotes/index.js +1 -0
  165. package/dist/esm/services/routes/RouteService.js +268 -0
  166. package/dist/esm/services/routes/index.js +1 -0
  167. package/dist/esm/services/swap/SwapService.js +247 -0
  168. package/dist/esm/services/swap/index.js +1 -0
  169. package/dist/esm/services/tokens/index.js +1 -0
  170. package/dist/esm/services/tokens/tokenService.js +285 -0
  171. package/dist/esm/services/trading/TradingLimitsService.js +154 -0
  172. package/dist/esm/services/trading/TradingService.js +196 -0
  173. package/dist/esm/services/trading/index.js +2 -0
  174. package/dist/esm/utils/chainConfig.js +118 -0
  175. package/dist/esm/utils/costUtils.js +56 -0
  176. package/dist/esm/utils/deadline.js +22 -0
  177. package/dist/esm/utils/index.js +9 -0
  178. package/dist/esm/utils/multicall.js +47 -0
  179. package/dist/esm/utils/pathEncoder.js +69 -0
  180. package/dist/esm/utils/rateFeed.js +23 -0
  181. package/dist/esm/utils/retry.js +24 -0
  182. package/dist/esm/{routeUtils.js → utils/routeUtils.js} +115 -116
  183. package/dist/esm/utils/routes.js +2 -0
  184. package/dist/esm/utils/sortUtils.js +33 -0
  185. package/dist/esm/utils/tokens.js +2 -0
  186. package/dist/esm/utils/tradingLimits.js +163 -0
  187. package/dist/esm/utils/validation.js +30 -0
  188. package/dist/index.d.ts +101 -0
  189. package/dist/index.js +158 -0
  190. package/dist/services/borrow/BorrowService.d.ts +381 -0
  191. package/dist/services/borrow/BorrowService.js +460 -0
  192. package/dist/services/borrow/borrowHelpers.d.ts +4 -0
  193. package/dist/services/borrow/borrowHelpers.js +13 -0
  194. package/dist/services/borrow/borrowMath.d.ts +21 -0
  195. package/dist/services/borrow/borrowMath.js +137 -0
  196. package/dist/services/borrow/index.d.ts +4 -0
  197. package/dist/{cjs/interfaces → services/borrow}/index.js +4 -4
  198. package/dist/services/borrow/internal/borrowApprovalService.d.ts +14 -0
  199. package/dist/services/borrow/internal/borrowApprovalService.js +53 -0
  200. package/dist/services/borrow/internal/borrowContextStore.d.ts +11 -0
  201. package/dist/services/borrow/internal/borrowContextStore.js +40 -0
  202. package/dist/services/borrow/internal/borrowErc20.d.ts +5 -0
  203. package/dist/services/borrow/internal/borrowErc20.js +43 -0
  204. package/dist/services/borrow/internal/borrowHints.d.ts +7 -0
  205. package/dist/services/borrow/internal/borrowHints.js +31 -0
  206. package/dist/services/borrow/internal/borrowPositionParser.d.ts +4 -0
  207. package/dist/services/borrow/internal/borrowPositionParser.js +87 -0
  208. package/dist/services/borrow/internal/borrowReadService.d.ts +31 -0
  209. package/dist/services/borrow/internal/borrowReadService.js +276 -0
  210. package/dist/services/borrow/internal/borrowRegistryReader.d.ts +5 -0
  211. package/dist/services/borrow/internal/borrowRegistryReader.js +113 -0
  212. package/dist/services/borrow/internal/borrowTransactionService.d.ts +23 -0
  213. package/dist/services/borrow/internal/borrowTransactionService.js +276 -0
  214. package/dist/services/borrow/internal/borrowTypes.d.ts +15 -0
  215. package/dist/services/borrow/internal/borrowTypes.js +3 -0
  216. package/dist/services/borrow/internal/borrowValidation.d.ts +14 -0
  217. package/dist/services/borrow/internal/borrowValidation.js +104 -0
  218. package/dist/services/index.d.ts +9 -0
  219. package/dist/{cjs → services}/index.js +9 -7
  220. package/dist/services/liquidity/LiquidityService.d.ts +139 -0
  221. package/dist/services/liquidity/LiquidityService.js +168 -0
  222. package/dist/services/liquidity/basicLiquidity.d.ts +11 -0
  223. package/dist/services/liquidity/basicLiquidity.js +172 -0
  224. package/dist/services/liquidity/index.d.ts +2 -0
  225. package/dist/{cjs/types → services/liquidity}/index.js +2 -2
  226. package/dist/services/liquidity/liquidityHelpers.d.ts +19 -0
  227. package/dist/services/liquidity/liquidityHelpers.js +104 -0
  228. package/dist/services/liquidity/rebalance.d.ts +6 -0
  229. package/dist/services/liquidity/rebalance.js +64 -0
  230. package/dist/services/liquidity/zapHelpers.d.ts +66 -0
  231. package/dist/services/liquidity/zapHelpers.js +129 -0
  232. package/dist/services/liquidity/zapIn.d.ts +18 -0
  233. package/dist/services/liquidity/zapIn.js +119 -0
  234. package/dist/services/liquidity/zapOut.d.ts +9 -0
  235. package/dist/services/liquidity/zapOut.js +255 -0
  236. package/dist/services/pools/PoolService.d.ts +69 -0
  237. package/dist/services/pools/PoolService.js +209 -0
  238. package/dist/services/pools/index.d.ts +2 -0
  239. package/dist/{cjs/enums → services/pools}/index.js +2 -3
  240. package/dist/services/pools/poolDetails.d.ts +13 -0
  241. package/dist/services/pools/poolDetails.js +216 -0
  242. package/dist/services/pools/poolDiscovery.d.ts +12 -0
  243. package/dist/services/pools/poolDiscovery.js +117 -0
  244. package/dist/services/pools/rebalancePreview.d.ts +5 -0
  245. package/dist/services/pools/rebalancePreview.js +186 -0
  246. package/dist/services/quotes/QuoteService.d.ts +51 -0
  247. package/dist/services/quotes/QuoteService.js +91 -0
  248. package/dist/services/quotes/index.d.ts +2 -0
  249. package/dist/services/quotes/index.js +18 -0
  250. package/dist/services/routes/RouteService.d.ts +117 -0
  251. package/dist/services/routes/RouteService.js +306 -0
  252. package/dist/services/routes/index.d.ts +2 -0
  253. package/dist/services/routes/index.js +18 -0
  254. package/dist/services/swap/SwapService.d.ts +198 -0
  255. package/dist/services/swap/SwapService.js +252 -0
  256. package/dist/services/swap/index.d.ts +2 -0
  257. package/dist/services/swap/index.js +18 -0
  258. package/dist/services/tokens/index.d.ts +2 -0
  259. package/dist/services/tokens/index.js +18 -0
  260. package/dist/services/tokens/tokenService.d.ts +55 -0
  261. package/dist/services/tokens/tokenService.js +290 -0
  262. package/dist/services/trading/TradingLimitsService.d.ts +38 -0
  263. package/dist/services/trading/TradingLimitsService.js +159 -0
  264. package/dist/services/trading/TradingService.d.ts +113 -0
  265. package/dist/services/trading/TradingService.js +201 -0
  266. package/dist/services/trading/index.d.ts +3 -0
  267. package/dist/services/trading/index.js +19 -0
  268. package/dist/utils/chainConfig.d.ts +16 -0
  269. package/dist/utils/chainConfig.js +123 -0
  270. package/dist/utils/costUtils.d.ts +12 -0
  271. package/dist/utils/costUtils.js +60 -0
  272. package/dist/utils/deadline.d.ts +21 -0
  273. package/dist/utils/deadline.js +26 -0
  274. package/dist/utils/index.d.ts +10 -0
  275. package/dist/utils/index.js +26 -0
  276. package/dist/utils/multicall.d.ts +30 -0
  277. package/dist/utils/multicall.js +52 -0
  278. package/dist/utils/pathEncoder.d.ts +34 -0
  279. package/dist/utils/pathEncoder.js +73 -0
  280. package/dist/utils/rateFeed.d.ts +18 -0
  281. package/dist/utils/rateFeed.js +27 -0
  282. package/dist/utils/retry.d.ts +12 -0
  283. package/dist/utils/retry.js +28 -0
  284. package/dist/{esm → utils}/routeUtils.d.ts +84 -93
  285. package/dist/{cjs → utils}/routeUtils.js +123 -124
  286. package/dist/utils/routes.d.ts +3 -0
  287. package/dist/utils/routes.js +8 -0
  288. package/dist/utils/sortUtils.d.ts +24 -0
  289. package/dist/utils/sortUtils.js +39 -0
  290. package/dist/utils/tokens.d.ts +2 -0
  291. package/dist/utils/tokens.js +13 -0
  292. package/dist/utils/tradingLimits.d.ts +41 -0
  293. package/dist/utils/tradingLimits.js +171 -0
  294. package/dist/utils/validation.d.ts +19 -0
  295. package/dist/utils/validation.js +34 -0
  296. package/package.json +1 -1
  297. package/dist/cjs/ChainClient.d.ts +0 -9
  298. package/dist/cjs/ChainClient.js +0 -58
  299. package/dist/cjs/TestChainClient.d.ts +0 -7
  300. package/dist/cjs/TestChainClient.js +0 -41
  301. package/dist/cjs/constants/addresses.d.ts +0 -4
  302. package/dist/cjs/constants/addresses.js +0 -59
  303. package/dist/cjs/constants/currencies.d.ts +0 -5
  304. package/dist/cjs/constants/currencies.js +0 -29
  305. package/dist/cjs/constants/index.d.ts +0 -4
  306. package/dist/cjs/constants/tokens.11142220.d.ts +0 -2
  307. package/dist/cjs/constants/tokens.11142220.js +0 -128
  308. package/dist/cjs/constants/tokens.42220.d.ts +0 -2
  309. package/dist/cjs/constants/tokens.42220.js +0 -128
  310. package/dist/cjs/constants/tokens.d.ts +0 -65
  311. package/dist/cjs/constants/tokens.js +0 -170
  312. package/dist/cjs/constants/tradablePairs.11142220.d.ts +0 -2
  313. package/dist/cjs/constants/tradablePairs.11142220.js +0 -7391
  314. package/dist/cjs/constants/tradablePairs.42220.d.ts +0 -2
  315. package/dist/cjs/constants/tradablePairs.42220.js +0 -7391
  316. package/dist/cjs/constants/tradablePairs.d.ts +0 -16
  317. package/dist/cjs/constants/tradablePairs.js +0 -53
  318. package/dist/cjs/enums/chainId.d.ts +0 -4
  319. package/dist/cjs/enums/index.d.ts +0 -3
  320. package/dist/cjs/enums/proposalState.d.ts +0 -10
  321. package/dist/cjs/enums/proposalState.js +0 -14
  322. package/dist/cjs/enums/tradingMode.d.ts +0 -17
  323. package/dist/cjs/enums/tradingMode.js +0 -21
  324. package/dist/cjs/governance.d.ts +0 -62
  325. package/dist/cjs/governance.js +0 -151
  326. package/dist/cjs/index.d.ts +0 -7
  327. package/dist/cjs/interfaces/IChainClient.d.ts +0 -6
  328. package/dist/cjs/interfaces/index.d.ts +0 -4
  329. package/dist/cjs/interfaces/tradingLimit.d.ts +0 -7
  330. package/dist/cjs/interfaces/tradingLimitsConfig.d.ts +0 -10
  331. package/dist/cjs/interfaces/tradingLimitsState.d.ts +0 -9
  332. package/dist/cjs/limits.d.ts +0 -33
  333. package/dist/cjs/limits.js +0 -130
  334. package/dist/cjs/mento.d.ts +0 -287
  335. package/dist/cjs/mento.js +0 -699
  336. package/dist/cjs/routeUtils.d.ts +0 -304
  337. package/dist/cjs/types/contractAddressMap.d.ts +0 -4
  338. package/dist/cjs/types/contractAddressMap.js +0 -2
  339. package/dist/cjs/types/contractAddresses.d.ts +0 -23
  340. package/dist/cjs/types/index.d.ts +0 -2
  341. package/dist/cjs/utils.d.ts +0 -80
  342. package/dist/cjs/utils.js +0 -177
  343. package/dist/esm/ChainClient.d.ts +0 -9
  344. package/dist/esm/ChainClient.js +0 -54
  345. package/dist/esm/TestChainClient.d.ts +0 -7
  346. package/dist/esm/TestChainClient.js +0 -37
  347. package/dist/esm/constants/addresses.d.ts +0 -4
  348. package/dist/esm/constants/addresses.js +0 -55
  349. package/dist/esm/constants/currencies.d.ts +0 -5
  350. package/dist/esm/constants/currencies.js +0 -26
  351. package/dist/esm/constants/index.d.ts +0 -4
  352. package/dist/esm/constants/index.js +0 -4
  353. package/dist/esm/constants/tokens.11142220.d.ts +0 -2
  354. package/dist/esm/constants/tokens.11142220.js +0 -125
  355. package/dist/esm/constants/tokens.42220.d.ts +0 -2
  356. package/dist/esm/constants/tokens.42220.js +0 -125
  357. package/dist/esm/constants/tokens.d.ts +0 -65
  358. package/dist/esm/constants/tokens.js +0 -142
  359. package/dist/esm/constants/tradablePairs.11142220.d.ts +0 -2
  360. package/dist/esm/constants/tradablePairs.11142220.js +0 -7388
  361. package/dist/esm/constants/tradablePairs.42220.d.ts +0 -2
  362. package/dist/esm/constants/tradablePairs.42220.js +0 -7388
  363. package/dist/esm/constants/tradablePairs.d.ts +0 -16
  364. package/dist/esm/constants/tradablePairs.js +0 -26
  365. package/dist/esm/enums/chainId.d.ts +0 -4
  366. package/dist/esm/enums/index.d.ts +0 -3
  367. package/dist/esm/enums/index.js +0 -3
  368. package/dist/esm/enums/proposalState.d.ts +0 -10
  369. package/dist/esm/enums/proposalState.js +0 -11
  370. package/dist/esm/enums/tradingMode.d.ts +0 -17
  371. package/dist/esm/enums/tradingMode.js +0 -18
  372. package/dist/esm/governance.d.ts +0 -62
  373. package/dist/esm/governance.js +0 -147
  374. package/dist/esm/index.d.ts +0 -7
  375. package/dist/esm/interfaces/IChainClient.d.ts +0 -6
  376. package/dist/esm/interfaces/index.d.ts +0 -4
  377. package/dist/esm/interfaces/index.js +0 -4
  378. package/dist/esm/interfaces/tradingLimit.d.ts +0 -7
  379. package/dist/esm/interfaces/tradingLimitsConfig.d.ts +0 -10
  380. package/dist/esm/interfaces/tradingLimitsState.d.ts +0 -9
  381. package/dist/esm/limits.d.ts +0 -33
  382. package/dist/esm/limits.js +0 -123
  383. package/dist/esm/mento.d.ts +0 -287
  384. package/dist/esm/mento.js +0 -671
  385. package/dist/esm/types/contractAddressMap.d.ts +0 -4
  386. package/dist/esm/types/contractAddresses.d.ts +0 -23
  387. package/dist/esm/types/index.d.ts +0 -2
  388. package/dist/esm/types/index.js +0 -2
  389. package/dist/esm/utils.d.ts +0 -80
  390. package/dist/esm/utils.js +0 -162
  391. /package/dist/esm/{interfaces/IChainClient.js → core/types/borrow.js} +0 -0
  392. /package/dist/esm/{types → core/types}/contractAddresses.js +0 -0
  393. /package/dist/esm/{interfaces/tradingLimit.js → core/types/liquidity.js} +0 -0
  394. /package/dist/esm/{interfaces/tradingLimitsConfig.js → core/types/provider.js} +0 -0
  395. /package/dist/esm/{interfaces/tradingLimitsState.js → core/types/route.js} +0 -0
  396. /package/dist/esm/{types/contractAddressMap.js → core/types/token.js} +0 -0
@@ -0,0 +1,112 @@
1
+ import { tryGetContractAddress } from '../../core/constants';
2
+ import { PoolType } from '../../core/types';
3
+ import { FPMM_FACTORY_ABI, FPMM_ABI, VIRTUAL_POOL_FACTORY_ABI, VIRTUAL_POOL_ABI, BIPOOL_MANAGER_ABI, } from '../../core/abis';
4
+ import { sortTokenAddresses } from '../../utils/sortUtils';
5
+ import { multicall } from '../../utils/multicall';
6
+ /**
7
+ * Fetches all FPMM pools from the FPMM Factory
8
+ */
9
+ export async function fetchFPMMPools(publicClient, chainId) {
10
+ const fpmmFactoryAddress = tryGetContractAddress(chainId, 'FPMMFactory');
11
+ if (!fpmmFactoryAddress) {
12
+ return [];
13
+ }
14
+ try {
15
+ // Get all deployed FPMM pool addresses
16
+ const poolAddresses = (await publicClient.readContract({
17
+ address: fpmmFactoryAddress,
18
+ abi: FPMM_FACTORY_ABI,
19
+ functionName: 'deployedFPMMAddresses',
20
+ }));
21
+ if (poolAddresses.length === 0) {
22
+ return [];
23
+ }
24
+ // Batch all token0/token1 reads into a single multicall
25
+ const contracts = poolAddresses.flatMap((poolAddress) => [
26
+ { address: poolAddress, abi: FPMM_ABI, functionName: 'token0' },
27
+ { address: poolAddress, abi: FPMM_ABI, functionName: 'token1' },
28
+ ]);
29
+ const results = await multicall(publicClient, contracts);
30
+ return poolAddresses.map((poolAddress, i) => {
31
+ const token0Result = results[i * 2];
32
+ const token1Result = results[i * 2 + 1];
33
+ if (token0Result.status === 'failure' || token1Result.status === 'failure') {
34
+ throw new Error(`Failed to read token addresses for pool ${poolAddress}`);
35
+ }
36
+ return {
37
+ factoryAddr: fpmmFactoryAddress,
38
+ poolAddr: poolAddress,
39
+ token0: token0Result.result,
40
+ token1: token1Result.result,
41
+ poolType: PoolType.FPMM,
42
+ };
43
+ });
44
+ }
45
+ catch (error) {
46
+ throw new Error(`Failed to fetch FPMM pools: ${error.message}`);
47
+ }
48
+ }
49
+ /**
50
+ * Fetches all active Virtual pools from the VirtualPoolFactory,
51
+ * then resolves token pairs and exchange IDs from each pool and BiPoolManager.
52
+ */
53
+ export async function fetchVirtualPools(publicClient, chainId) {
54
+ const virtualPoolFactoryAddress = tryGetContractAddress(chainId, 'VirtualPoolFactory');
55
+ const biPoolManagerAddress = tryGetContractAddress(chainId, 'BiPoolManager');
56
+ if (!virtualPoolFactoryAddress || !biPoolManagerAddress) {
57
+ return [];
58
+ }
59
+ try {
60
+ // Fetch active pool addresses and all exchanges in parallel
61
+ const [poolAddresses, exchangesData] = await Promise.all([
62
+ publicClient.readContract({
63
+ address: virtualPoolFactoryAddress,
64
+ abi: VIRTUAL_POOL_FACTORY_ABI,
65
+ functionName: 'getAllPools',
66
+ }),
67
+ publicClient.readContract({
68
+ address: biPoolManagerAddress,
69
+ abi: BIPOOL_MANAGER_ABI,
70
+ functionName: 'getExchanges',
71
+ }),
72
+ ]);
73
+ if (poolAddresses.length === 0) {
74
+ return [];
75
+ }
76
+ // Build a lookup from sorted token pair to exchangeId
77
+ const tokenPairToExchangeId = new Map();
78
+ for (const exchange of exchangesData) {
79
+ if (exchange.assets.length === 2) {
80
+ const [t0, t1] = sortTokenAddresses(exchange.assets[0], exchange.assets[1]);
81
+ tokenPairToExchangeId.set(`${t0}:${t1}`, exchange.exchangeId);
82
+ }
83
+ }
84
+ // Batch all tokens() reads into a single multicall
85
+ const contracts = poolAddresses.map((poolAddress) => ({
86
+ address: poolAddress,
87
+ abi: VIRTUAL_POOL_ABI,
88
+ functionName: 'tokens',
89
+ }));
90
+ const results = await multicall(publicClient, contracts);
91
+ return poolAddresses.map((poolAddress, i) => {
92
+ const result = results[i];
93
+ if (result.status === 'failure') {
94
+ throw new Error(`Failed to read token addresses for virtual pool ${poolAddress}`);
95
+ }
96
+ const [token0, token1] = result.result;
97
+ const [sorted0, sorted1] = sortTokenAddresses(token0, token1);
98
+ const exchangeId = tokenPairToExchangeId.get(`${sorted0}:${sorted1}`);
99
+ return {
100
+ factoryAddr: virtualPoolFactoryAddress,
101
+ poolAddr: poolAddress,
102
+ token0: sorted0,
103
+ token1: sorted1,
104
+ poolType: PoolType.Virtual,
105
+ exchangeId,
106
+ };
107
+ });
108
+ }
109
+ catch (error) {
110
+ throw new Error(`Failed to fetch Virtual pools: ${error.message}`);
111
+ }
112
+ }
@@ -0,0 +1,181 @@
1
+ import { getAddress } from 'viem';
2
+ import { LIQUIDITY_STRATEGY_ABI } from '../../core/abis';
3
+ import { multicall } from '../../utils/multicall';
4
+ // Liquidity strategy incentive rates are stored as 18-decimal percentages.
5
+ const FEE_DENOMINATOR = 10n ** 18n;
6
+ function toBigIntValue(value) {
7
+ return typeof value === 'bigint' ? value : BigInt(value);
8
+ }
9
+ function toNumberValue(value) {
10
+ return typeof value === 'number' ? value : Number(value);
11
+ }
12
+ function parseDirection(value) {
13
+ const normalized = toNumberValue(value);
14
+ if (normalized === 0)
15
+ return 'Expand';
16
+ if (normalized === 1)
17
+ return 'Contract';
18
+ throw new Error(`Unsupported liquidity strategy direction: ${normalized}`);
19
+ }
20
+ function parsePoolConfig(raw) {
21
+ return {
22
+ isToken0Debt: raw[0],
23
+ lastRebalance: toNumberValue(raw[1]),
24
+ rebalanceCooldown: toNumberValue(raw[2]),
25
+ protocolFeeRecipient: raw[3],
26
+ liquiditySourceIncentiveExpansion: toBigIntValue(raw[4]),
27
+ protocolIncentiveExpansion: toBigIntValue(raw[5]),
28
+ liquiditySourceIncentiveContraction: toBigIntValue(raw[6]),
29
+ protocolIncentiveContraction: toBigIntValue(raw[7]),
30
+ };
31
+ }
32
+ function parseContext(raw) {
33
+ return {
34
+ pool: raw[0],
35
+ reserves: {
36
+ reserveNum: toBigIntValue(raw[1][0]),
37
+ reserveDen: toBigIntValue(raw[1][1]),
38
+ },
39
+ prices: {
40
+ oracleNum: toBigIntValue(raw[2][0]),
41
+ oracleDen: toBigIntValue(raw[2][1]),
42
+ poolPriceAbove: raw[2][2],
43
+ rebalanceThreshold: toNumberValue(raw[2][3]),
44
+ },
45
+ token0: raw[3],
46
+ token1: raw[4],
47
+ token0Dec: toBigIntValue(raw[5]),
48
+ token1Dec: toBigIntValue(raw[6]),
49
+ isToken0Debt: raw[7],
50
+ incentives: {
51
+ liquiditySourceIncentiveExpansion: toBigIntValue(raw[8][0]),
52
+ protocolIncentiveExpansion: toBigIntValue(raw[8][1]),
53
+ liquiditySourceIncentiveContraction: toBigIntValue(raw[8][2]),
54
+ protocolIncentiveContraction: toBigIntValue(raw[8][3]),
55
+ },
56
+ };
57
+ }
58
+ function parseAction(raw) {
59
+ return {
60
+ dir: parseDirection(raw[0]),
61
+ amount0Out: toBigIntValue(raw[1]),
62
+ amount1Out: toBigIntValue(raw[2]),
63
+ amountOwedToPool: toBigIntValue(raw[3]),
64
+ };
65
+ }
66
+ function isPreviewEligible(detail) {
67
+ return (detail.poolType === 'FPMM' &&
68
+ detail.pricing !== null &&
69
+ detail.rebalancing.inBand === false &&
70
+ !!detail.rebalancing.liquidityStrategy);
71
+ }
72
+ function buildPreview(detail, strategyAddress, config, context, action) {
73
+ const debtToken = context.isToken0Debt ? context.token0 : context.token1;
74
+ const collateralToken = context.isToken0Debt ? context.token1 : context.token0;
75
+ const inputToken = action.dir === 'Expand' ? debtToken : collateralToken;
76
+ const outputToken = action.dir === 'Expand' ? collateralToken : debtToken;
77
+ const amountTransferredValue = action.amount0Out > 0n ? action.amount0Out : action.amount1Out;
78
+ const protocolRate = action.dir === 'Expand'
79
+ ? config.protocolIncentiveExpansion
80
+ : config.protocolIncentiveContraction;
81
+ const liquiditySourceRate = action.dir === 'Expand'
82
+ ? config.liquiditySourceIncentiveExpansion
83
+ : config.liquiditySourceIncentiveContraction;
84
+ const protocolIncentiveAmount = (amountTransferredValue * protocolRate) / FEE_DENOMINATOR;
85
+ const liquiditySourceBase = amountTransferredValue > protocolIncentiveAmount
86
+ ? amountTransferredValue - protocolIncentiveAmount
87
+ : 0n;
88
+ const liquiditySourceIncentiveAmount = (liquiditySourceBase * liquiditySourceRate) / FEE_DENOMINATOR;
89
+ return {
90
+ poolAddress: detail.poolAddr,
91
+ strategyAddress,
92
+ direction: action.dir,
93
+ config,
94
+ context,
95
+ action,
96
+ inputToken,
97
+ outputToken,
98
+ amountRequired: {
99
+ token: inputToken,
100
+ amount: action.amountOwedToPool,
101
+ },
102
+ amountTransferred: {
103
+ token: outputToken,
104
+ amount: amountTransferredValue,
105
+ },
106
+ protocolIncentive: {
107
+ token: outputToken,
108
+ amount: protocolIncentiveAmount,
109
+ },
110
+ liquiditySourceIncentive: {
111
+ token: outputToken,
112
+ amount: liquiditySourceIncentiveAmount,
113
+ },
114
+ approvalToken: inputToken,
115
+ approvalSpender: strategyAddress,
116
+ approvalAmount: action.amountOwedToPool,
117
+ };
118
+ }
119
+ export async function fetchPoolRebalancePreview(publicClient, detail) {
120
+ const [preview] = await fetchPoolRebalancePreviewBatch(publicClient, [detail]);
121
+ return preview;
122
+ }
123
+ export async function fetchPoolRebalancePreviewBatch(publicClient, details) {
124
+ const previews = details.map(() => null);
125
+ const eligibleTargets = details.flatMap((detail, index) => {
126
+ if (!isPreviewEligible(detail))
127
+ return [];
128
+ const strategyAddress = detail.rebalancing.liquidityStrategy;
129
+ if (!strategyAddress)
130
+ return [];
131
+ try {
132
+ return [
133
+ {
134
+ index,
135
+ detail,
136
+ strategyAddress: getAddress(strategyAddress),
137
+ },
138
+ ];
139
+ }
140
+ catch {
141
+ return [];
142
+ }
143
+ });
144
+ if (eligibleTargets.length === 0) {
145
+ return previews;
146
+ }
147
+ const contracts = eligibleTargets.flatMap(({ detail, strategyAddress }) => [
148
+ {
149
+ address: strategyAddress,
150
+ abi: LIQUIDITY_STRATEGY_ABI,
151
+ functionName: 'poolConfigs',
152
+ args: [detail.poolAddr],
153
+ },
154
+ {
155
+ address: strategyAddress,
156
+ abi: LIQUIDITY_STRATEGY_ABI,
157
+ functionName: 'determineAction',
158
+ args: [detail.poolAddr],
159
+ },
160
+ ]);
161
+ const results = await multicall(publicClient, contracts);
162
+ eligibleTargets.forEach((target, targetIndex) => {
163
+ const configResult = results[targetIndex * 2];
164
+ const determineActionResult = results[targetIndex * 2 + 1];
165
+ if (!configResult || !determineActionResult)
166
+ return;
167
+ if (configResult.status === 'failure' || determineActionResult.status === 'failure')
168
+ return;
169
+ try {
170
+ const config = parsePoolConfig(configResult.result);
171
+ const [rawContext, rawAction] = determineActionResult.result;
172
+ const context = parseContext(rawContext);
173
+ const action = parseAction(rawAction);
174
+ previews[target.index] = buildPreview(target.detail, target.strategyAddress, config, context, action);
175
+ }
176
+ catch {
177
+ previews[target.index] = null;
178
+ }
179
+ });
180
+ return previews;
181
+ }
@@ -0,0 +1,85 @@
1
+ import { BaseError, ContractFunctionRevertedError } from 'viem';
2
+ import { ROUTER_ABI } from '../../core/abis';
3
+ import { getContractAddress } from '../../core/constants';
4
+ import { FXMarketClosedError } from '../../core/errors';
5
+ import { encodeRoutePath } from '../../utils/pathEncoder';
6
+ import { validateAddress } from '../../utils/validation';
7
+ /**
8
+ * Service for getting swap quotes from the Mento protocol.
9
+ * Calculates expected output amounts for trades without executing them.
10
+ */
11
+ export class QuoteService {
12
+ constructor(publicClient, chainId, routeService) {
13
+ this.publicClient = publicClient;
14
+ this.chainId = chainId;
15
+ this.routeService = routeService;
16
+ }
17
+ /**
18
+ * Calculates the expected output amount for a swap between two tokens.
19
+ *
20
+ * @param tokenIn - The address of the input token (e.g., '0x765DE816845861e75A25fCA122bb6898B8B1282a')
21
+ * @param tokenOut - The address of the output token (e.g., '0x471EcE3750Da237f93B8E339c536989b8978a438')
22
+ * @param amountIn - The amount of input tokens (in wei/smallest unit)
23
+ * @param route - Optional pre-fetched route. If not provided, the optimal route will be found automatically.
24
+ * @returns The expected output amount (in wei/smallest unit)
25
+ * @throws {RouteNotFoundError} If no route exists between the token pair
26
+ * @throws {Error} If the Router contract call fails
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * // Calculate output for 100 USDm
31
+ * const amountIn = BigInt(100) * BigInt(10 ** 18) // 100 USDm in wei
32
+ * const expectedOut = await quoteService.getAmountOut(
33
+ * '0x765DE816845861e75A25fCA122bb6898B8B1282a', // USDm
34
+ * '0x471EcE3750Da237f93B8E339c536989b8978a438', // CELO
35
+ * amountIn
36
+ * )
37
+ * console.log(`Expected CELO output: ${expectedOut}`)
38
+ *
39
+ * // Or provide a pre-fetched route for better performance
40
+ * const route = await routeService.findRoute(
41
+ * '0x765DE816845861e75A25fCA122bb6898B8B1282a',
42
+ * '0x471EcE3750Da237f93B8E339c536989b8978a438'
43
+ * )
44
+ * const expectedOut2 = await quoteService.getAmountOut(
45
+ * '0x765DE816845861e75A25fCA122bb6898B8B1282a',
46
+ * '0x471EcE3750Da237f93B8E339c536989b8978a438',
47
+ * amountIn,
48
+ * route
49
+ * )
50
+ * ```
51
+ */
52
+ async getAmountOut(tokenIn, tokenOut, amountIn, route) {
53
+ // Validate address inputs
54
+ validateAddress(tokenIn, 'tokenIn');
55
+ validateAddress(tokenOut, 'tokenOut');
56
+ // If the consumer does not provide a route then we find the best route.
57
+ if (!route) {
58
+ route = await this.routeService.findRoute(tokenIn, tokenOut);
59
+ }
60
+ return getAmountOutForRoute(this.publicClient, this.chainId, tokenIn, tokenOut, amountIn, route);
61
+ }
62
+ }
63
+ export async function getAmountOutForRoute(publicClient, chainId, tokenIn, tokenOut, amountIn, route) {
64
+ const routerRoutes = encodeRoutePath(route.path, tokenIn, tokenOut);
65
+ const routerAddress = getContractAddress(chainId, 'Router');
66
+ try {
67
+ const amounts = (await publicClient.readContract({
68
+ address: routerAddress,
69
+ abi: ROUTER_ABI,
70
+ functionName: 'getAmountsOut',
71
+ args: [amountIn, routerRoutes],
72
+ }));
73
+ return amounts[amounts.length - 1];
74
+ }
75
+ catch (error) {
76
+ if (error instanceof BaseError) {
77
+ const revertError = error.walk((candidate) => candidate instanceof ContractFunctionRevertedError);
78
+ if (revertError instanceof ContractFunctionRevertedError &&
79
+ revertError.data?.errorName === 'FXMarketClosed') {
80
+ throw new FXMarketClosedError();
81
+ }
82
+ }
83
+ throw error;
84
+ }
85
+ }
@@ -0,0 +1 @@
1
+ export * from './QuoteService';
@@ -0,0 +1,268 @@
1
+ import { ERC20_ABI } from '../../core/abis';
2
+ import { RouteNotFoundError } from '../../core/errors';
3
+ import { buildConnectivityStructures, generateAllRoutes, selectOptimalRoutes } from '../../utils/routeUtils';
4
+ import { canonicalSymbolKey } from '../../utils/sortUtils';
5
+ import { multicall } from '../../utils/multicall';
6
+ /**
7
+ * Service for discovering and managing trading routes in the Mento protocol.
8
+ * Handles route discovery for both direct (single-hop) and multi-hop trading paths.
9
+ *
10
+ * Routes are identified by their token pair and include the path of pools
11
+ * needed to execute the trade. Multi-hop routes (up to 2 hops) are automatically
12
+ * discovered when no direct route exists between two tokens.
13
+ */
14
+ export class RouteService {
15
+ constructor(publicClient, chainId, poolService) {
16
+ this.publicClient = publicClient;
17
+ this.chainId = chainId;
18
+ this.poolService = poolService;
19
+ this.symbolCache = new Map();
20
+ this.routeCache = new Map();
21
+ this.routeLookupCache = new Map();
22
+ this.routePromises = new Map();
23
+ }
24
+ /**
25
+ * Generates all direct (single-hop) routes from available pools
26
+ * Routes are deduplicated and assets are sorted alphabetically by symbol
27
+ *
28
+ * @returns Array of direct routes with single-hop paths
29
+ * @throws {Error} If RPC calls fail
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const directRoutes = await routeService.getDirectRoutes()
34
+ * console.log(`Found ${directRoutes.length} direct routes`)
35
+ * ```
36
+ */
37
+ async getDirectRoutes() {
38
+ const pools = await this.poolService.getPools();
39
+ if (pools.length === 0) {
40
+ return [];
41
+ }
42
+ // Fetch all unique token addresses
43
+ const uniqueTokens = new Set();
44
+ pools.forEach((pool) => {
45
+ uniqueTokens.add(pool.token0);
46
+ uniqueTokens.add(pool.token1);
47
+ });
48
+ // Fetch symbols for all tokens in parallel. Used for the route ids
49
+ const tokenAddresses = Array.from(uniqueTokens);
50
+ await this.hydrateTokenSymbols(tokenAddresses);
51
+ const routes = [];
52
+ // Loop all pools
53
+ for (const pool of pools) {
54
+ const symbol0 = this.symbolCache.get(pool.token0);
55
+ const symbol1 = this.symbolCache.get(pool.token1);
56
+ if (!symbol0 || !symbol1) {
57
+ throw new Error(`Symbol not found for token ${pool.token0} or ${pool.token1}`);
58
+ }
59
+ // Create canonical route ID (alphabetically sorted symbols)
60
+ const routeId = canonicalSymbolKey(symbol0, symbol1);
61
+ // Sort tokens to match the canonical route ID order (alphabetical by symbol)
62
+ const sortedTokens = symbol0 < symbol1
63
+ ? [
64
+ { address: pool.token0, symbol: symbol0 },
65
+ { address: pool.token1, symbol: symbol1 },
66
+ ]
67
+ : [
68
+ { address: pool.token1, symbol: symbol1 },
69
+ { address: pool.token0, symbol: symbol0 },
70
+ ];
71
+ routes.push({
72
+ id: routeId,
73
+ tokens: sortedTokens,
74
+ path: [pool],
75
+ });
76
+ }
77
+ return routes;
78
+ }
79
+ /**
80
+ * Discovers all tradable routes including multi-hop routes (up to 2 hops)
81
+ * Uses cached data by default for instant results, or generates fresh from blockchain
82
+ *
83
+ * @param options - Configuration options
84
+ * @param options.cached - Whether to use pre-generated cached routes (default: true)
85
+ * @param options.returnAllRoutes - Whether to return all possible routes or just the optimal one per pair (default: false)
86
+ * @returns Array of all tradable routes (direct + multi-hop routes)
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * // Fast: use pre-generated cache
91
+ * const cachedRoutes = await routeService.getRoutes({ cached: true })
92
+ *
93
+ * // Slower but fresh: generate from blockchain
94
+ * const freshRoutes = await routeService.getRoutes({ cached: false })
95
+ *
96
+ * // Get all route variants (useful for cache generation)
97
+ * const allRoutes = await routeService.getRoutes({ cached: false, returnAllRoutes: true })
98
+ * ```
99
+ */
100
+ async getRoutes(options) {
101
+ const cached = options?.cached ?? true;
102
+ const returnAllRoutes = options?.returnAllRoutes ?? false;
103
+ const cacheKey = this.getCacheKey(cached, returnAllRoutes);
104
+ const cachedRoutes = this.routeCache.get(cacheKey);
105
+ if (cachedRoutes) {
106
+ return cachedRoutes;
107
+ }
108
+ const inFlight = this.routePromises.get(cacheKey);
109
+ if (inFlight) {
110
+ return inFlight;
111
+ }
112
+ const promise = this.loadRoutes(cached, returnAllRoutes);
113
+ this.routePromises.set(cacheKey, promise);
114
+ try {
115
+ const routes = await promise;
116
+ this.routeCache.set(cacheKey, routes);
117
+ if (!returnAllRoutes) {
118
+ this.routeLookupCache.set(cacheKey, this.buildLookup(routes));
119
+ }
120
+ return routes;
121
+ }
122
+ finally {
123
+ this.routePromises.delete(cacheKey);
124
+ }
125
+ }
126
+ async warm(options) {
127
+ return this.getRoutes(options);
128
+ }
129
+ /**
130
+ * Looks up the tradable route between two tokens (direct or multi-hop)
131
+ *
132
+ * @param tokenIn - Input token address (direction matters for routing)
133
+ * @param tokenOut - Output token address (direction matters for routing)
134
+ * @param options - Optional configuration (e.g., cached)
135
+ * @returns The optimal tradable route connecting the two tokens
136
+ * @throws {RouteNotFoundError} If no route exists between the token pair
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const USDm = '0x765DE816845861e75A25fCA122bb6898B8B1282a'
141
+ * const BRLm = '0xE4D5...'
142
+ * const route = await routeService.findRoute(USDm, BRLm)
143
+ *
144
+ * if (route.path.length === 1) {
145
+ * console.log('Direct route available')
146
+ * } else {
147
+ * console.log('Two-hop route:', route.path)
148
+ * }
149
+ * ```
150
+ */
151
+ async findRoute(tokenIn, tokenOut, options) {
152
+ const cached = options?.cached ?? true;
153
+ const cacheKey = this.getCacheKey(cached, false);
154
+ const routes = await this.getRoutes({ cached, returnAllRoutes: false });
155
+ const lookup = this.routeLookupCache.get(cacheKey) ?? this.buildLookup(routes);
156
+ this.routeLookupCache.set(cacheKey, lookup);
157
+ const matchingRoute = lookup.get(makeTokenPairKey(tokenIn, tokenOut));
158
+ if (!matchingRoute) {
159
+ throw new RouteNotFoundError(tokenIn, tokenOut);
160
+ }
161
+ return matchingRoute;
162
+ }
163
+ /**
164
+ * Generate fresh tradable routes from blockchain data
165
+ * @param returnAllRoutes - Whether to return all routes or just optimal ones per pair
166
+ * @private
167
+ */
168
+ async generateFreshRoutes(returnAllRoutes = false) {
169
+ // Get direct routes
170
+ const directRoutes = await this.getDirectRoutes();
171
+ if (directRoutes.length === 0) {
172
+ return [];
173
+ }
174
+ // Build connectivity structures for route finding
175
+ const connectivity = buildConnectivityStructures(directRoutes);
176
+ // Generate all possible routes (direct + 2-hop)
177
+ const allRoutes = generateAllRoutes(connectivity);
178
+ // Select routes based on returnAllRoutes flag
179
+ const selectedRoutes = selectOptimalRoutes(allRoutes, returnAllRoutes, connectivity.addrToSymbol);
180
+ return selectedRoutes;
181
+ }
182
+ /**
183
+ * Load cached tradable routes for current chain
184
+ * @private
185
+ */
186
+ async loadCachedRoutes() {
187
+ const { getCachedRoutes } = await import('../../utils/routes');
188
+ const cachedRoutes = await getCachedRoutes(this.chainId);
189
+ return cachedRoutes || [];
190
+ }
191
+ async loadRoutes(cached, returnAllRoutes) {
192
+ if (cached) {
193
+ try {
194
+ const cachedRoutes = await this.loadCachedRoutes();
195
+ if (cachedRoutes.length > 0) {
196
+ return returnAllRoutes ? cachedRoutes : cachedRoutes;
197
+ }
198
+ }
199
+ catch {
200
+ // Cache miss or corrupt - silently fall through to fresh generation
201
+ }
202
+ }
203
+ return this.generateFreshRoutes(returnAllRoutes);
204
+ }
205
+ getCacheKey(cached, returnAllRoutes) {
206
+ return `${cached ? 'cached' : 'fresh'}:${returnAllRoutes ? 'all' : 'best'}`;
207
+ }
208
+ buildLookup(routes) {
209
+ const lookup = new Map();
210
+ for (const route of routes) {
211
+ lookup.set(makeTokenPairKey(route.tokens[0].address, route.tokens[1].address), route);
212
+ }
213
+ return lookup;
214
+ }
215
+ async hydrateTokenSymbols(addresses) {
216
+ const missingAddresses = addresses.filter((address) => !this.symbolCache.has(address));
217
+ if (missingAddresses.length === 0) {
218
+ return;
219
+ }
220
+ const results = await multicall(this.publicClient, missingAddresses.map((address) => ({
221
+ address: address,
222
+ abi: ERC20_ABI,
223
+ functionName: 'symbol',
224
+ args: [],
225
+ })));
226
+ for (const [index, address] of missingAddresses.entries()) {
227
+ const result = results[index];
228
+ if (!result || result.status === 'failure') {
229
+ this.symbolCache.set(address, address);
230
+ continue;
231
+ }
232
+ this.symbolCache.set(address, result.result);
233
+ }
234
+ }
235
+ /**
236
+ * Helper: Fetch token symbol from on-chain
237
+ * Results are cached to avoid redundant RPC calls
238
+ * Falls back to address if symbol fetch fails
239
+ *
240
+ * @private
241
+ */
242
+ async fetchTokenSymbol(address) {
243
+ // Return cached symbol if available
244
+ if (this.symbolCache.has(address)) {
245
+ return this.symbolCache.get(address);
246
+ }
247
+ try {
248
+ const symbol = (await this.publicClient.readContract({
249
+ address: address,
250
+ abi: ERC20_ABI,
251
+ functionName: 'symbol',
252
+ args: [],
253
+ }));
254
+ // Cache the symbol
255
+ this.symbolCache.set(address, symbol);
256
+ return symbol;
257
+ }
258
+ catch {
259
+ // Fallback to address if symbol fetch fails
260
+ this.symbolCache.set(address, address);
261
+ return address;
262
+ }
263
+ }
264
+ }
265
+ function makeTokenPairKey(tokenA, tokenB) {
266
+ const [first, second] = [tokenA.toLowerCase(), tokenB.toLowerCase()].sort();
267
+ return `${first}:${second}`;
268
+ }
@@ -0,0 +1 @@
1
+ export * from './RouteService';