@byreal-io/byreal-clmm-sdk 0.2.0
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/LICENSE +21 -0
- package/README.md +341 -0
- package/dist/esm/client/chain.d.ts +227 -0
- package/dist/esm/client/chain.d.ts.map +1 -0
- package/dist/esm/client/chain.js +1123 -0
- package/dist/esm/client/chain.js.map +1 -0
- package/dist/esm/client/index.d.ts +4 -0
- package/dist/esm/client/index.d.ts.map +1 -0
- package/dist/esm/client/index.js +4 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/client/models.d.ts +160 -0
- package/dist/esm/client/models.d.ts.map +1 -0
- package/dist/esm/client/models.js +2 -0
- package/dist/esm/client/models.js.map +1 -0
- package/dist/esm/client/utils.d.ts +103 -0
- package/dist/esm/client/utils.d.ts.map +1 -0
- package/dist/esm/client/utils.js +238 -0
- package/dist/esm/client/utils.js.map +1 -0
- package/dist/esm/constants.d.ts +19 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +27 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/instructions/baseInstruction.d.ts +74 -0
- package/dist/esm/instructions/baseInstruction.d.ts.map +1 -0
- package/dist/esm/instructions/baseInstruction.js +577 -0
- package/dist/esm/instructions/baseInstruction.js.map +1 -0
- package/dist/esm/instructions/constants.d.ts +29 -0
- package/dist/esm/instructions/constants.d.ts.map +1 -0
- package/dist/esm/instructions/constants.js +32 -0
- package/dist/esm/instructions/constants.js.map +1 -0
- package/dist/esm/instructions/getRawData.d.ts +60 -0
- package/dist/esm/instructions/getRawData.d.ts.map +1 -0
- package/dist/esm/instructions/getRawData.js +105 -0
- package/dist/esm/instructions/getRawData.js.map +1 -0
- package/dist/esm/instructions/index.d.ts +9 -0
- package/dist/esm/instructions/index.d.ts.map +1 -0
- package/dist/esm/instructions/index.js +9 -0
- package/dist/esm/instructions/index.js.map +1 -0
- package/dist/esm/instructions/instruction.d.ts +137 -0
- package/dist/esm/instructions/instruction.d.ts.map +1 -0
- package/dist/esm/instructions/instruction.js +152 -0
- package/dist/esm/instructions/instruction.js.map +1 -0
- package/dist/esm/instructions/layout.d.ts +217 -0
- package/dist/esm/instructions/layout.d.ts.map +1 -0
- package/dist/esm/instructions/layout.js +203 -0
- package/dist/esm/instructions/layout.js.map +1 -0
- package/dist/esm/instructions/libs/marshmallow/bufferLayout.d.ts +107 -0
- package/dist/esm/instructions/libs/marshmallow/bufferLayout.d.ts.map +1 -0
- package/dist/esm/instructions/libs/marshmallow/bufferLayout.js +49 -0
- package/dist/esm/instructions/libs/marshmallow/bufferLayout.js.map +1 -0
- package/dist/esm/instructions/libs/marshmallow/index.d.ts +88 -0
- package/dist/esm/instructions/libs/marshmallow/index.d.ts.map +1 -0
- package/dist/esm/instructions/libs/marshmallow/index.js +256 -0
- package/dist/esm/instructions/libs/marshmallow/index.js.map +1 -0
- package/dist/esm/instructions/models.d.ts +39 -0
- package/dist/esm/instructions/models.d.ts.map +1 -0
- package/dist/esm/instructions/models.js +14 -0
- package/dist/esm/instructions/models.js.map +1 -0
- package/dist/esm/instructions/pda.d.ts +52 -0
- package/dist/esm/instructions/pda.d.ts.map +1 -0
- package/dist/esm/instructions/pda.js +47 -0
- package/dist/esm/instructions/pda.js.map +1 -0
- package/dist/esm/instructions/target/idl/byreal_amm_v3.json +7242 -0
- package/dist/esm/instructions/target/idl/byreal_amm_v3_test.json +7680 -0
- package/dist/esm/instructions/target/types/byreal_amm_v3.d.ts +5329 -0
- package/dist/esm/instructions/target/types/byreal_amm_v3.d.ts.map +1 -0
- package/dist/esm/instructions/target/types/byreal_amm_v3.js +2 -0
- package/dist/esm/instructions/target/types/byreal_amm_v3.js.map +1 -0
- package/dist/esm/instructions/target/types/raydium_amm_v3.d.ts +4149 -0
- package/dist/esm/instructions/target/types/raydium_amm_v3.d.ts.map +1 -0
- package/dist/esm/instructions/target/types/raydium_amm_v3.js +2 -0
- package/dist/esm/instructions/target/types/raydium_amm_v3.js.map +1 -0
- package/dist/esm/instructions/utils/binaryUtils.d.ts +11 -0
- package/dist/esm/instructions/utils/binaryUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/binaryUtils.js +77 -0
- package/dist/esm/instructions/utils/binaryUtils.js.map +1 -0
- package/dist/esm/instructions/utils/fetchWalletTokenAccounts.d.ts +42 -0
- package/dist/esm/instructions/utils/fetchWalletTokenAccounts.d.ts.map +1 -0
- package/dist/esm/instructions/utils/fetchWalletTokenAccounts.js +63 -0
- package/dist/esm/instructions/utils/fetchWalletTokenAccounts.js.map +1 -0
- package/dist/esm/instructions/utils/getTickArrayBitmapExtension.d.ts +8 -0
- package/dist/esm/instructions/utils/getTickArrayBitmapExtension.d.ts.map +1 -0
- package/dist/esm/instructions/utils/getTickArrayBitmapExtension.js +22 -0
- package/dist/esm/instructions/utils/getTickArrayBitmapExtension.js.map +1 -0
- package/dist/esm/instructions/utils/getTickArrayInfo.d.ts +16 -0
- package/dist/esm/instructions/utils/getTickArrayInfo.d.ts.map +1 -0
- package/dist/esm/instructions/utils/getTickArrayInfo.js +75 -0
- package/dist/esm/instructions/utils/getTickArrayInfo.js.map +1 -0
- package/dist/esm/instructions/utils/index.d.ts +21 -0
- package/dist/esm/instructions/utils/index.d.ts.map +1 -0
- package/dist/esm/instructions/utils/index.js +21 -0
- package/dist/esm/instructions/utils/index.js.map +1 -0
- package/dist/esm/instructions/utils/liquidityMath.d.ts +30 -0
- package/dist/esm/instructions/utils/liquidityMath.d.ts.map +1 -0
- package/dist/esm/instructions/utils/liquidityMath.js +138 -0
- package/dist/esm/instructions/utils/liquidityMath.js.map +1 -0
- package/dist/esm/instructions/utils/mathUtils.d.ts +11 -0
- package/dist/esm/instructions/utils/mathUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/mathUtils.js +36 -0
- package/dist/esm/instructions/utils/mathUtils.js.map +1 -0
- package/dist/esm/instructions/utils/models.d.ts +93 -0
- package/dist/esm/instructions/utils/models.d.ts.map +1 -0
- package/dist/esm/instructions/utils/models.js +13 -0
- package/dist/esm/instructions/utils/models.js.map +1 -0
- package/dist/esm/instructions/utils/poolStateUtils.d.ts +134 -0
- package/dist/esm/instructions/utils/poolStateUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/poolStateUtils.js +137 -0
- package/dist/esm/instructions/utils/poolStateUtils.js.map +1 -0
- package/dist/esm/instructions/utils/poolUtils.d.ts +136 -0
- package/dist/esm/instructions/utils/poolUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/poolUtils.js +219 -0
- package/dist/esm/instructions/utils/poolUtils.js.map +1 -0
- package/dist/esm/instructions/utils/position.d.ts +36 -0
- package/dist/esm/instructions/utils/position.d.ts.map +1 -0
- package/dist/esm/instructions/utils/position.js +86 -0
- package/dist/esm/instructions/utils/position.js.map +1 -0
- package/dist/esm/instructions/utils/sqrtPriceMath.d.ts +14 -0
- package/dist/esm/instructions/utils/sqrtPriceMath.d.ts.map +1 -0
- package/dist/esm/instructions/utils/sqrtPriceMath.js +168 -0
- package/dist/esm/instructions/utils/sqrtPriceMath.js.map +1 -0
- package/dist/esm/instructions/utils/swapMath.d.ts +48 -0
- package/dist/esm/instructions/utils/swapMath.d.ts.map +1 -0
- package/dist/esm/instructions/utils/swapMath.js +263 -0
- package/dist/esm/instructions/utils/swapMath.js.map +1 -0
- package/dist/esm/instructions/utils/tick.d.ts +106 -0
- package/dist/esm/instructions/utils/tick.d.ts.map +1 -0
- package/dist/esm/instructions/utils/tick.js +390 -0
- package/dist/esm/instructions/utils/tick.js.map +1 -0
- package/dist/esm/instructions/utils/tickArrayUtils.d.ts +50 -0
- package/dist/esm/instructions/utils/tickArrayUtils.d.ts.map +1 -0
- package/dist/esm/instructions/utils/tickArrayUtils.js +157 -0
- package/dist/esm/instructions/utils/tickArrayUtils.js.map +1 -0
- package/dist/esm/instructions/utils/tickMath.d.ts +18 -0
- package/dist/esm/instructions/utils/tickMath.d.ts.map +1 -0
- package/dist/esm/instructions/utils/tickMath.js +34 -0
- package/dist/esm/instructions/utils/tickMath.js.map +1 -0
- package/dist/esm/instructions/utils/tickarrayBitmap.d.ts +38 -0
- package/dist/esm/instructions/utils/tickarrayBitmap.d.ts.map +1 -0
- package/dist/esm/instructions/utils/tickarrayBitmap.js +157 -0
- package/dist/esm/instructions/utils/tickarrayBitmap.js.map +1 -0
- package/dist/esm/instructions/utils/transfer.d.ts +7 -0
- package/dist/esm/instructions/utils/transfer.d.ts.map +1 -0
- package/dist/esm/instructions/utils/transfer.js +78 -0
- package/dist/esm/instructions/utils/transfer.js.map +1 -0
- package/dist/esm/utils/accountInfo.d.ts +27 -0
- package/dist/esm/utils/accountInfo.d.ts.map +1 -0
- package/dist/esm/utils/accountInfo.js +80 -0
- package/dist/esm/utils/accountInfo.js.map +1 -0
- package/dist/esm/utils/checkV0TxSize.d.ts +8 -0
- package/dist/esm/utils/checkV0TxSize.d.ts.map +1 -0
- package/dist/esm/utils/checkV0TxSize.js +18 -0
- package/dist/esm/utils/checkV0TxSize.js.map +1 -0
- package/dist/esm/utils/estimateComputeUnits.d.ts +11 -0
- package/dist/esm/utils/estimateComputeUnits.d.ts.map +1 -0
- package/dist/esm/utils/estimateComputeUnits.js +48 -0
- package/dist/esm/utils/estimateComputeUnits.js.map +1 -0
- package/dist/esm/utils/generatePubKey.d.ts +10 -0
- package/dist/esm/utils/generatePubKey.d.ts.map +1 -0
- package/dist/esm/utils/generatePubKey.js +14 -0
- package/dist/esm/utils/generatePubKey.js.map +1 -0
- package/dist/esm/utils/index.d.ts +9 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +11 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/token.d.ts +9 -0
- package/dist/esm/utils/token.d.ts.map +1 -0
- package/dist/esm/utils/token.js +16 -0
- package/dist/esm/utils/token.js.map +1 -0
- package/dist/esm/utils/transactionUtils.d.ts +84 -0
- package/dist/esm/utils/transactionUtils.d.ts.map +1 -0
- package/dist/esm/utils/transactionUtils.js +138 -0
- package/dist/esm/utils/transactionUtils.js.map +1 -0
- package/dist/esm/utils/validateAndParsePublicKey.d.ts +15 -0
- package/dist/esm/utils/validateAndParsePublicKey.d.ts.map +1 -0
- package/dist/esm/utils/validateAndParsePublicKey.js +42 -0
- package/dist/esm/utils/validateAndParsePublicKey.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import BN from 'bn.js';
|
|
2
|
+
import { Decimal } from 'decimal.js';
|
|
3
|
+
import { BIT_PRECISION, LOG_B_2_X32, LOG_B_P_ERR_MARGIN_LOWER_X64, LOG_B_P_ERR_MARGIN_UPPER_X64, MAX_SQRT_PRICE_X64, MAX_TICK, MaxUint128, MIN_SQRT_PRICE_X64, MIN_TICK, ONE, U64Resolution, ZERO, } from '../constants.js';
|
|
4
|
+
import { MathUtils } from './mathUtils.js';
|
|
5
|
+
function mulRightShift(val, mulBy) {
|
|
6
|
+
return signedRightShift(val.mul(mulBy), 64, 256);
|
|
7
|
+
}
|
|
8
|
+
function signedLeftShift(n0, shiftBy, bitWidth) {
|
|
9
|
+
const twosN0 = n0.toTwos(bitWidth).shln(shiftBy);
|
|
10
|
+
twosN0.imaskn(bitWidth + 1);
|
|
11
|
+
return twosN0.fromTwos(bitWidth);
|
|
12
|
+
}
|
|
13
|
+
function signedRightShift(n0, shiftBy, bitWidth) {
|
|
14
|
+
const twoN0 = n0.toTwos(bitWidth).shrn(shiftBy);
|
|
15
|
+
twoN0.imaskn(bitWidth - shiftBy + 1);
|
|
16
|
+
return twoN0.fromTwos(bitWidth - shiftBy);
|
|
17
|
+
}
|
|
18
|
+
export class SqrtPriceMath {
|
|
19
|
+
static sqrtPriceX64ToPrice(sqrtPriceX64, decimalsA, decimalsB) {
|
|
20
|
+
return MathUtils.x64ToDecimal(sqrtPriceX64)
|
|
21
|
+
.pow(2)
|
|
22
|
+
.mul(Decimal.pow(10, decimalsA - decimalsB));
|
|
23
|
+
}
|
|
24
|
+
static priceToSqrtPriceX64(price, decimalsA, decimalsB) {
|
|
25
|
+
return MathUtils.decimalToX64(price.mul(Decimal.pow(10, decimalsB - decimalsA)).sqrt());
|
|
26
|
+
}
|
|
27
|
+
static getNextSqrtPriceX64FromInput(sqrtPriceX64, liquidity, amountIn, zeroForOne) {
|
|
28
|
+
if (!sqrtPriceX64.gt(ZERO)) {
|
|
29
|
+
throw new Error('sqrtPriceX64 must greater than 0');
|
|
30
|
+
}
|
|
31
|
+
if (!liquidity.gt(ZERO)) {
|
|
32
|
+
throw new Error('liquidity must greater than 0');
|
|
33
|
+
}
|
|
34
|
+
return zeroForOne
|
|
35
|
+
? this.getNextSqrtPriceFromTokenAmountARoundingUp(sqrtPriceX64, liquidity, amountIn, true)
|
|
36
|
+
: this.getNextSqrtPriceFromTokenAmountBRoundingDown(sqrtPriceX64, liquidity, amountIn, true);
|
|
37
|
+
}
|
|
38
|
+
static getNextSqrtPriceX64FromOutput(sqrtPriceX64, liquidity, amountOut, zeroForOne) {
|
|
39
|
+
if (!sqrtPriceX64.gt(ZERO)) {
|
|
40
|
+
throw new Error('sqrtPriceX64 must greater than 0');
|
|
41
|
+
}
|
|
42
|
+
if (!liquidity.gt(ZERO)) {
|
|
43
|
+
throw new Error('liquidity must greater than 0');
|
|
44
|
+
}
|
|
45
|
+
return zeroForOne
|
|
46
|
+
? this.getNextSqrtPriceFromTokenAmountBRoundingDown(sqrtPriceX64, liquidity, amountOut, false)
|
|
47
|
+
: this.getNextSqrtPriceFromTokenAmountARoundingUp(sqrtPriceX64, liquidity, amountOut, false);
|
|
48
|
+
}
|
|
49
|
+
static getNextSqrtPriceFromTokenAmountARoundingUp(sqrtPriceX64, liquidity, amount, add) {
|
|
50
|
+
if (amount.eq(ZERO))
|
|
51
|
+
return sqrtPriceX64;
|
|
52
|
+
const liquidityLeftShift = liquidity.shln(U64Resolution);
|
|
53
|
+
if (add) {
|
|
54
|
+
const numerator1 = liquidityLeftShift;
|
|
55
|
+
const denominator = liquidityLeftShift.add(amount.mul(sqrtPriceX64));
|
|
56
|
+
if (denominator.gte(numerator1)) {
|
|
57
|
+
return MathUtils.mulDivCeil(numerator1, sqrtPriceX64, denominator);
|
|
58
|
+
}
|
|
59
|
+
return MathUtils.mulDivRoundingUp(numerator1, ONE, numerator1.div(sqrtPriceX64).add(amount));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const amountMulSqrtPrice = amount.mul(sqrtPriceX64);
|
|
63
|
+
if (!liquidityLeftShift.gt(amountMulSqrtPrice)) {
|
|
64
|
+
throw new Error('getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice');
|
|
65
|
+
}
|
|
66
|
+
const denominator = liquidityLeftShift.sub(amountMulSqrtPrice);
|
|
67
|
+
return MathUtils.mulDivCeil(liquidityLeftShift, sqrtPriceX64, denominator);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
static getNextSqrtPriceFromTokenAmountBRoundingDown(sqrtPriceX64, liquidity, amount, add) {
|
|
71
|
+
const deltaY = amount.shln(U64Resolution);
|
|
72
|
+
if (add) {
|
|
73
|
+
return sqrtPriceX64.add(deltaY.div(liquidity));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const amountDivLiquidity = MathUtils.mulDivRoundingUp(deltaY, ONE, liquidity);
|
|
77
|
+
if (!sqrtPriceX64.gt(amountDivLiquidity)) {
|
|
78
|
+
throw new Error('getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity');
|
|
79
|
+
}
|
|
80
|
+
return sqrtPriceX64.sub(amountDivLiquidity);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
static getSqrtPriceX64FromTick(tick) {
|
|
84
|
+
if (!Number.isInteger(tick)) {
|
|
85
|
+
throw new Error('tick must be integer');
|
|
86
|
+
}
|
|
87
|
+
if (tick < MIN_TICK || tick > MAX_TICK) {
|
|
88
|
+
throw new Error('tick must be in MIN_TICK and MAX_TICK');
|
|
89
|
+
}
|
|
90
|
+
const tickAbs = tick < 0 ? tick * -1 : tick;
|
|
91
|
+
let ratio = (tickAbs & 0x1) != 0 ? new BN('18445821805675395072') : new BN('18446744073709551616');
|
|
92
|
+
if ((tickAbs & 0x2) != 0)
|
|
93
|
+
ratio = mulRightShift(ratio, new BN('18444899583751176192'));
|
|
94
|
+
if ((tickAbs & 0x4) != 0)
|
|
95
|
+
ratio = mulRightShift(ratio, new BN('18443055278223355904'));
|
|
96
|
+
if ((tickAbs & 0x8) != 0)
|
|
97
|
+
ratio = mulRightShift(ratio, new BN('18439367220385607680'));
|
|
98
|
+
if ((tickAbs & 0x10) != 0)
|
|
99
|
+
ratio = mulRightShift(ratio, new BN('18431993317065453568'));
|
|
100
|
+
if ((tickAbs & 0x20) != 0)
|
|
101
|
+
ratio = mulRightShift(ratio, new BN('18417254355718170624'));
|
|
102
|
+
if ((tickAbs & 0x40) != 0)
|
|
103
|
+
ratio = mulRightShift(ratio, new BN('18387811781193609216'));
|
|
104
|
+
if ((tickAbs & 0x80) != 0)
|
|
105
|
+
ratio = mulRightShift(ratio, new BN('18329067761203558400'));
|
|
106
|
+
if ((tickAbs & 0x100) != 0)
|
|
107
|
+
ratio = mulRightShift(ratio, new BN('18212142134806163456'));
|
|
108
|
+
if ((tickAbs & 0x200) != 0)
|
|
109
|
+
ratio = mulRightShift(ratio, new BN('17980523815641700352'));
|
|
110
|
+
if ((tickAbs & 0x400) != 0)
|
|
111
|
+
ratio = mulRightShift(ratio, new BN('17526086738831433728'));
|
|
112
|
+
if ((tickAbs & 0x800) != 0)
|
|
113
|
+
ratio = mulRightShift(ratio, new BN('16651378430235570176'));
|
|
114
|
+
if ((tickAbs & 0x1000) != 0)
|
|
115
|
+
ratio = mulRightShift(ratio, new BN('15030750278694412288'));
|
|
116
|
+
if ((tickAbs & 0x2000) != 0)
|
|
117
|
+
ratio = mulRightShift(ratio, new BN('12247334978884435968'));
|
|
118
|
+
if ((tickAbs & 0x4000) != 0)
|
|
119
|
+
ratio = mulRightShift(ratio, new BN('8131365268886854656'));
|
|
120
|
+
if ((tickAbs & 0x8000) != 0)
|
|
121
|
+
ratio = mulRightShift(ratio, new BN('3584323654725218816'));
|
|
122
|
+
if ((tickAbs & 0x10000) != 0)
|
|
123
|
+
ratio = mulRightShift(ratio, new BN('696457651848324352'));
|
|
124
|
+
if ((tickAbs & 0x20000) != 0)
|
|
125
|
+
ratio = mulRightShift(ratio, new BN('26294789957507116'));
|
|
126
|
+
if ((tickAbs & 0x40000) != 0)
|
|
127
|
+
ratio = mulRightShift(ratio, new BN('37481735321082'));
|
|
128
|
+
if (tick > 0)
|
|
129
|
+
ratio = MaxUint128.div(ratio);
|
|
130
|
+
return ratio;
|
|
131
|
+
}
|
|
132
|
+
static getTickFromPrice(price, decimalsA, decimalsB) {
|
|
133
|
+
return SqrtPriceMath.getTickFromSqrtPriceX64(SqrtPriceMath.priceToSqrtPriceX64(price, decimalsA, decimalsB));
|
|
134
|
+
}
|
|
135
|
+
static getTickFromSqrtPriceX64(sqrtPriceX64) {
|
|
136
|
+
if (sqrtPriceX64.gt(MAX_SQRT_PRICE_X64) || sqrtPriceX64.lt(MIN_SQRT_PRICE_X64)) {
|
|
137
|
+
throw new Error('Provided sqrtPrice is not within the supported sqrtPrice range.');
|
|
138
|
+
}
|
|
139
|
+
const msb = sqrtPriceX64.bitLength() - 1;
|
|
140
|
+
const adjustedMsb = new BN(msb - 64);
|
|
141
|
+
const log2pIntegerX32 = signedLeftShift(adjustedMsb, 32, 128);
|
|
142
|
+
let bit = new BN('8000000000000000', 'hex');
|
|
143
|
+
let precision = 0;
|
|
144
|
+
let log2pFractionX64 = new BN(0);
|
|
145
|
+
let r = msb >= 64 ? sqrtPriceX64.shrn(msb - 63) : sqrtPriceX64.shln(63 - msb);
|
|
146
|
+
while (bit.gt(new BN(0)) && precision < BIT_PRECISION) {
|
|
147
|
+
r = r.mul(r);
|
|
148
|
+
const rMoreThanTwo = r.shrn(127);
|
|
149
|
+
r = r.shrn(63 + rMoreThanTwo.toNumber());
|
|
150
|
+
log2pFractionX64 = log2pFractionX64.add(bit.mul(rMoreThanTwo));
|
|
151
|
+
bit = bit.shrn(1);
|
|
152
|
+
precision += 1;
|
|
153
|
+
}
|
|
154
|
+
const log2pFractionX32 = log2pFractionX64.shrn(32);
|
|
155
|
+
const log2pX32 = log2pIntegerX32.add(log2pFractionX32);
|
|
156
|
+
const logbpX64 = log2pX32.mul(new BN(LOG_B_2_X32));
|
|
157
|
+
const tickLow = signedRightShift(logbpX64.sub(new BN(LOG_B_P_ERR_MARGIN_LOWER_X64)), 64, 128).toNumber();
|
|
158
|
+
const tickHigh = signedRightShift(logbpX64.add(new BN(LOG_B_P_ERR_MARGIN_UPPER_X64)), 64, 128).toNumber();
|
|
159
|
+
if (tickLow == tickHigh) {
|
|
160
|
+
return tickLow;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const derivedTickHighSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(tickHigh);
|
|
164
|
+
return derivedTickHighSqrtPriceX64.lte(sqrtPriceX64) ? tickHigh : tickLow;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=sqrtPriceMath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqrtPriceMath.js","sourceRoot":"","sources":["../../../../src/instructions/utils/sqrtPriceMath.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PublicKey } from '@solana/web3.js';
|
|
2
|
+
import BN from 'bn.js';
|
|
3
|
+
import { TickArrayContainer, TickArrayBitmapExtensionType } from './models.js';
|
|
4
|
+
export declare abstract class SwapMath {
|
|
5
|
+
/**
|
|
6
|
+
* Calculate swap path and output amount
|
|
7
|
+
*
|
|
8
|
+
* @param programId - Public key address of the CLMM program
|
|
9
|
+
* @param poolId - Public key address of the liquidity pool
|
|
10
|
+
* @param tickArrayCache - Tick array cache with keys as tick array start indices
|
|
11
|
+
* @param tickArrayBitmap - Tick array bitmap for quickly finding initialized ticks
|
|
12
|
+
* @param tickarrayBitmapExtension - Tick array bitmap extension information
|
|
13
|
+
* @param zeroForOne - Swap direction: true means token0 to token1, false means token1 to token0
|
|
14
|
+
* @param fee - Transaction fee rate (base 1000000)
|
|
15
|
+
* @param liquidity - Current liquidity amount
|
|
16
|
+
* @param currentTick - Current tick position
|
|
17
|
+
* @param tickSpacing - Tick spacing
|
|
18
|
+
* @param currentSqrtPriceX64 - Square root of current price (Q64.64 format)
|
|
19
|
+
* @param amountSpecified - Specified swap amount (positive for input amount, negative for output amount)
|
|
20
|
+
* @param lastSavedTickArrayStartIndex - Last saved tick array start index
|
|
21
|
+
* @param sqrtPriceLimitX64 - Square root of price limit (Q64.64 format), optional parameter
|
|
22
|
+
* @param catchLiquidityInsufficient - Whether to catch liquidity insufficient errors, default false
|
|
23
|
+
*
|
|
24
|
+
* @returns Swap calculation result object
|
|
25
|
+
* @returns allTrade - Whether all trades were completed
|
|
26
|
+
* @returns amountSpecifiedRemaining - Remaining untraded amount
|
|
27
|
+
* @returns amountCalculated - Calculated amount of the other token
|
|
28
|
+
* @returns feeAmount - Total fees
|
|
29
|
+
* @returns sqrtPriceX64 - Square root of price after swap (Q64.64 format)
|
|
30
|
+
* @returns liquidity - Liquidity after swap
|
|
31
|
+
* @returns tickCurrent - Tick position after swap
|
|
32
|
+
* @returns accounts - List of tick array accounts that need to be accessed
|
|
33
|
+
*/
|
|
34
|
+
static swapCompute(programId: PublicKey, poolId: PublicKey, tickArrayInfo: {
|
|
35
|
+
[key: string]: TickArrayContainer;
|
|
36
|
+
}, tickArrayBitmap: BN[], tickarrayBitmapExtension: TickArrayBitmapExtensionType, zeroForOne: boolean, fee: number, liquidity: BN, currentTick: number, tickSpacing: number, currentSqrtPriceX64: BN, amountSpecified: BN, lastSavedTickArrayStartIndex: number, sqrtPriceLimitX64?: BN, catchLiquidityInsufficient?: boolean): {
|
|
37
|
+
allTrade: boolean;
|
|
38
|
+
amountSpecifiedRemaining: BN;
|
|
39
|
+
amountCalculated: BN;
|
|
40
|
+
feeAmount: BN;
|
|
41
|
+
sqrtPriceX64: BN;
|
|
42
|
+
liquidity: BN;
|
|
43
|
+
tickCurrent: number;
|
|
44
|
+
accounts: PublicKey[];
|
|
45
|
+
};
|
|
46
|
+
private static swapStepCompute;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=swapMath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swapMath.d.ts","sourceRoot":"","sources":["../../../../src/instructions/utils/swapMath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,OAAO,CAAC;AAgBvB,OAAO,EAA0B,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAYvG,8BAAsB,QAAQ;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;WACW,WAAW,CACvB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;KAAE,EACpD,eAAe,EAAE,EAAE,EAAE,EACrB,wBAAwB,EAAE,4BAA4B,EACtD,UAAU,EAAE,OAAO,EACnB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,EAAE,EACb,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,EAAE,EACvB,eAAe,EAAE,EAAE,EACnB,4BAA4B,EAAE,MAAM,EACpC,iBAAiB,CAAC,EAAE,EAAE,EACtB,0BAA0B,UAAQ,GACjC;QACD,QAAQ,EAAE,OAAO,CAAC;QAClB,wBAAwB,EAAE,EAAE,CAAC;QAC7B,gBAAgB,EAAE,EAAE,CAAC;QACrB,SAAS,EAAE,EAAE,CAAC;QACd,YAAY,EAAE,EAAE,CAAC;QACjB,SAAS,EAAE,EAAE,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,SAAS,EAAE,CAAC;KACvB;IA8MD,OAAO,CAAC,MAAM,CAAC,eAAe;CAsG/B"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import BN from 'bn.js';
|
|
2
|
+
import { FEE_RATE_DENOMINATOR, MAX_SQRT_PRICE_X64, MAX_TICK, MIN_SQRT_PRICE_X64, MIN_TICK, NEGATIVE_ONE, ONE, ZERO, } from '../constants.js';
|
|
3
|
+
import { getPdaTickArrayAddress } from '../pda.js';
|
|
4
|
+
import { LiquidityMath } from './liquidityMath.js';
|
|
5
|
+
import { MathUtils } from './mathUtils.js';
|
|
6
|
+
import { PoolUtils } from './poolUtils.js';
|
|
7
|
+
import { SqrtPriceMath } from './sqrtPriceMath.js';
|
|
8
|
+
import { TickQuery, TickUtils } from './tick.js';
|
|
9
|
+
export class SwapMath {
|
|
10
|
+
/**
|
|
11
|
+
* Calculate swap path and output amount
|
|
12
|
+
*
|
|
13
|
+
* @param programId - Public key address of the CLMM program
|
|
14
|
+
* @param poolId - Public key address of the liquidity pool
|
|
15
|
+
* @param tickArrayCache - Tick array cache with keys as tick array start indices
|
|
16
|
+
* @param tickArrayBitmap - Tick array bitmap for quickly finding initialized ticks
|
|
17
|
+
* @param tickarrayBitmapExtension - Tick array bitmap extension information
|
|
18
|
+
* @param zeroForOne - Swap direction: true means token0 to token1, false means token1 to token0
|
|
19
|
+
* @param fee - Transaction fee rate (base 1000000)
|
|
20
|
+
* @param liquidity - Current liquidity amount
|
|
21
|
+
* @param currentTick - Current tick position
|
|
22
|
+
* @param tickSpacing - Tick spacing
|
|
23
|
+
* @param currentSqrtPriceX64 - Square root of current price (Q64.64 format)
|
|
24
|
+
* @param amountSpecified - Specified swap amount (positive for input amount, negative for output amount)
|
|
25
|
+
* @param lastSavedTickArrayStartIndex - Last saved tick array start index
|
|
26
|
+
* @param sqrtPriceLimitX64 - Square root of price limit (Q64.64 format), optional parameter
|
|
27
|
+
* @param catchLiquidityInsufficient - Whether to catch liquidity insufficient errors, default false
|
|
28
|
+
*
|
|
29
|
+
* @returns Swap calculation result object
|
|
30
|
+
* @returns allTrade - Whether all trades were completed
|
|
31
|
+
* @returns amountSpecifiedRemaining - Remaining untraded amount
|
|
32
|
+
* @returns amountCalculated - Calculated amount of the other token
|
|
33
|
+
* @returns feeAmount - Total fees
|
|
34
|
+
* @returns sqrtPriceX64 - Square root of price after swap (Q64.64 format)
|
|
35
|
+
* @returns liquidity - Liquidity after swap
|
|
36
|
+
* @returns tickCurrent - Tick position after swap
|
|
37
|
+
* @returns accounts - List of tick array accounts that need to be accessed
|
|
38
|
+
*/
|
|
39
|
+
static swapCompute(programId, poolId, tickArrayInfo, tickArrayBitmap, tickarrayBitmapExtension, zeroForOne, fee, liquidity, currentTick, tickSpacing, currentSqrtPriceX64, amountSpecified, lastSavedTickArrayStartIndex, sqrtPriceLimitX64, catchLiquidityInsufficient = false) {
|
|
40
|
+
if (amountSpecified.eq(ZERO)) {
|
|
41
|
+
throw new Error('amountSpecified must not be 0');
|
|
42
|
+
}
|
|
43
|
+
if (!sqrtPriceLimitX64)
|
|
44
|
+
sqrtPriceLimitX64 = zeroForOne ? MIN_SQRT_PRICE_X64.add(ONE) : MAX_SQRT_PRICE_X64.sub(ONE);
|
|
45
|
+
if (zeroForOne) {
|
|
46
|
+
if (sqrtPriceLimitX64.lt(MIN_SQRT_PRICE_X64)) {
|
|
47
|
+
throw new Error('sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64');
|
|
48
|
+
}
|
|
49
|
+
if (sqrtPriceLimitX64.gte(currentSqrtPriceX64)) {
|
|
50
|
+
throw new Error('sqrtPriceX64 must smaller than current');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
if (sqrtPriceLimitX64.gt(MAX_SQRT_PRICE_X64)) {
|
|
55
|
+
throw new Error('sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64');
|
|
56
|
+
}
|
|
57
|
+
if (sqrtPriceLimitX64.lte(currentSqrtPriceX64)) {
|
|
58
|
+
throw new Error('sqrtPriceX64 must greater than current');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const baseInput = amountSpecified.gt(ZERO);
|
|
62
|
+
const state = {
|
|
63
|
+
amountSpecifiedRemaining: amountSpecified,
|
|
64
|
+
amountCalculated: ZERO,
|
|
65
|
+
sqrtPriceX64: currentSqrtPriceX64,
|
|
66
|
+
tick: currentTick > lastSavedTickArrayStartIndex
|
|
67
|
+
? Math.min(lastSavedTickArrayStartIndex + TickQuery.tickCount(tickSpacing) - 1, currentTick)
|
|
68
|
+
: lastSavedTickArrayStartIndex,
|
|
69
|
+
accounts: [],
|
|
70
|
+
liquidity,
|
|
71
|
+
feeAmount: new BN(0),
|
|
72
|
+
};
|
|
73
|
+
let tickAarrayStartIndex = lastSavedTickArrayStartIndex;
|
|
74
|
+
let tickArrayCurrent = tickArrayInfo[lastSavedTickArrayStartIndex];
|
|
75
|
+
// Verify if tickArrayInfo contains necessary data
|
|
76
|
+
if (!tickArrayCurrent) {
|
|
77
|
+
throw new Error(`TickArray not found in cache for startIndex: ${lastSavedTickArrayStartIndex}. Please ensure tickArrayCache is properly initialized.`);
|
|
78
|
+
}
|
|
79
|
+
let loopCount = 0;
|
|
80
|
+
let t = !zeroForOne && tickArrayCurrent.data.startTickIndex === state.tick;
|
|
81
|
+
while (!state.amountSpecifiedRemaining.eq(ZERO) &&
|
|
82
|
+
!state.sqrtPriceX64.eq(sqrtPriceLimitX64)
|
|
83
|
+
// state.tick < MAX_TICK &&
|
|
84
|
+
// state.tick > MIN_TICK
|
|
85
|
+
) {
|
|
86
|
+
if (loopCount > 10) {
|
|
87
|
+
// throw Error('liquidity limit')
|
|
88
|
+
}
|
|
89
|
+
const step = {};
|
|
90
|
+
step.sqrtPriceStartX64 = state.sqrtPriceX64;
|
|
91
|
+
const tickState = TickUtils.nextInitTick(tickArrayCurrent, state.tick, tickSpacing, zeroForOne, t);
|
|
92
|
+
let nextInitTick = tickState ? tickState : null; // TickUtils.firstInitializedTick(tickArrayCurrent, zeroForOne)
|
|
93
|
+
let tickArrayAddress = null;
|
|
94
|
+
if (!nextInitTick?.liquidityGross.gtn(0)) {
|
|
95
|
+
const nextInitTickArrayIndex = PoolUtils.nextInitializedTickArrayStartIndex({
|
|
96
|
+
tickCurrent: state.tick,
|
|
97
|
+
tickSpacing,
|
|
98
|
+
tickArrayBitmap,
|
|
99
|
+
exBitmapInfo: tickarrayBitmapExtension,
|
|
100
|
+
}, tickAarrayStartIndex, zeroForOne);
|
|
101
|
+
if (!nextInitTickArrayIndex.isExist) {
|
|
102
|
+
if (catchLiquidityInsufficient) {
|
|
103
|
+
return {
|
|
104
|
+
allTrade: false,
|
|
105
|
+
amountSpecifiedRemaining: state.amountSpecifiedRemaining,
|
|
106
|
+
amountCalculated: state.amountCalculated,
|
|
107
|
+
feeAmount: state.feeAmount,
|
|
108
|
+
sqrtPriceX64: state.sqrtPriceX64,
|
|
109
|
+
liquidity: state.liquidity,
|
|
110
|
+
tickCurrent: state.tick,
|
|
111
|
+
accounts: state.accounts,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
throw Error('swapCompute LiquidityInsufficient');
|
|
115
|
+
}
|
|
116
|
+
tickAarrayStartIndex = nextInitTickArrayIndex.nextStartIndex;
|
|
117
|
+
const { publicKey: expectedNextTickArrayAddress } = getPdaTickArrayAddress(programId, poolId, tickAarrayStartIndex);
|
|
118
|
+
tickArrayAddress = expectedNextTickArrayAddress;
|
|
119
|
+
tickArrayCurrent = tickArrayInfo[tickAarrayStartIndex];
|
|
120
|
+
// Verify if new tick array is in cache
|
|
121
|
+
if (!tickArrayCurrent) {
|
|
122
|
+
throw new Error(`TickArray not found in cache for startIndex: ${tickAarrayStartIndex}. Missing tick array data during swap computation.`);
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
nextInitTick = TickUtils.firstInitializedTick(tickArrayCurrent, zeroForOne);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
throw new Error(`Failed to find initialized tick in array ${tickAarrayStartIndex}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
step.tickNext = nextInitTick.tick;
|
|
132
|
+
step.initialized = nextInitTick.liquidityGross.gtn(0);
|
|
133
|
+
if (lastSavedTickArrayStartIndex !== tickAarrayStartIndex && tickArrayAddress) {
|
|
134
|
+
state.accounts.push(tickArrayAddress);
|
|
135
|
+
lastSavedTickArrayStartIndex = tickAarrayStartIndex;
|
|
136
|
+
}
|
|
137
|
+
if (step.tickNext < MIN_TICK) {
|
|
138
|
+
step.tickNext = MIN_TICK;
|
|
139
|
+
}
|
|
140
|
+
else if (step.tickNext > MAX_TICK) {
|
|
141
|
+
step.tickNext = MAX_TICK;
|
|
142
|
+
}
|
|
143
|
+
step.sqrtPriceNextX64 = SqrtPriceMath.getSqrtPriceX64FromTick(step.tickNext);
|
|
144
|
+
let targetPrice;
|
|
145
|
+
if ((zeroForOne && step.sqrtPriceNextX64.lt(sqrtPriceLimitX64)) ||
|
|
146
|
+
(!zeroForOne && step.sqrtPriceNextX64.gt(sqrtPriceLimitX64))) {
|
|
147
|
+
targetPrice = sqrtPriceLimitX64;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
targetPrice = step.sqrtPriceNextX64;
|
|
151
|
+
}
|
|
152
|
+
[state.sqrtPriceX64, step.amountIn, step.amountOut, step.feeAmount] = SwapMath.swapStepCompute(state.sqrtPriceX64, targetPrice, state.liquidity, state.amountSpecifiedRemaining, fee, zeroForOne);
|
|
153
|
+
state.feeAmount = state.feeAmount.add(step.feeAmount);
|
|
154
|
+
if (baseInput) {
|
|
155
|
+
state.amountSpecifiedRemaining = state.amountSpecifiedRemaining.sub(step.amountIn.add(step.feeAmount));
|
|
156
|
+
state.amountCalculated = state.amountCalculated.sub(step.amountOut);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
state.amountSpecifiedRemaining = state.amountSpecifiedRemaining.add(step.amountOut);
|
|
160
|
+
state.amountCalculated = state.amountCalculated.add(step.amountIn.add(step.feeAmount));
|
|
161
|
+
}
|
|
162
|
+
if (state.sqrtPriceX64.eq(step.sqrtPriceNextX64)) {
|
|
163
|
+
if (step.initialized) {
|
|
164
|
+
let liquidityNet = nextInitTick.liquidityNet;
|
|
165
|
+
if (zeroForOne)
|
|
166
|
+
liquidityNet = liquidityNet.mul(NEGATIVE_ONE);
|
|
167
|
+
state.liquidity = LiquidityMath.addDelta(state.liquidity, liquidityNet);
|
|
168
|
+
}
|
|
169
|
+
t = step.tickNext != state.tick && !zeroForOne && tickArrayCurrent.data.startTickIndex === step.tickNext;
|
|
170
|
+
state.tick = zeroForOne ? step.tickNext - 1 : step.tickNext; //
|
|
171
|
+
}
|
|
172
|
+
else if (state.sqrtPriceX64 != step.sqrtPriceStartX64) {
|
|
173
|
+
const _T = SqrtPriceMath.getTickFromSqrtPriceX64(state.sqrtPriceX64);
|
|
174
|
+
t = _T != state.tick && !zeroForOne && tickArrayCurrent.data.startTickIndex === _T;
|
|
175
|
+
state.tick = _T;
|
|
176
|
+
}
|
|
177
|
+
++loopCount;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const { nextStartIndex: tickAarrayStartIndex, isExist } = TickQuery.nextInitializedTickArray(state.tick, tickSpacing, zeroForOne, tickArrayBitmap, tickarrayBitmapExtension);
|
|
181
|
+
if (isExist && lastSavedTickArrayStartIndex !== tickAarrayStartIndex) {
|
|
182
|
+
state.accounts.push(getPdaTickArrayAddress(programId, poolId, tickAarrayStartIndex).publicKey);
|
|
183
|
+
lastSavedTickArrayStartIndex = tickAarrayStartIndex;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
/* empty */
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
allTrade: true,
|
|
191
|
+
amountSpecifiedRemaining: ZERO,
|
|
192
|
+
amountCalculated: state.amountCalculated,
|
|
193
|
+
feeAmount: state.feeAmount,
|
|
194
|
+
sqrtPriceX64: state.sqrtPriceX64,
|
|
195
|
+
liquidity: state.liquidity,
|
|
196
|
+
tickCurrent: state.tick,
|
|
197
|
+
accounts: state.accounts,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
static swapStepCompute(sqrtPriceX64Current, sqrtPriceX64Target, liquidity, amountRemaining, feeRate, // Base 1000000
|
|
201
|
+
zeroForOne) {
|
|
202
|
+
const swapStep = {
|
|
203
|
+
sqrtPriceX64Next: new BN(0),
|
|
204
|
+
amountIn: new BN(0),
|
|
205
|
+
amountOut: new BN(0),
|
|
206
|
+
feeAmount: new BN(0),
|
|
207
|
+
};
|
|
208
|
+
const baseInput = amountRemaining.gte(ZERO);
|
|
209
|
+
if (baseInput) {
|
|
210
|
+
const amountRemainingSubtractFee = MathUtils.mulDivFloor(amountRemaining, FEE_RATE_DENOMINATOR.sub(new BN(feeRate.toString())), FEE_RATE_DENOMINATOR);
|
|
211
|
+
swapStep.amountIn = zeroForOne
|
|
212
|
+
? LiquidityMath.getTokenAmountAFromLiquidity(sqrtPriceX64Target, sqrtPriceX64Current, liquidity, true)
|
|
213
|
+
: LiquidityMath.getTokenAmountBFromLiquidity(sqrtPriceX64Current, sqrtPriceX64Target, liquidity, true);
|
|
214
|
+
if (amountRemainingSubtractFee.gte(swapStep.amountIn)) {
|
|
215
|
+
swapStep.sqrtPriceX64Next = sqrtPriceX64Target;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
swapStep.sqrtPriceX64Next = SqrtPriceMath.getNextSqrtPriceX64FromInput(sqrtPriceX64Current, liquidity, amountRemainingSubtractFee, zeroForOne);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
swapStep.amountOut = zeroForOne
|
|
223
|
+
? LiquidityMath.getTokenAmountBFromLiquidity(sqrtPriceX64Target, sqrtPriceX64Current, liquidity, false)
|
|
224
|
+
: LiquidityMath.getTokenAmountAFromLiquidity(sqrtPriceX64Current, sqrtPriceX64Target, liquidity, false);
|
|
225
|
+
if (amountRemaining.mul(NEGATIVE_ONE).gte(swapStep.amountOut)) {
|
|
226
|
+
swapStep.sqrtPriceX64Next = sqrtPriceX64Target;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
swapStep.sqrtPriceX64Next = SqrtPriceMath.getNextSqrtPriceX64FromOutput(sqrtPriceX64Current, liquidity, amountRemaining.mul(NEGATIVE_ONE), zeroForOne);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const reachTargetPrice = sqrtPriceX64Target.eq(swapStep.sqrtPriceX64Next);
|
|
233
|
+
if (zeroForOne) {
|
|
234
|
+
if (!(reachTargetPrice && baseInput)) {
|
|
235
|
+
swapStep.amountIn = LiquidityMath.getTokenAmountAFromLiquidity(swapStep.sqrtPriceX64Next, sqrtPriceX64Current, liquidity, true);
|
|
236
|
+
}
|
|
237
|
+
if (!(reachTargetPrice && !baseInput)) {
|
|
238
|
+
swapStep.amountOut = LiquidityMath.getTokenAmountBFromLiquidity(swapStep.sqrtPriceX64Next, sqrtPriceX64Current, liquidity, false);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
swapStep.amountIn =
|
|
243
|
+
reachTargetPrice && baseInput
|
|
244
|
+
? swapStep.amountIn
|
|
245
|
+
: LiquidityMath.getTokenAmountBFromLiquidity(sqrtPriceX64Current, swapStep.sqrtPriceX64Next, liquidity, true);
|
|
246
|
+
swapStep.amountOut =
|
|
247
|
+
reachTargetPrice && !baseInput
|
|
248
|
+
? swapStep.amountOut
|
|
249
|
+
: LiquidityMath.getTokenAmountAFromLiquidity(sqrtPriceX64Current, swapStep.sqrtPriceX64Next, liquidity, false);
|
|
250
|
+
}
|
|
251
|
+
if (!baseInput && swapStep.amountOut.gt(amountRemaining.mul(NEGATIVE_ONE))) {
|
|
252
|
+
swapStep.amountOut = amountRemaining.mul(NEGATIVE_ONE);
|
|
253
|
+
}
|
|
254
|
+
if (baseInput && !swapStep.sqrtPriceX64Next.eq(sqrtPriceX64Target)) {
|
|
255
|
+
swapStep.feeAmount = amountRemaining.sub(swapStep.amountIn);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
swapStep.feeAmount = MathUtils.mulDivCeil(swapStep.amountIn, new BN(feeRate), FEE_RATE_DENOMINATOR.sub(new BN(feeRate)));
|
|
259
|
+
}
|
|
260
|
+
return [swapStep.sqrtPriceX64Next, swapStep.amountIn, swapStep.amountOut, swapStep.feeAmount];
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=swapMath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swapMath.js","sourceRoot":"","sources":["../../../../src/instructions/utils/swapMath.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { PublicKey } from '@solana/web3.js';
|
|
2
|
+
import BN from 'bn.js';
|
|
3
|
+
import { Decimal } from 'decimal.js';
|
|
4
|
+
import { IPoolLayout } from '../layout.js';
|
|
5
|
+
import { ReturnTypeGetPriceAndTick, Tick, TickArrayBitmapExtensionType, TickArrayState, TickState, TickArrayContainer } from './models.js';
|
|
6
|
+
export declare class TickUtils {
|
|
7
|
+
static getTickArrayAddressByTick(programId: PublicKey, poolId: PublicKey, tickIndex: number, tickSpacing: number): PublicKey;
|
|
8
|
+
static getTickOffsetInArray(tickIndex: number, tickSpacing: number): number;
|
|
9
|
+
static getTickArrayBitIndex(tickIndex: number, tickSpacing: number): number;
|
|
10
|
+
static getTickArrayStartIndexByTick(tickIndex: number, tickSpacing: number): number;
|
|
11
|
+
static getTickArrayOffsetInBitmapByTick(tick: number, tickSpacing: number): number;
|
|
12
|
+
static checkTickArrayIsInitialized(bitmap: BN, tick: number, tickSpacing: number): {
|
|
13
|
+
isInitialized: boolean;
|
|
14
|
+
startIndex: number;
|
|
15
|
+
};
|
|
16
|
+
static getNextTickArrayStartIndex(lastTickArrayStartIndex: number, tickSpacing: number, zeroForOne: boolean): number;
|
|
17
|
+
static mergeTickArrayBitmap(bns: BN[]): BN;
|
|
18
|
+
/**
|
|
19
|
+
* Search for initialized TickArrays around the current position to find the starting indices of a specified number of initialized TickArrays
|
|
20
|
+
*
|
|
21
|
+
* @param tickArrayBitmap - Main tick array bitmap used to mark initialized tick arrays
|
|
22
|
+
* @param exTickArrayBitmap - Extended tick array bitmap containing positive and negative direction extension bitmap information
|
|
23
|
+
* @param tickSpacing - Tick spacing
|
|
24
|
+
* @param tickArrayStartIndex - Starting tick array index for the search
|
|
25
|
+
* @param expectedCount - Expected number of initialized TickArrays to find
|
|
26
|
+
*
|
|
27
|
+
* @returns Array of initialized TickArray starting indices
|
|
28
|
+
*
|
|
29
|
+
* @description
|
|
30
|
+
* This function is used to locate active liquidity around the current price. It searches on both sides of the given starting position:
|
|
31
|
+
* - Search right (higher tick positions)
|
|
32
|
+
* - Search left (lower tick positions)
|
|
33
|
+
* By combining the search results from both directions, it provides the liquidity distribution around the current price
|
|
34
|
+
*/
|
|
35
|
+
static getInitializedTickArrayInRange(tickArrayBitmap: BN[], exTickArrayBitmap: TickArrayBitmapExtensionType, tickSpacing: number, tickArrayStartIndex: number, expectedCount: number): number[];
|
|
36
|
+
static getAllInitializedTickArrayStartIndex(tickArrayBitmap: BN[], exTickArrayBitmap: TickArrayBitmapExtensionType, tickSpacing: number): number[];
|
|
37
|
+
static getAllInitializedTickArrayInfo(programId: PublicKey, poolId: PublicKey, tickArrayBitmap: BN[], exTickArrayBitmap: TickArrayBitmapExtensionType, tickSpacing: number): {
|
|
38
|
+
tickArrayStartIndex: number;
|
|
39
|
+
tickArrayAddress: PublicKey;
|
|
40
|
+
}[];
|
|
41
|
+
static getAllInitializedTickInTickArray(tickArray: TickArrayState): TickState[];
|
|
42
|
+
/**
|
|
43
|
+
* Search for initialized TickArrays to the left from the starting position
|
|
44
|
+
* Used to locate active liquidity near the current price
|
|
45
|
+
*/
|
|
46
|
+
static searchLowBitFromStart(tickArrayBitmap: BN[], exTickArrayBitmap: TickArrayBitmapExtensionType, currentTickArrayBitStartIndex: number, expectedCount: number, tickSpacing: number): number[];
|
|
47
|
+
/**
|
|
48
|
+
* Search for initialized TickArrays to the right from the starting position
|
|
49
|
+
* Used to locate active liquidity near the current price
|
|
50
|
+
*/
|
|
51
|
+
static searchHightBitFromStart(tickArrayBitmap: BN[], exTickArrayBitmap: TickArrayBitmapExtensionType, currentTickArrayBitStartIndex: number, expectedCount: number, tickSpacing: number): number[];
|
|
52
|
+
static checkIsOutOfBoundary(tick: number): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Get the next initialized Tick
|
|
55
|
+
* Used to locate active liquidity near the current price
|
|
56
|
+
* Now supports both fixed and dynamic tick arrays through the container pattern
|
|
57
|
+
*/
|
|
58
|
+
static nextInitTick(tickArrayCurrent: TickArrayContainer, currentTickIndex: number, tickSpacing: number, zeroForOne: boolean, t: boolean): Tick | null;
|
|
59
|
+
/**
|
|
60
|
+
* Fixed tick array implementation (original logic)
|
|
61
|
+
*/
|
|
62
|
+
private static _nextInitTickFixed;
|
|
63
|
+
/**
|
|
64
|
+
* Dynamic tick array implementation
|
|
65
|
+
* Uses the mapping table (tickOffsetIndex) to find allocated ticks
|
|
66
|
+
*/
|
|
67
|
+
private static _nextInitTickDynamic;
|
|
68
|
+
/**
|
|
69
|
+
* Find the first initialized Tick in the given TickArray, where "first" is defined based on the trading direction (zeroForOne)
|
|
70
|
+
* Now supports both fixed and dynamic tick arrays through the container pattern
|
|
71
|
+
*/
|
|
72
|
+
static firstInitializedTick(tickArrayCurrent: TickArrayContainer, zeroForOne: boolean): Tick;
|
|
73
|
+
/**
|
|
74
|
+
* Fixed tick array implementation (original logic)
|
|
75
|
+
*/
|
|
76
|
+
private static _firstInitializedTickFixed;
|
|
77
|
+
/**
|
|
78
|
+
* Dynamic tick array implementation
|
|
79
|
+
* Uses the mapping table (tickOffsetIndex) to find the first allocated tick
|
|
80
|
+
*/
|
|
81
|
+
private static _firstInitializedTickDynamic;
|
|
82
|
+
static getPriceAndTick({ poolInfo, price, baseIn, }: {
|
|
83
|
+
poolInfo: IPoolLayout;
|
|
84
|
+
price: Decimal;
|
|
85
|
+
baseIn: boolean;
|
|
86
|
+
}): ReturnTypeGetPriceAndTick;
|
|
87
|
+
}
|
|
88
|
+
export declare type PoolVars = {
|
|
89
|
+
key: PublicKey;
|
|
90
|
+
tokenA: PublicKey;
|
|
91
|
+
tokenB: PublicKey;
|
|
92
|
+
fee: number;
|
|
93
|
+
};
|
|
94
|
+
export declare class TickQuery {
|
|
95
|
+
/**
|
|
96
|
+
* Find the next initialized TickArray
|
|
97
|
+
*/
|
|
98
|
+
static nextInitializedTickArray(tickIndex: number, tickSpacing: number, zeroForOne: boolean, tickArrayBitmap: BN[], exBitmapInfo: TickArrayBitmapExtensionType): {
|
|
99
|
+
isExist: boolean;
|
|
100
|
+
nextStartIndex: number;
|
|
101
|
+
};
|
|
102
|
+
static getArrayStartIndex(tickIndex: number, tickSpacing: number): number;
|
|
103
|
+
static checkIsValidStartIndex(tickIndex: number, tickSpacing: number): boolean;
|
|
104
|
+
static tickCount(tickSpacing: number): number;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=tick.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tick.d.ts","sourceRoot":"","sources":["../../../../src/instructions/utils/tick.ts"],"names":[],"mappings":"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"}
|