@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PublicClient } from 'viem';
|
|
2
2
|
import { RouteService } from '../routes';
|
|
3
3
|
import { QuoteService } from '../quotes';
|
|
4
4
|
import { Route, CallParams } from '../../core/types';
|
|
@@ -12,10 +12,10 @@ export interface SwapOptions {
|
|
|
12
12
|
*/
|
|
13
13
|
slippageTolerance: number;
|
|
14
14
|
/**
|
|
15
|
-
* Unix timestamp after which the transaction will revert
|
|
16
|
-
*
|
|
15
|
+
* Unix timestamp after which the transaction will revert.
|
|
16
|
+
* Use `deadlineFromMinutes()` for convenience.
|
|
17
17
|
*/
|
|
18
|
-
deadline
|
|
18
|
+
deadline: bigint;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Detailed swap parameters including decoded values for transparency
|
|
@@ -77,8 +77,8 @@ export declare class SwapService {
|
|
|
77
77
|
* Builds a complete swap transaction including approval if needed.
|
|
78
78
|
* This is the recommended method for most use cases.
|
|
79
79
|
*
|
|
80
|
-
* @param tokenIn - The address of the input token
|
|
81
|
-
* @param tokenOut - The address of the output token
|
|
80
|
+
* @param tokenIn - The address of the input token (e.g., '0x765DE816845861e75A25fCA122bb6898B8B1282a')
|
|
81
|
+
* @param tokenOut - The address of the output token (e.g., '0x471EcE3750Da237f93B8E339c536989b8978a438')
|
|
82
82
|
* @param amountIn - The amount of input tokens (in wei/smallest unit)
|
|
83
83
|
* @param recipient - The address to receive the output tokens
|
|
84
84
|
* @param owner - The address that owns the input tokens (needed to check allowance)
|
|
@@ -89,12 +89,12 @@ export declare class SwapService {
|
|
|
89
89
|
* @example
|
|
90
90
|
* ```typescript
|
|
91
91
|
* const { approval, swap } = await mento.swap.buildSwapTransaction(
|
|
92
|
-
*
|
|
93
|
-
* CELO
|
|
92
|
+
* '0x765DE816845861e75A25fCA122bb6898B8B1282a', // USDm
|
|
93
|
+
* '0x471EcE3750Da237f93B8E339c536989b8978a438', // CELO
|
|
94
94
|
* parseUnits('100', 18),
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* { slippageTolerance: 0.5 }
|
|
95
|
+
* '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', // recipient
|
|
96
|
+
* '0x123...', // owner
|
|
97
|
+
* { slippageTolerance: 0.5, deadline: deadlineFromMinutes(5) }
|
|
98
98
|
* )
|
|
99
99
|
*
|
|
100
100
|
* // Execute approval if needed
|
|
@@ -106,13 +106,13 @@ export declare class SwapService {
|
|
|
106
106
|
* await walletClient.sendTransaction(swap.params)
|
|
107
107
|
* ```
|
|
108
108
|
*/
|
|
109
|
-
buildSwapTransaction(tokenIn:
|
|
109
|
+
buildSwapTransaction(tokenIn: string, tokenOut: string, amountIn: bigint, recipient: string, owner: string, options: SwapOptions, route?: Route): Promise<SwapTransaction>;
|
|
110
110
|
/**
|
|
111
111
|
* Builds swap transaction parameters without executing the transaction.
|
|
112
112
|
* Does NOT check or handle token approval - use buildSwapTransaction for that.
|
|
113
113
|
*
|
|
114
|
-
* @param tokenIn - The address of the input token
|
|
115
|
-
* @param tokenOut - The address of the output token
|
|
114
|
+
* @param tokenIn - The address of the input token (e.g., '0x765DE816845861e75A25fCA122bb6898B8B1282a')
|
|
115
|
+
* @param tokenOut - The address of the output token (e.g., '0x471EcE3750Da237f93B8E339c536989b8978a438')
|
|
116
116
|
* @param amountIn - The amount of input tokens (in wei/smallest unit)
|
|
117
117
|
* @param recipient - The address to receive the output tokens
|
|
118
118
|
* @param options - Swap configuration options (slippage, deadline)
|
|
@@ -122,18 +122,18 @@ export declare class SwapService {
|
|
|
122
122
|
* @example
|
|
123
123
|
* ```typescript
|
|
124
124
|
* const swapDetails = await mento.swap.buildSwapParams(
|
|
125
|
-
*
|
|
126
|
-
* CELO
|
|
125
|
+
* '0x765DE816845861e75A25fCA122bb6898B8B1282a', // USDm
|
|
126
|
+
* '0x471EcE3750Da237f93B8E339c536989b8978a438', // CELO
|
|
127
127
|
* parseUnits('100', 18),
|
|
128
|
-
*
|
|
129
|
-
* { slippageTolerance: 0.5 }
|
|
128
|
+
* '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', // recipient
|
|
129
|
+
* { slippageTolerance: 0.5, deadline: deadlineFromMinutes(5) }
|
|
130
130
|
* )
|
|
131
131
|
*
|
|
132
132
|
* // Execute with any wallet (assumes approval already granted)
|
|
133
133
|
* await walletClient.sendTransaction(swapDetails.params)
|
|
134
134
|
* ```
|
|
135
135
|
*/
|
|
136
|
-
buildSwapParams(tokenIn:
|
|
136
|
+
buildSwapParams(tokenIn: string, tokenOut: string, amountIn: bigint, recipient: string, options: SwapOptions, route?: Route): Promise<SwapDetails>;
|
|
137
137
|
/**
|
|
138
138
|
* Builds approval transaction params for the Router to spend tokenIn
|
|
139
139
|
* @private
|
|
@@ -146,6 +146,10 @@ export declare class SwapService {
|
|
|
146
146
|
private getAllowance;
|
|
147
147
|
/**
|
|
148
148
|
* Calculates minimum output amount after applying slippage tolerance
|
|
149
|
+
* @param amountOut - Expected output amount
|
|
150
|
+
* @param slippageTolerance - Slippage tolerance as percentage (e.g., 0.5 for 0.5%)
|
|
151
|
+
* @returns Minimum acceptable output amount
|
|
152
|
+
* @throws Error if slippage tolerance is invalid
|
|
149
153
|
* @private
|
|
150
154
|
*/
|
|
151
155
|
private calculateMinAmountOut;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwapService.d.ts","sourceRoot":"","sources":["../../../src/services/swap/SwapService.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"SwapService.d.ts","sourceRoot":"","sources":["../../../src/services/swap/SwapService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAsB,MAAM,MAAM,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,EAAmB,WAAW,EAAwB,MAAM,yBAAyB,CAAA;AAG5F;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,MAAM,EAAE,UAAU,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,KAAK,CAAA;IACZ;;OAEG;IACH,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAA;IAC3B;;OAEG;IACH,IAAI,EAAE,WAAW,CAAA;CAClB;AAED;;;GAGG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;gBAHZ,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY;IAGpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,oBAAoB,CACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,KAAK,GACZ,OAAO,CAAC,eAAe,CAAC;IAiB3B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,KAAK,GACZ,OAAO,CAAC,WAAW,CAAC;IAmCvB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;OAGG;YACW,YAAY;IAU1B;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;;OAGG;IACH,OAAO,CAAC,cAAc;CAavB"}
|
|
@@ -5,6 +5,7 @@ const viem_1 = require("viem");
|
|
|
5
5
|
const abis_1 = require("../../core/abis");
|
|
6
6
|
const constants_1 = require("../../core/constants");
|
|
7
7
|
const pathEncoder_1 = require("../../utils/pathEncoder");
|
|
8
|
+
const validation_1 = require("../../utils/validation");
|
|
8
9
|
/**
|
|
9
10
|
* Service for building token swap transactions on the Mento protocol.
|
|
10
11
|
* Returns transaction parameters that can be executed by any wallet.
|
|
@@ -20,8 +21,8 @@ class SwapService {
|
|
|
20
21
|
* Builds a complete swap transaction including approval if needed.
|
|
21
22
|
* This is the recommended method for most use cases.
|
|
22
23
|
*
|
|
23
|
-
* @param tokenIn - The address of the input token
|
|
24
|
-
* @param tokenOut - The address of the output token
|
|
24
|
+
* @param tokenIn - The address of the input token (e.g., '0x765DE816845861e75A25fCA122bb6898B8B1282a')
|
|
25
|
+
* @param tokenOut - The address of the output token (e.g., '0x471EcE3750Da237f93B8E339c536989b8978a438')
|
|
25
26
|
* @param amountIn - The amount of input tokens (in wei/smallest unit)
|
|
26
27
|
* @param recipient - The address to receive the output tokens
|
|
27
28
|
* @param owner - The address that owns the input tokens (needed to check allowance)
|
|
@@ -32,12 +33,12 @@ class SwapService {
|
|
|
32
33
|
* @example
|
|
33
34
|
* ```typescript
|
|
34
35
|
* const { approval, swap } = await mento.swap.buildSwapTransaction(
|
|
35
|
-
*
|
|
36
|
-
* CELO
|
|
36
|
+
* '0x765DE816845861e75A25fCA122bb6898B8B1282a', // USDm
|
|
37
|
+
* '0x471EcE3750Da237f93B8E339c536989b8978a438', // CELO
|
|
37
38
|
* parseUnits('100', 18),
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* { slippageTolerance: 0.5 }
|
|
39
|
+
* '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', // recipient
|
|
40
|
+
* '0x123...', // owner
|
|
41
|
+
* { slippageTolerance: 0.5, deadline: deadlineFromMinutes(5) }
|
|
41
42
|
* )
|
|
42
43
|
*
|
|
43
44
|
* // Execute approval if needed
|
|
@@ -50,6 +51,11 @@ class SwapService {
|
|
|
50
51
|
* ```
|
|
51
52
|
*/
|
|
52
53
|
async buildSwapTransaction(tokenIn, tokenOut, amountIn, recipient, owner, options, route) {
|
|
54
|
+
// Validate all address inputs
|
|
55
|
+
(0, validation_1.validateAddress)(tokenIn, 'tokenIn');
|
|
56
|
+
(0, validation_1.validateAddress)(tokenOut, 'tokenOut');
|
|
57
|
+
(0, validation_1.validateAddress)(recipient, 'recipient');
|
|
58
|
+
(0, validation_1.validateAddress)(owner, 'owner');
|
|
53
59
|
// Build swap params first
|
|
54
60
|
const swap = await this.buildSwapParams(tokenIn, tokenOut, amountIn, recipient, options, route);
|
|
55
61
|
// Check if approval is needed
|
|
@@ -61,8 +67,8 @@ class SwapService {
|
|
|
61
67
|
* Builds swap transaction parameters without executing the transaction.
|
|
62
68
|
* Does NOT check or handle token approval - use buildSwapTransaction for that.
|
|
63
69
|
*
|
|
64
|
-
* @param tokenIn - The address of the input token
|
|
65
|
-
* @param tokenOut - The address of the output token
|
|
70
|
+
* @param tokenIn - The address of the input token (e.g., '0x765DE816845861e75A25fCA122bb6898B8B1282a')
|
|
71
|
+
* @param tokenOut - The address of the output token (e.g., '0x471EcE3750Da237f93B8E339c536989b8978a438')
|
|
66
72
|
* @param amountIn - The amount of input tokens (in wei/smallest unit)
|
|
67
73
|
* @param recipient - The address to receive the output tokens
|
|
68
74
|
* @param options - Swap configuration options (slippage, deadline)
|
|
@@ -72,11 +78,11 @@ class SwapService {
|
|
|
72
78
|
* @example
|
|
73
79
|
* ```typescript
|
|
74
80
|
* const swapDetails = await mento.swap.buildSwapParams(
|
|
75
|
-
*
|
|
76
|
-
* CELO
|
|
81
|
+
* '0x765DE816845861e75A25fCA122bb6898B8B1282a', // USDm
|
|
82
|
+
* '0x471EcE3750Da237f93B8E339c536989b8978a438', // CELO
|
|
77
83
|
* parseUnits('100', 18),
|
|
78
|
-
*
|
|
79
|
-
* { slippageTolerance: 0.5 }
|
|
84
|
+
* '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', // recipient
|
|
85
|
+
* { slippageTolerance: 0.5, deadline: deadlineFromMinutes(5) }
|
|
80
86
|
* )
|
|
81
87
|
*
|
|
82
88
|
* // Execute with any wallet (assumes approval already granted)
|
|
@@ -84,14 +90,17 @@ class SwapService {
|
|
|
84
90
|
* ```
|
|
85
91
|
*/
|
|
86
92
|
async buildSwapParams(tokenIn, tokenOut, amountIn, recipient, options, route) {
|
|
93
|
+
// Validate all address inputs
|
|
94
|
+
(0, validation_1.validateAddress)(tokenIn, 'tokenIn');
|
|
95
|
+
(0, validation_1.validateAddress)(tokenOut, 'tokenOut');
|
|
96
|
+
(0, validation_1.validateAddress)(recipient, 'recipient');
|
|
87
97
|
// Find route if not provided
|
|
88
98
|
if (!route) {
|
|
89
99
|
route = await this.routeService.findRoute(tokenIn, tokenOut);
|
|
90
100
|
}
|
|
91
101
|
const expectedAmountOut = await this.quoteService.getAmountOut(tokenIn, tokenOut, amountIn, route);
|
|
92
102
|
const amountOutMin = this.calculateMinAmountOut(expectedAmountOut, options.slippageTolerance);
|
|
93
|
-
|
|
94
|
-
const deadline = options.deadline ?? BigInt(Math.floor(Date.now() / 1000) + 20 * 60);
|
|
103
|
+
const deadline = options.deadline;
|
|
95
104
|
const routerRoutes = (0, pathEncoder_1.encodeRoutePath)(route.path, tokenIn, tokenOut);
|
|
96
105
|
const routerAddress = (0, constants_1.getContractAddress)(this.chainId, 'Router');
|
|
97
106
|
const data = this.encodeSwapCall(amountIn, amountOutMin, routerRoutes, recipient, deadline);
|
|
@@ -137,9 +146,21 @@ class SwapService {
|
|
|
137
146
|
}
|
|
138
147
|
/**
|
|
139
148
|
* Calculates minimum output amount after applying slippage tolerance
|
|
149
|
+
* @param amountOut - Expected output amount
|
|
150
|
+
* @param slippageTolerance - Slippage tolerance as percentage (e.g., 0.5 for 0.5%)
|
|
151
|
+
* @returns Minimum acceptable output amount
|
|
152
|
+
* @throws Error if slippage tolerance is invalid
|
|
140
153
|
* @private
|
|
141
154
|
*/
|
|
142
155
|
calculateMinAmountOut(amountOut, slippageTolerance) {
|
|
156
|
+
const MAX_SLIPPAGE_TOLERANCE = 20; // 20% max
|
|
157
|
+
if (slippageTolerance < 0) {
|
|
158
|
+
throw new Error('Slippage tolerance cannot be negative');
|
|
159
|
+
}
|
|
160
|
+
if (slippageTolerance > MAX_SLIPPAGE_TOLERANCE) {
|
|
161
|
+
throw new Error(`Slippage tolerance ${slippageTolerance}% exceeds maximum of ${MAX_SLIPPAGE_TOLERANCE}%. ` +
|
|
162
|
+
'High slippage makes transactions vulnerable to sandwich attacks.');
|
|
163
|
+
}
|
|
143
164
|
const basisPoints = BigInt(Math.floor(slippageTolerance * 100));
|
|
144
165
|
const slippageMultiplier = 10000n - basisPoints;
|
|
145
166
|
return (amountOut * slippageMultiplier) / 10000n;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwapService.js","sourceRoot":"","sources":["../../../src/services/swap/SwapService.ts"],"names":[],"mappings":";;;AAAA,+BAAgE;AAIhE,0CAAuD;AACvD,oDAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"SwapService.js","sourceRoot":"","sources":["../../../src/services/swap/SwapService.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ import type { PublicClient } from 'viem';
|
|
|
3
3
|
export declare class TokenService {
|
|
4
4
|
private publicClient;
|
|
5
5
|
private chainId;
|
|
6
|
-
private supplyAdjustmentService;
|
|
7
6
|
constructor(publicClient: PublicClient, chainId: number);
|
|
8
7
|
/**
|
|
9
8
|
* Get token metadata (name, symbol, decimals)
|
|
@@ -18,8 +17,9 @@ export declare class TokenService {
|
|
|
18
17
|
*/
|
|
19
18
|
private getTotalSupply;
|
|
20
19
|
/**
|
|
21
|
-
* Get all stable tokens from the Reserve contract
|
|
22
|
-
*
|
|
20
|
+
* Get all stable tokens from the Reserve contract.
|
|
21
|
+
* Returns the actual on-chain ERC20 totalSupply values without adjustments.
|
|
22
|
+
* @param includeSupply - Whether to fetch total supply
|
|
23
23
|
* @returns Array of stable tokens
|
|
24
24
|
*/
|
|
25
25
|
getStableTokens(includeSupply?: boolean): Promise<StableToken[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenService.d.ts","sourceRoot":"","sources":["../../../src/services/tokens/tokenService.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"tokenService.d.ts","sourceRoot":"","sources":["../../../src/services/tokens/tokenService.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAatE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAExC,qBAAa,YAAY;IACX,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,OAAO;gBAA3C,YAAY,EAAE,YAAY,EAAU,OAAO,EAAE,MAAM;IAEvE;;;;OAIG;YACW,gBAAgB;IAqC9B;;;;OAIG;YACW,cAAc;IAa5B;;;;;OAKG;IACU,eAAe,CAAC,aAAa,UAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA6B1E;;;;OAIG;IACU,mBAAmB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;CA2C/D"}
|
|
@@ -4,13 +4,10 @@ exports.TokenService = void 0;
|
|
|
4
4
|
const abis_1 = require("../../core/abis");
|
|
5
5
|
const constants_1 = require("../../core/constants");
|
|
6
6
|
const utils_1 = require("../../utils");
|
|
7
|
-
const supplyAdjustmentService_1 = require("./supplyAdjustmentService");
|
|
8
|
-
const supply_1 = require("./supply");
|
|
9
7
|
class TokenService {
|
|
10
8
|
constructor(publicClient, chainId) {
|
|
11
9
|
this.publicClient = publicClient;
|
|
12
10
|
this.chainId = chainId;
|
|
13
|
-
this.supplyAdjustmentService = new supplyAdjustmentService_1.SupplyAdjustmentService(publicClient, chainId, new supply_1.DefaultCalculatorFactory());
|
|
14
11
|
}
|
|
15
12
|
/**
|
|
16
13
|
* Get token metadata (name, symbol, decimals)
|
|
@@ -59,8 +56,9 @@ class TokenService {
|
|
|
59
56
|
return totalSupply.toString();
|
|
60
57
|
}
|
|
61
58
|
/**
|
|
62
|
-
* Get all stable tokens from the Reserve contract
|
|
63
|
-
*
|
|
59
|
+
* Get all stable tokens from the Reserve contract.
|
|
60
|
+
* Returns the actual on-chain ERC20 totalSupply values without adjustments.
|
|
61
|
+
* @param includeSupply - Whether to fetch total supply
|
|
64
62
|
* @returns Array of stable tokens
|
|
65
63
|
*/
|
|
66
64
|
async getStableTokens(includeSupply = true) {
|
|
@@ -71,27 +69,20 @@ class TokenService {
|
|
|
71
69
|
functionName: 'getTokens',
|
|
72
70
|
args: [],
|
|
73
71
|
}));
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const metadata = await
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const token = {
|
|
72
|
+
// Fetch metadata and totalSupply for all tokens concurrently
|
|
73
|
+
const tokens = await Promise.all(tokenAddresses.map(async (address) => {
|
|
74
|
+
const [metadata, totalSupply] = await Promise.all([
|
|
75
|
+
this.getTokenMetadata(address),
|
|
76
|
+
includeSupply ? this.getTotalSupply(address) : Promise.resolve('0'),
|
|
77
|
+
]);
|
|
78
|
+
return {
|
|
82
79
|
address,
|
|
83
80
|
...metadata,
|
|
84
81
|
totalSupply,
|
|
85
82
|
};
|
|
86
|
-
|
|
87
|
-
const adjustedSupply = await this.supplyAdjustmentService.getAdjustedSupply(token);
|
|
88
|
-
token.totalSupply = adjustedSupply;
|
|
89
|
-
}
|
|
90
|
-
tokens.push(token);
|
|
91
|
-
}
|
|
83
|
+
}));
|
|
92
84
|
return tokens;
|
|
93
85
|
}
|
|
94
|
-
// TODO: V3 - How does USD.m fit in here?
|
|
95
86
|
/**
|
|
96
87
|
* Get all collateral assets from exchanges
|
|
97
88
|
* Filters tokens that are marked as collateral in the Reserve contract
|
|
@@ -100,7 +91,6 @@ class TokenService {
|
|
|
100
91
|
async getCollateralAssets() {
|
|
101
92
|
const biPoolManagerAddress = (0, constants_1.getContractAddress)(this.chainId, constants_1.BIPOOLMANAGER);
|
|
102
93
|
const reserveAddress = (0, constants_1.getContractAddress)(this.chainId, constants_1.RESERVE);
|
|
103
|
-
// TODO: V3 - Should instead use the factories.
|
|
104
94
|
// Get all exchanges to find unique token addresses
|
|
105
95
|
const exchanges = (await (0, utils_1.retryOperation)(() => this.publicClient.readContract({
|
|
106
96
|
address: biPoolManagerAddress,
|
|
@@ -112,24 +102,23 @@ class TokenService {
|
|
|
112
102
|
for (const exchange of exchanges) {
|
|
113
103
|
exchange.assets.forEach((address) => uniqueAddresses.add(address));
|
|
114
104
|
}
|
|
115
|
-
// Check which tokens are collateral assets and get their
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
105
|
+
// Check which tokens are collateral assets and get their info in parallel
|
|
106
|
+
const results = await Promise.all(Array.from(uniqueAddresses).map(async (address) => {
|
|
107
|
+
const [isCollateral, metadata] = await Promise.all([
|
|
108
|
+
(0, utils_1.retryOperation)(() => this.publicClient.readContract({
|
|
109
|
+
address: reserveAddress,
|
|
110
|
+
abi: abis_1.RESERVE_ABI,
|
|
111
|
+
functionName: 'isCollateralAsset',
|
|
112
|
+
args: [address],
|
|
113
|
+
})),
|
|
114
|
+
this.getTokenMetadata(address),
|
|
115
|
+
]);
|
|
124
116
|
if (isCollateral) {
|
|
125
|
-
|
|
126
|
-
assets.push({
|
|
127
|
-
address,
|
|
128
|
-
...metadata,
|
|
129
|
-
});
|
|
117
|
+
return { address, ...metadata };
|
|
130
118
|
}
|
|
131
|
-
|
|
132
|
-
|
|
119
|
+
return null;
|
|
120
|
+
}));
|
|
121
|
+
return results.filter((asset) => asset !== null);
|
|
133
122
|
}
|
|
134
123
|
}
|
|
135
124
|
exports.TokenService = TokenService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenService.js","sourceRoot":"","sources":["../../../src/services/tokens/tokenService.ts"],"names":[],"mappings":";;;AAAA,0CAA4E;
|
|
1
|
+
{"version":3,"file":"tokenService.js","sourceRoot":"","sources":["../../../src/services/tokens/tokenService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { PublicClient } from 'viem';
|
|
2
|
+
import type { Pool, TradingLimit } from '../../core/types';
|
|
3
|
+
/**
|
|
4
|
+
* Service for querying trading limits from the Mento protocol.
|
|
5
|
+
* Supports both FPMM pools (TradingLimitsV2) and Virtual pools (TradingLimitsV1).
|
|
6
|
+
*/
|
|
7
|
+
export declare class TradingLimitsService {
|
|
8
|
+
private publicClient;
|
|
9
|
+
private chainId;
|
|
10
|
+
constructor(publicClient: PublicClient, chainId: number);
|
|
11
|
+
/**
|
|
12
|
+
* Get trading limits for a pool.
|
|
13
|
+
* Returns an array of TradingLimit objects for each configured limit.
|
|
14
|
+
*
|
|
15
|
+
* @param pool - The pool to get trading limits for
|
|
16
|
+
* @returns Array of TradingLimit objects with maxIn/maxOut/until
|
|
17
|
+
*/
|
|
18
|
+
getPoolTradingLimits(pool: Pool): Promise<TradingLimit[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Get trading limits for an FPMM pool.
|
|
21
|
+
* FPMM pools use TradingLimitsV2 with fixed timeframes.
|
|
22
|
+
*/
|
|
23
|
+
private getFPMMTradingLimits;
|
|
24
|
+
/**
|
|
25
|
+
* Get trading limits for a specific token in an FPMM pool.
|
|
26
|
+
*/
|
|
27
|
+
private getFPMMTokenLimits;
|
|
28
|
+
/**
|
|
29
|
+
* Get trading limits for a Virtual pool.
|
|
30
|
+
* Virtual pools use TradingLimitsV1 via the Broker contract.
|
|
31
|
+
*/
|
|
32
|
+
private getVirtualPoolTradingLimits;
|
|
33
|
+
/**
|
|
34
|
+
* Get trading limits for a specific token in a Virtual pool.
|
|
35
|
+
*/
|
|
36
|
+
private getVirtualPoolTokenLimits;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=TradingLimitsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TradingLimitsService.d.ts","sourceRoot":"","sources":["../../../src/services/trading/TradingLimitsService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAW,MAAM,MAAM,CAAA;AAC5C,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EAKb,MAAM,kBAAkB,CAAA;AAYzB;;;GAGG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;gBADP,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM;IAGzB;;;;;;OAMG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQ/D;;;OAGG;YACW,oBAAoB;IAelC;;OAEG;YACW,kBAAkB;IA0ChC;;;OAGG;YACW,2BAA2B;IAoBzC;;OAEG;YACW,yBAAyB;CA4DxC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TradingLimitsService = void 0;
|
|
4
|
+
const types_1 = require("../../core/types");
|
|
5
|
+
const abis_1 = require("../../core/abis");
|
|
6
|
+
const constants_1 = require("../../core/constants");
|
|
7
|
+
const tradingLimits_1 = require("../../utils/tradingLimits");
|
|
8
|
+
/**
|
|
9
|
+
* Service for querying trading limits from the Mento protocol.
|
|
10
|
+
* Supports both FPMM pools (TradingLimitsV2) and Virtual pools (TradingLimitsV1).
|
|
11
|
+
*/
|
|
12
|
+
class TradingLimitsService {
|
|
13
|
+
constructor(publicClient, chainId) {
|
|
14
|
+
this.publicClient = publicClient;
|
|
15
|
+
this.chainId = chainId;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get trading limits for a pool.
|
|
19
|
+
* Returns an array of TradingLimit objects for each configured limit.
|
|
20
|
+
*
|
|
21
|
+
* @param pool - The pool to get trading limits for
|
|
22
|
+
* @returns Array of TradingLimit objects with maxIn/maxOut/until
|
|
23
|
+
*/
|
|
24
|
+
async getPoolTradingLimits(pool) {
|
|
25
|
+
if (pool.poolType === types_1.PoolType.FPMM) {
|
|
26
|
+
return this.getFPMMTradingLimits(pool);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
return this.getVirtualPoolTradingLimits(pool);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get trading limits for an FPMM pool.
|
|
34
|
+
* FPMM pools use TradingLimitsV2 with fixed timeframes.
|
|
35
|
+
*/
|
|
36
|
+
async getFPMMTradingLimits(pool) {
|
|
37
|
+
const limits = [];
|
|
38
|
+
// Get trading limits for both tokens
|
|
39
|
+
const [token0Limits, token1Limits] = await Promise.all([
|
|
40
|
+
this.getFPMMTokenLimits(pool.poolAddr, pool.token0),
|
|
41
|
+
this.getFPMMTokenLimits(pool.poolAddr, pool.token1),
|
|
42
|
+
]);
|
|
43
|
+
limits.push(...token0Limits);
|
|
44
|
+
limits.push(...token1Limits);
|
|
45
|
+
return limits;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get trading limits for a specific token in an FPMM pool.
|
|
49
|
+
*/
|
|
50
|
+
async getFPMMTokenLimits(poolAddr, token) {
|
|
51
|
+
try {
|
|
52
|
+
const result = await this.publicClient.readContract({
|
|
53
|
+
address: poolAddr,
|
|
54
|
+
abi: abis_1.FPMM_ABI,
|
|
55
|
+
functionName: 'getTradingLimits',
|
|
56
|
+
args: [token],
|
|
57
|
+
});
|
|
58
|
+
// Result is a tuple: [config, state]
|
|
59
|
+
const [configTuple, stateTuple] = result;
|
|
60
|
+
const config = {
|
|
61
|
+
limit0: configTuple.limit0,
|
|
62
|
+
limit1: configTuple.limit1,
|
|
63
|
+
decimals: configTuple.decimals,
|
|
64
|
+
};
|
|
65
|
+
const state = {
|
|
66
|
+
lastUpdated0: Number(stateTuple.lastUpdated0),
|
|
67
|
+
lastUpdated1: Number(stateTuple.lastUpdated1),
|
|
68
|
+
netflow0: stateTuple.netflow0,
|
|
69
|
+
netflow1: stateTuple.netflow1,
|
|
70
|
+
};
|
|
71
|
+
if (!(0, tradingLimits_1.hasConfiguredLimitsV2)(config)) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
return (0, tradingLimits_1.calculateTradingLimitsV2)(config, state, token);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Token may not have limits configured, or invalid token
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get trading limits for a Virtual pool.
|
|
83
|
+
* Virtual pools use TradingLimitsV1 via the Broker contract.
|
|
84
|
+
*/
|
|
85
|
+
async getVirtualPoolTradingLimits(pool) {
|
|
86
|
+
if (!pool.exchangeId) {
|
|
87
|
+
console.warn(`Virtual pool ${pool.poolAddr} missing exchangeId - cannot query trading limits`);
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
const limits = [];
|
|
91
|
+
// Get trading limits for both tokens
|
|
92
|
+
const [token0Limits, token1Limits] = await Promise.all([
|
|
93
|
+
this.getVirtualPoolTokenLimits(pool.exchangeId, pool.token0),
|
|
94
|
+
this.getVirtualPoolTokenLimits(pool.exchangeId, pool.token1),
|
|
95
|
+
]);
|
|
96
|
+
limits.push(...token0Limits);
|
|
97
|
+
limits.push(...token1Limits);
|
|
98
|
+
return limits;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get trading limits for a specific token in a Virtual pool.
|
|
102
|
+
*/
|
|
103
|
+
async getVirtualPoolTokenLimits(exchangeId, token) {
|
|
104
|
+
const brokerAddr = (0, constants_1.getContractAddress)(this.chainId, 'Broker');
|
|
105
|
+
const limitId = (0, tradingLimits_1.computeLimitId)(exchangeId, token);
|
|
106
|
+
try {
|
|
107
|
+
// Fetch config and state in parallel
|
|
108
|
+
const [configResult, stateResult] = await Promise.all([
|
|
109
|
+
this.publicClient.readContract({
|
|
110
|
+
address: brokerAddr,
|
|
111
|
+
abi: abis_1.BROKER_ABI,
|
|
112
|
+
functionName: 'tradingLimitsConfig',
|
|
113
|
+
args: [limitId],
|
|
114
|
+
}),
|
|
115
|
+
this.publicClient.readContract({
|
|
116
|
+
address: brokerAddr,
|
|
117
|
+
abi: abis_1.BROKER_ABI,
|
|
118
|
+
functionName: 'tradingLimitsState',
|
|
119
|
+
args: [limitId],
|
|
120
|
+
}),
|
|
121
|
+
]);
|
|
122
|
+
// Parse config result
|
|
123
|
+
const configTuple = configResult;
|
|
124
|
+
const config = {
|
|
125
|
+
timestep0: Number(configTuple[0]),
|
|
126
|
+
timestep1: Number(configTuple[1]),
|
|
127
|
+
limit0: configTuple[2],
|
|
128
|
+
limit1: configTuple[3],
|
|
129
|
+
limitGlobal: configTuple[4],
|
|
130
|
+
flags: Number(configTuple[5]),
|
|
131
|
+
};
|
|
132
|
+
// Parse state result
|
|
133
|
+
const stateTuple = stateResult;
|
|
134
|
+
const state = {
|
|
135
|
+
lastUpdated0: Number(stateTuple[0]),
|
|
136
|
+
lastUpdated1: Number(stateTuple[1]),
|
|
137
|
+
netflow0: stateTuple[2],
|
|
138
|
+
netflow1: stateTuple[3],
|
|
139
|
+
netflowGlobal: stateTuple[4],
|
|
140
|
+
};
|
|
141
|
+
// Only return limits if configured
|
|
142
|
+
if (!(0, tradingLimits_1.hasConfiguredLimitsV1)(config)) {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
// Get token decimals (V1 uses 0 decimals internally, but we track token decimals for display)
|
|
146
|
+
// For now, return 0 as the reference - consumers should query token decimals separately
|
|
147
|
+
const tokenDecimals = 0; // V1 stores values with 0 decimal precision
|
|
148
|
+
return (0, tradingLimits_1.calculateTradingLimitsV1)(config, state, token, tokenDecimals);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Trading limits may not be configured for this token
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.TradingLimitsService = TradingLimitsService;
|
|
157
|
+
//# sourceMappingURL=TradingLimitsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TradingLimitsService.js","sourceRoot":"","sources":["../../../src/services/trading/TradingLimitsService.ts"],"names":[],"mappings":"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"}
|