@meteora-ag/dlmm 1.6.0-rc.17 → 1.6.0-rc.18
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/dist/index.d.ts +10 -3
- package/dist/index.js +219 -41
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +246 -68
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -9585,6 +9585,12 @@ interface RebalancePositionResponse {
|
|
|
9585
9585
|
rebalancePosition: RebalancePosition;
|
|
9586
9586
|
simulationResult: SimulateRebalanceResp;
|
|
9587
9587
|
}
|
|
9588
|
+
interface RebalancePositionBinArrayRentalCostQuote {
|
|
9589
|
+
binArrayExistence: Set<string>;
|
|
9590
|
+
binArrayCount: number;
|
|
9591
|
+
binArrayCost: number;
|
|
9592
|
+
bitmapExtensionCost: number;
|
|
9593
|
+
}
|
|
9588
9594
|
|
|
9589
9595
|
/** private */
|
|
9590
9596
|
declare function derivePresetParameterWithIndex(index: BN$1, programId: PublicKey): [PublicKey, number];
|
|
@@ -10658,8 +10664,9 @@ declare class DLMM {
|
|
|
10658
10664
|
* @returns The transaction to execute this instruction.
|
|
10659
10665
|
*/
|
|
10660
10666
|
increasePositionLength(position: PublicKey, side: ResizeSide, length: BN$1, funder: PublicKey, allowParallelExecution?: boolean): Promise<Transaction[]>;
|
|
10661
|
-
simulateRebalancePositionWithBalancedStrategy(positionAddress: PublicKey, positionData: PositionData, strategy: StrategyType, topUpAmountX: BN$1, topUpAmountY: BN$1, xWithdrawBps: BN$1, yWithdrawBps: BN$1): Promise<RebalancePositionResponse>;
|
|
10667
|
+
simulateRebalancePositionWithBalancedStrategy(positionAddress: PublicKey, positionData: PositionData, strategy: StrategyType, topUpAmountX: BN$1, topUpAmountY: BN$1, xWithdrawBps: BN$1, yWithdrawBps: BN$1): Promise<RebalancePositionResponse & RebalancePositionBinArrayRentalCostQuote>;
|
|
10662
10668
|
private simulateRebalancePositionWithStrategy;
|
|
10669
|
+
private quoteBinArrayAccountsRentalCost;
|
|
10663
10670
|
/**
|
|
10664
10671
|
* Simulates a rebalance operation on a position without actually executing it. It's recommended to use simulateRebalancePositionWithXStrategy instead unless you know what you're doing.
|
|
10665
10672
|
*
|
|
@@ -10670,7 +10677,7 @@ declare class DLMM {
|
|
|
10670
10677
|
* @param deposits An array of RebalanceWithDeposit objects representing the deposits to simulate.
|
|
10671
10678
|
* @param withdraws An array of RebalanceWithWithdraw objects representing the withdraws to simulate.
|
|
10672
10679
|
*/
|
|
10673
|
-
simulateRebalancePosition(positionAddress: PublicKey, positionData: PositionData, shouldClaimFee: boolean, shouldClaimReward: boolean, deposits: RebalanceWithDeposit[], withdraws: RebalanceWithWithdraw[]): Promise<RebalancePositionResponse>;
|
|
10680
|
+
simulateRebalancePosition(positionAddress: PublicKey, positionData: PositionData, shouldClaimFee: boolean, shouldClaimReward: boolean, deposits: RebalanceWithDeposit[], withdraws: RebalanceWithWithdraw[]): Promise<RebalancePositionResponse & RebalancePositionBinArrayRentalCostQuote>;
|
|
10674
10681
|
/**
|
|
10675
10682
|
* Rebalances a position and claim rewards if specified.
|
|
10676
10683
|
*
|
|
@@ -21603,4 +21610,4 @@ declare const MAX_EXTRA_BIN_ARRAYS = 3;
|
|
|
21603
21610
|
declare const U64_MAX: BN$1;
|
|
21604
21611
|
declare const MAX_BINS_PER_POSITION: BN$1;
|
|
21605
21612
|
|
|
21606
|
-
export { ADMIN, AccountName, ActionType, ActivationType, BASIS_POINT_MAX, BIN_ARRAY_BITMAP_FEE, BIN_ARRAY_BITMAP_FEE_BN, BIN_ARRAY_BITMAP_SIZE, BIN_ARRAY_FEE, BIN_ARRAY_FEE_BN, Bin, BinAndAmount, BinArray, BinArrayAccount, BinArrayBitmapExtension, BinArrayBitmapExtensionAccount, BinLiquidity, BinLiquidityDistribution, BinLiquidityReduction, BitmapType, ClmmProgram, Clock, ClockLayout, CompressedBinDepositAmount, CompressedBinDepositAmounts, DEFAULT_BIN_PER_POSITION, DLMMError, DlmmSdkError, EXTENSION_BINARRAY_BITMAP_SIZE, EmissionRate, ExtendedPositionBinData, FEE_PRECISION, FeeInfo, GetOrCreateATAResponse, IAccountsCache, IDL, ILM_BASE, InitCustomizablePermissionlessPairIx, InitPermissionPairIx, LBCLMM_PROGRAM_IDS, LMRewards, LbClmm, LbPair, LbPairAccount, LbPosition, LiquidityOneSideParameter, LiquidityParameter, LiquidityParameterByStrategy, LiquidityParameterByStrategyOneSide, LiquidityParameterByWeight, MAX_ACTIVE_BIN_SLIPPAGE, MAX_BINS_PER_POSITION, MAX_BIN_ARRAY_SIZE, MAX_BIN_LENGTH_ALLOWED_IN_ONE_TX, MAX_CLAIM_ALL_ALLOWED, MAX_EXTRA_BIN_ARRAYS, MAX_FEE_RATE, MAX_RESIZE_LENGTH, MEMO_PROGRAM_ID, Network, Opt, POOL_FEE, POOL_FEE_BN, POSITION_BIN_DATA_SIZE, POSITION_FEE, POSITION_FEE_BN, POSITION_MAX_LENGTH, POSITION_MIN_SIZE, PRECISION, PairLockInfo, PairStatus, PairType, Position, PositionBinData, PositionData, PositionInfo, PositionLockInfo, PositionV2, PositionVersion, PresetParameter, PresetParameter2, ProgramStrategyParameter, ProgramStrategyType, RebalanceAddLiquidityParam, RebalancePositionResponse, RebalanceRemoveLiquidityParam, RemainingAccountInfo, RemainingAccountsInfoSlice, ResizeSide, ResizeSideEnum, RewardInfo, RewardInfos, SCALE, SCALE_OFFSET, SIMULATION_USER, SeedLiquidityCostBreakdown, SeedLiquidityResponse, SeedLiquiditySingleBinResponse, Strategy, StrategyParameters, StrategyType, SwapExactOutParams, SwapFee, SwapParams, SwapQuote, SwapQuoteExactOut, SwapWithPriceImpactParams, TInitializeMultiplePositionAndAddLiquidityParamsByStrategy, TInitializePositionAndAddLiquidityParams, TInitializePositionAndAddLiquidityParamsByStrategy, TOKEN_ACCOUNT_FEE, TOKEN_ACCOUNT_FEE_BN, TQuoteCreatePositionParams, TokenReserve, U64_MAX, UserFeeInfo, UserRewardInfo, autoFillXByStrategy, autoFillXByWeight, autoFillYByStrategy, autoFillYByWeight, binIdToBinArrayIndex, calculateBidAskDistribution, calculateNormalDistribution, calculateSpotDistribution, capSlippagePercentage, chunkedFetchMultipleBinArrayBitmapExtensionAccount, chunkedFetchMultiplePoolAccount, chunkedGetMultipleAccountInfos, chunks, computeFee, computeFeeFromAmount, computeProtocolFee, createProgram, decodeAccount, DLMM as default, deriveBinArray, deriveBinArrayBitmapExtension, deriveCustomizablePermissionlessLbPair, deriveEventAuthority, deriveLbPair, deriveLbPair2, deriveLbPairWithPresetParamWithIndexKey, deriveOracle, derivePermissionLbPair, derivePosition, derivePresetParameter, derivePresetParameter2, derivePresetParameterWithIndex, deriveReserve, deriveRewardVault, deriveTokenBadge, enumerateBins, findNextBinArrayIndexWithLiquidity, findNextBinArrayWithLiquidity, fromWeightDistributionToAmount, fromWeightDistributionToAmountOneSide, getAccountDiscriminator, getBaseFee, getBinArrayLowerUpperBinId, getBinArraysRequiredByPositionRange, getBinFromBinArray, getBinIdIndexInBinArray, getEstimatedComputeUnitIxWithBuffer, getEstimatedComputeUnitUsageWithBuffer, getOrCreateATAInstruction, getOutAmount, getPriceOfBinByBinId, getTokenBalance, getTokenDecimals, getTokenProgramId, getTokensMintFromPoolAddress, getTotalFee, getVariableFee, isBinIdWithinBinArray, isOverflowDefaultBinArrayBitmap, parseLogs, range, sParameters, swapExactInQuoteAtBin, swapExactOutQuoteAtBin, toAmountAskSide, toAmountBidSide, toAmountBothSide, toAmountsBothSideByStrategy, toStrategyParameters, toWeightDistribution, unwrapSOLInstruction, updateBinArray, vParameters, wrapSOLInstruction };
|
|
21613
|
+
export { ADMIN, AccountName, ActionType, ActivationType, BASIS_POINT_MAX, BIN_ARRAY_BITMAP_FEE, BIN_ARRAY_BITMAP_FEE_BN, BIN_ARRAY_BITMAP_SIZE, BIN_ARRAY_FEE, BIN_ARRAY_FEE_BN, Bin, BinAndAmount, BinArray, BinArrayAccount, BinArrayBitmapExtension, BinArrayBitmapExtensionAccount, BinLiquidity, BinLiquidityDistribution, BinLiquidityReduction, BitmapType, ClmmProgram, Clock, ClockLayout, CompressedBinDepositAmount, CompressedBinDepositAmounts, DEFAULT_BIN_PER_POSITION, DLMMError, DlmmSdkError, EXTENSION_BINARRAY_BITMAP_SIZE, EmissionRate, ExtendedPositionBinData, FEE_PRECISION, FeeInfo, GetOrCreateATAResponse, IAccountsCache, IDL, ILM_BASE, InitCustomizablePermissionlessPairIx, InitPermissionPairIx, LBCLMM_PROGRAM_IDS, LMRewards, LbClmm, LbPair, LbPairAccount, LbPosition, LiquidityOneSideParameter, LiquidityParameter, LiquidityParameterByStrategy, LiquidityParameterByStrategyOneSide, LiquidityParameterByWeight, MAX_ACTIVE_BIN_SLIPPAGE, MAX_BINS_PER_POSITION, MAX_BIN_ARRAY_SIZE, MAX_BIN_LENGTH_ALLOWED_IN_ONE_TX, MAX_CLAIM_ALL_ALLOWED, MAX_EXTRA_BIN_ARRAYS, MAX_FEE_RATE, MAX_RESIZE_LENGTH, MEMO_PROGRAM_ID, Network, Opt, POOL_FEE, POOL_FEE_BN, POSITION_BIN_DATA_SIZE, POSITION_FEE, POSITION_FEE_BN, POSITION_MAX_LENGTH, POSITION_MIN_SIZE, PRECISION, PairLockInfo, PairStatus, PairType, Position, PositionBinData, PositionData, PositionInfo, PositionLockInfo, PositionV2, PositionVersion, PresetParameter, PresetParameter2, ProgramStrategyParameter, ProgramStrategyType, RebalanceAddLiquidityParam, RebalancePositionBinArrayRentalCostQuote, RebalancePositionResponse, RebalanceRemoveLiquidityParam, RemainingAccountInfo, RemainingAccountsInfoSlice, ResizeSide, ResizeSideEnum, RewardInfo, RewardInfos, SCALE, SCALE_OFFSET, SIMULATION_USER, SeedLiquidityCostBreakdown, SeedLiquidityResponse, SeedLiquiditySingleBinResponse, Strategy, StrategyParameters, StrategyType, SwapExactOutParams, SwapFee, SwapParams, SwapQuote, SwapQuoteExactOut, SwapWithPriceImpactParams, TInitializeMultiplePositionAndAddLiquidityParamsByStrategy, TInitializePositionAndAddLiquidityParams, TInitializePositionAndAddLiquidityParamsByStrategy, TOKEN_ACCOUNT_FEE, TOKEN_ACCOUNT_FEE_BN, TQuoteCreatePositionParams, TokenReserve, U64_MAX, UserFeeInfo, UserRewardInfo, autoFillXByStrategy, autoFillXByWeight, autoFillYByStrategy, autoFillYByWeight, binIdToBinArrayIndex, calculateBidAskDistribution, calculateNormalDistribution, calculateSpotDistribution, capSlippagePercentage, chunkedFetchMultipleBinArrayBitmapExtensionAccount, chunkedFetchMultiplePoolAccount, chunkedGetMultipleAccountInfos, chunks, computeFee, computeFeeFromAmount, computeProtocolFee, createProgram, decodeAccount, DLMM as default, deriveBinArray, deriveBinArrayBitmapExtension, deriveCustomizablePermissionlessLbPair, deriveEventAuthority, deriveLbPair, deriveLbPair2, deriveLbPairWithPresetParamWithIndexKey, deriveOracle, derivePermissionLbPair, derivePosition, derivePresetParameter, derivePresetParameter2, derivePresetParameterWithIndex, deriveReserve, deriveRewardVault, deriveTokenBadge, enumerateBins, findNextBinArrayIndexWithLiquidity, findNextBinArrayWithLiquidity, fromWeightDistributionToAmount, fromWeightDistributionToAmountOneSide, getAccountDiscriminator, getBaseFee, getBinArrayLowerUpperBinId, getBinArraysRequiredByPositionRange, getBinFromBinArray, getBinIdIndexInBinArray, getEstimatedComputeUnitIxWithBuffer, getEstimatedComputeUnitUsageWithBuffer, getOrCreateATAInstruction, getOutAmount, getPriceOfBinByBinId, getTokenBalance, getTokenDecimals, getTokenProgramId, getTokensMintFromPoolAddress, getTotalFee, getVariableFee, isBinIdWithinBinArray, isOverflowDefaultBinArrayBitmap, parseLogs, range, sParameters, swapExactInQuoteAtBin, swapExactOutQuoteAtBin, toAmountAskSide, toAmountBidSide, toAmountBothSide, toAmountsBothSideByStrategy, toStrategyParameters, toWeightDistribution, unwrapSOLInstruction, updateBinArray, vParameters, wrapSOLInstruction };
|
package/dist/index.js
CHANGED
|
@@ -12992,26 +12992,20 @@ function getRebalanceBinArrayIndexesAndBitmapCoverage(adds, removes, activeId, p
|
|
|
12992
12992
|
|
|
12993
12993
|
// src/dlmm/helpers/rebalance/liquidity_strategy/bidAsk.ts
|
|
12994
12994
|
|
|
12995
|
-
function
|
|
12996
|
-
const binCount = maxDeltaId.sub(minDeltaId).addn(1);
|
|
12997
|
-
const totalWeight = binCount.mul(binCount.addn(1)).divn(2);
|
|
12998
|
-
return amountY.div(totalWeight);
|
|
12999
|
-
}
|
|
13000
|
-
function findBaseDeltaY(amountY, minDeltaId, maxDeltaId, minY0) {
|
|
12995
|
+
function findBaseDeltaY(amountY, minDeltaId, maxDeltaId) {
|
|
13001
12996
|
if (minDeltaId.gt(maxDeltaId) || amountY.lte(new (0, _bnjs2.default)(0))) {
|
|
13002
12997
|
return new (0, _bnjs2.default)(0);
|
|
13003
12998
|
}
|
|
13004
12999
|
if (minDeltaId.eq(maxDeltaId)) {
|
|
13005
13000
|
return amountY;
|
|
13006
13001
|
}
|
|
13007
|
-
const m1 = minDeltaId.neg();
|
|
13002
|
+
const m1 = minDeltaId.neg().subn(1);
|
|
13008
13003
|
const m2 = maxDeltaId.neg();
|
|
13009
13004
|
const b = m2.neg().mul(m1.sub(m2).addn(1));
|
|
13010
13005
|
const c = m1.mul(m1.addn(1)).divn(2);
|
|
13011
13006
|
const d = m2.mul(m2.subn(1)).divn(2);
|
|
13012
13007
|
const a = b.add(c.sub(d));
|
|
13013
|
-
|
|
13014
|
-
return amountY.sub(e).div(a);
|
|
13008
|
+
return amountY.div(a);
|
|
13015
13009
|
}
|
|
13016
13010
|
function findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId) {
|
|
13017
13011
|
if (minDeltaId.gt(maxDeltaId) || amountY.isZero()) {
|
|
@@ -13020,9 +13014,8 @@ function findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId) {
|
|
|
13020
13014
|
delta: new (0, _bnjs2.default)(0)
|
|
13021
13015
|
};
|
|
13022
13016
|
}
|
|
13023
|
-
|
|
13024
|
-
|
|
13025
|
-
const y0 = baseDeltaY.neg().mul(maxDeltaId).add(minY0);
|
|
13017
|
+
let baseDeltaY = findBaseDeltaY(amountY, minDeltaId, maxDeltaId);
|
|
13018
|
+
const y0 = baseDeltaY.neg().mul(maxDeltaId).add(baseDeltaY);
|
|
13026
13019
|
while (true) {
|
|
13027
13020
|
const amountInBins = getAmountInBinsBidSide(
|
|
13028
13021
|
activeId,
|
|
@@ -13044,27 +13037,14 @@ function findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId) {
|
|
|
13044
13037
|
}
|
|
13045
13038
|
}
|
|
13046
13039
|
}
|
|
13047
|
-
function
|
|
13048
|
-
const minBinId = activeId.add(minDeltaId);
|
|
13049
|
-
const maxBinId = activeId.add(maxDeltaId);
|
|
13050
|
-
let totalWeight = new (0, _bnjs2.default)(0);
|
|
13051
|
-
for (let binId = minBinId.toNumber(); binId <= maxBinId.toNumber(); binId++) {
|
|
13052
|
-
const binDelta = binId - minBinId.toNumber() + 1;
|
|
13053
|
-
const binPrice = getQPriceFromId(new (0, _bnjs2.default)(binId), binStep);
|
|
13054
|
-
const weight = new (0, _bnjs2.default)(binDelta).mul(binPrice);
|
|
13055
|
-
totalWeight = totalWeight.add(weight);
|
|
13056
|
-
}
|
|
13057
|
-
return amountX.shln(SCALE_OFFSET).div(totalWeight);
|
|
13058
|
-
}
|
|
13059
|
-
function findBaseDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId, minX0) {
|
|
13040
|
+
function findBaseDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
|
|
13060
13041
|
if (minDeltaId.gt(maxDeltaId) || amountX.lte(new (0, _bnjs2.default)(0))) {
|
|
13061
13042
|
return new (0, _bnjs2.default)(0);
|
|
13062
13043
|
}
|
|
13063
13044
|
let b = new (0, _bnjs2.default)(0);
|
|
13064
13045
|
let c = new (0, _bnjs2.default)(0);
|
|
13065
13046
|
let m1 = minDeltaId;
|
|
13066
|
-
let m2 = maxDeltaId;
|
|
13067
|
-
console.log(m1.toNumber(), m2.toNumber());
|
|
13047
|
+
let m2 = maxDeltaId.addn(1);
|
|
13068
13048
|
for (let m = m1.toNumber(); m <= m2.toNumber(); m++) {
|
|
13069
13049
|
const binId = activeId.addn(m);
|
|
13070
13050
|
const pm = getQPriceFromId(binId.neg(), binStep);
|
|
@@ -13073,8 +13053,7 @@ function findBaseDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId, minX
|
|
|
13073
13053
|
const cDelta = new (0, _bnjs2.default)(m).mul(pm);
|
|
13074
13054
|
c = c.add(cDelta);
|
|
13075
13055
|
}
|
|
13076
|
-
|
|
13077
|
-
return amountX.sub(minX0).shln(SCALE_OFFSET).div(c.sub(b));
|
|
13056
|
+
return amountX.shln(SCALE_OFFSET).div(c.sub(b));
|
|
13078
13057
|
}
|
|
13079
13058
|
function findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
|
|
13080
13059
|
if (minDeltaId.gt(maxDeltaId) || amountX.lte(new (0, _bnjs2.default)(0)) || amountX.isZero()) {
|
|
@@ -13083,18 +13062,14 @@ function findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
|
|
|
13083
13062
|
delta: new (0, _bnjs2.default)(0)
|
|
13084
13063
|
};
|
|
13085
13064
|
}
|
|
13086
|
-
const minX0 = findMinX0(amountX, minDeltaId, maxDeltaId, activeId, binStep);
|
|
13087
13065
|
let baseDeltaX = findBaseDeltaX(
|
|
13088
13066
|
amountX,
|
|
13089
13067
|
minDeltaId,
|
|
13090
13068
|
maxDeltaId,
|
|
13091
13069
|
binStep,
|
|
13092
|
-
activeId
|
|
13093
|
-
minX0
|
|
13070
|
+
activeId
|
|
13094
13071
|
);
|
|
13095
|
-
|
|
13096
|
-
const x0 = minDeltaId.neg().mul(baseDeltaX).add(minX0);
|
|
13097
|
-
console.log("\u{1F680} ~ x0:", x0.toString());
|
|
13072
|
+
const x0 = minDeltaId.neg().mul(baseDeltaX).add(baseDeltaX);
|
|
13098
13073
|
while (true) {
|
|
13099
13074
|
const amountInBins = getAmountInBinsAskSide(
|
|
13100
13075
|
activeId,
|
|
@@ -13124,6 +13099,58 @@ var BidAskStrategyParameterBuilder = class {
|
|
|
13124
13099
|
findYParameters(amountY, minDeltaId, maxDeltaId, activeId) {
|
|
13125
13100
|
return findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId);
|
|
13126
13101
|
}
|
|
13102
|
+
suggestBalancedXParametersFromY(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountY) {
|
|
13103
|
+
const deltaX = amountY.div(
|
|
13104
|
+
maxDeltaId.addn(1).mul(maxDeltaId.addn(2)).divn(2)
|
|
13105
|
+
);
|
|
13106
|
+
const x0 = minDeltaId.neg().mul(deltaX).add(deltaX);
|
|
13107
|
+
const totalAmountX = toAmountIntoBins(
|
|
13108
|
+
activeId,
|
|
13109
|
+
minDeltaId,
|
|
13110
|
+
maxDeltaId,
|
|
13111
|
+
deltaX,
|
|
13112
|
+
new (0, _bnjs2.default)(0),
|
|
13113
|
+
x0,
|
|
13114
|
+
new (0, _bnjs2.default)(0),
|
|
13115
|
+
binStep,
|
|
13116
|
+
favorXInActiveBin
|
|
13117
|
+
).reduce((acc, bin) => {
|
|
13118
|
+
return acc.add(bin.amountX);
|
|
13119
|
+
}, new (0, _bnjs2.default)(0));
|
|
13120
|
+
return {
|
|
13121
|
+
base: x0,
|
|
13122
|
+
delta: deltaX,
|
|
13123
|
+
amountX: totalAmountX
|
|
13124
|
+
};
|
|
13125
|
+
}
|
|
13126
|
+
suggestBalancedYParametersFromX(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountXInQuoteValue) {
|
|
13127
|
+
const m1 = minDeltaId.neg().subn(1);
|
|
13128
|
+
const m2 = maxDeltaId.neg();
|
|
13129
|
+
const a1 = m2.neg().mul(m1.sub(m2).addn(1));
|
|
13130
|
+
const a2 = m1.mul(m1.addn(1)).divn(2);
|
|
13131
|
+
const a3 = m2.mul(m2.subn(1)).divn(2);
|
|
13132
|
+
const a = a1.add(a2.sub(a3));
|
|
13133
|
+
const deltaY = amountXInQuoteValue.div(a);
|
|
13134
|
+
const y0 = deltaY.neg().mul(m2).add(deltaY);
|
|
13135
|
+
const amountY = toAmountIntoBins(
|
|
13136
|
+
activeId,
|
|
13137
|
+
minDeltaId,
|
|
13138
|
+
maxDeltaId,
|
|
13139
|
+
new (0, _bnjs2.default)(0),
|
|
13140
|
+
deltaY,
|
|
13141
|
+
new (0, _bnjs2.default)(0),
|
|
13142
|
+
y0,
|
|
13143
|
+
binStep,
|
|
13144
|
+
favorXInActiveBin
|
|
13145
|
+
).reduce((acc, bin) => {
|
|
13146
|
+
return acc.add(bin.amountY);
|
|
13147
|
+
}, new (0, _bnjs2.default)(0));
|
|
13148
|
+
return {
|
|
13149
|
+
base: y0,
|
|
13150
|
+
delta: deltaY,
|
|
13151
|
+
amountY
|
|
13152
|
+
};
|
|
13153
|
+
}
|
|
13127
13154
|
};
|
|
13128
13155
|
|
|
13129
13156
|
// src/dlmm/helpers/rebalance/liquidity_strategy/curve.ts
|
|
@@ -13228,6 +13255,56 @@ var CurveStrategyParameterBuilder = class {
|
|
|
13228
13255
|
findYParameters(amountY, minDeltaId, maxDeltaId, activeId) {
|
|
13229
13256
|
return findY0AndDeltaY2(amountY, minDeltaId, maxDeltaId, activeId);
|
|
13230
13257
|
}
|
|
13258
|
+
suggestBalancedXParametersFromY(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountY) {
|
|
13259
|
+
const x0 = amountY.muln(2).div(maxDeltaId.addn(1));
|
|
13260
|
+
const deltaX = x0.neg().div(maxDeltaId);
|
|
13261
|
+
const totalAmountX = toAmountIntoBins(
|
|
13262
|
+
activeId,
|
|
13263
|
+
minDeltaId,
|
|
13264
|
+
maxDeltaId,
|
|
13265
|
+
deltaX,
|
|
13266
|
+
new (0, _bnjs2.default)(0),
|
|
13267
|
+
x0,
|
|
13268
|
+
new (0, _bnjs2.default)(0),
|
|
13269
|
+
binStep,
|
|
13270
|
+
favorXInActiveBin
|
|
13271
|
+
).reduce((acc, bin) => {
|
|
13272
|
+
return acc.add(bin.amountX);
|
|
13273
|
+
}, new (0, _bnjs2.default)(0));
|
|
13274
|
+
return {
|
|
13275
|
+
base: x0,
|
|
13276
|
+
delta: deltaX,
|
|
13277
|
+
amountX: totalAmountX
|
|
13278
|
+
};
|
|
13279
|
+
}
|
|
13280
|
+
suggestBalancedYParametersFromX(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountXInQuoteValue) {
|
|
13281
|
+
const m1 = minDeltaId.neg();
|
|
13282
|
+
const m2 = maxDeltaId.neg();
|
|
13283
|
+
const a1 = m1.sub(m2).addn(1);
|
|
13284
|
+
const a2 = m1.mul(m1.addn(1)).divn(2);
|
|
13285
|
+
const a3 = m2.mul(m2.subn(1)).divn(2);
|
|
13286
|
+
const a = m1.sub(a3.sub(a2)).div(m1);
|
|
13287
|
+
const y0 = amountXInQuoteValue.div(a);
|
|
13288
|
+
const deltaY = y0.neg().div(m1);
|
|
13289
|
+
const amountY = toAmountIntoBins(
|
|
13290
|
+
activeId,
|
|
13291
|
+
minDeltaId,
|
|
13292
|
+
maxDeltaId,
|
|
13293
|
+
new (0, _bnjs2.default)(0),
|
|
13294
|
+
deltaY,
|
|
13295
|
+
new (0, _bnjs2.default)(0),
|
|
13296
|
+
y0,
|
|
13297
|
+
binStep,
|
|
13298
|
+
favorXInActiveBin
|
|
13299
|
+
).reduce((acc, bin) => {
|
|
13300
|
+
return acc.add(bin.amountY);
|
|
13301
|
+
}, new (0, _bnjs2.default)(0));
|
|
13302
|
+
return {
|
|
13303
|
+
base: y0,
|
|
13304
|
+
delta: deltaY,
|
|
13305
|
+
amountY
|
|
13306
|
+
};
|
|
13307
|
+
}
|
|
13231
13308
|
};
|
|
13232
13309
|
|
|
13233
13310
|
// src/dlmm/helpers/rebalance/liquidity_strategy/spot.ts
|
|
@@ -13291,9 +13368,52 @@ var SpotStrategyParameterBuilder = class {
|
|
|
13291
13368
|
delta: new (0, _bnjs2.default)(0)
|
|
13292
13369
|
};
|
|
13293
13370
|
}
|
|
13371
|
+
suggestBalancedXParametersFromY(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountY) {
|
|
13372
|
+
const x0 = amountY.div(maxDeltaId.addn(1));
|
|
13373
|
+
const totalAmountX = toAmountIntoBins(
|
|
13374
|
+
activeId,
|
|
13375
|
+
minDeltaId,
|
|
13376
|
+
maxDeltaId,
|
|
13377
|
+
new (0, _bnjs2.default)(0),
|
|
13378
|
+
new (0, _bnjs2.default)(0),
|
|
13379
|
+
x0,
|
|
13380
|
+
new (0, _bnjs2.default)(0),
|
|
13381
|
+
binStep,
|
|
13382
|
+
favorXInActiveBin
|
|
13383
|
+
).reduce((acc, bin) => {
|
|
13384
|
+
return acc.add(bin.amountX);
|
|
13385
|
+
}, new (0, _bnjs2.default)(0));
|
|
13386
|
+
return {
|
|
13387
|
+
base: new (0, _bnjs2.default)(x0.toString()),
|
|
13388
|
+
delta: new (0, _bnjs2.default)(0),
|
|
13389
|
+
amountX: totalAmountX
|
|
13390
|
+
};
|
|
13391
|
+
}
|
|
13392
|
+
suggestBalancedYParametersFromX(activeId, binStep, favorXInActiveBin, minDeltaId, maxDeltaId, amountXInQuoteValue) {
|
|
13393
|
+
const y0 = amountXInQuoteValue.div(maxDeltaId.sub(minDeltaId).addn(1));
|
|
13394
|
+
const amountY = toAmountIntoBins(
|
|
13395
|
+
activeId,
|
|
13396
|
+
minDeltaId,
|
|
13397
|
+
maxDeltaId,
|
|
13398
|
+
new (0, _bnjs2.default)(0),
|
|
13399
|
+
new (0, _bnjs2.default)(0),
|
|
13400
|
+
new (0, _bnjs2.default)(0),
|
|
13401
|
+
y0,
|
|
13402
|
+
binStep,
|
|
13403
|
+
favorXInActiveBin
|
|
13404
|
+
).reduce((acc, bin) => {
|
|
13405
|
+
return acc.add(bin.amountY);
|
|
13406
|
+
}, new (0, _bnjs2.default)(0));
|
|
13407
|
+
return {
|
|
13408
|
+
base: y0,
|
|
13409
|
+
delta: new (0, _bnjs2.default)(0),
|
|
13410
|
+
amountY
|
|
13411
|
+
};
|
|
13412
|
+
}
|
|
13294
13413
|
};
|
|
13295
13414
|
|
|
13296
13415
|
// src/dlmm/helpers/rebalance/liquidity_strategy/index.ts
|
|
13416
|
+
|
|
13297
13417
|
function getLiquidityStrategyParameterBuilder(strategyType) {
|
|
13298
13418
|
switch (strategyType) {
|
|
13299
13419
|
case 0 /* Spot */:
|
|
@@ -18158,7 +18278,6 @@ var DLMM = class {
|
|
|
18158
18278
|
shouldClaimReward: true,
|
|
18159
18279
|
pairAddress: this.pubkey
|
|
18160
18280
|
});
|
|
18161
|
-
console.log("\u{1F680} ~ DLMM ~ rebalancePosition:", rebalancePosition);
|
|
18162
18281
|
const rebalanceStrategyBuilder = new BalancedStrategyBuilder(
|
|
18163
18282
|
new (0, _anchor.BN)(rebalancePosition.lbPair.activeId),
|
|
18164
18283
|
new (0, _anchor.BN)(rebalancePosition.lbPair.binStep),
|
|
@@ -18184,10 +18303,65 @@ var DLMM = class {
|
|
|
18184
18303
|
withdraws,
|
|
18185
18304
|
deposits
|
|
18186
18305
|
);
|
|
18187
|
-
|
|
18306
|
+
const binArrayQuoteResult = await this.quoteBinArrayAccountsRentalCost(
|
|
18307
|
+
simulationResult.depositParams,
|
|
18308
|
+
simulationResult.withdrawParams,
|
|
18309
|
+
new (0, _anchor.BN)(rebalancePosition.lbPair.activeId)
|
|
18310
|
+
);
|
|
18188
18311
|
return {
|
|
18189
18312
|
rebalancePosition,
|
|
18190
|
-
simulationResult
|
|
18313
|
+
simulationResult,
|
|
18314
|
+
...binArrayQuoteResult
|
|
18315
|
+
};
|
|
18316
|
+
}
|
|
18317
|
+
async quoteBinArrayAccountsRentalCost(deposits, withdraws, activeId) {
|
|
18318
|
+
const { binArrayBitmap, binArrayIndexes } = getRebalanceBinArrayIndexesAndBitmapCoverage(
|
|
18319
|
+
deposits,
|
|
18320
|
+
withdraws,
|
|
18321
|
+
activeId.toNumber(),
|
|
18322
|
+
this.pubkey,
|
|
18323
|
+
this.program.programId
|
|
18324
|
+
);
|
|
18325
|
+
const binArrayPublicKeys = binArrayIndexes.map((index) => {
|
|
18326
|
+
const [binArrayPubkey] = deriveBinArray(
|
|
18327
|
+
this.pubkey,
|
|
18328
|
+
index,
|
|
18329
|
+
this.program.programId
|
|
18330
|
+
);
|
|
18331
|
+
return binArrayPubkey;
|
|
18332
|
+
});
|
|
18333
|
+
const accountPublicKeys = [...binArrayPublicKeys];
|
|
18334
|
+
if (!binArrayBitmap.equals(_web3js.PublicKey.default)) {
|
|
18335
|
+
accountPublicKeys.push(binArrayBitmap);
|
|
18336
|
+
}
|
|
18337
|
+
const accounts = await chunkedGetMultipleAccountInfos(
|
|
18338
|
+
this.program.provider.connection,
|
|
18339
|
+
binArrayPublicKeys
|
|
18340
|
+
);
|
|
18341
|
+
const binArrayAccounts = accounts.splice(0, binArrayPublicKeys.length);
|
|
18342
|
+
let binArrayCount = 0;
|
|
18343
|
+
let bitmapExtensionCost = 0;
|
|
18344
|
+
const binArraySet = /* @__PURE__ */ new Set();
|
|
18345
|
+
for (let i = 0; i < binArrayAccounts.length; i++) {
|
|
18346
|
+
const binArrayAccount = binArrayAccounts[i];
|
|
18347
|
+
const binArrayPubkey = binArrayPublicKeys[i];
|
|
18348
|
+
if (!binArrayAccount) {
|
|
18349
|
+
binArrayCount++;
|
|
18350
|
+
} else {
|
|
18351
|
+
binArraySet.add(binArrayPubkey.toBase58());
|
|
18352
|
+
}
|
|
18353
|
+
}
|
|
18354
|
+
if (!binArrayBitmap.equals(_web3js.PublicKey.default)) {
|
|
18355
|
+
const bitmapAccount = accounts.pop();
|
|
18356
|
+
if (!bitmapAccount) {
|
|
18357
|
+
bitmapExtensionCost = BIN_ARRAY_BITMAP_FEE;
|
|
18358
|
+
}
|
|
18359
|
+
}
|
|
18360
|
+
return {
|
|
18361
|
+
binArrayCost: binArrayCount * BIN_ARRAY_FEE,
|
|
18362
|
+
binArrayCount,
|
|
18363
|
+
binArrayExistence: binArraySet,
|
|
18364
|
+
bitmapExtensionCost
|
|
18191
18365
|
};
|
|
18192
18366
|
}
|
|
18193
18367
|
/**
|
|
@@ -18217,9 +18391,15 @@ var DLMM = class {
|
|
|
18217
18391
|
withdraws,
|
|
18218
18392
|
deposits
|
|
18219
18393
|
);
|
|
18394
|
+
const binArrayQuoteResult = await this.quoteBinArrayAccountsRentalCost(
|
|
18395
|
+
simulationResult.depositParams,
|
|
18396
|
+
simulationResult.withdrawParams,
|
|
18397
|
+
new (0, _anchor.BN)(rebalancePosition.lbPair.activeId)
|
|
18398
|
+
);
|
|
18220
18399
|
return {
|
|
18221
18400
|
rebalancePosition,
|
|
18222
|
-
simulationResult
|
|
18401
|
+
simulationResult,
|
|
18402
|
+
...binArrayQuoteResult
|
|
18223
18403
|
};
|
|
18224
18404
|
}
|
|
18225
18405
|
/**
|
|
@@ -18297,12 +18477,10 @@ var DLMM = class {
|
|
|
18297
18477
|
chunk,
|
|
18298
18478
|
activeId
|
|
18299
18479
|
);
|
|
18300
|
-
console.log("\u{1F680} ~ DLMM ~ chunkedDepositParams:", chunkedDepositParams);
|
|
18301
18480
|
const chunkedWithdrawParams = splitWithdrawParamsForChunk(
|
|
18302
18481
|
withdrawParams,
|
|
18303
18482
|
chunk
|
|
18304
18483
|
);
|
|
18305
|
-
console.log("\u{1F680} ~ DLMM ~ chunkedWithdrawParams:", chunkedWithdrawParams);
|
|
18306
18484
|
if (chunkedDepositParams.length === 0 && chunkedWithdrawParams.length === 0)
|
|
18307
18485
|
continue;
|
|
18308
18486
|
const { slices, accounts: transferHookAccounts } = this.getPotentialToken2022IxDataAndAccounts(0 /* Liquidity */);
|