@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,30 @@
1
+ import BN from 'bn.js';
2
+ export declare class LiquidityMath {
3
+ static addDelta(x: BN, y: BN): BN;
4
+ static getTokenAmountAFromLiquidity(sqrtPriceX64A: BN, sqrtPriceX64B: BN, liquidity: BN, roundUp: boolean): BN;
5
+ static getTokenAmountBFromLiquidity(sqrtPriceX64A: BN, sqrtPriceX64B: BN, liquidity: BN, roundUp: boolean): BN;
6
+ static getLiquidityFromTokenAmountA(sqrtPriceX64A: BN, sqrtPriceX64B: BN, amountA: BN, roundUp: boolean): BN;
7
+ static getLiquidityFromTokenAmountB(sqrtPriceX64A: BN, sqrtPriceX64B: BN, amountB: BN): BN;
8
+ static getLiquidityFromTokenAmounts(sqrtPriceCurrentX64: BN, sqrtPriceX64A: BN, sqrtPriceX64B: BN, amountA: BN, amountB: BN): BN;
9
+ static getAmountsFromLiquidity(sqrtPriceCurrentX64: BN, sqrtPriceX64A: BN, sqrtPriceX64B: BN, liquidity: BN, roundUp: boolean): {
10
+ amountA: BN;
11
+ amountB: BN;
12
+ };
13
+ static getAmountsFromLiquidityWithSlippage(sqrtPriceCurrentX64: BN, sqrtPriceX64A: BN, sqrtPriceX64B: BN, liquidity: BN, amountMax: boolean, roundUp: boolean, amountSlippage: number): {
14
+ amountSlippageA: BN;
15
+ amountSlippageB: BN;
16
+ };
17
+ /**
18
+ * Given a price range, calculate the required tokenB amount after investing a specified tokenA amount
19
+ *
20
+ * Similar implementation in raydium: getLiquidityAmountOutFromAmountIn
21
+ */
22
+ static getAmountBFromAmountA(startSqrtPriceX64: BN, endSqrtPriceX64: BN, currentSqrtPriceX64: BN, amountA: BN): BN;
23
+ /**
24
+ * Given a price range, calculate the required tokenA amount after investing a specified tokenB amount
25
+ *
26
+ * Similar implementation in raydium: getLiquidityAmountOutFromAmountIn
27
+ */
28
+ static getAmountAFromAmountB(startSqrtPriceX64: BN, endSqrtPriceX64: BN, currentSqrtPriceX64: BN, amountB: BN): BN;
29
+ }
30
+ //# sourceMappingURL=liquidityMath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidityMath.d.ts","sourceRoot":"","sources":["../../../../src/instructions/utils/liquidityMath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAOvB,qBAAa,aAAa;WACV,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE;WAI1B,4BAA4B,CACxC,aAAa,EAAE,EAAE,EACjB,aAAa,EAAE,EAAE,EACjB,SAAS,EAAE,EAAE,EACb,OAAO,EAAE,OAAO,GACf,EAAE;WAiBS,4BAA4B,CACxC,aAAa,EAAE,EAAE,EACjB,aAAa,EAAE,EAAE,EACjB,SAAS,EAAE,EAAE,EACb,OAAO,EAAE,OAAO,GACf,EAAE;WAaS,4BAA4B,CAAC,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE;WAgBrG,4BAA4B,CAAC,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;WAOnF,4BAA4B,CACxC,mBAAmB,EAAE,EAAE,EACvB,aAAa,EAAE,EAAE,EACjB,aAAa,EAAE,EAAE,EACjB,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,EAAE,GACV,EAAE;WAgBS,uBAAuB,CACnC,mBAAmB,EAAE,EAAE,EACvB,aAAa,EAAE,EAAE,EACjB,aAAa,EAAE,EAAE,EACjB,SAAS,EAAE,EAAE,EACb,OAAO,EAAE,OAAO,GACf;QAAE,OAAO,EAAE,EAAE,CAAC;QAAC,OAAO,EAAE,EAAE,CAAA;KAAE;WAgCjB,mCAAmC,CAC/C,mBAAmB,EAAE,EAAE,EACvB,aAAa,EAAE,EAAE,EACjB,aAAa,EAAE,EAAE,EACjB,SAAS,EAAE,EAAE,EACb,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,MAAM,GACrB;QAAE,eAAe,EAAE,EAAE,CAAC;QAAC,eAAe,EAAE,EAAE,CAAA;KAAE;IAkB/C;;;;OAIG;WACW,qBAAqB,CACjC,iBAAiB,EAAE,EAAE,EACrB,eAAe,EAAE,EAAE,EACnB,mBAAmB,EAAE,EAAE,EACvB,OAAO,EAAE,EAAE,GACV,EAAE;IAgBL;;;;OAIG;WACW,qBAAqB,CACjC,iBAAiB,EAAE,EAAE,EACrB,eAAe,EAAE,EAAE,EACnB,mBAAmB,EAAE,EAAE,EACvB,OAAO,EAAE,EAAE,GACV,EAAE;CAcN"}
@@ -0,0 +1,138 @@
1
+ import BN from 'bn.js';
2
+ import { Decimal } from 'decimal.js';
3
+ import { MaxU64, ONE, Q64, U64Resolution, ZERO } from '../constants.js';
4
+ import { MathUtils } from './mathUtils.js';
5
+ export class LiquidityMath {
6
+ static addDelta(x, y) {
7
+ return x.add(y);
8
+ }
9
+ static getTokenAmountAFromLiquidity(sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp) {
10
+ if (sqrtPriceX64A.gt(sqrtPriceX64B)) {
11
+ [sqrtPriceX64A, sqrtPriceX64B] = [sqrtPriceX64B, sqrtPriceX64A];
12
+ }
13
+ if (!sqrtPriceX64A.gt(ZERO)) {
14
+ throw new Error('sqrtPriceX64A must greater than 0');
15
+ }
16
+ const numerator1 = liquidity.ushln(U64Resolution);
17
+ const numerator2 = sqrtPriceX64B.sub(sqrtPriceX64A);
18
+ return roundUp
19
+ ? MathUtils.mulDivRoundingUp(MathUtils.mulDivCeil(numerator1, numerator2, sqrtPriceX64B), ONE, sqrtPriceX64A)
20
+ : MathUtils.mulDivFloor(numerator1, numerator2, sqrtPriceX64B).div(sqrtPriceX64A);
21
+ }
22
+ static getTokenAmountBFromLiquidity(sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp) {
23
+ if (sqrtPriceX64A.gt(sqrtPriceX64B)) {
24
+ [sqrtPriceX64A, sqrtPriceX64B] = [sqrtPriceX64B, sqrtPriceX64A];
25
+ }
26
+ if (!sqrtPriceX64A.gt(ZERO)) {
27
+ throw new Error('sqrtPriceX64A must greater than 0');
28
+ }
29
+ return roundUp
30
+ ? MathUtils.mulDivCeil(liquidity, sqrtPriceX64B.sub(sqrtPriceX64A), Q64)
31
+ : MathUtils.mulDivFloor(liquidity, sqrtPriceX64B.sub(sqrtPriceX64A), Q64);
32
+ }
33
+ static getLiquidityFromTokenAmountA(sqrtPriceX64A, sqrtPriceX64B, amountA, roundUp) {
34
+ if (sqrtPriceX64A.gt(sqrtPriceX64B)) {
35
+ [sqrtPriceX64A, sqrtPriceX64B] = [sqrtPriceX64B, sqrtPriceX64A];
36
+ }
37
+ const numerator = amountA.mul(sqrtPriceX64A).mul(sqrtPriceX64B);
38
+ const denominator = sqrtPriceX64B.sub(sqrtPriceX64A);
39
+ const result = numerator.div(denominator);
40
+ if (roundUp) {
41
+ return MathUtils.mulDivRoundingUp(result, ONE, MaxU64);
42
+ }
43
+ else {
44
+ return result.shrn(U64Resolution);
45
+ }
46
+ }
47
+ static getLiquidityFromTokenAmountB(sqrtPriceX64A, sqrtPriceX64B, amountB) {
48
+ if (sqrtPriceX64A.gt(sqrtPriceX64B)) {
49
+ [sqrtPriceX64A, sqrtPriceX64B] = [sqrtPriceX64B, sqrtPriceX64A];
50
+ }
51
+ return MathUtils.mulDivFloor(amountB, MaxU64, sqrtPriceX64B.sub(sqrtPriceX64A));
52
+ }
53
+ static getLiquidityFromTokenAmounts(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, amountA, amountB) {
54
+ if (sqrtPriceX64A.gt(sqrtPriceX64B)) {
55
+ [sqrtPriceX64A, sqrtPriceX64B] = [sqrtPriceX64B, sqrtPriceX64A];
56
+ }
57
+ if (sqrtPriceCurrentX64.lte(sqrtPriceX64A)) {
58
+ return LiquidityMath.getLiquidityFromTokenAmountA(sqrtPriceX64A, sqrtPriceX64B, amountA, false);
59
+ }
60
+ else if (sqrtPriceCurrentX64.lt(sqrtPriceX64B)) {
61
+ const liquidity0 = LiquidityMath.getLiquidityFromTokenAmountA(sqrtPriceCurrentX64, sqrtPriceX64B, amountA, false);
62
+ const liquidity1 = LiquidityMath.getLiquidityFromTokenAmountB(sqrtPriceX64A, sqrtPriceCurrentX64, amountB);
63
+ return liquidity0.lt(liquidity1) ? liquidity0 : liquidity1;
64
+ }
65
+ else {
66
+ return LiquidityMath.getLiquidityFromTokenAmountB(sqrtPriceX64A, sqrtPriceX64B, amountB);
67
+ }
68
+ }
69
+ static getAmountsFromLiquidity(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp) {
70
+ if (sqrtPriceX64A.gt(sqrtPriceX64B)) {
71
+ [sqrtPriceX64A, sqrtPriceX64B] = [sqrtPriceX64B, sqrtPriceX64A];
72
+ }
73
+ if (sqrtPriceCurrentX64.lte(sqrtPriceX64A)) {
74
+ return {
75
+ amountA: LiquidityMath.getTokenAmountAFromLiquidity(sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp),
76
+ amountB: new BN(0),
77
+ };
78
+ }
79
+ else if (sqrtPriceCurrentX64.lt(sqrtPriceX64B)) {
80
+ const amountA = LiquidityMath.getTokenAmountAFromLiquidity(sqrtPriceCurrentX64, sqrtPriceX64B, liquidity, roundUp);
81
+ const amountB = LiquidityMath.getTokenAmountBFromLiquidity(sqrtPriceX64A, sqrtPriceCurrentX64, liquidity, roundUp);
82
+ return { amountA, amountB };
83
+ }
84
+ else {
85
+ return {
86
+ amountA: new BN(0),
87
+ amountB: LiquidityMath.getTokenAmountBFromLiquidity(sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp),
88
+ };
89
+ }
90
+ }
91
+ static getAmountsFromLiquidityWithSlippage(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, liquidity, amountMax, roundUp, amountSlippage) {
92
+ const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp);
93
+ const coefficient = amountMax ? 1 + amountSlippage : 1 - amountSlippage;
94
+ const amount0Slippage = new BN(new Decimal(amountA.toString()).mul(coefficient).toFixed(0));
95
+ const amount1Slippage = new BN(new Decimal(amountB.toString()).mul(coefficient).toFixed(0));
96
+ return {
97
+ amountSlippageA: amount0Slippage,
98
+ amountSlippageB: amount1Slippage,
99
+ };
100
+ }
101
+ /**
102
+ * Given a price range, calculate the required tokenB amount after investing a specified tokenA amount
103
+ *
104
+ * Similar implementation in raydium: getLiquidityAmountOutFromAmountIn
105
+ */
106
+ static getAmountBFromAmountA(startSqrtPriceX64, endSqrtPriceX64, currentSqrtPriceX64, amountA) {
107
+ if (startSqrtPriceX64.gt(endSqrtPriceX64)) {
108
+ [startSqrtPriceX64, endSqrtPriceX64] = [endSqrtPriceX64, startSqrtPriceX64];
109
+ }
110
+ if (currentSqrtPriceX64.lte(startSqrtPriceX64)) {
111
+ return new BN(0);
112
+ }
113
+ if (currentSqrtPriceX64.gt(endSqrtPriceX64)) {
114
+ return new BN(0);
115
+ }
116
+ const liquidity = LiquidityMath.getLiquidityFromTokenAmountA(currentSqrtPriceX64, endSqrtPriceX64, amountA, false);
117
+ return LiquidityMath.getTokenAmountBFromLiquidity(startSqrtPriceX64, currentSqrtPriceX64, liquidity, true);
118
+ }
119
+ /**
120
+ * Given a price range, calculate the required tokenA amount after investing a specified tokenB amount
121
+ *
122
+ * Similar implementation in raydium: getLiquidityAmountOutFromAmountIn
123
+ */
124
+ static getAmountAFromAmountB(startSqrtPriceX64, endSqrtPriceX64, currentSqrtPriceX64, amountB) {
125
+ if (startSqrtPriceX64.gt(endSqrtPriceX64)) {
126
+ [startSqrtPriceX64, endSqrtPriceX64] = [endSqrtPriceX64, startSqrtPriceX64];
127
+ }
128
+ if (currentSqrtPriceX64.lte(startSqrtPriceX64)) {
129
+ return new BN(0);
130
+ }
131
+ if (currentSqrtPriceX64.gt(endSqrtPriceX64)) {
132
+ return new BN(0);
133
+ }
134
+ const liquidity = LiquidityMath.getLiquidityFromTokenAmountB(startSqrtPriceX64, currentSqrtPriceX64, amountB);
135
+ return LiquidityMath.getTokenAmountAFromLiquidity(currentSqrtPriceX64, endSqrtPriceX64, liquidity, true);
136
+ }
137
+ }
138
+ //# sourceMappingURL=liquidityMath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidityMath.js","sourceRoot":"","sources":["../../../../src/instructions/utils/liquidityMath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import BN from 'bn.js';
2
+ import { Decimal } from 'decimal.js';
3
+ export declare class MathUtils {
4
+ static mulDivRoundingUp(a: BN, b: BN, denominator: BN): BN;
5
+ static mulDivFloor(a: BN, b: BN, denominator: BN): BN;
6
+ static mulDivCeil(a: BN, b: BN, denominator: BN): BN;
7
+ static x64ToDecimal(num: BN, decimalPlaces?: number): Decimal;
8
+ static decimalToX64(num: Decimal): BN;
9
+ static wrappingSubU128(n0: BN, n1: BN): BN;
10
+ }
11
+ //# sourceMappingURL=mathUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mathUtils.d.ts","sourceRoot":"","sources":["../../../../src/instructions/utils/mathUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC,qBAAa,SAAS;WACN,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;WASnD,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;WAO9C,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;WAQ7C,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;WAItD,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE;WAI9B,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;CAGlD"}
@@ -0,0 +1,36 @@
1
+ import BN from 'bn.js';
2
+ import { Decimal } from 'decimal.js';
3
+ import { ONE, Q128, ZERO } from '../constants.js';
4
+ export class MathUtils {
5
+ static mulDivRoundingUp(a, b, denominator) {
6
+ const numerator = a.mul(b);
7
+ let result = numerator.div(denominator);
8
+ if (!numerator.mod(denominator).eq(ZERO)) {
9
+ result = result.add(ONE);
10
+ }
11
+ return result;
12
+ }
13
+ static mulDivFloor(a, b, denominator) {
14
+ if (denominator.eq(ZERO)) {
15
+ throw new Error('division by 0');
16
+ }
17
+ return a.mul(b).div(denominator);
18
+ }
19
+ static mulDivCeil(a, b, denominator) {
20
+ if (denominator.eq(ZERO)) {
21
+ throw new Error('division by 0');
22
+ }
23
+ const numerator = a.mul(b).add(denominator.sub(ONE));
24
+ return numerator.div(denominator);
25
+ }
26
+ static x64ToDecimal(num, decimalPlaces) {
27
+ return new Decimal(num.toString()).div(Decimal.pow(2, 64)).toDecimalPlaces(decimalPlaces);
28
+ }
29
+ static decimalToX64(num) {
30
+ return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed());
31
+ }
32
+ static wrappingSubU128(n0, n1) {
33
+ return n0.add(Q128).sub(n1).mod(Q128);
34
+ }
35
+ }
36
+ //# sourceMappingURL=mathUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mathUtils.js","sourceRoot":"","sources":["../../../../src/instructions/utils/mathUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,OAAO,SAAS;IACb,MAAM,CAAC,gBAAgB,CAAC,CAAK,EAAE,CAAK,EAAE,WAAe;QAC1D,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,CAAK,EAAE,CAAK,EAAE,WAAe;QACrD,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,CAAK,EAAE,CAAK,EAAE,WAAe;QACpD,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,OAAO,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,GAAO,EAAE,aAAsB;QACxD,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IAC5F,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,GAAY;QACrC,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,EAAM,EAAE,EAAM;QAC1C,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,93 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import BN from 'bn.js';
3
+ import { Decimal } from 'decimal.js';
4
+ export interface ReturnTypeGetPriceAndTick {
5
+ tick: number;
6
+ price: Decimal;
7
+ }
8
+ export type Tick = {
9
+ tick: number;
10
+ liquidityNet: BN;
11
+ liquidityGross: BN;
12
+ feeGrowthOutsideX64A: BN;
13
+ feeGrowthOutsideX64B: BN;
14
+ rewardGrowthsOutsideX64: BN[];
15
+ };
16
+ export type TickArray = {
17
+ address: PublicKey;
18
+ poolId: PublicKey;
19
+ startTickIndex: number;
20
+ ticks: Tick[];
21
+ initializedTickCount: number;
22
+ };
23
+ /**
24
+ * Dynamic Tick Array type
25
+ * Uses sparse storage with a mapping table to track allocated tick positions
26
+ */
27
+ export type DynTickArray = {
28
+ address: PublicKey;
29
+ poolId: PublicKey;
30
+ startTickIndex: number;
31
+ tickOffsetIndex: number[];
32
+ allocTickCount: number;
33
+ initializedTickCount: number;
34
+ ticks: Tick[];
35
+ };
36
+ /**
37
+ * Unified Tick Array Container
38
+ * Discriminated union to handle both fixed and dynamic tick arrays
39
+ */
40
+ export type TickArrayContainer = {
41
+ type: 'Fixed';
42
+ data: TickArray;
43
+ } | {
44
+ type: 'Dynamic';
45
+ data: DynTickArray;
46
+ };
47
+ /**
48
+ * Type guard to check if a container is a fixed tick array
49
+ */
50
+ export declare function isFixedTickArray(container: TickArrayContainer): container is {
51
+ type: 'Fixed';
52
+ data: TickArray;
53
+ };
54
+ /**
55
+ * Type guard to check if a container is a dynamic tick array
56
+ */
57
+ export declare function isDynamicTickArray(container: TickArrayContainer): container is {
58
+ type: 'Dynamic';
59
+ data: DynTickArray;
60
+ };
61
+ export type TickState = {
62
+ tick: number;
63
+ liquidityNet: BN;
64
+ liquidityGross: BN;
65
+ feeGrowthOutsideX64A: BN;
66
+ feeGrowthOutsideX64B: BN;
67
+ tickCumulativeOutside: BN;
68
+ secondsPerLiquidityOutsideX64: BN;
69
+ secondsOutside: number;
70
+ rewardGrowthsOutside: BN[];
71
+ };
72
+ export type TickArrayState = {
73
+ ammPool: PublicKey;
74
+ startTickIndex: number;
75
+ ticks: TickState[];
76
+ initializedTickCount: number;
77
+ };
78
+ export interface TickArrayBitmapExtensionType {
79
+ poolId: PublicKey;
80
+ exBitmapAddress: PublicKey;
81
+ positiveTickArrayBitmap: BN[][];
82
+ negativeTickArrayBitmap: BN[][];
83
+ }
84
+ export interface StepComputations {
85
+ sqrtPriceStartX64: BN;
86
+ tickNext: number;
87
+ initialized: boolean;
88
+ sqrtPriceNextX64: BN;
89
+ amountIn: BN;
90
+ amountOut: BN;
91
+ feeAmount: BN;
92
+ }
93
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/instructions/utils/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Type guard to check if a container is a fixed tick array
3
+ */
4
+ export function isFixedTickArray(container) {
5
+ return container.type === 'Fixed';
6
+ }
7
+ /**
8
+ * Type guard to check if a container is a dynamic tick array
9
+ */
10
+ export function isDynamicTickArray(container) {
11
+ return container.type === 'Dynamic';
12
+ }
13
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/instructions/utils/models.ts"],"names":[],"mappings":"AA8CA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA6B;IAC5D,OAAO,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAA6B;IAE7B,OAAO,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AACtC,CAAC"}
@@ -0,0 +1,134 @@
1
+ import { Connection, PublicKey } from '@solana/web3.js';
2
+ import { IPoolLayout } from '../layout.js';
3
+ /**
4
+ * Pool State Utilities for querying pool information with decay fee support
5
+ */
6
+ export declare class PoolStateUtils {
7
+ /**
8
+ * Check if the pool has decay fee enabled
9
+ * @param poolInfo Pool layout information
10
+ * @returns boolean indicating if decay fee is enabled
11
+ */
12
+ static isDecayFeeEnabled(poolInfo: IPoolLayout): boolean;
13
+ /**
14
+ * Check if decay fee is enabled for selling mint0
15
+ * @param poolInfo Pool layout information
16
+ * @returns boolean indicating if decay fee is enabled for mint0 sell
17
+ */
18
+ static isDecayFeeOnSellMint0(poolInfo: IPoolLayout): boolean;
19
+ /**
20
+ * Check if decay fee is enabled for selling mint1
21
+ * @param poolInfo Pool layout information
22
+ * @returns boolean indicating if decay fee is enabled for mint1 sell
23
+ */
24
+ static isDecayFeeOnSellMint1(poolInfo: IPoolLayout): boolean;
25
+ /**
26
+ * Calculate the current decay fee rate based on the current time
27
+ * @param poolInfo Pool layout information
28
+ * @param currentTimestamp Current timestamp in seconds
29
+ * @returns Decay fee rate in hundredths of a bip (10^-6)
30
+ */
31
+ static getDecayFeeRate(poolInfo: IPoolLayout, currentTimestamp: number): number;
32
+ /**
33
+ * Get comprehensive decay fee information for a pool
34
+ * @param poolInfo Pool layout information
35
+ * @param currentTimestamp Current timestamp in seconds
36
+ * @returns Object containing all decay fee related information
37
+ */
38
+ static getDecayFeeInfo(poolInfo: IPoolLayout, currentTimestamp?: number): {
39
+ isEnabled: boolean;
40
+ onSellMint0: boolean;
41
+ onSellMint1: boolean;
42
+ initFeeRate: number;
43
+ decreaseRate: number;
44
+ decreaseInterval: number;
45
+ currentFeeRate: number;
46
+ openTime: any;
47
+ };
48
+ /**
49
+ * Get pool state with decay fee information from chain
50
+ * @param connection Solana connection
51
+ * @param poolId Pool address
52
+ * @param currentTimestamp Optional current timestamp
53
+ * @returns Pool information with decay fee details
54
+ */
55
+ static getPoolStateWithDecayFee(connection: Connection, poolId: string | PublicKey, currentTimestamp?: number): Promise<{
56
+ decayFeeInfo: {
57
+ isEnabled: boolean;
58
+ onSellMint0: boolean;
59
+ onSellMint1: boolean;
60
+ initFeeRate: number;
61
+ decreaseRate: number;
62
+ decreaseInterval: number;
63
+ currentFeeRate: number;
64
+ openTime: any;
65
+ };
66
+ bump: number;
67
+ tickSpacing: number;
68
+ recentEpoch: BN;
69
+ ammConfig: PublicKey;
70
+ creator: PublicKey;
71
+ mintA: PublicKey;
72
+ mintB: PublicKey;
73
+ vaultA: PublicKey;
74
+ vaultB: PublicKey;
75
+ observationId: PublicKey;
76
+ mintDecimalsA: number;
77
+ mintDecimalsB: number;
78
+ liquidity: BN;
79
+ sqrtPriceX64: BN;
80
+ tickCurrent: number;
81
+ feeGrowthGlobalX64A: BN;
82
+ feeGrowthGlobalX64B: BN;
83
+ protocolFeesTokenA: BN;
84
+ protocolFeesTokenB: BN;
85
+ swapInAmountTokenA: BN;
86
+ swapOutAmountTokenB: BN;
87
+ swapInAmountTokenB: BN;
88
+ swapOutAmountTokenA: BN;
89
+ status: number;
90
+ openTime: BN;
91
+ rewardInfos: {
92
+ creator: PublicKey;
93
+ rewardState: number;
94
+ openTime: BN;
95
+ endTime: BN;
96
+ lastUpdateTime: BN;
97
+ emissionsPerSecondX64: BN;
98
+ rewardTotalEmissioned: BN;
99
+ rewardClaimed: BN;
100
+ tokenMint: PublicKey;
101
+ tokenVault: PublicKey;
102
+ rewardGrowthGlobalX64: BN;
103
+ }[];
104
+ tickArrayBitmap: BN[];
105
+ totalFeesTokenA: BN;
106
+ totalFeesClaimedTokenA: BN;
107
+ totalFeesTokenB: BN;
108
+ totalFeesClaimedTokenB: BN;
109
+ fundFeesTokenA: BN;
110
+ fundFeesTokenB: BN;
111
+ decayFeeFlag: number;
112
+ decayFeeInitFeeRate: number;
113
+ decayFeeDecreaseRate: number;
114
+ decayFeeDecreaseInterval: number;
115
+ padding1_1: number[];
116
+ padding1: BN[];
117
+ padding2: BN[];
118
+ currentPrice: number;
119
+ programId: PublicKey;
120
+ poolId: PublicKey;
121
+ }>;
122
+ /**
123
+ * Check if decay fee is currently active for a specific direction
124
+ * @param poolInfo Pool layout information
125
+ * @param zeroForOne True if swapping token0 for token1 (selling token0)
126
+ * @param currentTimestamp Current timestamp in seconds
127
+ * @returns Object with active status and current fee rate
128
+ */
129
+ static getDecayFeeForDirection(poolInfo: IPoolLayout, zeroForOne: boolean, currentTimestamp?: number): {
130
+ isActive: boolean;
131
+ feeRate: number;
132
+ };
133
+ }
134
+ //# sourceMappingURL=poolStateUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poolStateUtils.d.ts","sourceRoot":"","sources":["../../../../src/instructions/utils/poolStateUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;GAEG;AACH,qBAAa,cAAc;IACzB;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO;IAIxD;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO;IAI5D;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO;IAI5D;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAwC/E;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,gBAAgB,CAAC,EAAE,MAAM;;;;;;;;;;IAevE;;;;;;OAMG;WACU,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,gBAAgB,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkBnH;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,MAAM;;;;CA4BrG"}
@@ -0,0 +1,137 @@
1
+ import { RawDataUtils } from '../getRawData.js';
2
+ /**
3
+ * Pool State Utilities for querying pool information with decay fee support
4
+ */
5
+ export class PoolStateUtils {
6
+ /**
7
+ * Check if the pool has decay fee enabled
8
+ * @param poolInfo Pool layout information
9
+ * @returns boolean indicating if decay fee is enabled
10
+ */
11
+ static isDecayFeeEnabled(poolInfo) {
12
+ return (poolInfo.decayFeeFlag & (1 << 0)) !== 0;
13
+ }
14
+ /**
15
+ * Check if decay fee is enabled for selling mint0
16
+ * @param poolInfo Pool layout information
17
+ * @returns boolean indicating if decay fee is enabled for mint0 sell
18
+ */
19
+ static isDecayFeeOnSellMint0(poolInfo) {
20
+ return (poolInfo.decayFeeFlag & (1 << 1)) !== 0;
21
+ }
22
+ /**
23
+ * Check if decay fee is enabled for selling mint1
24
+ * @param poolInfo Pool layout information
25
+ * @returns boolean indicating if decay fee is enabled for mint1 sell
26
+ */
27
+ static isDecayFeeOnSellMint1(poolInfo) {
28
+ return (poolInfo.decayFeeFlag & (1 << 2)) !== 0;
29
+ }
30
+ /**
31
+ * Calculate the current decay fee rate based on the current time
32
+ * @param poolInfo Pool layout information
33
+ * @param currentTimestamp Current timestamp in seconds
34
+ * @returns Decay fee rate in hundredths of a bip (10^-6)
35
+ */
36
+ static getDecayFeeRate(poolInfo, currentTimestamp) {
37
+ if (!this.isDecayFeeEnabled(poolInfo)) {
38
+ return 0;
39
+ }
40
+ // Pool is not open yet
41
+ if (currentTimestamp < poolInfo.openTime.toNumber()) {
42
+ return 0;
43
+ }
44
+ const intervalCount = Math.floor((currentTimestamp - poolInfo.openTime.toNumber()) / poolInfo.decayFeeDecreaseInterval);
45
+ const decayFeeDecreaseRate = poolInfo.decayFeeDecreaseRate * 10000; // Convert to basis points
46
+ const FEE_RATE_DENOMINATOR_VALUE = 1000000; // 10^6
47
+ const hundredthsOfABip = FEE_RATE_DENOMINATOR_VALUE;
48
+ let rate = hundredthsOfABip;
49
+ // Fast power calculation: (1 - x)^c
50
+ // where x = decayFeeDecreaseRate / 10^6, c = intervalCount
51
+ if (intervalCount > 0) {
52
+ let exp = intervalCount;
53
+ let base = hundredthsOfABip - decayFeeDecreaseRate;
54
+ while (exp > 0) {
55
+ if (exp % 2 === 1) {
56
+ rate = Math.ceil((rate * base) / hundredthsOfABip);
57
+ }
58
+ base = Math.ceil((base * base) / hundredthsOfABip);
59
+ exp = Math.floor(exp / 2);
60
+ }
61
+ }
62
+ // Apply initial fee rate (convert from percentage)
63
+ rate = Math.ceil((rate * poolInfo.decayFeeInitFeeRate) / 100);
64
+ return rate;
65
+ }
66
+ /**
67
+ * Get comprehensive decay fee information for a pool
68
+ * @param poolInfo Pool layout information
69
+ * @param currentTimestamp Current timestamp in seconds
70
+ * @returns Object containing all decay fee related information
71
+ */
72
+ static getDecayFeeInfo(poolInfo, currentTimestamp) {
73
+ const timestamp = currentTimestamp || Math.floor(Date.now() / 1000);
74
+ return {
75
+ isEnabled: this.isDecayFeeEnabled(poolInfo),
76
+ onSellMint0: this.isDecayFeeOnSellMint0(poolInfo),
77
+ onSellMint1: this.isDecayFeeOnSellMint1(poolInfo),
78
+ initFeeRate: poolInfo.decayFeeInitFeeRate, // Percentage (1 = 1%)
79
+ decreaseRate: poolInfo.decayFeeDecreaseRate, // Percentage (1 = 1%)
80
+ decreaseInterval: poolInfo.decayFeeDecreaseInterval, // Seconds
81
+ currentFeeRate: this.getDecayFeeRate(poolInfo, timestamp), // In hundredths of a bip (10^-6)
82
+ openTime: poolInfo.openTime.toNumber(),
83
+ };
84
+ }
85
+ /**
86
+ * Get pool state with decay fee information from chain
87
+ * @param connection Solana connection
88
+ * @param poolId Pool address
89
+ * @param currentTimestamp Optional current timestamp
90
+ * @returns Pool information with decay fee details
91
+ */
92
+ static async getPoolStateWithDecayFee(connection, poolId, currentTimestamp) {
93
+ const poolInfo = await RawDataUtils.getRawPoolInfoByPoolId({
94
+ connection,
95
+ poolId,
96
+ });
97
+ if (!poolInfo) {
98
+ throw new Error(`Pool not found: ${poolId}`);
99
+ }
100
+ const decayFeeInfo = this.getDecayFeeInfo(poolInfo, currentTimestamp);
101
+ return {
102
+ ...poolInfo,
103
+ decayFeeInfo,
104
+ };
105
+ }
106
+ /**
107
+ * Check if decay fee is currently active for a specific direction
108
+ * @param poolInfo Pool layout information
109
+ * @param zeroForOne True if swapping token0 for token1 (selling token0)
110
+ * @param currentTimestamp Current timestamp in seconds
111
+ * @returns Object with active status and current fee rate
112
+ */
113
+ static getDecayFeeForDirection(poolInfo, zeroForOne, currentTimestamp) {
114
+ const timestamp = currentTimestamp || Math.floor(Date.now() / 1000);
115
+ if (!this.isDecayFeeEnabled(poolInfo)) {
116
+ return {
117
+ isActive: false,
118
+ feeRate: 0,
119
+ };
120
+ }
121
+ const isActiveForDirection = zeroForOne
122
+ ? this.isDecayFeeOnSellMint0(poolInfo)
123
+ : this.isDecayFeeOnSellMint1(poolInfo);
124
+ if (!isActiveForDirection) {
125
+ return {
126
+ isActive: false,
127
+ feeRate: 0,
128
+ };
129
+ }
130
+ const currentFeeRate = this.getDecayFeeRate(poolInfo, timestamp);
131
+ return {
132
+ isActive: true,
133
+ feeRate: currentFeeRate,
134
+ };
135
+ }
136
+ }
137
+ //# sourceMappingURL=poolStateUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poolStateUtils.js","sourceRoot":"","sources":["../../../../src/instructions/utils/poolStateUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAqB;QAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAqB;QAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAqB;QAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,QAAqB,EAAE,gBAAwB;QACpE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,uBAAuB;QACvB,IAAI,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAC9B,CAAC,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,wBAAwB,CACtF,CAAC;QAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,GAAG,KAAK,CAAC,CAAC,0BAA0B;QAC9F,MAAM,0BAA0B,GAAG,OAAO,CAAC,CAAC,OAAO;QACnD,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;QACpD,IAAI,IAAI,GAAG,gBAAgB,CAAC;QAE5B,oCAAoC;QACpC,2DAA2D;QAC3D,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,GAAG,GAAG,aAAa,CAAC;YACxB,IAAI,IAAI,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;YAEnD,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;gBACrD,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;gBACnD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,mBAAmB,CAAC,GAAG,GAAG,CAAC,CAAC;QAE9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,QAAqB,EAAE,gBAAyB;QACrE,MAAM,SAAS,GAAG,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAEpE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC3C,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YACjD,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YACjD,WAAW,EAAE,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB;YACjE,YAAY,EAAE,QAAQ,CAAC,oBAAoB,EAAE,sBAAsB;YACnE,gBAAgB,EAAE,QAAQ,CAAC,wBAAwB,EAAE,UAAU;YAC/D,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,iCAAiC;YAC5F,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE;SACvC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,UAAsB,EAAE,MAA0B,EAAE,gBAAyB;QACjH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC;YACzD,UAAU;YACV,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAEtE,OAAO;YACL,GAAG,QAAQ;YACX,YAAY;SACb,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAAC,QAAqB,EAAE,UAAmB,EAAE,gBAAyB;QAClG,MAAM,SAAS,GAAG,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,CAAC;aACX,CAAC;QACJ,CAAC;QAED,MAAM,oBAAoB,GAAG,UAAU;YACrC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,CAAC;aACX,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEjE,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,cAAc;SACxB,CAAC;IACJ,CAAC;CACF"}