@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.
Files changed (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +341 -0
  3. package/dist/esm/client/chain.d.ts +227 -0
  4. package/dist/esm/client/chain.d.ts.map +1 -0
  5. package/dist/esm/client/chain.js +1123 -0
  6. package/dist/esm/client/chain.js.map +1 -0
  7. package/dist/esm/client/index.d.ts +4 -0
  8. package/dist/esm/client/index.d.ts.map +1 -0
  9. package/dist/esm/client/index.js +4 -0
  10. package/dist/esm/client/index.js.map +1 -0
  11. package/dist/esm/client/models.d.ts +160 -0
  12. package/dist/esm/client/models.d.ts.map +1 -0
  13. package/dist/esm/client/models.js +2 -0
  14. package/dist/esm/client/models.js.map +1 -0
  15. package/dist/esm/client/utils.d.ts +103 -0
  16. package/dist/esm/client/utils.d.ts.map +1 -0
  17. package/dist/esm/client/utils.js +238 -0
  18. package/dist/esm/client/utils.js.map +1 -0
  19. package/dist/esm/constants.d.ts +19 -0
  20. package/dist/esm/constants.d.ts.map +1 -0
  21. package/dist/esm/constants.js +27 -0
  22. package/dist/esm/constants.js.map +1 -0
  23. package/dist/esm/index.d.ts +5 -0
  24. package/dist/esm/index.d.ts.map +1 -0
  25. package/dist/esm/index.js +5 -0
  26. package/dist/esm/index.js.map +1 -0
  27. package/dist/esm/instructions/baseInstruction.d.ts +74 -0
  28. package/dist/esm/instructions/baseInstruction.d.ts.map +1 -0
  29. package/dist/esm/instructions/baseInstruction.js +577 -0
  30. package/dist/esm/instructions/baseInstruction.js.map +1 -0
  31. package/dist/esm/instructions/constants.d.ts +29 -0
  32. package/dist/esm/instructions/constants.d.ts.map +1 -0
  33. package/dist/esm/instructions/constants.js +32 -0
  34. package/dist/esm/instructions/constants.js.map +1 -0
  35. package/dist/esm/instructions/getRawData.d.ts +60 -0
  36. package/dist/esm/instructions/getRawData.d.ts.map +1 -0
  37. package/dist/esm/instructions/getRawData.js +105 -0
  38. package/dist/esm/instructions/getRawData.js.map +1 -0
  39. package/dist/esm/instructions/index.d.ts +9 -0
  40. package/dist/esm/instructions/index.d.ts.map +1 -0
  41. package/dist/esm/instructions/index.js +9 -0
  42. package/dist/esm/instructions/index.js.map +1 -0
  43. package/dist/esm/instructions/instruction.d.ts +137 -0
  44. package/dist/esm/instructions/instruction.d.ts.map +1 -0
  45. package/dist/esm/instructions/instruction.js +152 -0
  46. package/dist/esm/instructions/instruction.js.map +1 -0
  47. package/dist/esm/instructions/layout.d.ts +217 -0
  48. package/dist/esm/instructions/layout.d.ts.map +1 -0
  49. package/dist/esm/instructions/layout.js +203 -0
  50. package/dist/esm/instructions/layout.js.map +1 -0
  51. package/dist/esm/instructions/libs/marshmallow/bufferLayout.d.ts +107 -0
  52. package/dist/esm/instructions/libs/marshmallow/bufferLayout.d.ts.map +1 -0
  53. package/dist/esm/instructions/libs/marshmallow/bufferLayout.js +49 -0
  54. package/dist/esm/instructions/libs/marshmallow/bufferLayout.js.map +1 -0
  55. package/dist/esm/instructions/libs/marshmallow/index.d.ts +88 -0
  56. package/dist/esm/instructions/libs/marshmallow/index.d.ts.map +1 -0
  57. package/dist/esm/instructions/libs/marshmallow/index.js +256 -0
  58. package/dist/esm/instructions/libs/marshmallow/index.js.map +1 -0
  59. package/dist/esm/instructions/models.d.ts +39 -0
  60. package/dist/esm/instructions/models.d.ts.map +1 -0
  61. package/dist/esm/instructions/models.js +14 -0
  62. package/dist/esm/instructions/models.js.map +1 -0
  63. package/dist/esm/instructions/pda.d.ts +52 -0
  64. package/dist/esm/instructions/pda.d.ts.map +1 -0
  65. package/dist/esm/instructions/pda.js +47 -0
  66. package/dist/esm/instructions/pda.js.map +1 -0
  67. package/dist/esm/instructions/target/idl/byreal_amm_v3.json +7242 -0
  68. package/dist/esm/instructions/target/idl/byreal_amm_v3_test.json +7680 -0
  69. package/dist/esm/instructions/target/types/byreal_amm_v3.d.ts +5329 -0
  70. package/dist/esm/instructions/target/types/byreal_amm_v3.d.ts.map +1 -0
  71. package/dist/esm/instructions/target/types/byreal_amm_v3.js +2 -0
  72. package/dist/esm/instructions/target/types/byreal_amm_v3.js.map +1 -0
  73. package/dist/esm/instructions/target/types/raydium_amm_v3.d.ts +4149 -0
  74. package/dist/esm/instructions/target/types/raydium_amm_v3.d.ts.map +1 -0
  75. package/dist/esm/instructions/target/types/raydium_amm_v3.js +2 -0
  76. package/dist/esm/instructions/target/types/raydium_amm_v3.js.map +1 -0
  77. package/dist/esm/instructions/utils/binaryUtils.d.ts +11 -0
  78. package/dist/esm/instructions/utils/binaryUtils.d.ts.map +1 -0
  79. package/dist/esm/instructions/utils/binaryUtils.js +77 -0
  80. package/dist/esm/instructions/utils/binaryUtils.js.map +1 -0
  81. package/dist/esm/instructions/utils/fetchWalletTokenAccounts.d.ts +42 -0
  82. package/dist/esm/instructions/utils/fetchWalletTokenAccounts.d.ts.map +1 -0
  83. package/dist/esm/instructions/utils/fetchWalletTokenAccounts.js +63 -0
  84. package/dist/esm/instructions/utils/fetchWalletTokenAccounts.js.map +1 -0
  85. package/dist/esm/instructions/utils/getTickArrayBitmapExtension.d.ts +8 -0
  86. package/dist/esm/instructions/utils/getTickArrayBitmapExtension.d.ts.map +1 -0
  87. package/dist/esm/instructions/utils/getTickArrayBitmapExtension.js +22 -0
  88. package/dist/esm/instructions/utils/getTickArrayBitmapExtension.js.map +1 -0
  89. package/dist/esm/instructions/utils/getTickArrayInfo.d.ts +16 -0
  90. package/dist/esm/instructions/utils/getTickArrayInfo.d.ts.map +1 -0
  91. package/dist/esm/instructions/utils/getTickArrayInfo.js +75 -0
  92. package/dist/esm/instructions/utils/getTickArrayInfo.js.map +1 -0
  93. package/dist/esm/instructions/utils/index.d.ts +21 -0
  94. package/dist/esm/instructions/utils/index.d.ts.map +1 -0
  95. package/dist/esm/instructions/utils/index.js +21 -0
  96. package/dist/esm/instructions/utils/index.js.map +1 -0
  97. package/dist/esm/instructions/utils/liquidityMath.d.ts +30 -0
  98. package/dist/esm/instructions/utils/liquidityMath.d.ts.map +1 -0
  99. package/dist/esm/instructions/utils/liquidityMath.js +138 -0
  100. package/dist/esm/instructions/utils/liquidityMath.js.map +1 -0
  101. package/dist/esm/instructions/utils/mathUtils.d.ts +11 -0
  102. package/dist/esm/instructions/utils/mathUtils.d.ts.map +1 -0
  103. package/dist/esm/instructions/utils/mathUtils.js +36 -0
  104. package/dist/esm/instructions/utils/mathUtils.js.map +1 -0
  105. package/dist/esm/instructions/utils/models.d.ts +93 -0
  106. package/dist/esm/instructions/utils/models.d.ts.map +1 -0
  107. package/dist/esm/instructions/utils/models.js +13 -0
  108. package/dist/esm/instructions/utils/models.js.map +1 -0
  109. package/dist/esm/instructions/utils/poolStateUtils.d.ts +134 -0
  110. package/dist/esm/instructions/utils/poolStateUtils.d.ts.map +1 -0
  111. package/dist/esm/instructions/utils/poolStateUtils.js +137 -0
  112. package/dist/esm/instructions/utils/poolStateUtils.js.map +1 -0
  113. package/dist/esm/instructions/utils/poolUtils.d.ts +136 -0
  114. package/dist/esm/instructions/utils/poolUtils.d.ts.map +1 -0
  115. package/dist/esm/instructions/utils/poolUtils.js +219 -0
  116. package/dist/esm/instructions/utils/poolUtils.js.map +1 -0
  117. package/dist/esm/instructions/utils/position.d.ts +36 -0
  118. package/dist/esm/instructions/utils/position.d.ts.map +1 -0
  119. package/dist/esm/instructions/utils/position.js +86 -0
  120. package/dist/esm/instructions/utils/position.js.map +1 -0
  121. package/dist/esm/instructions/utils/sqrtPriceMath.d.ts +14 -0
  122. package/dist/esm/instructions/utils/sqrtPriceMath.d.ts.map +1 -0
  123. package/dist/esm/instructions/utils/sqrtPriceMath.js +168 -0
  124. package/dist/esm/instructions/utils/sqrtPriceMath.js.map +1 -0
  125. package/dist/esm/instructions/utils/swapMath.d.ts +48 -0
  126. package/dist/esm/instructions/utils/swapMath.d.ts.map +1 -0
  127. package/dist/esm/instructions/utils/swapMath.js +263 -0
  128. package/dist/esm/instructions/utils/swapMath.js.map +1 -0
  129. package/dist/esm/instructions/utils/tick.d.ts +106 -0
  130. package/dist/esm/instructions/utils/tick.d.ts.map +1 -0
  131. package/dist/esm/instructions/utils/tick.js +390 -0
  132. package/dist/esm/instructions/utils/tick.js.map +1 -0
  133. package/dist/esm/instructions/utils/tickArrayUtils.d.ts +50 -0
  134. package/dist/esm/instructions/utils/tickArrayUtils.d.ts.map +1 -0
  135. package/dist/esm/instructions/utils/tickArrayUtils.js +157 -0
  136. package/dist/esm/instructions/utils/tickArrayUtils.js.map +1 -0
  137. package/dist/esm/instructions/utils/tickMath.d.ts +18 -0
  138. package/dist/esm/instructions/utils/tickMath.d.ts.map +1 -0
  139. package/dist/esm/instructions/utils/tickMath.js +34 -0
  140. package/dist/esm/instructions/utils/tickMath.js.map +1 -0
  141. package/dist/esm/instructions/utils/tickarrayBitmap.d.ts +38 -0
  142. package/dist/esm/instructions/utils/tickarrayBitmap.d.ts.map +1 -0
  143. package/dist/esm/instructions/utils/tickarrayBitmap.js +157 -0
  144. package/dist/esm/instructions/utils/tickarrayBitmap.js.map +1 -0
  145. package/dist/esm/instructions/utils/transfer.d.ts +7 -0
  146. package/dist/esm/instructions/utils/transfer.d.ts.map +1 -0
  147. package/dist/esm/instructions/utils/transfer.js +78 -0
  148. package/dist/esm/instructions/utils/transfer.js.map +1 -0
  149. package/dist/esm/utils/accountInfo.d.ts +27 -0
  150. package/dist/esm/utils/accountInfo.d.ts.map +1 -0
  151. package/dist/esm/utils/accountInfo.js +80 -0
  152. package/dist/esm/utils/accountInfo.js.map +1 -0
  153. package/dist/esm/utils/checkV0TxSize.d.ts +8 -0
  154. package/dist/esm/utils/checkV0TxSize.d.ts.map +1 -0
  155. package/dist/esm/utils/checkV0TxSize.js +18 -0
  156. package/dist/esm/utils/checkV0TxSize.js.map +1 -0
  157. package/dist/esm/utils/estimateComputeUnits.d.ts +11 -0
  158. package/dist/esm/utils/estimateComputeUnits.d.ts.map +1 -0
  159. package/dist/esm/utils/estimateComputeUnits.js +48 -0
  160. package/dist/esm/utils/estimateComputeUnits.js.map +1 -0
  161. package/dist/esm/utils/generatePubKey.d.ts +10 -0
  162. package/dist/esm/utils/generatePubKey.d.ts.map +1 -0
  163. package/dist/esm/utils/generatePubKey.js +14 -0
  164. package/dist/esm/utils/generatePubKey.js.map +1 -0
  165. package/dist/esm/utils/index.d.ts +9 -0
  166. package/dist/esm/utils/index.d.ts.map +1 -0
  167. package/dist/esm/utils/index.js +11 -0
  168. package/dist/esm/utils/index.js.map +1 -0
  169. package/dist/esm/utils/token.d.ts +9 -0
  170. package/dist/esm/utils/token.d.ts.map +1 -0
  171. package/dist/esm/utils/token.js +16 -0
  172. package/dist/esm/utils/token.js.map +1 -0
  173. package/dist/esm/utils/transactionUtils.d.ts +84 -0
  174. package/dist/esm/utils/transactionUtils.d.ts.map +1 -0
  175. package/dist/esm/utils/transactionUtils.js +138 -0
  176. package/dist/esm/utils/transactionUtils.js.map +1 -0
  177. package/dist/esm/utils/validateAndParsePublicKey.d.ts +15 -0
  178. package/dist/esm/utils/validateAndParsePublicKey.d.ts.map +1 -0
  179. package/dist/esm/utils/validateAndParsePublicKey.js +42 -0
  180. package/dist/esm/utils/validateAndParsePublicKey.js.map +1 -0
  181. 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":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EACL,aAAa,EACb,WAAW,EACX,4BAA4B,EAC5B,4BAA4B,EAC5B,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,GAAG,EACH,aAAa,EACb,IAAI,GACL,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,SAAS,aAAa,CAAC,GAAO,EAAE,KAAS;IACvC,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,eAAe,CAAC,EAAM,EAAE,OAAe,EAAE,QAAgB;IAChE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAM,EAAE,OAAe,EAAE,QAAgB;IACjE,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,mBAAmB,CAAC,YAAgB,EAAE,SAAiB,EAAE,SAAiB;QACtF,OAAO,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;IACjD,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,KAAc,EAAE,SAAiB,EAAE,SAAiB;QACpF,OAAO,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;IAEM,MAAM,CAAC,4BAA4B,CAAC,YAAgB,EAAE,SAAa,EAAE,QAAY,EAAE,UAAmB;QAC3G,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,UAAU;YACf,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;YAC1F,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjG,CAAC;IAEM,MAAM,CAAC,6BAA6B,CAAC,YAAgB,EAAE,SAAa,EAAE,SAAa,EAAE,UAAmB;QAC7G,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,UAAU;YACf,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;YAC9F,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACjG,CAAC;IAEO,MAAM,CAAC,0CAA0C,CACvD,YAAgB,EAChB,SAAa,EACb,MAAU,EACV,GAAY;QAEZ,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,OAAO,YAAY,CAAC;QACzC,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEzD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,UAAU,GAAG,kBAAkB,CAAC;YACtC,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YACrE,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChC,OAAO,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/F,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACpD,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;YAC9G,CAAC;YACD,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC/D,OAAO,SAAS,CAAC,UAAU,CAAC,kBAAkB,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,4CAA4C,CACzD,YAAgB,EAChB,SAAa,EACb,MAAU,EACV,GAAY;QAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,GAAG,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;YAC9E,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;YAC1G,CAAC;YACD,OAAO,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,uBAAuB,CAAC,IAAY;QAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,OAAO,GAAW,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpD,IAAI,KAAK,GAAO,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC;QACvG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAErF,IAAI,IAAI,GAAG,CAAC;YAAE,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,KAAc,EAAE,SAAiB,EAAE,SAAiB;QACjF,OAAO,aAAa,CAAC,uBAAuB,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/G,CAAC;IAEM,MAAM,CAAC,uBAAuB,CAAC,YAAgB;QACpD,IAAI,YAAY,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAE9D,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,gBAAgB,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAE9E,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;YACtD,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACb,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzC,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/D,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,SAAS,IAAI,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzG,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE1G,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,2BAA2B,GAAG,aAAa,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACpF,OAAO,2BAA2B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5E,CAAC;IACH,CAAC;CACF"}
@@ -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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"}