@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.mjs
CHANGED
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
SystemProgram as SystemProgram2,
|
|
20
20
|
Transaction
|
|
21
21
|
} from "@solana/web3.js";
|
|
22
|
-
import
|
|
22
|
+
import Decimal8 from "decimal.js";
|
|
23
23
|
|
|
24
24
|
// src/dlmm/constants/index.ts
|
|
25
25
|
import { LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
|
|
@@ -12992,26 +12992,20 @@ import BN18 from "bn.js";
|
|
|
12992
12992
|
|
|
12993
12993
|
// src/dlmm/helpers/rebalance/liquidity_strategy/bidAsk.ts
|
|
12994
12994
|
import BN15 from "bn.js";
|
|
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 BN15(0))) {
|
|
13002
12997
|
return new BN15(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 BN15(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 BN15(0);
|
|
13051
|
-
for (let binId = minBinId.toNumber(); binId <= maxBinId.toNumber(); binId++) {
|
|
13052
|
-
const binDelta = binId - minBinId.toNumber() + 1;
|
|
13053
|
-
const binPrice = getQPriceFromId(new BN15(binId), binStep);
|
|
13054
|
-
const weight = new BN15(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 BN15(0))) {
|
|
13061
13042
|
return new BN15(0);
|
|
13062
13043
|
}
|
|
13063
13044
|
let b = new BN15(0);
|
|
13064
13045
|
let c = new BN15(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 BN15(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 BN15(0)) || amountX.isZero()) {
|
|
@@ -13082,18 +13062,14 @@ function findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId) {
|
|
|
13082
13062
|
delta: new BN15(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 BN15(0),
|
|
13113
|
+
x0,
|
|
13114
|
+
new BN15(0),
|
|
13115
|
+
binStep,
|
|
13116
|
+
favorXInActiveBin
|
|
13117
|
+
).reduce((acc, bin) => {
|
|
13118
|
+
return acc.add(bin.amountX);
|
|
13119
|
+
}, new BN15(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 BN15(0),
|
|
13140
|
+
deltaY,
|
|
13141
|
+
new BN15(0),
|
|
13142
|
+
y0,
|
|
13143
|
+
binStep,
|
|
13144
|
+
favorXInActiveBin
|
|
13145
|
+
).reduce((acc, bin) => {
|
|
13146
|
+
return acc.add(bin.amountY);
|
|
13147
|
+
}, new BN15(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 BN16(0),
|
|
13267
|
+
x0,
|
|
13268
|
+
new BN16(0),
|
|
13269
|
+
binStep,
|
|
13270
|
+
favorXInActiveBin
|
|
13271
|
+
).reduce((acc, bin) => {
|
|
13272
|
+
return acc.add(bin.amountX);
|
|
13273
|
+
}, new BN16(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 BN16(0),
|
|
13294
|
+
deltaY,
|
|
13295
|
+
new BN16(0),
|
|
13296
|
+
y0,
|
|
13297
|
+
binStep,
|
|
13298
|
+
favorXInActiveBin
|
|
13299
|
+
).reduce((acc, bin) => {
|
|
13300
|
+
return acc.add(bin.amountY);
|
|
13301
|
+
}, new BN16(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 BN17(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 BN17(0),
|
|
13378
|
+
new BN17(0),
|
|
13379
|
+
x0,
|
|
13380
|
+
new BN17(0),
|
|
13381
|
+
binStep,
|
|
13382
|
+
favorXInActiveBin
|
|
13383
|
+
).reduce((acc, bin) => {
|
|
13384
|
+
return acc.add(bin.amountX);
|
|
13385
|
+
}, new BN17(0));
|
|
13386
|
+
return {
|
|
13387
|
+
base: new BN17(x0.toString()),
|
|
13388
|
+
delta: new BN17(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 BN17(0),
|
|
13399
|
+
new BN17(0),
|
|
13400
|
+
new BN17(0),
|
|
13401
|
+
y0,
|
|
13402
|
+
binStep,
|
|
13403
|
+
favorXInActiveBin
|
|
13404
|
+
).reduce((acc, bin) => {
|
|
13405
|
+
return acc.add(bin.amountY);
|
|
13406
|
+
}, new BN17(0));
|
|
13407
|
+
return {
|
|
13408
|
+
base: y0,
|
|
13409
|
+
delta: new BN17(0),
|
|
13410
|
+
amountY
|
|
13411
|
+
};
|
|
13412
|
+
}
|
|
13293
13413
|
};
|
|
13294
13414
|
|
|
13295
13415
|
// src/dlmm/helpers/rebalance/liquidity_strategy/index.ts
|
|
13416
|
+
import Decimal7 from "decimal.js";
|
|
13296
13417
|
function getLiquidityStrategyParameterBuilder(strategyType) {
|
|
13297
13418
|
switch (strategyType) {
|
|
13298
13419
|
case 0 /* Spot */:
|
|
@@ -14159,11 +14280,11 @@ var DLMM = class {
|
|
|
14159
14280
|
return positionsMap;
|
|
14160
14281
|
}
|
|
14161
14282
|
static getPricePerLamport(tokenXDecimal, tokenYDecimal, price) {
|
|
14162
|
-
return new
|
|
14283
|
+
return new Decimal8(price).mul(new Decimal8(10 ** (tokenYDecimal - tokenXDecimal))).toString();
|
|
14163
14284
|
}
|
|
14164
14285
|
static getBinIdFromPrice(price, binStep, min) {
|
|
14165
|
-
const binStepNum = new
|
|
14166
|
-
const binId = new
|
|
14286
|
+
const binStepNum = new Decimal8(binStep).div(new Decimal8(BASIS_POINT_MAX));
|
|
14287
|
+
const binId = new Decimal8(price).log().dividedBy(new Decimal8(1).add(binStepNum).log());
|
|
14167
14288
|
return (min ? binId.floor() : binId.ceil()).toNumber();
|
|
14168
14289
|
}
|
|
14169
14290
|
/**
|
|
@@ -14775,8 +14896,8 @@ var DLMM = class {
|
|
|
14775
14896
|
*/
|
|
14776
14897
|
static calculateFeeInfo(baseFactor, binStep, baseFeePowerFactor) {
|
|
14777
14898
|
const baseFeeRate = new BN21(baseFactor).mul(new BN21(binStep)).mul(new BN21(10)).mul(new BN21(10).pow(new BN21(baseFeePowerFactor ?? 0)));
|
|
14778
|
-
const baseFeeRatePercentage = new
|
|
14779
|
-
const maxFeeRatePercentage = new
|
|
14899
|
+
const baseFeeRatePercentage = new Decimal8(baseFeeRate.toString()).mul(new Decimal8(100)).div(new Decimal8(FEE_PRECISION.toString()));
|
|
14900
|
+
const maxFeeRatePercentage = new Decimal8(MAX_FEE_RATE.toString()).mul(new Decimal8(100)).div(new Decimal8(FEE_PRECISION.toString()));
|
|
14780
14901
|
return {
|
|
14781
14902
|
baseFeeRatePercentage,
|
|
14782
14903
|
maxFeeRatePercentage
|
|
@@ -14794,7 +14915,7 @@ var DLMM = class {
|
|
|
14794
14915
|
this.lbPair.binStep,
|
|
14795
14916
|
this.lbPair.parameters.baseFeePowerFactor
|
|
14796
14917
|
);
|
|
14797
|
-
const protocolFeePercentage = new
|
|
14918
|
+
const protocolFeePercentage = new Decimal8(protocolShare.toString()).mul(new Decimal8(100)).div(new Decimal8(BASIS_POINT_MAX));
|
|
14798
14919
|
return {
|
|
14799
14920
|
baseFeeRatePercentage,
|
|
14800
14921
|
maxFeeRatePercentage,
|
|
@@ -14826,7 +14947,7 @@ var DLMM = class {
|
|
|
14826
14947
|
sParameters3,
|
|
14827
14948
|
vParameterClone
|
|
14828
14949
|
);
|
|
14829
|
-
return new
|
|
14950
|
+
return new Decimal8(totalFee.toString()).div(new Decimal8(FEE_PRECISION.toString())).mul(100);
|
|
14830
14951
|
}
|
|
14831
14952
|
/**
|
|
14832
14953
|
* The function `getEmissionRate` returns the emission rates for two rewards.
|
|
@@ -14839,8 +14960,8 @@ var DLMM = class {
|
|
|
14839
14960
|
({ rewardRate, rewardDurationEnd }) => now > rewardDurationEnd.toNumber() ? void 0 : rewardRate
|
|
14840
14961
|
);
|
|
14841
14962
|
return {
|
|
14842
|
-
rewardOne: rewardOneEmissionRate ? new
|
|
14843
|
-
rewardTwo: rewardTwoEmissionRate ? new
|
|
14963
|
+
rewardOne: rewardOneEmissionRate ? new Decimal8(rewardOneEmissionRate.toString()).div(PRECISION) : void 0,
|
|
14964
|
+
rewardTwo: rewardTwoEmissionRate ? new Decimal8(rewardTwoEmissionRate.toString()).div(PRECISION) : void 0
|
|
14844
14965
|
};
|
|
14845
14966
|
}
|
|
14846
14967
|
/**
|
|
@@ -14933,8 +15054,8 @@ var DLMM = class {
|
|
|
14933
15054
|
* @returns {string} real price of bin
|
|
14934
15055
|
*/
|
|
14935
15056
|
fromPricePerLamport(pricePerLamport) {
|
|
14936
|
-
return new
|
|
14937
|
-
new
|
|
15057
|
+
return new Decimal8(pricePerLamport).div(
|
|
15058
|
+
new Decimal8(
|
|
14938
15059
|
10 ** (this.tokenY.mint.decimals - this.tokenX.mint.decimals)
|
|
14939
15060
|
)
|
|
14940
15061
|
).toString();
|
|
@@ -15092,12 +15213,12 @@ var DLMM = class {
|
|
|
15092
15213
|
const lowerBinArrayIndex = binIdToBinArrayIndex(currentMinBinId);
|
|
15093
15214
|
const upperBinArrayIndex = binIdToBinArrayIndex(currentMaxBinId);
|
|
15094
15215
|
const binArraysCount = (await this.binArraysToBeCreate(lowerBinArrayIndex, upperBinArrayIndex)).length;
|
|
15095
|
-
const binArrayCost = new
|
|
15096
|
-
new
|
|
15216
|
+
const binArrayCost = new Decimal8(binArraysCount).mul(
|
|
15217
|
+
new Decimal8(BIN_ARRAY_FEE)
|
|
15097
15218
|
);
|
|
15098
15219
|
return {
|
|
15099
|
-
positionExtendCost: new
|
|
15100
|
-
new
|
|
15220
|
+
positionExtendCost: new Decimal8(positionExtendCost).div(
|
|
15221
|
+
new Decimal8(LAMPORTS_PER_SOL2)
|
|
15101
15222
|
),
|
|
15102
15223
|
binArrayCost
|
|
15103
15224
|
};
|
|
@@ -16366,7 +16487,7 @@ var DLMM = class {
|
|
|
16366
16487
|
activeId.toNumber(),
|
|
16367
16488
|
this.lbPair.binStep
|
|
16368
16489
|
);
|
|
16369
|
-
const priceImpact = startPrice.sub(endPrice).abs().div(startPrice).mul(new
|
|
16490
|
+
const priceImpact = startPrice.sub(endPrice).abs().div(startPrice).mul(new Decimal8(100));
|
|
16370
16491
|
actualInAmount = calculateTransferFeeIncludedAmount(
|
|
16371
16492
|
actualInAmount.add(feeAmount),
|
|
16372
16493
|
inMint,
|
|
@@ -16553,7 +16674,7 @@ var DLMM = class {
|
|
|
16553
16674
|
),
|
|
16554
16675
|
swapForY
|
|
16555
16676
|
);
|
|
16556
|
-
const priceImpact = new
|
|
16677
|
+
const priceImpact = new Decimal8(totalOutAmount.toString()).sub(new Decimal8(outAmountWithoutSlippage.toString())).div(new Decimal8(outAmountWithoutSlippage.toString())).mul(new Decimal8(100)).abs();
|
|
16557
16678
|
const endPrice = getPriceOfBinByBinId(
|
|
16558
16679
|
lastFilledActiveBinId.toNumber(),
|
|
16559
16680
|
this.lbPair.binStep
|
|
@@ -17162,11 +17283,11 @@ var DLMM = class {
|
|
|
17162
17283
|
let totalBinArraysCount = new BN21(0);
|
|
17163
17284
|
let totalBinArraysLamports = new BN21(0);
|
|
17164
17285
|
let binArrayBitmapLamports = new BN21(0);
|
|
17165
|
-
const toLamportMultiplier = new
|
|
17286
|
+
const toLamportMultiplier = new Decimal8(
|
|
17166
17287
|
10 ** (this.tokenY.mint.decimals - this.tokenX.mint.decimals)
|
|
17167
17288
|
);
|
|
17168
|
-
const minPricePerLamport = new
|
|
17169
|
-
const maxPricePerLamport = new
|
|
17289
|
+
const minPricePerLamport = new Decimal8(minPrice).mul(toLamportMultiplier);
|
|
17290
|
+
const maxPricePerLamport = new Decimal8(maxPrice).mul(toLamportMultiplier);
|
|
17170
17291
|
const minBinId = new BN21(
|
|
17171
17292
|
DLMM.getBinIdFromPrice(minPricePerLamport, this.lbPair.binStep, false)
|
|
17172
17293
|
);
|
|
@@ -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 BN21(rebalancePosition.lbPair.activeId),
|
|
18163
18283
|
new BN21(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 BN21(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(PublicKey10.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(PublicKey10.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 BN21(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 */);
|
|
@@ -18667,8 +18846,8 @@ var DLMM = class {
|
|
|
18667
18846
|
if (!bins.length)
|
|
18668
18847
|
return null;
|
|
18669
18848
|
const positionData = [];
|
|
18670
|
-
let totalXAmount = new
|
|
18671
|
-
let totalYAmount = new
|
|
18849
|
+
let totalXAmount = new Decimal8(0);
|
|
18850
|
+
let totalYAmount = new Decimal8(0);
|
|
18672
18851
|
const ZERO = new BN21(0);
|
|
18673
18852
|
let feeX = ZERO;
|
|
18674
18853
|
let feeY = ZERO;
|
|
@@ -18679,8 +18858,8 @@ var DLMM = class {
|
|
|
18679
18858
|
const posBinRewardInfo = positionRewardInfos[idx];
|
|
18680
18859
|
const positionXAmount = binSupply.eq(ZERO) ? ZERO : posShare.mul(bin.xAmount).div(binSupply);
|
|
18681
18860
|
const positionYAmount = binSupply.eq(ZERO) ? ZERO : posShare.mul(bin.yAmount).div(binSupply);
|
|
18682
|
-
totalXAmount = totalXAmount.add(new
|
|
18683
|
-
totalYAmount = totalYAmount.add(new
|
|
18861
|
+
totalXAmount = totalXAmount.add(new Decimal8(positionXAmount.toString()));
|
|
18862
|
+
totalYAmount = totalYAmount.add(new Decimal8(positionYAmount.toString()));
|
|
18684
18863
|
const feeInfo = feeInfos[idx];
|
|
18685
18864
|
const newFeeX = mulShr(
|
|
18686
18865
|
posShares[idx].shrn(SCALE_OFFSET),
|
|
@@ -18844,7 +19023,7 @@ var DLMM = class {
|
|
|
18844
19023
|
rewardPerTokenStored: [ZERO, ZERO],
|
|
18845
19024
|
price: pricePerLamport,
|
|
18846
19025
|
version: 2,
|
|
18847
|
-
pricePerToken: new
|
|
19026
|
+
pricePerToken: new Decimal8(pricePerLamport).mul(new Decimal8(10 ** (baseTokenDecimal - quoteTokenDecimal))).toString()
|
|
18848
19027
|
});
|
|
18849
19028
|
} else {
|
|
18850
19029
|
const bin = binArray.bins[i];
|
|
@@ -18858,7 +19037,7 @@ var DLMM = class {
|
|
|
18858
19037
|
rewardPerTokenStored: bin.rewardPerTokenStored,
|
|
18859
19038
|
price: pricePerLamport,
|
|
18860
19039
|
version: binArray.version,
|
|
18861
|
-
pricePerToken: new
|
|
19040
|
+
pricePerToken: new Decimal8(pricePerLamport).mul(new Decimal8(10 ** (baseTokenDecimal - quoteTokenDecimal))).toString()
|
|
18862
19041
|
});
|
|
18863
19042
|
}
|
|
18864
19043
|
}
|