@mento-protocol/mento-sdk 3.0.0-beta.3 → 3.0.0-beta.30
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 +132 -275
- package/dist/cache/routes.d.ts +13 -0
- package/dist/cache/routes.d.ts.map +1 -0
- package/dist/cache/routes.js +11483 -0
- package/dist/cache/routes.js.map +1 -0
- package/dist/cache/tokens.d.ts +67 -0
- package/dist/cache/tokens.d.ts.map +1 -0
- package/dist/cache/tokens.js +379 -0
- package/dist/cache/tokens.js.map +1 -0
- package/dist/core/abis/activePool.d.ts +2 -0
- package/dist/core/abis/activePool.d.ts.map +1 -0
- package/dist/core/abis/activePool.js +14 -0
- package/dist/core/abis/activePool.js.map +1 -0
- package/dist/core/abis/addressesRegistry.d.ts +2 -0
- package/dist/core/abis/addressesRegistry.d.ts.map +1 -0
- package/dist/core/abis/addressesRegistry.js +26 -0
- package/dist/core/abis/addressesRegistry.js.map +1 -0
- package/dist/core/abis/borrowerOperations.d.ts +9 -0
- package/dist/core/abis/borrowerOperations.d.ts.map +1 -0
- package/dist/core/abis/borrowerOperations.js +89 -0
- package/dist/core/abis/borrowerOperations.js.map +1 -0
- package/dist/core/abis/breakerbox.d.ts +13 -0
- package/dist/core/abis/breakerbox.d.ts.map +1 -0
- package/dist/core/abis/breakerbox.js +8 -0
- package/dist/core/abis/breakerbox.js.map +1 -0
- package/dist/core/abis/erc20.d.ts +7 -0
- package/dist/core/abis/erc20.d.ts.map +1 -1
- package/dist/core/abis/erc20.js +7 -0
- package/dist/core/abis/erc20.js.map +1 -1
- package/dist/core/abis/fpmm.d.ts +236 -0
- package/dist/core/abis/fpmm.d.ts.map +1 -1
- package/dist/core/abis/fpmm.js +38 -0
- package/dist/core/abis/fpmm.js.map +1 -1
- package/dist/core/abis/fpmmFactory.d.ts +64 -0
- package/dist/core/abis/fpmmFactory.d.ts.map +1 -1
- package/dist/core/abis/fpmmFactory.js +17 -0
- package/dist/core/abis/fpmmFactory.js.map +1 -1
- package/dist/core/abis/hintHelpers.d.ts +2 -0
- package/dist/core/abis/hintHelpers.d.ts.map +1 -0
- package/dist/core/abis/hintHelpers.js +14 -0
- package/dist/core/abis/hintHelpers.js.map +1 -0
- package/dist/core/abis/index.d.ts +12 -1
- package/dist/core/abis/index.d.ts.map +1 -1
- package/dist/core/abis/index.js +12 -1
- package/dist/core/abis/index.js.map +1 -1
- package/dist/core/abis/multiTroveGetter.d.ts +8 -0
- package/dist/core/abis/multiTroveGetter.d.ts.map +1 -0
- package/dist/core/abis/multiTroveGetter.js +15 -0
- package/dist/core/abis/multiTroveGetter.js.map +1 -0
- package/dist/core/abis/priceFeed.d.ts +7 -0
- package/dist/core/abis/priceFeed.d.ts.map +1 -0
- package/dist/core/abis/priceFeed.js +16 -0
- package/dist/core/abis/priceFeed.js.map +1 -0
- package/dist/core/abis/router.d.ts +520 -1
- package/dist/core/abis/router.d.ts.map +1 -1
- package/dist/core/abis/router.js +35 -0
- package/dist/core/abis/router.js.map +1 -1
- package/dist/core/abis/sortedTroves.d.ts +2 -0
- package/dist/core/abis/sortedTroves.d.ts.map +1 -0
- package/dist/core/abis/sortedTroves.js +15 -0
- package/dist/core/abis/sortedTroves.js.map +1 -0
- package/dist/core/abis/systemParams.d.ts +2 -0
- package/dist/core/abis/systemParams.d.ts.map +1 -0
- package/dist/core/abis/systemParams.js +14 -0
- package/dist/core/abis/systemParams.js.map +1 -0
- package/dist/core/abis/troveManager.d.ts +2 -0
- package/dist/core/abis/troveManager.d.ts.map +1 -0
- package/dist/core/abis/troveManager.js +27 -0
- package/dist/core/abis/troveManager.js.map +1 -0
- package/dist/core/abis/troveNFT.d.ts +2 -0
- package/dist/core/abis/troveNFT.d.ts.map +1 -0
- package/dist/core/abis/troveNFT.js +9 -0
- package/dist/core/abis/troveNFT.js.map +1 -0
- package/dist/core/abis/virtualPool.d.ts +40 -0
- package/dist/core/abis/virtualPool.d.ts.map +1 -1
- package/dist/core/abis/virtualPool.js +6 -1
- package/dist/core/abis/virtualPool.js.map +1 -1
- package/dist/core/abis/virtualPoolFactory.d.ts +32 -0
- package/dist/core/abis/virtualPoolFactory.d.ts.map +1 -1
- package/dist/core/abis/virtualPoolFactory.js +8 -0
- package/dist/core/abis/virtualPoolFactory.js.map +1 -1
- package/dist/core/constants/addresses.d.ts.map +1 -1
- package/dist/core/constants/addresses.js +14 -4
- package/dist/core/constants/addresses.js.map +1 -1
- package/dist/core/constants/borrowConstants.d.ts +10 -0
- package/dist/core/constants/borrowConstants.d.ts.map +1 -0
- package/dist/core/constants/borrowConstants.js +16 -0
- package/dist/core/constants/borrowConstants.js.map +1 -0
- package/dist/core/constants/borrowRegistries.d.ts +7 -0
- package/dist/core/constants/borrowRegistries.d.ts.map +1 -0
- package/dist/core/constants/borrowRegistries.js +31 -0
- package/dist/core/constants/borrowRegistries.js.map +1 -0
- package/dist/core/constants/index.d.ts +2 -3
- package/dist/core/constants/index.d.ts.map +1 -1
- package/dist/core/constants/index.js +2 -3
- package/dist/core/constants/index.js.map +1 -1
- package/dist/core/errors/index.d.ts +1 -0
- package/dist/core/errors/index.d.ts.map +1 -1
- package/dist/core/errors/index.js +1 -0
- package/dist/core/errors/index.js.map +1 -1
- package/dist/core/errors/oracle.d.ts +9 -0
- package/dist/core/errors/oracle.d.ts.map +1 -0
- package/dist/core/errors/oracle.js +15 -0
- package/dist/core/errors/oracle.js.map +1 -0
- package/dist/core/errors/router.d.ts +6 -0
- package/dist/core/errors/router.d.ts.map +1 -1
- package/dist/core/errors/router.js +11 -1
- package/dist/core/errors/router.js.map +1 -1
- package/dist/core/types/borrow.d.ts +87 -0
- package/dist/core/types/borrow.d.ts.map +1 -0
- package/dist/{services/tokens/supply/ISupplyCalculator.js → core/types/borrow.js} +1 -1
- package/dist/core/types/borrow.js.map +1 -0
- package/dist/core/types/contractAddresses.d.ts +2 -0
- package/dist/core/types/contractAddresses.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +5 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +5 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/liquidity.d.ts +117 -0
- package/dist/core/types/liquidity.d.ts.map +1 -0
- package/dist/{services/tokens/supply/calculatorFactory.js → core/types/liquidity.js} +1 -1
- package/dist/core/types/liquidity.js.map +1 -0
- package/dist/core/types/pool.d.ts +110 -0
- package/dist/core/types/pool.d.ts.map +1 -1
- package/dist/core/types/provider.d.ts.map +1 -1
- package/dist/core/types/provider.js +0 -1
- package/dist/core/types/provider.js.map +1 -1
- package/dist/core/types/route.d.ts +3 -3
- package/dist/core/types/route.d.ts.map +1 -1
- package/dist/core/types/token.d.ts +13 -17
- package/dist/core/types/token.d.ts.map +1 -1
- package/dist/core/types/tradingLimits.d.ts +91 -0
- package/dist/core/types/tradingLimits.d.ts.map +1 -0
- package/dist/core/types/tradingLimits.js +3 -0
- package/dist/core/types/tradingLimits.js.map +1 -0
- package/dist/core/types/tradingMode.d.ts +24 -0
- package/dist/core/types/tradingMode.d.ts.map +1 -0
- package/dist/core/types/tradingMode.js +31 -0
- package/dist/core/types/tradingMode.js.map +1 -0
- package/dist/core/types/transaction.d.ts +45 -0
- package/dist/core/types/transaction.d.ts.map +1 -0
- package/dist/core/types/transaction.js +3 -0
- package/dist/core/types/transaction.js.map +1 -0
- package/dist/index.d.ts +29 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -5
- package/dist/index.js.map +1 -1
- package/dist/services/borrow/BorrowService.d.ts +54 -0
- package/dist/services/borrow/BorrowService.d.ts.map +1 -0
- package/dist/services/borrow/BorrowService.js +129 -0
- package/dist/services/borrow/BorrowService.js.map +1 -0
- package/dist/services/borrow/borrowHelpers.d.ts +4 -0
- package/dist/services/borrow/borrowHelpers.d.ts.map +1 -0
- package/dist/services/borrow/borrowHelpers.js +13 -0
- package/dist/services/borrow/borrowHelpers.js.map +1 -0
- package/dist/services/borrow/borrowMath.d.ts +13 -0
- package/dist/services/borrow/borrowMath.d.ts.map +1 -0
- package/dist/services/borrow/borrowMath.js +129 -0
- package/dist/services/borrow/borrowMath.js.map +1 -0
- package/dist/services/borrow/index.d.ts +2 -0
- package/dist/services/borrow/index.d.ts.map +1 -0
- package/dist/services/{tokens/supply → borrow}/index.js +1 -6
- package/dist/services/borrow/index.js.map +1 -0
- package/dist/services/borrow/internal/borrowApprovalService.d.ts +14 -0
- package/dist/services/borrow/internal/borrowApprovalService.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowApprovalService.js +53 -0
- package/dist/services/borrow/internal/borrowApprovalService.js.map +1 -0
- package/dist/services/borrow/internal/borrowContextStore.d.ts +11 -0
- package/dist/services/borrow/internal/borrowContextStore.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowContextStore.js +40 -0
- package/dist/services/borrow/internal/borrowContextStore.js.map +1 -0
- package/dist/services/borrow/internal/borrowErc20.d.ts +5 -0
- package/dist/services/borrow/internal/borrowErc20.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowErc20.js +43 -0
- package/dist/services/borrow/internal/borrowErc20.js.map +1 -0
- package/dist/services/borrow/internal/borrowHints.d.ts +7 -0
- package/dist/services/borrow/internal/borrowHints.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowHints.js +31 -0
- package/dist/services/borrow/internal/borrowHints.js.map +1 -0
- package/dist/services/borrow/internal/borrowPositionParser.d.ts +4 -0
- package/dist/services/borrow/internal/borrowPositionParser.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowPositionParser.js +87 -0
- package/dist/services/borrow/internal/borrowPositionParser.js.map +1 -0
- package/dist/services/borrow/internal/borrowReadService.d.ts +28 -0
- package/dist/services/borrow/internal/borrowReadService.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowReadService.js +218 -0
- package/dist/services/borrow/internal/borrowReadService.js.map +1 -0
- package/dist/services/borrow/internal/borrowRegistryReader.d.ts +5 -0
- package/dist/services/borrow/internal/borrowRegistryReader.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowRegistryReader.js +96 -0
- package/dist/services/borrow/internal/borrowRegistryReader.js.map +1 -0
- package/dist/services/borrow/internal/borrowTransactionService.d.ts +23 -0
- package/dist/services/borrow/internal/borrowTransactionService.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowTransactionService.js +276 -0
- package/dist/services/borrow/internal/borrowTransactionService.js.map +1 -0
- package/dist/services/borrow/internal/borrowTypes.d.ts +15 -0
- package/dist/services/borrow/internal/borrowTypes.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowTypes.js +3 -0
- package/dist/services/borrow/internal/borrowTypes.js.map +1 -0
- package/dist/services/borrow/internal/borrowValidation.d.ts +13 -0
- package/dist/services/borrow/internal/borrowValidation.d.ts.map +1 -0
- package/dist/services/borrow/internal/borrowValidation.js +96 -0
- package/dist/services/borrow/internal/borrowValidation.js.map +1 -0
- package/dist/services/index.d.ts +2 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/liquidity/LiquidityService.d.ts +154 -0
- package/dist/services/liquidity/LiquidityService.d.ts.map +1 -0
- package/dist/services/liquidity/LiquidityService.js +184 -0
- package/dist/services/liquidity/LiquidityService.js.map +1 -0
- package/dist/services/liquidity/basicLiquidity.d.ts +11 -0
- package/dist/services/liquidity/basicLiquidity.d.ts.map +1 -0
- package/dist/services/liquidity/basicLiquidity.js +172 -0
- package/dist/services/liquidity/basicLiquidity.js.map +1 -0
- package/dist/services/liquidity/index.d.ts +2 -0
- package/dist/services/liquidity/index.d.ts.map +1 -0
- package/dist/services/liquidity/index.js +18 -0
- package/dist/services/liquidity/index.js.map +1 -0
- package/dist/services/liquidity/liquidityHelpers.d.ts +13 -0
- package/dist/services/liquidity/liquidityHelpers.d.ts.map +1 -0
- package/dist/services/liquidity/liquidityHelpers.js +74 -0
- package/dist/services/liquidity/liquidityHelpers.js.map +1 -0
- package/dist/services/liquidity/zapHelpers.d.ts +66 -0
- package/dist/services/liquidity/zapHelpers.d.ts.map +1 -0
- package/dist/services/liquidity/zapHelpers.js +133 -0
- package/dist/services/liquidity/zapHelpers.js.map +1 -0
- package/dist/services/liquidity/zapIn.d.ts +17 -0
- package/dist/services/liquidity/zapIn.d.ts.map +1 -0
- package/dist/services/liquidity/zapIn.js +125 -0
- package/dist/services/liquidity/zapIn.js.map +1 -0
- package/dist/services/liquidity/zapOut.d.ts +17 -0
- package/dist/services/liquidity/zapOut.d.ts.map +1 -0
- package/dist/services/liquidity/zapOut.js +242 -0
- package/dist/services/liquidity/zapOut.js.map +1 -0
- package/dist/services/pools/PoolService.d.ts +35 -10
- package/dist/services/pools/PoolService.d.ts.map +1 -1
- package/dist/services/pools/PoolService.js +61 -109
- package/dist/services/pools/PoolService.js.map +1 -1
- package/dist/services/pools/poolDetails.d.ts +11 -0
- package/dist/services/pools/poolDetails.d.ts.map +1 -0
- package/dist/services/pools/poolDetails.js +151 -0
- package/dist/services/pools/poolDetails.js.map +1 -0
- package/dist/services/pools/poolDiscovery.d.ts +12 -0
- package/dist/services/pools/poolDiscovery.d.ts.map +1 -0
- package/dist/services/pools/poolDiscovery.js +114 -0
- package/dist/services/pools/poolDiscovery.js.map +1 -0
- package/dist/services/quotes/QuoteService.d.ts +21 -12
- package/dist/services/quotes/QuoteService.d.ts.map +1 -1
- package/dist/services/quotes/QuoteService.js +44 -17
- package/dist/services/quotes/QuoteService.js.map +1 -1
- package/dist/services/routes/RouteService.d.ts +3 -3
- package/dist/services/routes/RouteService.d.ts.map +1 -1
- package/dist/services/routes/RouteService.js +3 -5
- package/dist/services/routes/RouteService.js.map +1 -1
- package/dist/services/swap/SwapService.d.ts +23 -19
- package/dist/services/swap/SwapService.d.ts.map +1 -1
- package/dist/services/swap/SwapService.js +36 -15
- package/dist/services/swap/SwapService.js.map +1 -1
- package/dist/services/tokens/tokenService.d.ts +3 -3
- package/dist/services/tokens/tokenService.d.ts.map +1 -1
- package/dist/services/tokens/tokenService.js +26 -37
- package/dist/services/tokens/tokenService.js.map +1 -1
- package/dist/services/trading/TradingLimitsService.d.ts +38 -0
- package/dist/services/trading/TradingLimitsService.d.ts.map +1 -0
- package/dist/services/trading/TradingLimitsService.js +157 -0
- package/dist/services/trading/TradingLimitsService.js.map +1 -0
- package/dist/services/trading/TradingService.d.ts +110 -0
- package/dist/services/trading/TradingService.d.ts.map +1 -0
- package/dist/services/trading/TradingService.js +162 -0
- package/dist/services/trading/TradingService.js.map +1 -0
- package/dist/services/trading/index.d.ts +3 -0
- package/dist/services/trading/index.d.ts.map +1 -0
- package/dist/services/trading/index.js +19 -0
- package/dist/services/trading/index.js.map +1 -0
- package/dist/utils/costUtils.js +4 -4
- package/dist/utils/costUtils.js.map +1 -1
- package/dist/utils/deadline.d.ts +21 -0
- package/dist/utils/deadline.d.ts.map +1 -0
- package/dist/utils/deadline.js +26 -0
- package/dist/utils/deadline.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/pathEncoder.d.ts +8 -2
- package/dist/utils/pathEncoder.d.ts.map +1 -1
- package/dist/utils/pathEncoder.js +19 -3
- package/dist/utils/pathEncoder.js.map +1 -1
- package/dist/utils/rateFeed.d.ts +18 -0
- package/dist/utils/rateFeed.d.ts.map +1 -0
- package/dist/utils/rateFeed.js +27 -0
- package/dist/utils/rateFeed.js.map +1 -0
- package/dist/utils/routeUtils.d.ts +53 -53
- package/dist/utils/routeUtils.d.ts.map +1 -1
- package/dist/utils/routeUtils.js +41 -41
- package/dist/utils/routeUtils.js.map +1 -1
- package/dist/utils/routes.d.ts +2 -8
- package/dist/utils/routes.d.ts.map +1 -1
- package/dist/utils/routes.js +5 -46
- package/dist/utils/routes.js.map +1 -1
- package/dist/utils/tokens.d.ts +1 -62
- package/dist/utils/tokens.d.ts.map +1 -1
- package/dist/utils/tokens.js +10 -163
- package/dist/utils/tokens.js.map +1 -1
- package/dist/utils/tradingLimits.d.ts +41 -0
- package/dist/utils/tradingLimits.d.ts.map +1 -0
- package/dist/utils/tradingLimits.js +171 -0
- package/dist/utils/tradingLimits.js.map +1 -0
- package/dist/utils/validation.d.ts +19 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +34 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +6 -6
- package/dist/cache/routes.42220.d.ts +0 -3
- package/dist/cache/routes.42220.d.ts.map +0 -1
- package/dist/cache/routes.42220.js +0 -112
- package/dist/cache/routes.42220.js.map +0 -1
- package/dist/cache/tokens.11142220.d.ts +0 -3
- package/dist/cache/tokens.11142220.d.ts.map +0 -1
- package/dist/cache/tokens.11142220.js +0 -129
- package/dist/cache/tokens.11142220.js.map +0 -1
- package/dist/cache/tokens.42220.d.ts +0 -3
- package/dist/cache/tokens.42220.d.ts.map +0 -1
- package/dist/cache/tokens.42220.js +0 -129
- package/dist/cache/tokens.42220.js.map +0 -1
- package/dist/core/abis/uniswapV3.d.ts +0 -4
- package/dist/core/abis/uniswapV3.d.ts.map +0 -1
- package/dist/core/abis/uniswapV3.js +0 -16
- package/dist/core/abis/uniswapV3.js.map +0 -1
- package/dist/core/constants/aaveConfig.d.ts +0 -7
- package/dist/core/constants/aaveConfig.d.ts.map +0 -1
- package/dist/core/constants/aaveConfig.js +0 -22
- package/dist/core/constants/aaveConfig.js.map +0 -1
- package/dist/core/constants/mentoAddresses.d.ts +0 -7
- package/dist/core/constants/mentoAddresses.d.ts.map +0 -1
- package/dist/core/constants/mentoAddresses.js +0 -10
- package/dist/core/constants/mentoAddresses.js.map +0 -1
- package/dist/core/constants/protocolAddresses.d.ts +0 -5
- package/dist/core/constants/protocolAddresses.d.ts.map +0 -1
- package/dist/core/constants/protocolAddresses.js +0 -8
- package/dist/core/constants/protocolAddresses.js.map +0 -1
- package/dist/services/tokens/supply/ISupplyCalculator.d.ts +0 -14
- package/dist/services/tokens/supply/ISupplyCalculator.d.ts.map +0 -1
- package/dist/services/tokens/supply/ISupplyCalculator.js.map +0 -1
- package/dist/services/tokens/supply/aaveSupplyCalculator.d.ts +0 -22
- package/dist/services/tokens/supply/aaveSupplyCalculator.d.ts.map +0 -1
- package/dist/services/tokens/supply/aaveSupplyCalculator.js +0 -46
- package/dist/services/tokens/supply/aaveSupplyCalculator.js.map +0 -1
- package/dist/services/tokens/supply/calculatorFactory.d.ts +0 -8
- package/dist/services/tokens/supply/calculatorFactory.d.ts.map +0 -1
- package/dist/services/tokens/supply/calculatorFactory.js.map +0 -1
- package/dist/services/tokens/supply/defaultCalculatorFactory.d.ts +0 -9
- package/dist/services/tokens/supply/defaultCalculatorFactory.d.ts.map +0 -1
- package/dist/services/tokens/supply/defaultCalculatorFactory.js +0 -28
- package/dist/services/tokens/supply/defaultCalculatorFactory.js.map +0 -1
- package/dist/services/tokens/supply/index.d.ts +0 -7
- package/dist/services/tokens/supply/index.d.ts.map +0 -1
- package/dist/services/tokens/supply/index.js.map +0 -1
- package/dist/services/tokens/supply/multisigSupplyCalculator.d.ts +0 -9
- package/dist/services/tokens/supply/multisigSupplyCalculator.d.ts.map +0 -1
- package/dist/services/tokens/supply/multisigSupplyCalculator.js +0 -33
- package/dist/services/tokens/supply/multisigSupplyCalculator.js.map +0 -1
- package/dist/services/tokens/supply/uniV3SupplyCalculator.d.ts +0 -21
- package/dist/services/tokens/supply/uniV3SupplyCalculator.d.ts.map +0 -1
- package/dist/services/tokens/supply/uniV3SupplyCalculator.js +0 -238
- package/dist/services/tokens/supply/uniV3SupplyCalculator.js.map +0 -1
- package/dist/services/tokens/supplyAdjustmentService.d.ts +0 -19
- package/dist/services/tokens/supplyAdjustmentService.d.ts.map +0 -1
- package/dist/services/tokens/supplyAdjustmentService.js +0 -49
- package/dist/services/tokens/supplyAdjustmentService.js.map +0 -1
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildZapOutTransactionInternal = buildZapOutTransactionInternal;
|
|
4
|
+
exports.buildZapOutParamsInternal = buildZapOutParamsInternal;
|
|
5
|
+
exports.quoteZapOutInternal = quoteZapOutInternal;
|
|
6
|
+
const abis_1 = require("../../core/abis");
|
|
7
|
+
const constants_1 = require("../../core/constants");
|
|
8
|
+
const errors_1 = require("../../core/errors");
|
|
9
|
+
const validation_1 = require("../../utils/validation");
|
|
10
|
+
const pathEncoder_1 = require("../../utils/pathEncoder");
|
|
11
|
+
const liquidityHelpers_1 = require("./liquidityHelpers");
|
|
12
|
+
const zapHelpers_1 = require("./zapHelpers");
|
|
13
|
+
// ========== ZAP OUT OPERATIONS ==========
|
|
14
|
+
const INSUFFICIENT_LIQUIDITY_SELECTOR = '0xbb55fd27';
|
|
15
|
+
const MAX_ROUTE_CANDIDATES_PER_LEG = 8;
|
|
16
|
+
const MAX_ROUTE_COMBINATIONS = 48;
|
|
17
|
+
/**
|
|
18
|
+
* Builds a complete zap out transaction including approval if needed
|
|
19
|
+
*/
|
|
20
|
+
async function buildZapOutTransactionInternal(publicClient, chainId, poolService, routeService, poolAddress, tokenOut, liquidity, recipient, owner, options) {
|
|
21
|
+
(0, validation_1.validateAddress)(owner, 'owner');
|
|
22
|
+
// Build zap out params
|
|
23
|
+
let zapOut = await buildZapOutParamsInternal(publicClient, chainId, poolService, routeService, poolAddress, tokenOut, liquidity, recipient, options);
|
|
24
|
+
// Check LP token allowance
|
|
25
|
+
const poolAddr = poolAddress;
|
|
26
|
+
const ownerAddr = owner;
|
|
27
|
+
const currentAllowance = await (0, liquidityHelpers_1.getAllowance)(publicClient, poolAddr, ownerAddr, chainId);
|
|
28
|
+
// Build approval if needed
|
|
29
|
+
const approval = currentAllowance < liquidity
|
|
30
|
+
? { token: poolAddress, amount: liquidity, params: (0, liquidityHelpers_1.buildApprovalParams)(chainId, poolAddr, liquidity) }
|
|
31
|
+
: null;
|
|
32
|
+
// We can only preflight/simulate a real zap call when approval is already sufficient.
|
|
33
|
+
// Before approval, transferFrom in zapOut() would fail and make simulation meaningless.
|
|
34
|
+
if (currentAllowance >= liquidity) {
|
|
35
|
+
const routerAddress = (0, constants_1.getContractAddress)(chainId, 'Router');
|
|
36
|
+
try {
|
|
37
|
+
await simulateZapOut(publicClient, ownerAddr, routerAddress, zapOut.params.data);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
// Only attempt route fallback for the known liquidity failure.
|
|
41
|
+
if (!isInsufficientLiquidityError(error)) {
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
zapOut = await findViableZapOutDetails(publicClient, chainId, poolService, routeService, poolAddress, tokenOut, liquidity, ownerAddr, options);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { approval, zapOut };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Builds zap out transaction parameters without checking approval
|
|
51
|
+
*/
|
|
52
|
+
async function buildZapOutParamsInternal(publicClient, chainId, poolService, routeService, poolAddress, tokenOut, liquidity, recipient, options) {
|
|
53
|
+
(0, validation_1.validateAddress)(poolAddress, 'poolAddress');
|
|
54
|
+
(0, validation_1.validateAddress)(tokenOut, 'tokenOut');
|
|
55
|
+
(0, validation_1.validateAddress)(recipient, 'recipient');
|
|
56
|
+
// Get pool info
|
|
57
|
+
const { token0, token1, factoryAddr } = await (0, liquidityHelpers_1.getPoolInfo)(poolService, poolAddress);
|
|
58
|
+
// Find routes for swapping (from pool tokens to tokenOut)
|
|
59
|
+
const { routesA, routesB } = await (0, zapHelpers_1.findZapOutRoutes)(routeService, token0, token1, tokenOut);
|
|
60
|
+
return buildZapOutDetailsForRoutes(publicClient, chainId, poolAddress, tokenOut, liquidity, token0, token1, factoryAddr, routesA, routesB, options);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Quotes a zap out operation (read-only)
|
|
64
|
+
*/
|
|
65
|
+
async function quoteZapOutInternal(publicClient, chainId, poolService, routeService, poolAddress, tokenOut, liquidity, options) {
|
|
66
|
+
(0, validation_1.validateAddress)(poolAddress, 'poolAddress');
|
|
67
|
+
(0, validation_1.validateAddress)(tokenOut, 'tokenOut');
|
|
68
|
+
const { token0, token1, factoryAddr } = await (0, liquidityHelpers_1.getPoolInfo)(poolService, poolAddress);
|
|
69
|
+
// Find routes for swapping (from pool tokens to tokenOut)
|
|
70
|
+
const { routesA, routesB } = await (0, zapHelpers_1.findZapOutRoutes)(routeService, token0, token1, tokenOut);
|
|
71
|
+
const routerAddress = (0, constants_1.getContractAddress)(chainId, 'Router');
|
|
72
|
+
const [amountOutMinA, amountOutMinB, amountAMin, amountBMin] = (await publicClient.readContract({
|
|
73
|
+
address: routerAddress,
|
|
74
|
+
abi: abis_1.ROUTER_ABI,
|
|
75
|
+
functionName: 'generateZapOutParams',
|
|
76
|
+
args: [token0, token1, factoryAddr, liquidity, routesA, routesB],
|
|
77
|
+
}));
|
|
78
|
+
const finalAmountOutFromA = (0, liquidityHelpers_1.calculateMinAmount)(amountOutMinA, options.slippageTolerance);
|
|
79
|
+
const finalAmountOutFromB = (0, liquidityHelpers_1.calculateMinAmount)(amountOutMinB, options.slippageTolerance);
|
|
80
|
+
return {
|
|
81
|
+
amountOutFromA: finalAmountOutFromA,
|
|
82
|
+
amountOutFromB: finalAmountOutFromB,
|
|
83
|
+
amountAMin: (0, liquidityHelpers_1.calculateMinAmount)(amountAMin, options.slippageTolerance),
|
|
84
|
+
amountBMin: (0, liquidityHelpers_1.calculateMinAmount)(amountBMin, options.slippageTolerance),
|
|
85
|
+
estimatedMinTokenOut: finalAmountOutFromA + finalAmountOutFromB,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function buildZapOutDetailsForRoutes(publicClient, chainId, poolAddress, tokenOut, liquidity, token0, token1, factoryAddr, routesA, routesB, options) {
|
|
89
|
+
const routerAddress = (0, constants_1.getContractAddress)(chainId, 'Router');
|
|
90
|
+
const [amountOutMinA, amountOutMinB, amountAMin, amountBMin] = (await publicClient.readContract({
|
|
91
|
+
address: routerAddress,
|
|
92
|
+
abi: abis_1.ROUTER_ABI,
|
|
93
|
+
functionName: 'generateZapOutParams',
|
|
94
|
+
args: [token0, token1, factoryAddr, liquidity, routesA, routesB],
|
|
95
|
+
}));
|
|
96
|
+
const finalAmountAMin = (0, liquidityHelpers_1.calculateMinAmount)(amountAMin, options.slippageTolerance);
|
|
97
|
+
const finalAmountBMin = (0, liquidityHelpers_1.calculateMinAmount)(amountBMin, options.slippageTolerance);
|
|
98
|
+
const finalAmountOutMinA = (0, liquidityHelpers_1.calculateMinAmount)(amountOutMinA, options.slippageTolerance);
|
|
99
|
+
const finalAmountOutMinB = (0, liquidityHelpers_1.calculateMinAmount)(amountOutMinB, options.slippageTolerance);
|
|
100
|
+
const zapParams = {
|
|
101
|
+
tokenA: token0,
|
|
102
|
+
tokenB: token1,
|
|
103
|
+
factory: factoryAddr,
|
|
104
|
+
amountAMin: finalAmountAMin,
|
|
105
|
+
amountBMin: finalAmountBMin,
|
|
106
|
+
amountOutMinA: finalAmountOutMinA,
|
|
107
|
+
amountOutMinB: finalAmountOutMinB,
|
|
108
|
+
};
|
|
109
|
+
const data = (0, zapHelpers_1.encodeZapOutCall)(tokenOut, liquidity, zapParams, routesA, routesB);
|
|
110
|
+
return {
|
|
111
|
+
params: {
|
|
112
|
+
to: routerAddress,
|
|
113
|
+
data,
|
|
114
|
+
value: '0',
|
|
115
|
+
},
|
|
116
|
+
poolAddress,
|
|
117
|
+
tokenOut,
|
|
118
|
+
liquidity,
|
|
119
|
+
routesA,
|
|
120
|
+
routesB,
|
|
121
|
+
zapParams,
|
|
122
|
+
estimatedMinTokenOut: finalAmountOutMinA + finalAmountOutMinB,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
async function findViableZapOutDetails(publicClient, chainId, poolService, routeService, poolAddress, tokenOut, liquidity, owner, options) {
|
|
126
|
+
const { token0, token1, factoryAddr } = await (0, liquidityHelpers_1.getPoolInfo)(poolService, poolAddress);
|
|
127
|
+
const routerAddress = (0, constants_1.getContractAddress)(chainId, 'Router');
|
|
128
|
+
const routesAOptions = await getEncodedRouteCandidates(routeService, token0, tokenOut, poolAddress);
|
|
129
|
+
const routesBOptions = await getEncodedRouteCandidates(routeService, token1, tokenOut, poolAddress);
|
|
130
|
+
let best = null;
|
|
131
|
+
let combinationsTried = 0;
|
|
132
|
+
outer: for (const routesA of routesAOptions) {
|
|
133
|
+
for (const routesB of routesBOptions) {
|
|
134
|
+
if (combinationsTried >= MAX_ROUTE_COMBINATIONS) {
|
|
135
|
+
break outer;
|
|
136
|
+
}
|
|
137
|
+
combinationsTried += 1;
|
|
138
|
+
try {
|
|
139
|
+
const candidate = await buildZapOutDetailsForRoutes(publicClient, chainId, poolAddress, tokenOut, liquidity, token0, token1, factoryAddr, routesA, routesB, options);
|
|
140
|
+
await simulateZapOut(publicClient, owner, routerAddress, candidate.params.data);
|
|
141
|
+
if (!best || candidate.estimatedMinTokenOut > best.estimatedMinTokenOut) {
|
|
142
|
+
best = candidate;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Ignore non-viable route combination and continue searching.
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (!best) {
|
|
151
|
+
throw new errors_1.ZapOutRouteNotViableError(poolAddress, tokenOut);
|
|
152
|
+
}
|
|
153
|
+
return best;
|
|
154
|
+
}
|
|
155
|
+
async function getEncodedRouteCandidates(routeService, tokenIn, tokenOut, sourcePoolAddress) {
|
|
156
|
+
if (tokenIn.toLowerCase() === tokenOut.toLowerCase()) {
|
|
157
|
+
return [[]];
|
|
158
|
+
}
|
|
159
|
+
const rawCandidates = [];
|
|
160
|
+
// Include the SDK default first for consistency.
|
|
161
|
+
try {
|
|
162
|
+
rawCandidates.push(await routeService.findRoute(tokenIn, tokenOut));
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Continue; we'll try full route enumeration next.
|
|
166
|
+
}
|
|
167
|
+
// Build a broader candidate set for fallback route selection.
|
|
168
|
+
const allRoutes = await routeService.getRoutes({ cached: false, returnAllRoutes: true });
|
|
169
|
+
const pairCandidates = allRoutes.filter((route) => {
|
|
170
|
+
const a0 = route.tokens[0].address.toLowerCase();
|
|
171
|
+
const a1 = route.tokens[1].address.toLowerCase();
|
|
172
|
+
const t0 = tokenIn.toLowerCase();
|
|
173
|
+
const t1 = tokenOut.toLowerCase();
|
|
174
|
+
return (a0 === t0 && a1 === t1) || (a0 === t1 && a1 === t0);
|
|
175
|
+
});
|
|
176
|
+
rawCandidates.push(...pairCandidates);
|
|
177
|
+
if (rawCandidates.length === 0) {
|
|
178
|
+
throw new errors_1.RouteNotFoundError(tokenIn, tokenOut);
|
|
179
|
+
}
|
|
180
|
+
// Prioritize routes that avoid swapping through the same pool being zapped out.
|
|
181
|
+
rawCandidates.sort((a, b) => {
|
|
182
|
+
const aUsesSourcePool = routeUsesPool(a, sourcePoolAddress) ? 1 : 0;
|
|
183
|
+
const bUsesSourcePool = routeUsesPool(b, sourcePoolAddress) ? 1 : 0;
|
|
184
|
+
if (aUsesSourcePool !== bUsesSourcePool)
|
|
185
|
+
return aUsesSourcePool - bUsesSourcePool;
|
|
186
|
+
if (a.path.length !== b.path.length)
|
|
187
|
+
return a.path.length - b.path.length;
|
|
188
|
+
return 0;
|
|
189
|
+
});
|
|
190
|
+
const encodedRoutes = [];
|
|
191
|
+
const seen = new Set();
|
|
192
|
+
for (const route of rawCandidates) {
|
|
193
|
+
try {
|
|
194
|
+
const encoded = (0, pathEncoder_1.encodeRoutePath)(route.path, tokenIn, tokenOut);
|
|
195
|
+
const key = JSON.stringify(encoded);
|
|
196
|
+
if (seen.has(key))
|
|
197
|
+
continue;
|
|
198
|
+
seen.add(key);
|
|
199
|
+
encodedRoutes.push(encoded);
|
|
200
|
+
if (encodedRoutes.length >= MAX_ROUTE_CANDIDATES_PER_LEG) {
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// Invalid path encoding for this direction; skip.
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (encodedRoutes.length === 0) {
|
|
209
|
+
throw new errors_1.RouteNotFoundError(tokenIn, tokenOut);
|
|
210
|
+
}
|
|
211
|
+
return encodedRoutes;
|
|
212
|
+
}
|
|
213
|
+
function routeUsesPool(route, poolAddress) {
|
|
214
|
+
const normalizedPool = poolAddress.toLowerCase();
|
|
215
|
+
return route.path.some((hop) => hop.poolAddr.toLowerCase() === normalizedPool);
|
|
216
|
+
}
|
|
217
|
+
async function simulateZapOut(publicClient, owner, routerAddress, data) {
|
|
218
|
+
await publicClient.call({
|
|
219
|
+
account: owner,
|
|
220
|
+
to: routerAddress,
|
|
221
|
+
data,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
function isInsufficientLiquidityError(error) {
|
|
225
|
+
const message = extractErrorMessage(error).toLowerCase();
|
|
226
|
+
return (message.includes(INSUFFICIENT_LIQUIDITY_SELECTOR) ||
|
|
227
|
+
message.includes('insufficientliquidity'));
|
|
228
|
+
}
|
|
229
|
+
function extractErrorMessage(error) {
|
|
230
|
+
if (!(error instanceof Error)) {
|
|
231
|
+
return String(error);
|
|
232
|
+
}
|
|
233
|
+
const typed = error;
|
|
234
|
+
const parts = [
|
|
235
|
+
typed.message,
|
|
236
|
+
typed.shortMessage,
|
|
237
|
+
typed.details,
|
|
238
|
+
typed.cause instanceof Error ? typed.cause.message : undefined,
|
|
239
|
+
].filter((part) => Boolean(part));
|
|
240
|
+
return parts.join(' | ');
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=zapOut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zapOut.js","sourceRoot":"","sources":["../../../src/services/liquidity/zapOut.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import { Pool } from '../../core/types';
|
|
1
|
+
import { Pool, PoolDetails } from '../../core/types';
|
|
2
2
|
import { PublicClient } from 'viem';
|
|
3
|
+
/**
|
|
4
|
+
* Result of pool discovery including any warnings from failed factories
|
|
5
|
+
*/
|
|
6
|
+
export interface PoolDiscoveryResult {
|
|
7
|
+
pools: Pool[];
|
|
8
|
+
warnings: string[];
|
|
9
|
+
}
|
|
3
10
|
/**
|
|
4
11
|
* Service for discovering liquidity pools in the Mento protocol.
|
|
5
12
|
* Aggregates pools from multiple factory contracts (FPMM and VirtualPool).
|
|
@@ -8,13 +15,19 @@ export declare class PoolService {
|
|
|
8
15
|
private publicClient;
|
|
9
16
|
private chainId;
|
|
10
17
|
private poolsCache;
|
|
18
|
+
private discoveryWarnings;
|
|
11
19
|
constructor(publicClient: PublicClient, chainId: number);
|
|
20
|
+
/**
|
|
21
|
+
* Returns any warnings from the last pool discovery operation.
|
|
22
|
+
* Useful for debugging when some factories fail but others succeed.
|
|
23
|
+
*/
|
|
24
|
+
getDiscoveryWarnings(): string[];
|
|
12
25
|
/**
|
|
13
26
|
* Fetches all pools available in the protocol from both FPMM and Virtual pool factories
|
|
14
27
|
* Results are cached in memory for the service instance lifetime
|
|
15
28
|
*
|
|
16
29
|
* @returns Array of all pools available in the protocol
|
|
17
|
-
* @throws {Error} If
|
|
30
|
+
* @throws {Error} If no pools can be discovered from any factory
|
|
18
31
|
*
|
|
19
32
|
* @example
|
|
20
33
|
* ```typescript
|
|
@@ -24,14 +37,26 @@ export declare class PoolService {
|
|
|
24
37
|
*/
|
|
25
38
|
getPools(): Promise<Pool[]>;
|
|
26
39
|
/**
|
|
27
|
-
* Fetches
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
40
|
+
* Fetches enriched on-chain details for a specific pool by address.
|
|
41
|
+
* Resolves the pool type from the discovery cache, then fetches
|
|
42
|
+
* pool-type-specific data (pricing, fees, rebalancing for FPMM; reserves and spread for Virtual).
|
|
43
|
+
*
|
|
44
|
+
* @param poolAddr - The deployed pool contract address
|
|
45
|
+
* @returns Enriched pool details (FPMMPoolDetails or VirtualPoolDetails)
|
|
46
|
+
* @throws {Error} If the pool address is not found in any known factory
|
|
47
|
+
* @throws {Error} If on-chain calls fail
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const details = await poolService.getPoolDetails('0x...')
|
|
52
|
+
* if (details.poolType === 'FPMM') {
|
|
53
|
+
* console.log(details.pricing.oraclePrice)
|
|
54
|
+
* console.log(details.rebalancing.inBand)
|
|
55
|
+
* } else {
|
|
56
|
+
* console.log(details.spreadPercent)
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
34
59
|
*/
|
|
35
|
-
|
|
60
|
+
getPoolDetails(poolAddr: string): Promise<PoolDetails>;
|
|
36
61
|
}
|
|
37
62
|
//# sourceMappingURL=PoolService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PoolService.d.ts","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PoolService.d.ts","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAInC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;GAGG;AACH,qBAAa,WAAW;IAIV,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,OAAO;IAH/D,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,iBAAiB,CAAe;gBAEpB,YAAY,EAAE,YAAY,EAAU,OAAO,EAAE,MAAM;IAEvE;;;OAGG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAIhC;;;;;;;;;;;;OAYG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IA2CjC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAc7D"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PoolService = void 0;
|
|
4
|
-
const constants_1 = require("../../core/constants");
|
|
5
4
|
const types_1 = require("../../core/types");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
// TODO: Update to enrich pools with more data as needed. Use optional flag to include more data.
|
|
5
|
+
const poolDiscovery_1 = require("./poolDiscovery");
|
|
6
|
+
const poolDetails_1 = require("./poolDetails");
|
|
9
7
|
/**
|
|
10
8
|
* Service for discovering liquidity pools in the Mento protocol.
|
|
11
9
|
* Aggregates pools from multiple factory contracts (FPMM and VirtualPool).
|
|
@@ -15,13 +13,21 @@ class PoolService {
|
|
|
15
13
|
this.publicClient = publicClient;
|
|
16
14
|
this.chainId = chainId;
|
|
17
15
|
this.poolsCache = null;
|
|
16
|
+
this.discoveryWarnings = [];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns any warnings from the last pool discovery operation.
|
|
20
|
+
* Useful for debugging when some factories fail but others succeed.
|
|
21
|
+
*/
|
|
22
|
+
getDiscoveryWarnings() {
|
|
23
|
+
return [...this.discoveryWarnings];
|
|
18
24
|
}
|
|
19
25
|
/**
|
|
20
26
|
* Fetches all pools available in the protocol from both FPMM and Virtual pool factories
|
|
21
27
|
* Results are cached in memory for the service instance lifetime
|
|
22
28
|
*
|
|
23
29
|
* @returns Array of all pools available in the protocol
|
|
24
|
-
* @throws {Error} If
|
|
30
|
+
* @throws {Error} If no pools can be discovered from any factory
|
|
25
31
|
*
|
|
26
32
|
* @example
|
|
27
33
|
* ```typescript
|
|
@@ -37,120 +43,66 @@ class PoolService {
|
|
|
37
43
|
// for dynamic factory discovery. For now we will use
|
|
38
44
|
// the hardcoded factory addresses for the chain for v1.
|
|
39
45
|
const pools = [];
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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 [];
|
|
46
|
+
const warnings = [];
|
|
47
|
+
try {
|
|
48
|
+
const fpmmPools = await (0, poolDiscovery_1.fetchFPMMPools)(this.publicClient, this.chainId);
|
|
49
|
+
pools.push(...fpmmPools);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const message = `Failed to fetch FPMM pools: ${error instanceof Error ? error.message : String(error)}`;
|
|
53
|
+
console.warn(`[PoolService] ${message}`);
|
|
54
|
+
warnings.push(message);
|
|
55
55
|
}
|
|
56
56
|
try {
|
|
57
|
-
|
|
58
|
-
|
|
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);
|
|
57
|
+
const virtualPools = await (0, poolDiscovery_1.fetchVirtualPools)(this.publicClient, this.chainId);
|
|
58
|
+
pools.push(...virtualPools);
|
|
88
59
|
}
|
|
89
60
|
catch (error) {
|
|
90
|
-
|
|
91
|
-
|
|
61
|
+
const message = `Failed to fetch Virtual pools: ${error instanceof Error ? error.message : String(error)}`;
|
|
62
|
+
console.warn(`[PoolService] ${message}`);
|
|
63
|
+
warnings.push(message);
|
|
92
64
|
}
|
|
65
|
+
this.discoveryWarnings = warnings;
|
|
66
|
+
// Only throw if NO pools were discovered from any factory
|
|
67
|
+
if (pools.length === 0) {
|
|
68
|
+
throw new Error('Failed to discover any pools from any factory. ' +
|
|
69
|
+
'All pool factory queries failed. Check network connectivity and RPC endpoint.');
|
|
70
|
+
}
|
|
71
|
+
this.poolsCache = pools;
|
|
72
|
+
return pools;
|
|
93
73
|
}
|
|
94
74
|
/**
|
|
95
|
-
* Fetches
|
|
96
|
-
*
|
|
97
|
-
*
|
|
75
|
+
* Fetches enriched on-chain details for a specific pool by address.
|
|
76
|
+
* Resolves the pool type from the discovery cache, then fetches
|
|
77
|
+
* pool-type-specific data (pricing, fees, rebalancing for FPMM; reserves and spread for Virtual).
|
|
78
|
+
*
|
|
79
|
+
* @param poolAddr - The deployed pool contract address
|
|
80
|
+
* @returns Enriched pool details (FPMMPoolDetails or VirtualPoolDetails)
|
|
81
|
+
* @throws {Error} If the pool address is not found in any known factory
|
|
82
|
+
* @throws {Error} If on-chain calls fail
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const details = await poolService.getPoolDetails('0x...')
|
|
87
|
+
* if (details.poolType === 'FPMM') {
|
|
88
|
+
* console.log(details.pricing.oraclePrice)
|
|
89
|
+
* console.log(details.rebalancing.inBand)
|
|
90
|
+
* } else {
|
|
91
|
+
* console.log(details.spreadPercent)
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
98
94
|
*/
|
|
99
|
-
async
|
|
100
|
-
const
|
|
101
|
-
const
|
|
102
|
-
if (!
|
|
103
|
-
|
|
104
|
-
return [];
|
|
95
|
+
async getPoolDetails(poolAddr) {
|
|
96
|
+
const pools = await this.getPools();
|
|
97
|
+
const pool = pools.find((p) => p.poolAddr.toLowerCase() === poolAddr.toLowerCase());
|
|
98
|
+
if (!pool) {
|
|
99
|
+
throw new Error(`Pool not found: ${poolAddr}. ` + 'Ensure the address is a valid pool discovered by getPools().');
|
|
105
100
|
}
|
|
106
|
-
|
|
107
|
-
|
|
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);
|
|
101
|
+
if (pool.poolType === types_1.PoolType.FPMM) {
|
|
102
|
+
return (0, poolDetails_1.fetchFPMMPoolDetails)(this.publicClient, this.chainId, pool);
|
|
150
103
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
throw new Error(`Failed to fetch Virtual pools: ${error.message}`);
|
|
104
|
+
else {
|
|
105
|
+
return (0, poolDetails_1.fetchVirtualPoolDetails)(this.publicClient, pool);
|
|
154
106
|
}
|
|
155
107
|
}
|
|
156
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PoolService.js","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"PoolService.js","sourceRoot":"","sources":["../../../src/services/pools/PoolService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Pool, FPMMPoolDetails, VirtualPoolDetails } from '../../core/types';
|
|
2
|
+
import { PublicClient } from 'viem';
|
|
3
|
+
/**
|
|
4
|
+
* Fetches enriched details for an FPMM pool
|
|
5
|
+
*/
|
|
6
|
+
export declare function fetchFPMMPoolDetails(publicClient: PublicClient, chainId: number, pool: Pool): Promise<FPMMPoolDetails>;
|
|
7
|
+
/**
|
|
8
|
+
* Fetches enriched details for a Virtual pool
|
|
9
|
+
*/
|
|
10
|
+
export declare function fetchVirtualPoolDetails(publicClient: PublicClient, pool: Pool): Promise<VirtualPoolDetails>;
|
|
11
|
+
//# sourceMappingURL=poolDetails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poolDetails.d.ts","sourceRoot":"","sources":["../../../src/services/pools/poolDetails.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAe,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAEzF,OAAO,EAAE,YAAY,EAAuB,MAAM,MAAM,CAAA;AAExD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,eAAe,CAAC,CAmH1B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4BjH"}
|