@mento-protocol/mento-sdk 3.2.7-beta.0 → 3.2.7
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/package.json +1 -1
- package/dist/cache/routes.d.ts +0 -13
- package/dist/cache/routes.js +0 -14649
- package/dist/cache/tokens.d.ts +0 -68
- package/dist/cache/tokens.js +0 -488
- package/dist/core/abis/activePool.d.ts +0 -2
- package/dist/core/abis/activePool.js +0 -14
- package/dist/core/abis/addressesRegistry.d.ts +0 -2
- package/dist/core/abis/addressesRegistry.js +0 -26
- package/dist/core/abis/bipoolmanager.d.ts +0 -34
- package/dist/core/abis/bipoolmanager.js +0 -72
- package/dist/core/abis/borrowerOperations.d.ts +0 -9
- package/dist/core/abis/borrowerOperations.js +0 -89
- package/dist/core/abis/breakerbox.d.ts +0 -13
- package/dist/core/abis/breakerbox.js +0 -8
- package/dist/core/abis/broker.d.ts +0 -2
- package/dist/core/abis/broker.js +0 -9
- package/dist/core/abis/erc20.d.ts +0 -9
- package/dist/core/abis/erc20.js +0 -21
- package/dist/core/abis/fpmm.d.ts +0 -270
- package/dist/core/abis/fpmm.js +0 -49
- package/dist/core/abis/fpmmFactory.d.ts +0 -85
- package/dist/core/abis/fpmmFactory.js +0 -26
- package/dist/core/abis/hintHelpers.d.ts +0 -2
- package/dist/core/abis/hintHelpers.js +0 -14
- package/dist/core/abis/index.d.ts +0 -22
- package/dist/core/abis/index.js +0 -38
- package/dist/core/abis/liquidityStrategy.d.ts +0 -132
- package/dist/core/abis/liquidityStrategy.js +0 -10
- package/dist/core/abis/multiTroveGetter.d.ts +0 -8
- package/dist/core/abis/multiTroveGetter.js +0 -15
- package/dist/core/abis/priceFeed.d.ts +0 -7
- package/dist/core/abis/priceFeed.js +0 -16
- package/dist/core/abis/pricingmodule.d.ts +0 -2
- package/dist/core/abis/pricingmodule.js +0 -6
- package/dist/core/abis/reserve.d.ts +0 -3
- package/dist/core/abis/reserve.js +0 -18
- package/dist/core/abis/router.d.ts +0 -521
- package/dist/core/abis/router.js +0 -45
- package/dist/core/abis/sortedTroves.d.ts +0 -2
- package/dist/core/abis/sortedTroves.js +0 -15
- package/dist/core/abis/systemParams.d.ts +0 -2
- package/dist/core/abis/systemParams.js +0 -14
- package/dist/core/abis/troveManager.d.ts +0 -2
- package/dist/core/abis/troveManager.js +0 -27
- package/dist/core/abis/troveNFT.d.ts +0 -2
- package/dist/core/abis/troveNFT.js +0 -9
- package/dist/core/abis/virtualPool.d.ts +0 -50
- package/dist/core/abis/virtualPool.js +0 -11
- package/dist/core/abis/virtualPoolFactory.d.ts +0 -59
- package/dist/core/abis/virtualPoolFactory.js +0 -17
- package/dist/core/constants/addresses.d.ts +0 -18
- package/dist/core/constants/addresses.js +0 -113
- package/dist/core/constants/borrowConstants.d.ts +0 -10
- package/dist/core/constants/borrowConstants.js +0 -16
- package/dist/core/constants/borrowRegistries.d.ts +0 -7
- package/dist/core/constants/borrowRegistries.js +0 -34
- package/dist/core/constants/chainId.d.ts +0 -7
- package/dist/core/constants/chainId.js +0 -11
- package/dist/core/constants/contractNames.d.ts +0 -21
- package/dist/core/constants/contractNames.js +0 -24
- package/dist/core/constants/index.d.ts +0 -6
- package/dist/core/constants/index.js +0 -22
- package/dist/core/errors/base.d.ts +0 -8
- package/dist/core/errors/base.js +0 -17
- package/dist/core/errors/index.d.ts +0 -4
- package/dist/core/errors/index.js +0 -20
- package/dist/core/errors/oracle.d.ts +0 -9
- package/dist/core/errors/oracle.js +0 -15
- package/dist/core/errors/router.d.ts +0 -14
- package/dist/core/errors/router.js +0 -24
- package/dist/core/types/borrow.d.ts +0 -87
- package/dist/core/types/borrow.js +0 -3
- package/dist/core/types/contractAddresses.d.ts +0 -42
- package/dist/core/types/contractAddresses.js +0 -3
- package/dist/core/types/index.d.ts +0 -10
- package/dist/core/types/index.js +0 -26
- package/dist/core/types/liquidity.d.ts +0 -194
- package/dist/core/types/liquidity.js +0 -3
- package/dist/core/types/pool.d.ts +0 -208
- package/dist/core/types/pool.js +0 -14
- package/dist/core/types/provider.d.ts +0 -45
- package/dist/core/types/provider.js +0 -3
- package/dist/core/types/route.d.ts +0 -62
- package/dist/core/types/route.js +0 -3
- package/dist/core/types/token.d.ts +0 -21
- package/dist/core/types/token.js +0 -3
- package/dist/core/types/tradingLimits.d.ts +0 -91
- package/dist/core/types/tradingLimits.js +0 -3
- package/dist/core/types/tradingMode.d.ts +0 -24
- package/dist/core/types/tradingMode.js +0 -31
- package/dist/core/types/transaction.d.ts +0 -45
- package/dist/core/types/transaction.js +0 -3
- package/dist/esm/cache/routes.js +0 -14644
- package/dist/esm/cache/tokens.js +0 -480
- package/dist/esm/core/abis/activePool.js +0 -10
- package/dist/esm/core/abis/addressesRegistry.js +0 -22
- package/dist/esm/core/abis/bipoolmanager.js +0 -68
- package/dist/esm/core/abis/borrowerOperations.js +0 -85
- package/dist/esm/core/abis/breakerbox.js +0 -4
- package/dist/esm/core/abis/broker.js +0 -5
- package/dist/esm/core/abis/erc20.js +0 -17
- package/dist/esm/core/abis/fpmm.js +0 -45
- package/dist/esm/core/abis/fpmmFactory.js +0 -22
- package/dist/esm/core/abis/hintHelpers.js +0 -10
- package/dist/esm/core/abis/index.js +0 -21
- package/dist/esm/core/abis/liquidityStrategy.js +0 -6
- package/dist/esm/core/abis/multiTroveGetter.js +0 -11
- package/dist/esm/core/abis/priceFeed.js +0 -12
- package/dist/esm/core/abis/pricingmodule.js +0 -2
- package/dist/esm/core/abis/reserve.js +0 -14
- package/dist/esm/core/abis/router.js +0 -41
- package/dist/esm/core/abis/sortedTroves.js +0 -11
- package/dist/esm/core/abis/systemParams.js +0 -10
- package/dist/esm/core/abis/troveManager.js +0 -23
- package/dist/esm/core/abis/troveNFT.js +0 -5
- package/dist/esm/core/abis/virtualPool.js +0 -7
- package/dist/esm/core/abis/virtualPoolFactory.js +0 -13
- package/dist/esm/core/constants/addresses.js +0 -107
- package/dist/esm/core/constants/borrowConstants.js +0 -12
- package/dist/esm/core/constants/borrowRegistries.js +0 -29
- package/dist/esm/core/constants/chainId.js +0 -7
- package/dist/esm/core/constants/contractNames.js +0 -20
- package/dist/esm/core/constants/index.js +0 -5
- package/dist/esm/core/errors/base.js +0 -12
- package/dist/esm/core/errors/index.js +0 -3
- package/dist/esm/core/errors/oracle.js +0 -10
- package/dist/esm/core/errors/router.js +0 -18
- package/dist/esm/core/types/borrow.js +0 -1
- package/dist/esm/core/types/contractAddresses.js +0 -1
- package/dist/esm/core/types/index.js +0 -9
- package/dist/esm/core/types/liquidity.js +0 -1
- package/dist/esm/core/types/pool.js +0 -10
- package/dist/esm/core/types/provider.js +0 -1
- package/dist/esm/core/types/route.js +0 -1
- package/dist/esm/core/types/token.js +0 -1
- package/dist/esm/core/types/tradingLimits.js +0 -1
- package/dist/esm/core/types/tradingMode.js +0 -26
- package/dist/esm/core/types/transaction.js +0 -1
- package/dist/esm/index.js +0 -139
- package/dist/esm/package.json +0 -1
- package/dist/esm/services/borrow/BorrowService.js +0 -455
- package/dist/esm/services/borrow/borrowHelpers.js +0 -3
- package/dist/esm/services/borrow/borrowMath.js +0 -127
- package/dist/esm/services/borrow/index.js +0 -3
- package/dist/esm/services/borrow/internal/borrowApprovalService.js +0 -48
- package/dist/esm/services/borrow/internal/borrowContextStore.js +0 -35
- package/dist/esm/services/borrow/internal/borrowErc20.js +0 -38
- package/dist/esm/services/borrow/internal/borrowHints.js +0 -27
- package/dist/esm/services/borrow/internal/borrowPositionParser.js +0 -82
- package/dist/esm/services/borrow/internal/borrowReadService.js +0 -271
- package/dist/esm/services/borrow/internal/borrowRegistryReader.js +0 -108
- package/dist/esm/services/borrow/internal/borrowTransactionService.js +0 -271
- package/dist/esm/services/borrow/internal/borrowTypes.js +0 -1
- package/dist/esm/services/borrow/internal/borrowValidation.js +0 -89
- package/dist/esm/services/index.js +0 -8
- package/dist/esm/services/liquidity/LiquidityService.js +0 -163
- package/dist/esm/services/liquidity/basicLiquidity.js +0 -162
- package/dist/esm/services/liquidity/index.js +0 -1
- package/dist/esm/services/liquidity/liquidityHelpers.js +0 -95
- package/dist/esm/services/liquidity/rebalance.js +0 -59
- package/dist/esm/services/liquidity/zapHelpers.js +0 -181
- package/dist/esm/services/liquidity/zapIn.js +0 -131
- package/dist/esm/services/liquidity/zapOut.js +0 -248
- package/dist/esm/services/pools/PoolService.js +0 -204
- package/dist/esm/services/pools/index.js +0 -1
- package/dist/esm/services/pools/poolDetails.js +0 -209
- package/dist/esm/services/pools/poolDiscovery.js +0 -112
- package/dist/esm/services/pools/rebalancePreview.js +0 -181
- package/dist/esm/services/quotes/QuoteService.js +0 -85
- package/dist/esm/services/quotes/index.js +0 -1
- package/dist/esm/services/routes/RouteService.js +0 -268
- package/dist/esm/services/routes/index.js +0 -1
- package/dist/esm/services/swap/SwapService.js +0 -247
- package/dist/esm/services/swap/index.js +0 -1
- package/dist/esm/services/tokens/index.js +0 -1
- package/dist/esm/services/tokens/tokenService.js +0 -285
- package/dist/esm/services/trading/TradingLimitsService.js +0 -154
- package/dist/esm/services/trading/TradingService.js +0 -222
- package/dist/esm/services/trading/index.js +0 -2
- package/dist/esm/utils/chainConfig.js +0 -118
- package/dist/esm/utils/costUtils.js +0 -56
- package/dist/esm/utils/deadline.js +0 -22
- package/dist/esm/utils/index.js +0 -9
- package/dist/esm/utils/multicall.js +0 -47
- package/dist/esm/utils/pathEncoder.js +0 -69
- package/dist/esm/utils/rateFeed.js +0 -23
- package/dist/esm/utils/retry.js +0 -24
- package/dist/esm/utils/routeUtils.js +0 -361
- package/dist/esm/utils/routes.js +0 -2
- package/dist/esm/utils/sortUtils.js +0 -33
- package/dist/esm/utils/tokens.js +0 -2
- package/dist/esm/utils/tradingLimits.js +0 -163
- package/dist/esm/utils/validation.js +0 -30
- package/dist/index.d.ts +0 -101
- package/dist/index.js +0 -158
- package/dist/services/borrow/BorrowService.d.ts +0 -381
- package/dist/services/borrow/BorrowService.js +0 -460
- package/dist/services/borrow/borrowHelpers.d.ts +0 -4
- package/dist/services/borrow/borrowHelpers.js +0 -13
- package/dist/services/borrow/borrowMath.d.ts +0 -21
- package/dist/services/borrow/borrowMath.js +0 -137
- package/dist/services/borrow/index.d.ts +0 -4
- package/dist/services/borrow/index.js +0 -20
- package/dist/services/borrow/internal/borrowApprovalService.d.ts +0 -14
- package/dist/services/borrow/internal/borrowApprovalService.js +0 -53
- package/dist/services/borrow/internal/borrowContextStore.d.ts +0 -11
- package/dist/services/borrow/internal/borrowContextStore.js +0 -40
- package/dist/services/borrow/internal/borrowErc20.d.ts +0 -5
- package/dist/services/borrow/internal/borrowErc20.js +0 -43
- package/dist/services/borrow/internal/borrowHints.d.ts +0 -7
- package/dist/services/borrow/internal/borrowHints.js +0 -31
- package/dist/services/borrow/internal/borrowPositionParser.d.ts +0 -4
- package/dist/services/borrow/internal/borrowPositionParser.js +0 -87
- package/dist/services/borrow/internal/borrowReadService.d.ts +0 -31
- package/dist/services/borrow/internal/borrowReadService.js +0 -276
- package/dist/services/borrow/internal/borrowRegistryReader.d.ts +0 -5
- package/dist/services/borrow/internal/borrowRegistryReader.js +0 -113
- package/dist/services/borrow/internal/borrowTransactionService.d.ts +0 -23
- package/dist/services/borrow/internal/borrowTransactionService.js +0 -276
- package/dist/services/borrow/internal/borrowTypes.d.ts +0 -15
- package/dist/services/borrow/internal/borrowTypes.js +0 -3
- package/dist/services/borrow/internal/borrowValidation.d.ts +0 -14
- package/dist/services/borrow/internal/borrowValidation.js +0 -104
- package/dist/services/index.d.ts +0 -9
- package/dist/services/index.js +0 -25
- package/dist/services/liquidity/LiquidityService.d.ts +0 -139
- package/dist/services/liquidity/LiquidityService.js +0 -168
- package/dist/services/liquidity/basicLiquidity.d.ts +0 -11
- package/dist/services/liquidity/basicLiquidity.js +0 -172
- package/dist/services/liquidity/index.d.ts +0 -2
- package/dist/services/liquidity/index.js +0 -18
- package/dist/services/liquidity/liquidityHelpers.d.ts +0 -19
- package/dist/services/liquidity/liquidityHelpers.js +0 -104
- package/dist/services/liquidity/rebalance.d.ts +0 -6
- package/dist/services/liquidity/rebalance.js +0 -64
- package/dist/services/liquidity/zapHelpers.d.ts +0 -100
- package/dist/services/liquidity/zapHelpers.js +0 -192
- package/dist/services/liquidity/zapIn.d.ts +0 -18
- package/dist/services/liquidity/zapIn.js +0 -138
- package/dist/services/liquidity/zapOut.d.ts +0 -9
- package/dist/services/liquidity/zapOut.js +0 -255
- package/dist/services/pools/PoolService.d.ts +0 -69
- package/dist/services/pools/PoolService.js +0 -209
- package/dist/services/pools/index.d.ts +0 -2
- package/dist/services/pools/index.js +0 -18
- package/dist/services/pools/poolDetails.d.ts +0 -13
- package/dist/services/pools/poolDetails.js +0 -216
- package/dist/services/pools/poolDiscovery.d.ts +0 -12
- package/dist/services/pools/poolDiscovery.js +0 -117
- package/dist/services/pools/rebalancePreview.d.ts +0 -5
- package/dist/services/pools/rebalancePreview.js +0 -186
- package/dist/services/quotes/QuoteService.d.ts +0 -51
- package/dist/services/quotes/QuoteService.js +0 -91
- package/dist/services/quotes/index.d.ts +0 -2
- package/dist/services/quotes/index.js +0 -18
- package/dist/services/routes/RouteService.d.ts +0 -117
- package/dist/services/routes/RouteService.js +0 -306
- package/dist/services/routes/index.d.ts +0 -2
- package/dist/services/routes/index.js +0 -18
- package/dist/services/swap/SwapService.d.ts +0 -198
- package/dist/services/swap/SwapService.js +0 -252
- package/dist/services/swap/index.d.ts +0 -2
- package/dist/services/swap/index.js +0 -18
- package/dist/services/tokens/index.d.ts +0 -2
- package/dist/services/tokens/index.js +0 -18
- package/dist/services/tokens/tokenService.d.ts +0 -55
- package/dist/services/tokens/tokenService.js +0 -290
- package/dist/services/trading/TradingLimitsService.d.ts +0 -38
- package/dist/services/trading/TradingLimitsService.js +0 -159
- package/dist/services/trading/TradingService.d.ts +0 -115
- package/dist/services/trading/TradingService.js +0 -227
- package/dist/services/trading/index.d.ts +0 -3
- package/dist/services/trading/index.js +0 -19
- package/dist/utils/chainConfig.d.ts +0 -16
- package/dist/utils/chainConfig.js +0 -123
- package/dist/utils/costUtils.d.ts +0 -12
- package/dist/utils/costUtils.js +0 -60
- package/dist/utils/deadline.d.ts +0 -21
- package/dist/utils/deadline.js +0 -26
- package/dist/utils/index.d.ts +0 -10
- package/dist/utils/index.js +0 -26
- package/dist/utils/multicall.d.ts +0 -30
- package/dist/utils/multicall.js +0 -52
- package/dist/utils/pathEncoder.d.ts +0 -34
- package/dist/utils/pathEncoder.js +0 -73
- package/dist/utils/rateFeed.d.ts +0 -18
- package/dist/utils/rateFeed.js +0 -27
- package/dist/utils/retry.d.ts +0 -12
- package/dist/utils/retry.js +0 -28
- package/dist/utils/routeUtils.d.ts +0 -295
- package/dist/utils/routeUtils.js +0 -371
- package/dist/utils/routes.d.ts +0 -3
- package/dist/utils/routes.js +0 -8
- package/dist/utils/sortUtils.d.ts +0 -24
- package/dist/utils/sortUtils.js +0 -39
- package/dist/utils/tokens.d.ts +0 -2
- package/dist/utils/tokens.js +0 -13
- package/dist/utils/tradingLimits.d.ts +0 -41
- package/dist/utils/tradingLimits.js +0 -171
- package/dist/utils/validation.d.ts +0 -19
- package/dist/utils/validation.js +0 -34
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fetchFPMMPoolDetails = fetchFPMMPoolDetails;
|
|
4
|
-
exports.fetchFPMMPoolDetailsBatch = fetchFPMMPoolDetailsBatch;
|
|
5
|
-
exports.fetchVirtualPoolDetails = fetchVirtualPoolDetails;
|
|
6
|
-
exports.fetchVirtualPoolDetailsBatch = fetchVirtualPoolDetailsBatch;
|
|
7
|
-
const constants_1 = require("../../core/constants");
|
|
8
|
-
const abis_1 = require("../../core/abis");
|
|
9
|
-
const viem_1 = require("viem");
|
|
10
|
-
const multicall_1 = require("../../utils/multicall");
|
|
11
|
-
const FPMM_FIXED_RESULT_COUNT = 8;
|
|
12
|
-
const VIRTUAL_RESULT_COUNT = 3;
|
|
13
|
-
/**
|
|
14
|
-
* Fetches enriched details for an FPMM pool
|
|
15
|
-
*/
|
|
16
|
-
async function fetchFPMMPoolDetails(publicClient, chainId, pool) {
|
|
17
|
-
const [details] = await fetchFPMMPoolDetailsBatch(publicClient, chainId, [pool]);
|
|
18
|
-
return details;
|
|
19
|
-
}
|
|
20
|
-
async function fetchFPMMPoolDetailsBatch(publicClient, chainId, pools) {
|
|
21
|
-
if (pools.length === 0) {
|
|
22
|
-
return [];
|
|
23
|
-
}
|
|
24
|
-
const openLiquidityStrategy = getOpenLiquidityStrategy(chainId);
|
|
25
|
-
const contracts = pools.flatMap((pool) => buildFPMMContracts(pool, openLiquidityStrategy));
|
|
26
|
-
const results = await (0, multicall_1.multicall)(publicClient, contracts);
|
|
27
|
-
const strategyCheckCount = openLiquidityStrategy ? 1 : 0;
|
|
28
|
-
const perPoolResultCount = FPMM_FIXED_RESULT_COUNT + strategyCheckCount + 1;
|
|
29
|
-
return pools.map((pool, index) => {
|
|
30
|
-
const offset = index * perPoolResultCount;
|
|
31
|
-
const poolResults = results.slice(offset, offset + perPoolResultCount);
|
|
32
|
-
return parseFPMMPoolDetails(pool, openLiquidityStrategy, poolResults);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
function buildFPMMContracts(pool, openLiquidityStrategy) {
|
|
36
|
-
const address = pool.poolAddr;
|
|
37
|
-
return [
|
|
38
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'getReserves' },
|
|
39
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'decimals0' },
|
|
40
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'decimals1' },
|
|
41
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'lpFee' },
|
|
42
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'protocolFee' },
|
|
43
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'rebalanceIncentive' },
|
|
44
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'rebalanceThresholdAbove' },
|
|
45
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'rebalanceThresholdBelow' },
|
|
46
|
-
...(openLiquidityStrategy
|
|
47
|
-
? [{
|
|
48
|
-
address,
|
|
49
|
-
abi: abis_1.FPMM_ABI,
|
|
50
|
-
functionName: 'liquidityStrategy',
|
|
51
|
-
args: [openLiquidityStrategy],
|
|
52
|
-
}]
|
|
53
|
-
: []),
|
|
54
|
-
{ address, abi: abis_1.FPMM_ABI, functionName: 'getRebalancingState' },
|
|
55
|
-
];
|
|
56
|
-
}
|
|
57
|
-
function parseFPMMPoolDetails(pool, openLiquidityStrategy, results) {
|
|
58
|
-
try {
|
|
59
|
-
const reservesRes = results[0];
|
|
60
|
-
const decimals0Res = results[1];
|
|
61
|
-
const decimals1Res = results[2];
|
|
62
|
-
const lpFeeRes = results[3];
|
|
63
|
-
const protocolFeeRes = results[4];
|
|
64
|
-
const rebalanceIncentiveRes = results[5];
|
|
65
|
-
const thresholdAboveRes = results[6];
|
|
66
|
-
const thresholdBelowRes = results[7];
|
|
67
|
-
if (!reservesRes ||
|
|
68
|
-
!decimals0Res ||
|
|
69
|
-
!decimals1Res ||
|
|
70
|
-
!lpFeeRes ||
|
|
71
|
-
!protocolFeeRes ||
|
|
72
|
-
!rebalanceIncentiveRes ||
|
|
73
|
-
!thresholdAboveRes ||
|
|
74
|
-
!thresholdBelowRes ||
|
|
75
|
-
reservesRes.status === 'failure' ||
|
|
76
|
-
decimals0Res.status === 'failure' ||
|
|
77
|
-
decimals1Res.status === 'failure' ||
|
|
78
|
-
lpFeeRes.status === 'failure' ||
|
|
79
|
-
protocolFeeRes.status === 'failure' ||
|
|
80
|
-
rebalanceIncentiveRes.status === 'failure' ||
|
|
81
|
-
thresholdAboveRes.status === 'failure' ||
|
|
82
|
-
thresholdBelowRes.status === 'failure') {
|
|
83
|
-
throw new Error('One or more core pool reads failed');
|
|
84
|
-
}
|
|
85
|
-
const [reserve0, reserve1, blockTimestampLast] = reservesRes.result;
|
|
86
|
-
const lpFeeBps = lpFeeRes.result;
|
|
87
|
-
const protocolFeeBps = protocolFeeRes.result;
|
|
88
|
-
const rebalanceIncentiveBps = rebalanceIncentiveRes.result;
|
|
89
|
-
const thresholdAboveBps = thresholdAboveRes.result;
|
|
90
|
-
const thresholdBelowBps = thresholdBelowRes.result;
|
|
91
|
-
const strategyCheckCount = openLiquidityStrategy ? 1 : 0;
|
|
92
|
-
const openStrategyResult = strategyCheckCount > 0 ? results[FPMM_FIXED_RESULT_COUNT] : null;
|
|
93
|
-
const liquidityStrategy = openLiquidityStrategy &&
|
|
94
|
-
openStrategyResult?.status === 'success' &&
|
|
95
|
-
openStrategyResult.result === true
|
|
96
|
-
? openLiquidityStrategy
|
|
97
|
-
: null;
|
|
98
|
-
const rebalancingRes = results[FPMM_FIXED_RESULT_COUNT + strategyCheckCount];
|
|
99
|
-
let pricing = null;
|
|
100
|
-
let inBand = null;
|
|
101
|
-
if (rebalancingRes?.status === 'success') {
|
|
102
|
-
const [oraclePriceNum, oraclePriceDen, reservePriceNum, reservePriceDen, reservePriceAboveOraclePrice, rebalanceThreshold, priceDifference,] = rebalancingRes.result;
|
|
103
|
-
pricing = {
|
|
104
|
-
oraclePriceNum,
|
|
105
|
-
oraclePriceDen,
|
|
106
|
-
oraclePrice: Number(oraclePriceNum) / Number(oraclePriceDen),
|
|
107
|
-
reservePriceNum,
|
|
108
|
-
reservePriceDen,
|
|
109
|
-
reservePrice: Number(reservePriceNum) / Number(reservePriceDen),
|
|
110
|
-
priceDifferenceBps: priceDifference,
|
|
111
|
-
priceDifferencePercent: Number(priceDifference) / 100,
|
|
112
|
-
reservePriceAboveOraclePrice,
|
|
113
|
-
};
|
|
114
|
-
inBand = priceDifference < BigInt(rebalanceThreshold);
|
|
115
|
-
}
|
|
116
|
-
return {
|
|
117
|
-
...pool,
|
|
118
|
-
poolType: 'FPMM',
|
|
119
|
-
scalingFactor0: decimals0Res.result,
|
|
120
|
-
scalingFactor1: decimals1Res.result,
|
|
121
|
-
reserve0,
|
|
122
|
-
reserve1,
|
|
123
|
-
blockTimestampLast,
|
|
124
|
-
pricing,
|
|
125
|
-
fees: {
|
|
126
|
-
lpFeeBps,
|
|
127
|
-
lpFeePercent: Number(lpFeeBps) / 100,
|
|
128
|
-
protocolFeeBps,
|
|
129
|
-
protocolFeePercent: Number(protocolFeeBps) / 100,
|
|
130
|
-
totalFeePercent: (Number(lpFeeBps) + Number(protocolFeeBps)) / 100,
|
|
131
|
-
},
|
|
132
|
-
rebalancing: {
|
|
133
|
-
rebalanceIncentiveBps,
|
|
134
|
-
rebalanceIncentivePercent: Number(rebalanceIncentiveBps) / 100,
|
|
135
|
-
rebalanceThresholdAboveBps: thresholdAboveBps,
|
|
136
|
-
rebalanceThresholdAbovePercent: Number(thresholdAboveBps) / 100,
|
|
137
|
-
rebalanceThresholdBelowBps: thresholdBelowBps,
|
|
138
|
-
rebalanceThresholdBelowPercent: Number(thresholdBelowBps) / 100,
|
|
139
|
-
inBand,
|
|
140
|
-
liquidityStrategy,
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
catch (error) {
|
|
145
|
-
throw new Error(`Failed to fetch FPMM pool details for ${pool.poolAddr}: ${error.message}`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Fetches enriched details for a Virtual pool
|
|
150
|
-
*/
|
|
151
|
-
async function fetchVirtualPoolDetails(publicClient, pool) {
|
|
152
|
-
const [details] = await fetchVirtualPoolDetailsBatch(publicClient, [pool]);
|
|
153
|
-
return details;
|
|
154
|
-
}
|
|
155
|
-
async function fetchVirtualPoolDetailsBatch(publicClient, pools) {
|
|
156
|
-
if (pools.length === 0) {
|
|
157
|
-
return [];
|
|
158
|
-
}
|
|
159
|
-
const contracts = pools.flatMap((pool) => buildVirtualContracts(pool));
|
|
160
|
-
const results = await (0, multicall_1.multicall)(publicClient, contracts);
|
|
161
|
-
return pools.map((pool, index) => {
|
|
162
|
-
const offset = index * VIRTUAL_RESULT_COUNT;
|
|
163
|
-
const poolResults = results.slice(offset, offset + VIRTUAL_RESULT_COUNT);
|
|
164
|
-
return parseVirtualPoolDetails(pool, poolResults);
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
function buildVirtualContracts(pool) {
|
|
168
|
-
const address = pool.poolAddr;
|
|
169
|
-
return [
|
|
170
|
-
{ address, abi: abis_1.VIRTUAL_POOL_ABI, functionName: 'getReserves' },
|
|
171
|
-
{ address, abi: abis_1.VIRTUAL_POOL_ABI, functionName: 'protocolFee' },
|
|
172
|
-
{ address, abi: abis_1.VIRTUAL_POOL_ABI, functionName: 'metadata' },
|
|
173
|
-
];
|
|
174
|
-
}
|
|
175
|
-
function parseVirtualPoolDetails(pool, results) {
|
|
176
|
-
try {
|
|
177
|
-
if (results.length !== VIRTUAL_RESULT_COUNT ||
|
|
178
|
-
results[0].status === 'failure' ||
|
|
179
|
-
results[1].status === 'failure' ||
|
|
180
|
-
results[2].status === 'failure') {
|
|
181
|
-
throw new Error('One or more virtual pool reads failed');
|
|
182
|
-
}
|
|
183
|
-
const [reserve0, reserve1, blockTimestampLast] = results[0].result;
|
|
184
|
-
const [dec0, dec1] = results[2].result;
|
|
185
|
-
const spreadBps = results[1].result;
|
|
186
|
-
return {
|
|
187
|
-
...pool,
|
|
188
|
-
poolType: 'Virtual',
|
|
189
|
-
scalingFactor0: dec0,
|
|
190
|
-
scalingFactor1: dec1,
|
|
191
|
-
reserve0,
|
|
192
|
-
reserve1,
|
|
193
|
-
blockTimestampLast,
|
|
194
|
-
spreadBps,
|
|
195
|
-
spreadPercent: Number(spreadBps) / 100,
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
throw new Error(`Failed to fetch Virtual pool details for ${pool.poolAddr}: ${error.message}`);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Returns the configured Open Liquidity Strategy for the given chain.
|
|
204
|
-
*/
|
|
205
|
-
function getOpenLiquidityStrategy(chainId) {
|
|
206
|
-
const strategyAddress = (0, constants_1.tryGetContractAddress)(chainId, 'OpenLiquidityStrategy');
|
|
207
|
-
if (!strategyAddress)
|
|
208
|
-
return null;
|
|
209
|
-
try {
|
|
210
|
-
return (0, viem_1.getAddress)(strategyAddress);
|
|
211
|
-
}
|
|
212
|
-
catch {
|
|
213
|
-
return null;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=poolDetails.js.map
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Pool } from '../../core/types';
|
|
2
|
-
import { PublicClient } from 'viem';
|
|
3
|
-
/**
|
|
4
|
-
* Fetches all FPMM pools from the FPMM Factory
|
|
5
|
-
*/
|
|
6
|
-
export declare function fetchFPMMPools(publicClient: PublicClient, chainId: number): Promise<Pool[]>;
|
|
7
|
-
/**
|
|
8
|
-
* Fetches all active Virtual pools from the VirtualPoolFactory,
|
|
9
|
-
* then resolves token pairs and exchange IDs from each pool and BiPoolManager.
|
|
10
|
-
*/
|
|
11
|
-
export declare function fetchVirtualPools(publicClient: PublicClient, chainId: number): Promise<Pool[]>;
|
|
12
|
-
//# sourceMappingURL=poolDiscovery.d.ts.map
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fetchFPMMPools = fetchFPMMPools;
|
|
4
|
-
exports.fetchVirtualPools = fetchVirtualPools;
|
|
5
|
-
const constants_1 = require("../../core/constants");
|
|
6
|
-
const types_1 = require("../../core/types");
|
|
7
|
-
const abis_1 = require("../../core/abis");
|
|
8
|
-
const sortUtils_1 = require("../../utils/sortUtils");
|
|
9
|
-
const multicall_1 = require("../../utils/multicall");
|
|
10
|
-
/**
|
|
11
|
-
* Fetches all FPMM pools from the FPMM Factory
|
|
12
|
-
*/
|
|
13
|
-
async function fetchFPMMPools(publicClient, chainId) {
|
|
14
|
-
const fpmmFactoryAddress = (0, constants_1.tryGetContractAddress)(chainId, 'FPMMFactory');
|
|
15
|
-
if (!fpmmFactoryAddress) {
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
try {
|
|
19
|
-
// Get all deployed FPMM pool addresses
|
|
20
|
-
const poolAddresses = (await publicClient.readContract({
|
|
21
|
-
address: fpmmFactoryAddress,
|
|
22
|
-
abi: abis_1.FPMM_FACTORY_ABI,
|
|
23
|
-
functionName: 'deployedFPMMAddresses',
|
|
24
|
-
}));
|
|
25
|
-
if (poolAddresses.length === 0) {
|
|
26
|
-
return [];
|
|
27
|
-
}
|
|
28
|
-
// Batch all token0/token1 reads into a single multicall
|
|
29
|
-
const contracts = poolAddresses.flatMap((poolAddress) => [
|
|
30
|
-
{ address: poolAddress, abi: abis_1.FPMM_ABI, functionName: 'token0' },
|
|
31
|
-
{ address: poolAddress, abi: abis_1.FPMM_ABI, functionName: 'token1' },
|
|
32
|
-
]);
|
|
33
|
-
const results = await (0, multicall_1.multicall)(publicClient, contracts);
|
|
34
|
-
return poolAddresses.map((poolAddress, i) => {
|
|
35
|
-
const token0Result = results[i * 2];
|
|
36
|
-
const token1Result = results[i * 2 + 1];
|
|
37
|
-
if (token0Result.status === 'failure' || token1Result.status === 'failure') {
|
|
38
|
-
throw new Error(`Failed to read token addresses for pool ${poolAddress}`);
|
|
39
|
-
}
|
|
40
|
-
return {
|
|
41
|
-
factoryAddr: fpmmFactoryAddress,
|
|
42
|
-
poolAddr: poolAddress,
|
|
43
|
-
token0: token0Result.result,
|
|
44
|
-
token1: token1Result.result,
|
|
45
|
-
poolType: types_1.PoolType.FPMM,
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
throw new Error(`Failed to fetch FPMM pools: ${error.message}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Fetches all active Virtual pools from the VirtualPoolFactory,
|
|
55
|
-
* then resolves token pairs and exchange IDs from each pool and BiPoolManager.
|
|
56
|
-
*/
|
|
57
|
-
async function fetchVirtualPools(publicClient, chainId) {
|
|
58
|
-
const virtualPoolFactoryAddress = (0, constants_1.tryGetContractAddress)(chainId, 'VirtualPoolFactory');
|
|
59
|
-
const biPoolManagerAddress = (0, constants_1.tryGetContractAddress)(chainId, 'BiPoolManager');
|
|
60
|
-
if (!virtualPoolFactoryAddress || !biPoolManagerAddress) {
|
|
61
|
-
return [];
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
// Fetch active pool addresses and all exchanges in parallel
|
|
65
|
-
const [poolAddresses, exchangesData] = await Promise.all([
|
|
66
|
-
publicClient.readContract({
|
|
67
|
-
address: virtualPoolFactoryAddress,
|
|
68
|
-
abi: abis_1.VIRTUAL_POOL_FACTORY_ABI,
|
|
69
|
-
functionName: 'getAllPools',
|
|
70
|
-
}),
|
|
71
|
-
publicClient.readContract({
|
|
72
|
-
address: biPoolManagerAddress,
|
|
73
|
-
abi: abis_1.BIPOOL_MANAGER_ABI,
|
|
74
|
-
functionName: 'getExchanges',
|
|
75
|
-
}),
|
|
76
|
-
]);
|
|
77
|
-
if (poolAddresses.length === 0) {
|
|
78
|
-
return [];
|
|
79
|
-
}
|
|
80
|
-
// Build a lookup from sorted token pair to exchangeId
|
|
81
|
-
const tokenPairToExchangeId = new Map();
|
|
82
|
-
for (const exchange of exchangesData) {
|
|
83
|
-
if (exchange.assets.length === 2) {
|
|
84
|
-
const [t0, t1] = (0, sortUtils_1.sortTokenAddresses)(exchange.assets[0], exchange.assets[1]);
|
|
85
|
-
tokenPairToExchangeId.set(`${t0}:${t1}`, exchange.exchangeId);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// Batch all tokens() reads into a single multicall
|
|
89
|
-
const contracts = poolAddresses.map((poolAddress) => ({
|
|
90
|
-
address: poolAddress,
|
|
91
|
-
abi: abis_1.VIRTUAL_POOL_ABI,
|
|
92
|
-
functionName: 'tokens',
|
|
93
|
-
}));
|
|
94
|
-
const results = await (0, multicall_1.multicall)(publicClient, contracts);
|
|
95
|
-
return poolAddresses.map((poolAddress, i) => {
|
|
96
|
-
const result = results[i];
|
|
97
|
-
if (result.status === 'failure') {
|
|
98
|
-
throw new Error(`Failed to read token addresses for virtual pool ${poolAddress}`);
|
|
99
|
-
}
|
|
100
|
-
const [token0, token1] = result.result;
|
|
101
|
-
const [sorted0, sorted1] = (0, sortUtils_1.sortTokenAddresses)(token0, token1);
|
|
102
|
-
const exchangeId = tokenPairToExchangeId.get(`${sorted0}:${sorted1}`);
|
|
103
|
-
return {
|
|
104
|
-
factoryAddr: virtualPoolFactoryAddress,
|
|
105
|
-
poolAddr: poolAddress,
|
|
106
|
-
token0: sorted0,
|
|
107
|
-
token1: sorted1,
|
|
108
|
-
poolType: types_1.PoolType.Virtual,
|
|
109
|
-
exchangeId,
|
|
110
|
-
};
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
throw new Error(`Failed to fetch Virtual pools: ${error.message}`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=poolDiscovery.js.map
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type PublicClient } from 'viem';
|
|
2
|
-
import type { PoolDetails, PoolRebalancePreview } from '../../core/types';
|
|
3
|
-
export declare function fetchPoolRebalancePreview(publicClient: PublicClient, detail: PoolDetails): Promise<PoolRebalancePreview | null>;
|
|
4
|
-
export declare function fetchPoolRebalancePreviewBatch(publicClient: PublicClient, details: PoolDetails[]): Promise<Array<PoolRebalancePreview | null>>;
|
|
5
|
-
//# sourceMappingURL=rebalancePreview.d.ts.map
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fetchPoolRebalancePreview = fetchPoolRebalancePreview;
|
|
4
|
-
exports.fetchPoolRebalancePreviewBatch = fetchPoolRebalancePreviewBatch;
|
|
5
|
-
const viem_1 = require("viem");
|
|
6
|
-
const abis_1 = require("../../core/abis");
|
|
7
|
-
const multicall_1 = require("../../utils/multicall");
|
|
8
|
-
// Liquidity strategy incentive rates are stored as 18-decimal percentages.
|
|
9
|
-
const FEE_DENOMINATOR = 10n ** 18n;
|
|
10
|
-
function toBigIntValue(value) {
|
|
11
|
-
return typeof value === 'bigint' ? value : BigInt(value);
|
|
12
|
-
}
|
|
13
|
-
function toNumberValue(value) {
|
|
14
|
-
return typeof value === 'number' ? value : Number(value);
|
|
15
|
-
}
|
|
16
|
-
function parseDirection(value) {
|
|
17
|
-
const normalized = toNumberValue(value);
|
|
18
|
-
if (normalized === 0)
|
|
19
|
-
return 'Expand';
|
|
20
|
-
if (normalized === 1)
|
|
21
|
-
return 'Contract';
|
|
22
|
-
throw new Error(`Unsupported liquidity strategy direction: ${normalized}`);
|
|
23
|
-
}
|
|
24
|
-
function parsePoolConfig(raw) {
|
|
25
|
-
return {
|
|
26
|
-
isToken0Debt: raw[0],
|
|
27
|
-
lastRebalance: toNumberValue(raw[1]),
|
|
28
|
-
rebalanceCooldown: toNumberValue(raw[2]),
|
|
29
|
-
protocolFeeRecipient: raw[3],
|
|
30
|
-
liquiditySourceIncentiveExpansion: toBigIntValue(raw[4]),
|
|
31
|
-
protocolIncentiveExpansion: toBigIntValue(raw[5]),
|
|
32
|
-
liquiditySourceIncentiveContraction: toBigIntValue(raw[6]),
|
|
33
|
-
protocolIncentiveContraction: toBigIntValue(raw[7]),
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
function parseContext(raw) {
|
|
37
|
-
return {
|
|
38
|
-
pool: raw[0],
|
|
39
|
-
reserves: {
|
|
40
|
-
reserveNum: toBigIntValue(raw[1][0]),
|
|
41
|
-
reserveDen: toBigIntValue(raw[1][1]),
|
|
42
|
-
},
|
|
43
|
-
prices: {
|
|
44
|
-
oracleNum: toBigIntValue(raw[2][0]),
|
|
45
|
-
oracleDen: toBigIntValue(raw[2][1]),
|
|
46
|
-
poolPriceAbove: raw[2][2],
|
|
47
|
-
rebalanceThreshold: toNumberValue(raw[2][3]),
|
|
48
|
-
},
|
|
49
|
-
token0: raw[3],
|
|
50
|
-
token1: raw[4],
|
|
51
|
-
token0Dec: toBigIntValue(raw[5]),
|
|
52
|
-
token1Dec: toBigIntValue(raw[6]),
|
|
53
|
-
isToken0Debt: raw[7],
|
|
54
|
-
incentives: {
|
|
55
|
-
liquiditySourceIncentiveExpansion: toBigIntValue(raw[8][0]),
|
|
56
|
-
protocolIncentiveExpansion: toBigIntValue(raw[8][1]),
|
|
57
|
-
liquiditySourceIncentiveContraction: toBigIntValue(raw[8][2]),
|
|
58
|
-
protocolIncentiveContraction: toBigIntValue(raw[8][3]),
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
function parseAction(raw) {
|
|
63
|
-
return {
|
|
64
|
-
dir: parseDirection(raw[0]),
|
|
65
|
-
amount0Out: toBigIntValue(raw[1]),
|
|
66
|
-
amount1Out: toBigIntValue(raw[2]),
|
|
67
|
-
amountOwedToPool: toBigIntValue(raw[3]),
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
function isPreviewEligible(detail) {
|
|
71
|
-
return (detail.poolType === 'FPMM' &&
|
|
72
|
-
detail.pricing !== null &&
|
|
73
|
-
detail.rebalancing.inBand === false &&
|
|
74
|
-
!!detail.rebalancing.liquidityStrategy);
|
|
75
|
-
}
|
|
76
|
-
function buildPreview(detail, strategyAddress, config, context, action) {
|
|
77
|
-
const debtToken = context.isToken0Debt ? context.token0 : context.token1;
|
|
78
|
-
const collateralToken = context.isToken0Debt ? context.token1 : context.token0;
|
|
79
|
-
const inputToken = action.dir === 'Expand' ? debtToken : collateralToken;
|
|
80
|
-
const outputToken = action.dir === 'Expand' ? collateralToken : debtToken;
|
|
81
|
-
const amountTransferredValue = action.amount0Out > 0n ? action.amount0Out : action.amount1Out;
|
|
82
|
-
const protocolRate = action.dir === 'Expand'
|
|
83
|
-
? config.protocolIncentiveExpansion
|
|
84
|
-
: config.protocolIncentiveContraction;
|
|
85
|
-
const liquiditySourceRate = action.dir === 'Expand'
|
|
86
|
-
? config.liquiditySourceIncentiveExpansion
|
|
87
|
-
: config.liquiditySourceIncentiveContraction;
|
|
88
|
-
const protocolIncentiveAmount = (amountTransferredValue * protocolRate) / FEE_DENOMINATOR;
|
|
89
|
-
const liquiditySourceBase = amountTransferredValue > protocolIncentiveAmount
|
|
90
|
-
? amountTransferredValue - protocolIncentiveAmount
|
|
91
|
-
: 0n;
|
|
92
|
-
const liquiditySourceIncentiveAmount = (liquiditySourceBase * liquiditySourceRate) / FEE_DENOMINATOR;
|
|
93
|
-
return {
|
|
94
|
-
poolAddress: detail.poolAddr,
|
|
95
|
-
strategyAddress,
|
|
96
|
-
direction: action.dir,
|
|
97
|
-
config,
|
|
98
|
-
context,
|
|
99
|
-
action,
|
|
100
|
-
inputToken,
|
|
101
|
-
outputToken,
|
|
102
|
-
amountRequired: {
|
|
103
|
-
token: inputToken,
|
|
104
|
-
amount: action.amountOwedToPool,
|
|
105
|
-
},
|
|
106
|
-
amountTransferred: {
|
|
107
|
-
token: outputToken,
|
|
108
|
-
amount: amountTransferredValue,
|
|
109
|
-
},
|
|
110
|
-
protocolIncentive: {
|
|
111
|
-
token: outputToken,
|
|
112
|
-
amount: protocolIncentiveAmount,
|
|
113
|
-
},
|
|
114
|
-
liquiditySourceIncentive: {
|
|
115
|
-
token: outputToken,
|
|
116
|
-
amount: liquiditySourceIncentiveAmount,
|
|
117
|
-
},
|
|
118
|
-
approvalToken: inputToken,
|
|
119
|
-
approvalSpender: strategyAddress,
|
|
120
|
-
approvalAmount: action.amountOwedToPool,
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
async function fetchPoolRebalancePreview(publicClient, detail) {
|
|
124
|
-
const [preview] = await fetchPoolRebalancePreviewBatch(publicClient, [detail]);
|
|
125
|
-
return preview;
|
|
126
|
-
}
|
|
127
|
-
async function fetchPoolRebalancePreviewBatch(publicClient, details) {
|
|
128
|
-
const previews = details.map(() => null);
|
|
129
|
-
const eligibleTargets = details.flatMap((detail, index) => {
|
|
130
|
-
if (!isPreviewEligible(detail))
|
|
131
|
-
return [];
|
|
132
|
-
const strategyAddress = detail.rebalancing.liquidityStrategy;
|
|
133
|
-
if (!strategyAddress)
|
|
134
|
-
return [];
|
|
135
|
-
try {
|
|
136
|
-
return [
|
|
137
|
-
{
|
|
138
|
-
index,
|
|
139
|
-
detail,
|
|
140
|
-
strategyAddress: (0, viem_1.getAddress)(strategyAddress),
|
|
141
|
-
},
|
|
142
|
-
];
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
return [];
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
if (eligibleTargets.length === 0) {
|
|
149
|
-
return previews;
|
|
150
|
-
}
|
|
151
|
-
const contracts = eligibleTargets.flatMap(({ detail, strategyAddress }) => [
|
|
152
|
-
{
|
|
153
|
-
address: strategyAddress,
|
|
154
|
-
abi: abis_1.LIQUIDITY_STRATEGY_ABI,
|
|
155
|
-
functionName: 'poolConfigs',
|
|
156
|
-
args: [detail.poolAddr],
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
address: strategyAddress,
|
|
160
|
-
abi: abis_1.LIQUIDITY_STRATEGY_ABI,
|
|
161
|
-
functionName: 'determineAction',
|
|
162
|
-
args: [detail.poolAddr],
|
|
163
|
-
},
|
|
164
|
-
]);
|
|
165
|
-
const results = await (0, multicall_1.multicall)(publicClient, contracts);
|
|
166
|
-
eligibleTargets.forEach((target, targetIndex) => {
|
|
167
|
-
const configResult = results[targetIndex * 2];
|
|
168
|
-
const determineActionResult = results[targetIndex * 2 + 1];
|
|
169
|
-
if (!configResult || !determineActionResult)
|
|
170
|
-
return;
|
|
171
|
-
if (configResult.status === 'failure' || determineActionResult.status === 'failure')
|
|
172
|
-
return;
|
|
173
|
-
try {
|
|
174
|
-
const config = parsePoolConfig(configResult.result);
|
|
175
|
-
const [rawContext, rawAction] = determineActionResult.result;
|
|
176
|
-
const context = parseContext(rawContext);
|
|
177
|
-
const action = parseAction(rawAction);
|
|
178
|
-
previews[target.index] = buildPreview(target.detail, target.strategyAddress, config, context, action);
|
|
179
|
-
}
|
|
180
|
-
catch {
|
|
181
|
-
previews[target.index] = null;
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
return previews;
|
|
185
|
-
}
|
|
186
|
-
//# sourceMappingURL=rebalancePreview.js.map
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { PublicClient } from 'viem';
|
|
2
|
-
import { RouteService } from '../routes';
|
|
3
|
-
import { Route } from '../../core/types';
|
|
4
|
-
/**
|
|
5
|
-
* Service for getting swap quotes from the Mento protocol.
|
|
6
|
-
* Calculates expected output amounts for trades without executing them.
|
|
7
|
-
*/
|
|
8
|
-
export declare class QuoteService {
|
|
9
|
-
private publicClient;
|
|
10
|
-
private chainId;
|
|
11
|
-
private routeService;
|
|
12
|
-
constructor(publicClient: PublicClient, chainId: number, routeService: RouteService);
|
|
13
|
-
/**
|
|
14
|
-
* Calculates the expected output amount for a swap between two tokens.
|
|
15
|
-
*
|
|
16
|
-
* @param tokenIn - The address of the input token (e.g., '0x765DE816845861e75A25fCA122bb6898B8B1282a')
|
|
17
|
-
* @param tokenOut - The address of the output token (e.g., '0x471EcE3750Da237f93B8E339c536989b8978a438')
|
|
18
|
-
* @param amountIn - The amount of input tokens (in wei/smallest unit)
|
|
19
|
-
* @param route - Optional pre-fetched route. If not provided, the optimal route will be found automatically.
|
|
20
|
-
* @returns The expected output amount (in wei/smallest unit)
|
|
21
|
-
* @throws {RouteNotFoundError} If no route exists between the token pair
|
|
22
|
-
* @throws {Error} If the Router contract call fails
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```typescript
|
|
26
|
-
* // Calculate output for 100 USDm
|
|
27
|
-
* const amountIn = BigInt(100) * BigInt(10 ** 18) // 100 USDm in wei
|
|
28
|
-
* const expectedOut = await quoteService.getAmountOut(
|
|
29
|
-
* '0x765DE816845861e75A25fCA122bb6898B8B1282a', // USDm
|
|
30
|
-
* '0x471EcE3750Da237f93B8E339c536989b8978a438', // CELO
|
|
31
|
-
* amountIn
|
|
32
|
-
* )
|
|
33
|
-
* console.log(`Expected CELO output: ${expectedOut}`)
|
|
34
|
-
*
|
|
35
|
-
* // Or provide a pre-fetched route for better performance
|
|
36
|
-
* const route = await routeService.findRoute(
|
|
37
|
-
* '0x765DE816845861e75A25fCA122bb6898B8B1282a',
|
|
38
|
-
* '0x471EcE3750Da237f93B8E339c536989b8978a438'
|
|
39
|
-
* )
|
|
40
|
-
* const expectedOut2 = await quoteService.getAmountOut(
|
|
41
|
-
* '0x765DE816845861e75A25fCA122bb6898B8B1282a',
|
|
42
|
-
* '0x471EcE3750Da237f93B8E339c536989b8978a438',
|
|
43
|
-
* amountIn,
|
|
44
|
-
* route
|
|
45
|
-
* )
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
|
-
getAmountOut(tokenIn: string, tokenOut: string, amountIn: bigint, route?: Route): Promise<bigint>;
|
|
49
|
-
}
|
|
50
|
-
export declare function getAmountOutForRoute(publicClient: PublicClient, chainId: number, tokenIn: string, tokenOut: string, amountIn: bigint, route: Route): Promise<bigint>;
|
|
51
|
-
//# sourceMappingURL=QuoteService.d.ts.map
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.QuoteService = void 0;
|
|
4
|
-
exports.getAmountOutForRoute = getAmountOutForRoute;
|
|
5
|
-
const viem_1 = require("viem");
|
|
6
|
-
const abis_1 = require("../../core/abis");
|
|
7
|
-
const constants_1 = require("../../core/constants");
|
|
8
|
-
const errors_1 = require("../../core/errors");
|
|
9
|
-
const pathEncoder_1 = require("../../utils/pathEncoder");
|
|
10
|
-
const validation_1 = require("../../utils/validation");
|
|
11
|
-
/**
|
|
12
|
-
* Service for getting swap quotes from the Mento protocol.
|
|
13
|
-
* Calculates expected output amounts for trades without executing them.
|
|
14
|
-
*/
|
|
15
|
-
class QuoteService {
|
|
16
|
-
constructor(publicClient, chainId, routeService) {
|
|
17
|
-
this.publicClient = publicClient;
|
|
18
|
-
this.chainId = chainId;
|
|
19
|
-
this.routeService = routeService;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Calculates the expected output amount for a swap between two tokens.
|
|
23
|
-
*
|
|
24
|
-
* @param tokenIn - The address of the input token (e.g., '0x765DE816845861e75A25fCA122bb6898B8B1282a')
|
|
25
|
-
* @param tokenOut - The address of the output token (e.g., '0x471EcE3750Da237f93B8E339c536989b8978a438')
|
|
26
|
-
* @param amountIn - The amount of input tokens (in wei/smallest unit)
|
|
27
|
-
* @param route - Optional pre-fetched route. If not provided, the optimal route will be found automatically.
|
|
28
|
-
* @returns The expected output amount (in wei/smallest unit)
|
|
29
|
-
* @throws {RouteNotFoundError} If no route exists between the token pair
|
|
30
|
-
* @throws {Error} If the Router contract call fails
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* ```typescript
|
|
34
|
-
* // Calculate output for 100 USDm
|
|
35
|
-
* const amountIn = BigInt(100) * BigInt(10 ** 18) // 100 USDm in wei
|
|
36
|
-
* const expectedOut = await quoteService.getAmountOut(
|
|
37
|
-
* '0x765DE816845861e75A25fCA122bb6898B8B1282a', // USDm
|
|
38
|
-
* '0x471EcE3750Da237f93B8E339c536989b8978a438', // CELO
|
|
39
|
-
* amountIn
|
|
40
|
-
* )
|
|
41
|
-
* console.log(`Expected CELO output: ${expectedOut}`)
|
|
42
|
-
*
|
|
43
|
-
* // Or provide a pre-fetched route for better performance
|
|
44
|
-
* const route = await routeService.findRoute(
|
|
45
|
-
* '0x765DE816845861e75A25fCA122bb6898B8B1282a',
|
|
46
|
-
* '0x471EcE3750Da237f93B8E339c536989b8978a438'
|
|
47
|
-
* )
|
|
48
|
-
* const expectedOut2 = await quoteService.getAmountOut(
|
|
49
|
-
* '0x765DE816845861e75A25fCA122bb6898B8B1282a',
|
|
50
|
-
* '0x471EcE3750Da237f93B8E339c536989b8978a438',
|
|
51
|
-
* amountIn,
|
|
52
|
-
* route
|
|
53
|
-
* )
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
async getAmountOut(tokenIn, tokenOut, amountIn, route) {
|
|
57
|
-
// Validate address inputs
|
|
58
|
-
(0, validation_1.validateAddress)(tokenIn, 'tokenIn');
|
|
59
|
-
(0, validation_1.validateAddress)(tokenOut, 'tokenOut');
|
|
60
|
-
// If the consumer does not provide a route then we find the best route.
|
|
61
|
-
if (!route) {
|
|
62
|
-
route = await this.routeService.findRoute(tokenIn, tokenOut);
|
|
63
|
-
}
|
|
64
|
-
return getAmountOutForRoute(this.publicClient, this.chainId, tokenIn, tokenOut, amountIn, route);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
exports.QuoteService = QuoteService;
|
|
68
|
-
async function getAmountOutForRoute(publicClient, chainId, tokenIn, tokenOut, amountIn, route) {
|
|
69
|
-
const routerRoutes = (0, pathEncoder_1.encodeRoutePath)(route.path, tokenIn, tokenOut);
|
|
70
|
-
const routerAddress = (0, constants_1.getContractAddress)(chainId, 'Router');
|
|
71
|
-
try {
|
|
72
|
-
const amounts = (await publicClient.readContract({
|
|
73
|
-
address: routerAddress,
|
|
74
|
-
abi: abis_1.ROUTER_ABI,
|
|
75
|
-
functionName: 'getAmountsOut',
|
|
76
|
-
args: [amountIn, routerRoutes],
|
|
77
|
-
}));
|
|
78
|
-
return amounts[amounts.length - 1];
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
if (error instanceof viem_1.BaseError) {
|
|
82
|
-
const revertError = error.walk((candidate) => candidate instanceof viem_1.ContractFunctionRevertedError);
|
|
83
|
-
if (revertError instanceof viem_1.ContractFunctionRevertedError &&
|
|
84
|
-
revertError.data?.errorName === 'FXMarketClosed') {
|
|
85
|
-
throw new errors_1.FXMarketClosedError();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
throw error;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=QuoteService.js.map
|