@mento-protocol/mento-sdk 2.0.0-beta.9 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +170 -132
- package/dist/cache/routes.42220.d.ts +3 -0
- package/dist/cache/routes.42220.d.ts.map +1 -0
- package/dist/cache/routes.42220.js +112 -0
- package/dist/cache/routes.42220.js.map +1 -0
- package/dist/cache/tokens.11142220.d.ts +3 -0
- package/dist/cache/tokens.11142220.d.ts.map +1 -0
- package/dist/cache/tokens.11142220.js +129 -0
- package/dist/cache/tokens.11142220.js.map +1 -0
- package/dist/cache/tokens.42220.d.ts +3 -0
- package/dist/cache/tokens.42220.d.ts.map +1 -0
- package/dist/cache/tokens.42220.js +129 -0
- package/dist/cache/tokens.42220.js.map +1 -0
- package/dist/core/abis/bipoolmanager.d.ts +34 -0
- package/dist/core/abis/bipoolmanager.d.ts.map +1 -0
- package/dist/core/abis/bipoolmanager.js +72 -0
- package/dist/core/abis/bipoolmanager.js.map +1 -0
- package/dist/core/abis/broker.d.ts +2 -0
- package/dist/core/abis/broker.d.ts.map +1 -0
- package/dist/core/abis/broker.js +9 -0
- package/dist/core/abis/broker.js.map +1 -0
- package/dist/core/abis/erc20.d.ts +2 -0
- package/dist/core/abis/erc20.d.ts.map +1 -0
- package/dist/{abis → core/abis}/erc20.js +5 -2
- package/dist/core/abis/erc20.js.map +1 -0
- package/dist/core/abis/fpmm.d.ts +34 -0
- package/dist/core/abis/fpmm.d.ts.map +1 -0
- package/dist/core/abis/fpmm.js +11 -0
- package/dist/core/abis/fpmm.js.map +1 -0
- package/dist/core/abis/fpmmFactory.d.ts +21 -0
- package/dist/core/abis/fpmmFactory.d.ts.map +1 -0
- package/dist/core/abis/fpmmFactory.js +9 -0
- package/dist/core/abis/fpmmFactory.js.map +1 -0
- package/dist/core/abis/index.d.ts +10 -0
- package/dist/core/abis/index.d.ts.map +1 -0
- package/dist/{abis → core/abis}/index.js +4 -0
- package/dist/core/abis/index.js.map +1 -0
- package/dist/core/abis/pricingmodule.d.ts +2 -0
- package/dist/core/abis/pricingmodule.d.ts.map +1 -0
- package/dist/core/abis/pricingmodule.js +6 -0
- package/dist/core/abis/pricingmodule.js.map +1 -0
- package/dist/core/abis/reserve.d.ts +2 -0
- package/dist/core/abis/reserve.d.ts.map +1 -0
- package/dist/core/abis/reserve.js +10 -0
- package/dist/core/abis/reserve.js.map +1 -0
- package/dist/core/abis/router.d.ts +2 -0
- package/dist/core/abis/router.d.ts.map +1 -0
- package/dist/core/abis/router.js +10 -0
- package/dist/core/abis/router.js.map +1 -0
- package/dist/core/abis/uniswapV3.d.ts +4 -0
- package/dist/core/abis/uniswapV3.d.ts.map +1 -0
- package/dist/{abis → core/abis}/uniswapV3.js +7 -6
- package/dist/core/abis/uniswapV3.js.map +1 -0
- package/dist/core/abis/virtualPool.d.ts +10 -0
- package/dist/core/abis/virtualPool.d.ts.map +1 -0
- package/dist/core/abis/virtualPool.js +6 -0
- package/dist/core/abis/virtualPool.js.map +1 -0
- package/dist/core/abis/virtualPoolFactory.d.ts +27 -0
- package/dist/core/abis/virtualPoolFactory.d.ts.map +1 -0
- package/dist/core/abis/virtualPoolFactory.js +9 -0
- package/dist/core/abis/virtualPoolFactory.js.map +1 -0
- package/dist/core/constants/aaveConfig.d.ts.map +1 -0
- package/dist/core/constants/aaveConfig.js.map +1 -0
- package/dist/{constants → core/constants}/addresses.d.ts +4 -5
- package/dist/core/constants/addresses.d.ts.map +1 -0
- package/dist/core/constants/addresses.js +73 -0
- package/dist/core/constants/addresses.js.map +1 -0
- package/dist/core/constants/chainId.d.ts +5 -0
- package/dist/core/constants/chainId.d.ts.map +1 -0
- package/dist/{constants → core/constants}/chainId.js +1 -1
- package/dist/core/constants/chainId.js.map +1 -0
- package/dist/core/constants/contractNames.d.ts.map +1 -0
- package/dist/core/constants/contractNames.js.map +1 -0
- package/dist/{constants → core/constants}/index.d.ts +0 -2
- package/dist/core/constants/index.d.ts.map +1 -0
- package/dist/{constants → core/constants}/index.js +0 -2
- package/dist/core/constants/index.js.map +1 -0
- package/dist/{constants → core/constants}/mentoAddresses.d.ts +2 -0
- package/dist/core/constants/mentoAddresses.d.ts.map +1 -0
- package/dist/{constants → core/constants}/mentoAddresses.js +2 -0
- package/dist/core/constants/mentoAddresses.js.map +1 -0
- package/dist/core/constants/protocolAddresses.d.ts.map +1 -0
- package/dist/core/constants/protocolAddresses.js.map +1 -0
- package/dist/core/errors/base.d.ts +8 -0
- package/dist/core/errors/base.d.ts.map +1 -0
- package/dist/core/errors/base.js +17 -0
- package/dist/core/errors/base.js.map +1 -0
- package/dist/core/errors/index.d.ts +3 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +19 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/errors/router.d.ts +8 -0
- package/dist/core/errors/router.d.ts.map +1 -0
- package/dist/core/errors/router.js +14 -0
- package/dist/core/errors/router.js.map +1 -0
- package/dist/core/types/contractAddresses.d.ts +39 -0
- package/dist/core/types/contractAddresses.d.ts.map +1 -0
- package/dist/core/types/contractAddresses.js.map +1 -0
- package/dist/{types → core/types}/index.d.ts +2 -1
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/{types → core/types}/index.js +2 -1
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/types/pool.d.ts +35 -0
- package/dist/core/types/pool.d.ts.map +1 -0
- package/dist/core/types/pool.js +14 -0
- package/dist/core/types/pool.js.map +1 -0
- package/dist/core/types/provider.d.ts +45 -0
- package/dist/core/types/provider.d.ts.map +1 -0
- package/dist/core/types/provider.js +4 -0
- package/dist/core/types/provider.js.map +1 -0
- package/dist/core/types/route.d.ts +62 -0
- package/dist/core/types/route.d.ts.map +1 -0
- package/dist/{types/provider.js → core/types/route.js} +1 -1
- package/dist/core/types/route.js.map +1 -0
- package/dist/{types → core/types}/token.d.ts +7 -7
- package/dist/core/types/token.d.ts.map +1 -0
- package/dist/{types → core/types}/token.js.map +1 -1
- package/dist/index.d.ts +39 -110
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -153
- package/dist/index.js.map +1 -1
- package/dist/services/index.d.ts +6 -6
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +6 -6
- package/dist/services/index.js.map +1 -1
- package/dist/services/pools/PoolService.d.ts +37 -0
- package/dist/services/pools/PoolService.d.ts.map +1 -0
- package/dist/services/pools/PoolService.js +158 -0
- package/dist/services/pools/PoolService.js.map +1 -0
- package/dist/services/pools/index.d.ts +2 -0
- package/dist/services/pools/index.d.ts.map +1 -0
- package/dist/services/pools/index.js +18 -0
- package/dist/services/pools/index.js.map +1 -0
- package/dist/services/quotes/QuoteService.d.ts +41 -0
- package/dist/services/quotes/QuoteService.d.ts.map +1 -0
- package/dist/services/quotes/QuoteService.js +61 -0
- package/dist/services/quotes/QuoteService.js.map +1 -0
- package/dist/services/quotes/index.d.ts +2 -0
- package/dist/services/quotes/index.d.ts.map +1 -0
- package/dist/services/quotes/index.js +18 -0
- package/dist/services/quotes/index.js.map +1 -0
- package/dist/services/routes/RouteService.d.ts +109 -0
- package/dist/services/routes/RouteService.d.ts.map +1 -0
- package/dist/services/routes/RouteService.js +241 -0
- package/dist/services/routes/RouteService.js.map +1 -0
- package/dist/services/routes/index.d.ts +2 -0
- package/dist/services/routes/index.d.ts.map +1 -0
- package/dist/services/routes/index.js +18 -0
- package/dist/services/routes/index.js.map +1 -0
- package/dist/services/swap/SwapService.d.ts +158 -0
- package/dist/services/swap/SwapService.d.ts.map +1 -0
- package/dist/services/swap/SwapService.js +160 -0
- package/dist/services/swap/SwapService.js.map +1 -0
- package/dist/services/swap/index.d.ts +2 -0
- package/dist/services/swap/index.d.ts.map +1 -0
- package/dist/services/swap/index.js +18 -0
- package/dist/services/swap/index.js.map +1 -0
- package/dist/services/tokens/index.d.ts +2 -0
- package/dist/services/tokens/index.d.ts.map +1 -0
- package/dist/services/tokens/index.js +18 -0
- package/dist/services/tokens/index.js.map +1 -0
- package/dist/services/tokens/supply/ISupplyCalculator.d.ts.map +1 -0
- package/dist/services/tokens/supply/ISupplyCalculator.js.map +1 -0
- package/dist/services/{supply → tokens/supply}/aaveSupplyCalculator.d.ts +4 -3
- package/dist/services/tokens/supply/aaveSupplyCalculator.d.ts.map +1 -0
- package/dist/services/{supply → tokens/supply}/aaveSupplyCalculator.js +7 -7
- package/dist/services/tokens/supply/aaveSupplyCalculator.js.map +1 -0
- package/dist/services/tokens/supply/calculatorFactory.d.ts +8 -0
- package/dist/services/tokens/supply/calculatorFactory.d.ts.map +1 -0
- package/dist/services/tokens/supply/calculatorFactory.js.map +1 -0
- package/dist/services/tokens/supply/defaultCalculatorFactory.d.ts +9 -0
- package/dist/services/tokens/supply/defaultCalculatorFactory.d.ts.map +1 -0
- package/dist/services/{supply → tokens/supply}/defaultCalculatorFactory.js +12 -7
- package/dist/services/tokens/supply/defaultCalculatorFactory.js.map +1 -0
- package/dist/services/tokens/supply/index.d.ts.map +1 -0
- package/dist/services/tokens/supply/index.js.map +1 -0
- package/dist/services/tokens/supply/multisigSupplyCalculator.d.ts +9 -0
- package/dist/services/tokens/supply/multisigSupplyCalculator.d.ts.map +1 -0
- package/dist/services/tokens/supply/multisigSupplyCalculator.js +33 -0
- package/dist/services/tokens/supply/multisigSupplyCalculator.js.map +1 -0
- package/dist/services/{supply → tokens/supply}/uniV3SupplyCalculator.d.ts +3 -3
- package/dist/services/tokens/supply/uniV3SupplyCalculator.d.ts.map +1 -0
- package/dist/services/{supply → tokens/supply}/uniV3SupplyCalculator.js +11 -6
- package/dist/services/tokens/supply/uniV3SupplyCalculator.js.map +1 -0
- package/dist/services/{supplyAdjustmentService.d.ts → tokens/supplyAdjustmentService.d.ts} +7 -2
- package/dist/services/tokens/supplyAdjustmentService.d.ts.map +1 -0
- package/dist/services/{supplyAdjustmentService.js → tokens/supplyAdjustmentService.js} +14 -11
- package/dist/services/tokens/supplyAdjustmentService.js.map +1 -0
- package/dist/services/tokens/tokenService.d.ts +33 -0
- package/dist/services/tokens/tokenService.d.ts.map +1 -0
- package/dist/services/tokens/tokenService.js +136 -0
- package/dist/services/tokens/tokenService.js.map +1 -0
- package/dist/utils/chainConfig.d.ts +16 -0
- package/dist/utils/chainConfig.d.ts.map +1 -0
- package/dist/utils/chainConfig.js +62 -0
- package/dist/utils/chainConfig.js.map +1 -0
- package/dist/utils/costUtils.d.ts +12 -0
- package/dist/utils/costUtils.d.ts.map +1 -0
- package/dist/utils/costUtils.js +59 -0
- package/dist/utils/costUtils.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/pathEncoder.d.ts +28 -0
- package/dist/utils/pathEncoder.d.ts.map +1 -0
- package/dist/utils/pathEncoder.js +57 -0
- package/dist/utils/pathEncoder.js.map +1 -0
- package/dist/utils/routeUtils.d.ts +295 -0
- package/dist/utils/routeUtils.d.ts.map +1 -0
- package/dist/utils/routeUtils.js +371 -0
- package/dist/utils/routeUtils.js.map +1 -0
- package/dist/utils/routes.d.ts +9 -0
- package/dist/utils/routes.d.ts.map +1 -0
- package/dist/utils/routes.js +49 -0
- package/dist/utils/routes.js.map +1 -0
- package/dist/utils/sortUtils.d.ts +24 -0
- package/dist/utils/sortUtils.d.ts.map +1 -0
- package/dist/utils/sortUtils.js +39 -0
- package/dist/utils/sortUtils.js.map +1 -0
- package/dist/utils/tokens.d.ts +78 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +181 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +10 -23
- package/dist/abis/bipoolmanager.d.ts +0 -15
- package/dist/abis/bipoolmanager.d.ts.map +0 -1
- package/dist/abis/bipoolmanager.js +0 -26
- package/dist/abis/bipoolmanager.js.map +0 -1
- package/dist/abis/broker.d.ts +0 -2
- package/dist/abis/broker.d.ts.map +0 -1
- package/dist/abis/broker.js +0 -15
- package/dist/abis/broker.js.map +0 -1
- package/dist/abis/erc20.d.ts +0 -2
- package/dist/abis/erc20.d.ts.map +0 -1
- package/dist/abis/erc20.js.map +0 -1
- package/dist/abis/index.d.ts +0 -6
- package/dist/abis/index.d.ts.map +0 -1
- package/dist/abis/index.js.map +0 -1
- package/dist/abis/pricingmodule.d.ts +0 -2
- package/dist/abis/pricingmodule.d.ts.map +0 -1
- package/dist/abis/pricingmodule.js +0 -5
- package/dist/abis/pricingmodule.js.map +0 -1
- package/dist/abis/reserve.d.ts +0 -2
- package/dist/abis/reserve.d.ts.map +0 -1
- package/dist/abis/reserve.js +0 -9
- package/dist/abis/reserve.js.map +0 -1
- package/dist/abis/uniswapV3.d.ts +0 -4
- package/dist/abis/uniswapV3.d.ts.map +0 -1
- package/dist/abis/uniswapV3.js.map +0 -1
- package/dist/adapters/implementations/ethersAdapter.d.ts +0 -13
- package/dist/adapters/implementations/ethersAdapter.d.ts.map +0 -1
- package/dist/adapters/implementations/ethersAdapter.js +0 -92
- package/dist/adapters/implementations/ethersAdapter.js.map +0 -1
- package/dist/adapters/implementations/ethersV5Adapter.d.ts +0 -13
- package/dist/adapters/implementations/ethersV5Adapter.d.ts.map +0 -1
- package/dist/adapters/implementations/ethersV5Adapter.js +0 -92
- package/dist/adapters/implementations/ethersV5Adapter.js.map +0 -1
- package/dist/adapters/implementations/viemAdapter.d.ts +0 -18
- package/dist/adapters/implementations/viemAdapter.d.ts.map +0 -1
- package/dist/adapters/implementations/viemAdapter.js +0 -126
- package/dist/adapters/implementations/viemAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -5
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -10
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/proxies/ethersAdapterProxy.d.ts +0 -26
- package/dist/adapters/proxies/ethersAdapterProxy.d.ts.map +0 -1
- package/dist/adapters/proxies/ethersAdapterProxy.js +0 -78
- package/dist/adapters/proxies/ethersAdapterProxy.js.map +0 -1
- package/dist/adapters/proxies/ethersV5AdapterProxy.d.ts +0 -26
- package/dist/adapters/proxies/ethersV5AdapterProxy.d.ts.map +0 -1
- package/dist/adapters/proxies/ethersV5AdapterProxy.js +0 -78
- package/dist/adapters/proxies/ethersV5AdapterProxy.js.map +0 -1
- package/dist/adapters/proxies/viemAdapterProxy.d.ts +0 -29
- package/dist/adapters/proxies/viemAdapterProxy.d.ts.map +0 -1
- package/dist/adapters/proxies/viemAdapterProxy.js +0 -78
- package/dist/adapters/proxies/viemAdapterProxy.js.map +0 -1
- package/dist/constants/aaveConfig.d.ts.map +0 -1
- package/dist/constants/aaveConfig.js.map +0 -1
- package/dist/constants/addresses.d.ts.map +0 -1
- package/dist/constants/addresses.js +0 -61
- package/dist/constants/addresses.js.map +0 -1
- package/dist/constants/chainId.d.ts +0 -5
- package/dist/constants/chainId.d.ts.map +0 -1
- package/dist/constants/chainId.js.map +0 -1
- package/dist/constants/contractNames.d.ts.map +0 -1
- package/dist/constants/contractNames.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/constants/mentoAddresses.d.ts.map +0 -1
- package/dist/constants/mentoAddresses.js.map +0 -1
- package/dist/constants/proposalState.d.ts +0 -11
- package/dist/constants/proposalState.d.ts.map +0 -1
- package/dist/constants/proposalState.js +0 -15
- package/dist/constants/proposalState.js.map +0 -1
- package/dist/constants/protocolAddresses.d.ts.map +0 -1
- package/dist/constants/protocolAddresses.js.map +0 -1
- package/dist/constants/stableTokenMetadata.d.ts +0 -12
- package/dist/constants/stableTokenMetadata.d.ts.map +0 -1
- package/dist/constants/stableTokenMetadata.js +0 -14
- package/dist/constants/stableTokenMetadata.js.map +0 -1
- package/dist/services/collateralAssetService.d.ts +0 -8
- package/dist/services/collateralAssetService.d.ts.map +0 -1
- package/dist/services/collateralAssetService.js +0 -47
- package/dist/services/collateralAssetService.js.map +0 -1
- package/dist/services/stableTokenService.d.ts +0 -9
- package/dist/services/stableTokenService.d.ts.map +0 -1
- package/dist/services/stableTokenService.js +0 -40
- package/dist/services/stableTokenService.js.map +0 -1
- package/dist/services/supply/ISupplyCalculator.d.ts.map +0 -1
- package/dist/services/supply/ISupplyCalculator.js.map +0 -1
- package/dist/services/supply/aaveSupplyCalculator.d.ts.map +0 -1
- package/dist/services/supply/aaveSupplyCalculator.js.map +0 -1
- package/dist/services/supply/calculatorFactory.d.ts +0 -8
- package/dist/services/supply/calculatorFactory.d.ts.map +0 -1
- package/dist/services/supply/calculatorFactory.js.map +0 -1
- package/dist/services/supply/defaultCalculatorFactory.d.ts +0 -9
- package/dist/services/supply/defaultCalculatorFactory.d.ts.map +0 -1
- package/dist/services/supply/defaultCalculatorFactory.js.map +0 -1
- package/dist/services/supply/index.d.ts.map +0 -1
- package/dist/services/supply/index.js.map +0 -1
- package/dist/services/supply/multisigSupplyCalculator.d.ts +0 -9
- package/dist/services/supply/multisigSupplyCalculator.d.ts.map +0 -1
- package/dist/services/supply/multisigSupplyCalculator.js +0 -21
- package/dist/services/supply/multisigSupplyCalculator.js.map +0 -1
- package/dist/services/supply/uniV3SupplyCalculator.d.ts.map +0 -1
- package/dist/services/supply/uniV3SupplyCalculator.js.map +0 -1
- package/dist/services/supplyAdjustmentService.d.ts.map +0 -1
- package/dist/services/supplyAdjustmentService.js.map +0 -1
- package/dist/services/swapService.d.ts +0 -70
- package/dist/services/swapService.d.ts.map +0 -1
- package/dist/services/swapService.js +0 -134
- package/dist/services/swapService.js.map +0 -1
- package/dist/services/tokenMetadataService.d.ts +0 -8
- package/dist/services/tokenMetadataService.d.ts.map +0 -1
- package/dist/services/tokenMetadataService.js +0 -44
- package/dist/services/tokenMetadataService.js.map +0 -1
- package/dist/types/contractAddresses.d.ts +0 -23
- package/dist/types/contractAddresses.d.ts.map +0 -1
- package/dist/types/contractAddresses.js.map +0 -1
- package/dist/types/exchange.d.ts +0 -6
- package/dist/types/exchange.d.ts.map +0 -1
- package/dist/types/exchange.js +0 -3
- package/dist/types/exchange.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/provider.d.ts +0 -29
- package/dist/types/provider.d.ts.map +0 -1
- package/dist/types/provider.js.map +0 -1
- package/dist/types/token.d.ts.map +0 -1
- /package/dist/{constants → core/constants}/aaveConfig.d.ts +0 -0
- /package/dist/{constants → core/constants}/aaveConfig.js +0 -0
- /package/dist/{constants → core/constants}/contractNames.d.ts +0 -0
- /package/dist/{constants → core/constants}/contractNames.js +0 -0
- /package/dist/{constants → core/constants}/protocolAddresses.d.ts +0 -0
- /package/dist/{constants → core/constants}/protocolAddresses.js +0 -0
- /package/dist/{types → core/types}/contractAddresses.js +0 -0
- /package/dist/{types → core/types}/token.js +0 -0
- /package/dist/services/{supply → tokens/supply}/ISupplyCalculator.d.ts +0 -0
- /package/dist/services/{supply → tokens/supply}/ISupplyCalculator.js +0 -0
- /package/dist/services/{supply → tokens/supply}/calculatorFactory.js +0 -0
- /package/dist/services/{supply → tokens/supply}/index.d.ts +0 -0
- /package/dist/services/{supply → tokens/supply}/index.js +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PoolService = void 0;
|
|
4
|
+
const constants_1 = require("../../core/constants");
|
|
5
|
+
const types_1 = require("../../core/types");
|
|
6
|
+
const abis_1 = require("../../core/abis");
|
|
7
|
+
const sortUtils_1 = require("../../utils/sortUtils");
|
|
8
|
+
// TODO: Update to enrich pools with more data as needed. Use optional flag to include more data.
|
|
9
|
+
/**
|
|
10
|
+
* Service for discovering liquidity pools in the Mento protocol.
|
|
11
|
+
* Aggregates pools from multiple factory contracts (FPMM and VirtualPool).
|
|
12
|
+
*/
|
|
13
|
+
class PoolService {
|
|
14
|
+
constructor(publicClient, chainId) {
|
|
15
|
+
this.publicClient = publicClient;
|
|
16
|
+
this.chainId = chainId;
|
|
17
|
+
this.poolsCache = null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Fetches all pools available in the protocol from both FPMM and Virtual pool factories
|
|
21
|
+
* Results are cached in memory for the service instance lifetime
|
|
22
|
+
*
|
|
23
|
+
* @returns Array of all pools available in the protocol
|
|
24
|
+
* @throws {Error} If RPC call fails or pools are unavailable
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const pools = await poolService.getPools()
|
|
29
|
+
* console.log(`Found ${pools.length} pools`)
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
async getPools() {
|
|
33
|
+
if (this.poolsCache) {
|
|
34
|
+
return this.poolsCache;
|
|
35
|
+
}
|
|
36
|
+
// TODO: Update to use router.factoryRegistry.poolFactories()
|
|
37
|
+
// for dynamic factory discovery. For now we will use
|
|
38
|
+
// the hardcoded factory addresses for the chain for v1.
|
|
39
|
+
const pools = [];
|
|
40
|
+
const fpmmPools = await this.fetchFPMMPools();
|
|
41
|
+
pools.push(...fpmmPools);
|
|
42
|
+
const virtualPools = await this.fetchVirtualPools();
|
|
43
|
+
pools.push(...virtualPools);
|
|
44
|
+
this.poolsCache = pools;
|
|
45
|
+
return pools;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Fetches all FPMM pools from the FPMM Factory
|
|
49
|
+
*/
|
|
50
|
+
async fetchFPMMPools() {
|
|
51
|
+
const fpmmFactoryAddress = (0, constants_1.getContractAddress)(this.chainId, 'FPMMFactory');
|
|
52
|
+
if (!fpmmFactoryAddress) {
|
|
53
|
+
console.warn('FPMM Factory address not found for this chain');
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
// Get all deployed FPMM pool addresses
|
|
58
|
+
const poolAddresses = (await this.publicClient.readContract({
|
|
59
|
+
address: fpmmFactoryAddress,
|
|
60
|
+
abi: abis_1.FPMM_FACTORY_ABI,
|
|
61
|
+
functionName: 'deployedFPMMAddresses',
|
|
62
|
+
}));
|
|
63
|
+
if (poolAddresses.length === 0) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
const poolDataPromises = poolAddresses.map(async (poolAddress) => {
|
|
67
|
+
const [token0, token1] = await Promise.all([
|
|
68
|
+
this.publicClient.readContract({
|
|
69
|
+
address: poolAddress,
|
|
70
|
+
abi: abis_1.FPMM_ABI,
|
|
71
|
+
functionName: 'token0',
|
|
72
|
+
}),
|
|
73
|
+
this.publicClient.readContract({
|
|
74
|
+
address: poolAddress,
|
|
75
|
+
abi: abis_1.FPMM_ABI,
|
|
76
|
+
functionName: 'token1',
|
|
77
|
+
}),
|
|
78
|
+
]);
|
|
79
|
+
return {
|
|
80
|
+
factoryAddr: fpmmFactoryAddress,
|
|
81
|
+
poolAddr: poolAddress,
|
|
82
|
+
token0: token0,
|
|
83
|
+
token1: token1,
|
|
84
|
+
poolType: types_1.PoolType.FPMM,
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
return await Promise.all(poolDataPromises);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('Failed to fetch FPMM pools:', error);
|
|
91
|
+
throw new Error(`Failed to fetch FPMM pools: ${error.message}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Fetches all Virtual pools by discovering them from BiPoolManager exchanges.
|
|
96
|
+
* VirtualPoolFactory doesn't have an enumeration method,
|
|
97
|
+
* so we have to derive pools from BiPoolManager.
|
|
98
|
+
*/
|
|
99
|
+
async fetchVirtualPools() {
|
|
100
|
+
const virtualPoolFactoryAddress = (0, constants_1.getContractAddress)(this.chainId, 'VirtualPoolFactory');
|
|
101
|
+
const biPoolManagerAddress = (0, constants_1.getContractAddress)(this.chainId, 'BiPoolManager');
|
|
102
|
+
if (!virtualPoolFactoryAddress || !biPoolManagerAddress) {
|
|
103
|
+
console.warn('VirtualPoolFactory or BiPoolManager address not found for this chain');
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
// TODO: When new virtual pool factory is deployed
|
|
108
|
+
// we can simplify this by using VirtualPoolFactory.getAllPools() returns(address[])
|
|
109
|
+
// Get all exchanges from BiPoolManager
|
|
110
|
+
const exchangesData = (await this.publicClient.readContract({
|
|
111
|
+
address: biPoolManagerAddress,
|
|
112
|
+
abi: abis_1.BIPOOL_MANAGER_ABI,
|
|
113
|
+
functionName: 'getExchanges',
|
|
114
|
+
}));
|
|
115
|
+
if (exchangesData.length === 0) {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
// For each exchange, check if a virtual pool exists, and if so, return the pool address.
|
|
119
|
+
const poolPromises = exchangesData.map(async (exchange) => {
|
|
120
|
+
if (exchange.assets.length !== 2) {
|
|
121
|
+
console.warn(`Skipping invalid exchange ${exchange.exchangeId}: expected 2 assets`);
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const [token0, token1] = (0, sortUtils_1.sortTokenAddresses)(exchange.assets[0], exchange.assets[1]);
|
|
125
|
+
const poolAddress = (await this.publicClient.readContract({
|
|
126
|
+
address: virtualPoolFactoryAddress,
|
|
127
|
+
abi: abis_1.VIRTUAL_POOL_FACTORY_ABI,
|
|
128
|
+
functionName: 'getOrPrecomputeProxyAddress',
|
|
129
|
+
args: [token0, token1],
|
|
130
|
+
}));
|
|
131
|
+
const isDeployed = (await this.publicClient.readContract({
|
|
132
|
+
address: virtualPoolFactoryAddress,
|
|
133
|
+
abi: abis_1.VIRTUAL_POOL_FACTORY_ABI,
|
|
134
|
+
functionName: 'isPool',
|
|
135
|
+
args: [poolAddress],
|
|
136
|
+
}));
|
|
137
|
+
if (!isDeployed) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
factoryAddr: virtualPoolFactoryAddress,
|
|
142
|
+
poolAddr: poolAddress,
|
|
143
|
+
token0: token0,
|
|
144
|
+
token1: token1,
|
|
145
|
+
poolType: types_1.PoolType.Virtual,
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
const results = await Promise.all(poolPromises);
|
|
149
|
+
return results.filter((pool) => pool !== null);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error('Failed to fetch Virtual pools:', error);
|
|
153
|
+
throw new Error(`Failed to fetch Virtual pools: ${error.message}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.PoolService = PoolService;
|
|
158
|
+
//# sourceMappingURL=PoolService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PoolService.js","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/pools/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./PoolService"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/pools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Address, PublicClient } from 'viem';
|
|
2
|
+
import { RouteService } from '../routes';
|
|
3
|
+
import { Route } from '../../core/types';
|
|
4
|
+
/**
|
|
5
|
+
* Service for getting swap quotes from the Mento protocol.
|
|
6
|
+
* Calculates expected output amounts for trades without executing them.
|
|
7
|
+
*/
|
|
8
|
+
export declare class QuoteService {
|
|
9
|
+
private publicClient;
|
|
10
|
+
private chainId;
|
|
11
|
+
private routeService;
|
|
12
|
+
constructor(publicClient: PublicClient, chainId: number, routeService: RouteService);
|
|
13
|
+
/**
|
|
14
|
+
* Calculates the expected output amount for a swap between two tokens.
|
|
15
|
+
*
|
|
16
|
+
* @param tokenIn - The address of the input token
|
|
17
|
+
* @param tokenOut - The address of the output token
|
|
18
|
+
* @param amountIn - The amount of input tokens (in wei/smallest unit)
|
|
19
|
+
* @param route - Optional pre-fetched route. If not provided, the optimal route will be found automatically.
|
|
20
|
+
* @returns The expected output amount (in wei/smallest unit)
|
|
21
|
+
* @throws {RouteNotFoundError} If no route exists between the token pair
|
|
22
|
+
* @throws {Error} If the Router contract call fails
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const cUSD = '0x765DE816845861e75A25fCA122bb6898B8B1282a'
|
|
27
|
+
* const CELO = '0x471EcE3750Da237f93B8E339c536989b8978a438'
|
|
28
|
+
*
|
|
29
|
+
* // Calculate output for 100 cUSD
|
|
30
|
+
* const amountIn = BigInt(100) * BigInt(10 ** 18) // 100 cUSD in wei
|
|
31
|
+
* const expectedOut = await quoteService.getAmountOut(cUSD, CELO, amountIn)
|
|
32
|
+
* console.log(`Expected CELO output: ${expectedOut}`)
|
|
33
|
+
*
|
|
34
|
+
* // Or provide a pre-fetched route for better performance
|
|
35
|
+
* const route = await routeService.findRoute(cUSD, CELO)
|
|
36
|
+
* const expectedOut2 = await quoteService.getAmountOut(cUSD, CELO, amountIn, route)
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
getAmountOut(tokenIn: Address, tokenOut: Address, amountIn: bigint, route?: Route): Promise<bigint>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=QuoteService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuoteService.d.ts","sourceRoot":"","sources":["../../../src/services/quotes/QuoteService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAKxC;;;GAGG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;gBAFZ,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY;IAGpC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;CAmB1G"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuoteService = void 0;
|
|
4
|
+
const abis_1 = require("../../core/abis");
|
|
5
|
+
const constants_1 = require("../../core/constants");
|
|
6
|
+
const pathEncoder_1 = require("../../utils/pathEncoder");
|
|
7
|
+
/**
|
|
8
|
+
* Service for getting swap quotes from the Mento protocol.
|
|
9
|
+
* Calculates expected output amounts for trades without executing them.
|
|
10
|
+
*/
|
|
11
|
+
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
|
|
21
|
+
* @param tokenOut - The address of the output token
|
|
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
|
+
* const cUSD = '0x765DE816845861e75A25fCA122bb6898B8B1282a'
|
|
31
|
+
* const CELO = '0x471EcE3750Da237f93B8E339c536989b8978a438'
|
|
32
|
+
*
|
|
33
|
+
* // Calculate output for 100 cUSD
|
|
34
|
+
* const amountIn = BigInt(100) * BigInt(10 ** 18) // 100 cUSD in wei
|
|
35
|
+
* const expectedOut = await quoteService.getAmountOut(cUSD, CELO, amountIn)
|
|
36
|
+
* console.log(`Expected CELO output: ${expectedOut}`)
|
|
37
|
+
*
|
|
38
|
+
* // Or provide a pre-fetched route for better performance
|
|
39
|
+
* const route = await routeService.findRoute(cUSD, CELO)
|
|
40
|
+
* const expectedOut2 = await quoteService.getAmountOut(cUSD, CELO, amountIn, route)
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
async getAmountOut(tokenIn, tokenOut, amountIn, route) {
|
|
44
|
+
// If the consumer does not provide a route then we find the best route.
|
|
45
|
+
if (!route) {
|
|
46
|
+
route = await this.routeService.findRoute(tokenIn, tokenOut);
|
|
47
|
+
}
|
|
48
|
+
// Convert route.path to Router contract's Route[] format
|
|
49
|
+
const routerRoutes = (0, pathEncoder_1.encodeRoutePath)(route.path, tokenIn, tokenOut);
|
|
50
|
+
const routerAddress = (0, constants_1.getContractAddress)(this.chainId, 'Router');
|
|
51
|
+
const amounts = (await this.publicClient.readContract({
|
|
52
|
+
address: routerAddress,
|
|
53
|
+
abi: abis_1.ROUTER_ABI,
|
|
54
|
+
functionName: 'getAmountsOut',
|
|
55
|
+
args: [amountIn, routerRoutes],
|
|
56
|
+
}));
|
|
57
|
+
return amounts[amounts.length - 1];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.QuoteService = QuoteService;
|
|
61
|
+
//# sourceMappingURL=QuoteService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuoteService.js","sourceRoot":"","sources":["../../../src/services/quotes/QuoteService.ts"],"names":[],"mappings":";;;AAGA,0CAA4C;AAC5C,oDAAkE;AAClE,yDAAyD;AAEzD;;;GAGG;AACH,MAAa,YAAY;IACvB,YACU,YAA0B,EAC1B,OAAe,EACf,YAA0B;QAF1B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,YAAO,GAAP,OAAO,CAAQ;QACf,iBAAY,GAAZ,YAAY,CAAc;IACjC,CAAC;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,KAAK,CAAC,YAAY,CAAC,OAAgB,EAAE,QAAiB,EAAE,QAAgB,EAAE,KAAa;QACrF,wEAAwE;QACxE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC9D,CAAC;QAED,yDAAyD;QACzD,MAAM,YAAY,GAAG,IAAA,6BAAe,EAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QACnE,MAAM,aAAa,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,OAAkB,EAAE,QAAQ,CAAC,CAAA;QAE3E,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACpD,OAAO,EAAE,aAA8B;YACvC,GAAG,EAAE,iBAAU;YACf,YAAY,EAAE,eAAe;YAC7B,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;SAC/B,CAAC,CAAa,CAAA;QAEf,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACpC,CAAC;CACF;AApDD,oCAoDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/quotes/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./QuoteService"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/quotes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { PoolService } from '../pools';
|
|
2
|
+
import { Route, RouteWithCost } from '../../core/types';
|
|
3
|
+
import { PublicClient } from 'viem';
|
|
4
|
+
export interface RouteOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Whether to use pre-generated cached routes (default: true)
|
|
7
|
+
*/
|
|
8
|
+
cached?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Whether to return all possible routes or just the optimal one per pair (default: false)
|
|
11
|
+
*/
|
|
12
|
+
returnAllRoutes?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Service for discovering and managing trading routes in the Mento protocol.
|
|
16
|
+
* Handles route discovery for both direct (single-hop) and multi-hop trading paths.
|
|
17
|
+
*
|
|
18
|
+
* Routes are identified by their token pair and include the path of pools
|
|
19
|
+
* needed to execute the trade. Multi-hop routes (up to 2 hops) are automatically
|
|
20
|
+
* discovered when no direct route exists between two tokens.
|
|
21
|
+
*/
|
|
22
|
+
export declare class RouteService {
|
|
23
|
+
private publicClient;
|
|
24
|
+
private chainId;
|
|
25
|
+
private poolService;
|
|
26
|
+
private symbolCache;
|
|
27
|
+
constructor(publicClient: PublicClient, chainId: number, poolService: PoolService);
|
|
28
|
+
/**
|
|
29
|
+
* Generates all direct (single-hop) routes from available pools
|
|
30
|
+
* Routes are deduplicated and assets are sorted alphabetically by symbol
|
|
31
|
+
*
|
|
32
|
+
* @returns Array of direct routes with single-hop paths
|
|
33
|
+
* @throws {Error} If RPC calls fail
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const directRoutes = await routeService.getDirectRoutes()
|
|
38
|
+
* console.log(`Found ${directRoutes.length} direct routes`)
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
getDirectRoutes(): Promise<Route[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Discovers all tradable routes including multi-hop routes (up to 2 hops)
|
|
44
|
+
* Uses cached data by default for instant results, or generates fresh from blockchain
|
|
45
|
+
*
|
|
46
|
+
* @param options - Configuration options
|
|
47
|
+
* @param options.cached - Whether to use pre-generated cached routes (default: true)
|
|
48
|
+
* @param options.returnAllRoutes - Whether to return all possible routes or just the optimal one per pair (default: false)
|
|
49
|
+
* @returns Array of all tradable routes (direct + multi-hop routes)
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* // Fast: use pre-generated cache
|
|
54
|
+
* const cachedRoutes = await routeService.getRoutes({ cached: true })
|
|
55
|
+
*
|
|
56
|
+
* // Slower but fresh: generate from blockchain
|
|
57
|
+
* const freshRoutes = await routeService.getRoutes({ cached: false })
|
|
58
|
+
*
|
|
59
|
+
* // Get all route variants (useful for cache generation)
|
|
60
|
+
* const allRoutes = await routeService.getRoutes({ cached: false, returnAllRoutes: true })
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
getRoutes(options?: RouteOptions): Promise<readonly (Route | RouteWithCost)[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Looks up the tradable route between two tokens (direct or multi-hop)
|
|
66
|
+
*
|
|
67
|
+
* @param tokenIn - Input token address (direction matters for routing)
|
|
68
|
+
* @param tokenOut - Output token address (direction matters for routing)
|
|
69
|
+
* @param options - Optional configuration (e.g., cached)
|
|
70
|
+
* @returns The optimal tradable route connecting the two tokens
|
|
71
|
+
* @throws {RouteNotFoundError} If no route exists between the token pair
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const cUSD = '0x765DE816845861e75A25fCA122bb6898B8B1282a'
|
|
76
|
+
* const cBRL = '0xE4D5...'
|
|
77
|
+
* const route = await routeService.findRoute(cUSD, cBRL)
|
|
78
|
+
*
|
|
79
|
+
* if (route.path.length === 1) {
|
|
80
|
+
* console.log('Direct route available')
|
|
81
|
+
* } else {
|
|
82
|
+
* console.log('Two-hop route:', route.path)
|
|
83
|
+
* }
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
findRoute(tokenIn: string, tokenOut: string, options?: {
|
|
87
|
+
cached?: boolean;
|
|
88
|
+
}): Promise<Route>;
|
|
89
|
+
/**
|
|
90
|
+
* Generate fresh tradable routes from blockchain data
|
|
91
|
+
* @param returnAllRoutes - Whether to return all routes or just optimal ones per pair
|
|
92
|
+
* @private
|
|
93
|
+
*/
|
|
94
|
+
private generateFreshRoutes;
|
|
95
|
+
/**
|
|
96
|
+
* Load cached tradable routes for current chain
|
|
97
|
+
* @private
|
|
98
|
+
*/
|
|
99
|
+
private loadCachedRoutes;
|
|
100
|
+
/**
|
|
101
|
+
* Helper: Fetch token symbol from on-chain
|
|
102
|
+
* Results are cached to avoid redundant RPC calls
|
|
103
|
+
* Falls back to address if symbol fetch fails
|
|
104
|
+
*
|
|
105
|
+
* @private
|
|
106
|
+
*/
|
|
107
|
+
private fetchTokenSymbol;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=RouteService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouteService.d.ts","sourceRoot":"","sources":["../../../src/services/routes/RouteService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGtC,OAAO,EAAE,KAAK,EAAiB,aAAa,EAAS,MAAM,kBAAkB,CAAA;AAG7E,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED;;;;;;;GAOG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,OAAO;IAAU,OAAO,CAAC,WAAW;IAF5F,OAAO,CAAC,WAAW,CAAiC;gBAEhC,YAAY,EAAE,YAAY,EAAU,OAAO,EAAE,MAAM,EAAU,WAAW,EAAE,WAAW;IAEzG;;;;;;;;;;;;OAYG;IACG,eAAe,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAuDzC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC;IAoBpF;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAuBlG;;;;OAIG;YACW,mBAAmB;IAoBjC;;;OAGG;YACW,gBAAgB;IAM9B;;;;;;OAMG;YACW,gBAAgB;CAyB/B"}
|