@meteora-ag/dlmm 1.6.0-rc.16 → 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 -40
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +246 -67
- 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,26 +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;
|
|
13047
|
+
let m2 = maxDeltaId.addn(1);
|
|
13067
13048
|
for (let m = m1.toNumber(); m <= m2.toNumber(); m++) {
|
|
13068
13049
|
const binId = activeId.addn(m);
|
|
13069
13050
|
const pm = getQPriceFromId(binId.neg(), binStep);
|
|
@@ -13072,8 +13053,7 @@ function findBaseDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId, minX
|
|
|
13072
13053
|
const cDelta = new (0, _bnjs2.default)(m).mul(pm);
|
|
13073
13054
|
c = c.add(cDelta);
|
|
13074
13055
|
}
|
|
13075
|
-
|
|
13076
|
-
return amountX.sub(minX0).shln(SCALE_OFFSET).div(c.sub(b));
|
|
13056
|
+
return amountX.shln(SCALE_OFFSET).div(c.sub(b));
|
|
13077
13057
|
}
|
|
13078
13058
|
function findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
|
|
13079
13059
|
if (minDeltaId.gt(maxDeltaId) || amountX.lte(new (0, _bnjs2.default)(0)) || amountX.isZero()) {
|
|
@@ -13082,18 +13062,14 @@ function findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
|
|
|
13082
13062
|
delta: new (0, _bnjs2.default)(0)
|
|
13083
13063
|
};
|
|
13084
13064
|
}
|
|
13085
|
-
const minX0 = findMinX0(amountX, minDeltaId, maxDeltaId, activeId, binStep);
|
|
13086
13065
|
let baseDeltaX = findBaseDeltaX(
|
|
13087
13066
|
amountX,
|
|
13088
13067
|
minDeltaId,
|
|
13089
13068
|
maxDeltaId,
|
|
13090
13069
|
binStep,
|
|
13091
|
-
activeId
|
|
13092
|
-
minX0
|
|
13070
|
+
activeId
|
|
13093
13071
|
);
|
|
13094
|
-
|
|
13095
|
-
const x0 = minDeltaId.neg().mul(baseDeltaX).add(minX0);
|
|
13096
|
-
console.log("\u{1F680} ~ x0:", x0.toString());
|
|
13072
|
+
const x0 = minDeltaId.neg().mul(baseDeltaX).add(baseDeltaX);
|
|
13097
13073
|
while (true) {
|
|
13098
13074
|
const amountInBins = getAmountInBinsAskSide(
|
|
13099
13075
|
activeId,
|
|
@@ -13123,6 +13099,58 @@ var BidAskStrategyParameterBuilder = class {
|
|
|
13123
13099
|
findYParameters(amountY, minDeltaId, maxDeltaId, activeId) {
|
|
13124
13100
|
return findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId);
|
|
13125
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
|
+
}
|
|
13126
13154
|
};
|
|
13127
13155
|
|
|
13128
13156
|
// src/dlmm/helpers/rebalance/liquidity_strategy/curve.ts
|
|
@@ -13227,6 +13255,56 @@ var CurveStrategyParameterBuilder = class {
|
|
|
13227
13255
|
findYParameters(amountY, minDeltaId, maxDeltaId, activeId) {
|
|
13228
13256
|
return findY0AndDeltaY2(amountY, minDeltaId, maxDeltaId, activeId);
|
|
13229
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
|
+
}
|
|
13230
13308
|
};
|
|
13231
13309
|
|
|
13232
13310
|
// src/dlmm/helpers/rebalance/liquidity_strategy/spot.ts
|
|
@@ -13290,9 +13368,52 @@ var SpotStrategyParameterBuilder = class {
|
|
|
13290
13368
|
delta: new (0, _bnjs2.default)(0)
|
|
13291
13369
|
};
|
|
13292
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
|
+
}
|
|
13293
13413
|
};
|
|
13294
13414
|
|
|
13295
13415
|
// src/dlmm/helpers/rebalance/liquidity_strategy/index.ts
|
|
13416
|
+
|
|
13296
13417
|
function getLiquidityStrategyParameterBuilder(strategyType) {
|
|
13297
13418
|
switch (strategyType) {
|
|
13298
13419
|
case 0 /* Spot */:
|
|
@@ -18157,7 +18278,6 @@ var DLMM = class {
|
|
|
18157
18278
|
shouldClaimReward: true,
|
|
18158
18279
|
pairAddress: this.pubkey
|
|
18159
18280
|
});
|
|
18160
|
-
console.log("\u{1F680} ~ DLMM ~ rebalancePosition:", rebalancePosition);
|
|
18161
18281
|
const rebalanceStrategyBuilder = new BalancedStrategyBuilder(
|
|
18162
18282
|
new (0, _anchor.BN)(rebalancePosition.lbPair.activeId),
|
|
18163
18283
|
new (0, _anchor.BN)(rebalancePosition.lbPair.binStep),
|
|
@@ -18183,10 +18303,65 @@ var DLMM = class {
|
|
|
18183
18303
|
withdraws,
|
|
18184
18304
|
deposits
|
|
18185
18305
|
);
|
|
18186
|
-
|
|
18306
|
+
const binArrayQuoteResult = await this.quoteBinArrayAccountsRentalCost(
|
|
18307
|
+
simulationResult.depositParams,
|
|
18308
|
+
simulationResult.withdrawParams,
|
|
18309
|
+
new (0, _anchor.BN)(rebalancePosition.lbPair.activeId)
|
|
18310
|
+
);
|
|
18187
18311
|
return {
|
|
18188
18312
|
rebalancePosition,
|
|
18189
|
-
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
|
|
18190
18365
|
};
|
|
18191
18366
|
}
|
|
18192
18367
|
/**
|
|
@@ -18216,9 +18391,15 @@ var DLMM = class {
|
|
|
18216
18391
|
withdraws,
|
|
18217
18392
|
deposits
|
|
18218
18393
|
);
|
|
18394
|
+
const binArrayQuoteResult = await this.quoteBinArrayAccountsRentalCost(
|
|
18395
|
+
simulationResult.depositParams,
|
|
18396
|
+
simulationResult.withdrawParams,
|
|
18397
|
+
new (0, _anchor.BN)(rebalancePosition.lbPair.activeId)
|
|
18398
|
+
);
|
|
18219
18399
|
return {
|
|
18220
18400
|
rebalancePosition,
|
|
18221
|
-
simulationResult
|
|
18401
|
+
simulationResult,
|
|
18402
|
+
...binArrayQuoteResult
|
|
18222
18403
|
};
|
|
18223
18404
|
}
|
|
18224
18405
|
/**
|
|
@@ -18296,12 +18477,10 @@ var DLMM = class {
|
|
|
18296
18477
|
chunk,
|
|
18297
18478
|
activeId
|
|
18298
18479
|
);
|
|
18299
|
-
console.log("\u{1F680} ~ DLMM ~ chunkedDepositParams:", chunkedDepositParams);
|
|
18300
18480
|
const chunkedWithdrawParams = splitWithdrawParamsForChunk(
|
|
18301
18481
|
withdrawParams,
|
|
18302
18482
|
chunk
|
|
18303
18483
|
);
|
|
18304
|
-
console.log("\u{1F680} ~ DLMM ~ chunkedWithdrawParams:", chunkedWithdrawParams);
|
|
18305
18484
|
if (chunkedDepositParams.length === 0 && chunkedWithdrawParams.length === 0)
|
|
18306
18485
|
continue;
|
|
18307
18486
|
const { slices, accounts: transferHookAccounts } = this.getPotentialToken2022IxDataAndAccounts(0 /* Liquidity */);
|