@liquid-af/sdk 0.1.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 (225) hide show
  1. package/README.md +776 -0
  2. package/dist/accounts/index.d.ts +5 -0
  3. package/dist/accounts/index.d.ts.map +1 -0
  4. package/dist/accounts/index.js +5 -0
  5. package/dist/accounts/index.js.map +1 -0
  6. package/dist/accounts/liquid-fees.d.ts +63 -0
  7. package/dist/accounts/liquid-fees.d.ts.map +1 -0
  8. package/dist/accounts/liquid-fees.js +27 -0
  9. package/dist/accounts/liquid-fees.js.map +1 -0
  10. package/dist/accounts/liquid-state.d.ts +112 -0
  11. package/dist/accounts/liquid-state.d.ts.map +1 -0
  12. package/dist/accounts/liquid-state.js +92 -0
  13. package/dist/accounts/liquid-state.js.map +1 -0
  14. package/dist/accounts/liquid-swap.d.ts +97 -0
  15. package/dist/accounts/liquid-swap.d.ts.map +1 -0
  16. package/dist/accounts/liquid-swap.js +54 -0
  17. package/dist/accounts/liquid-swap.js.map +1 -0
  18. package/dist/accounts/liquid.d.ts +175 -0
  19. package/dist/accounts/liquid.d.ts.map +1 -0
  20. package/dist/accounts/liquid.js +66 -0
  21. package/dist/accounts/liquid.js.map +1 -0
  22. package/dist/client.d.ts +621 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +511 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/config.d.ts +56 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +44 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/errors.d.ts +39 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +63 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/events/index.d.ts +4 -0
  35. package/dist/events/index.d.ts.map +1 -0
  36. package/dist/events/index.js +2 -0
  37. package/dist/events/index.js.map +1 -0
  38. package/dist/events/parser.d.ts +40 -0
  39. package/dist/events/parser.d.ts.map +1 -0
  40. package/dist/events/parser.js +67 -0
  41. package/dist/events/parser.js.map +1 -0
  42. package/dist/events/types.d.ts +286 -0
  43. package/dist/events/types.d.ts.map +1 -0
  44. package/dist/events/types.js +2 -0
  45. package/dist/events/types.js.map +1 -0
  46. package/dist/helpers/index.d.ts +4 -0
  47. package/dist/helpers/index.d.ts.map +1 -0
  48. package/dist/helpers/index.js +3 -0
  49. package/dist/helpers/index.js.map +1 -0
  50. package/dist/helpers/preview.d.ts +259 -0
  51. package/dist/helpers/preview.d.ts.map +1 -0
  52. package/dist/helpers/preview.js +458 -0
  53. package/dist/helpers/preview.js.map +1 -0
  54. package/dist/helpers/user.d.ts +11 -0
  55. package/dist/helpers/user.d.ts.map +1 -0
  56. package/dist/helpers/user.js +20 -0
  57. package/dist/helpers/user.js.map +1 -0
  58. package/dist/idl/index.d.ts +53 -0
  59. package/dist/idl/index.d.ts.map +1 -0
  60. package/dist/idl/index.js +64 -0
  61. package/dist/idl/index.js.map +1 -0
  62. package/dist/idl/liquid.d.ts +10523 -0
  63. package/dist/idl/liquid.d.ts.map +1 -0
  64. package/dist/idl/liquid.js +2 -0
  65. package/dist/idl/liquid.js.map +1 -0
  66. package/dist/idl/liquid.json +10516 -0
  67. package/dist/idl/liquid_fees.d.ts +1520 -0
  68. package/dist/idl/liquid_fees.d.ts.map +1 -0
  69. package/dist/idl/liquid_fees.js +2 -0
  70. package/dist/idl/liquid_fees.js.map +1 -0
  71. package/dist/idl/liquid_fees.json +1513 -0
  72. package/dist/idl/liquid_state.d.ts +2936 -0
  73. package/dist/idl/liquid_state.d.ts.map +1 -0
  74. package/dist/idl/liquid_state.js +2 -0
  75. package/dist/idl/liquid_state.js.map +1 -0
  76. package/dist/idl/liquid_state.json +2929 -0
  77. package/dist/idl/liquid_swap.d.ts +5849 -0
  78. package/dist/idl/liquid_swap.d.ts.map +1 -0
  79. package/dist/idl/liquid_swap.js +2 -0
  80. package/dist/idl/liquid_swap.js.map +1 -0
  81. package/dist/idl/liquid_swap.json +5842 -0
  82. package/dist/index.d.ts +19 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +15 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/instructions/index.d.ts +9 -0
  87. package/dist/instructions/index.d.ts.map +1 -0
  88. package/dist/instructions/index.js +9 -0
  89. package/dist/instructions/index.js.map +1 -0
  90. package/dist/instructions/liquid-fees.d.ts +111 -0
  91. package/dist/instructions/liquid-fees.d.ts.map +1 -0
  92. package/dist/instructions/liquid-fees.js +169 -0
  93. package/dist/instructions/liquid-fees.js.map +1 -0
  94. package/dist/instructions/liquid-state.d.ts +173 -0
  95. package/dist/instructions/liquid-state.d.ts.map +1 -0
  96. package/dist/instructions/liquid-state.js +194 -0
  97. package/dist/instructions/liquid-state.js.map +1 -0
  98. package/dist/instructions/liquid-swap.d.ts +122 -0
  99. package/dist/instructions/liquid-swap.d.ts.map +1 -0
  100. package/dist/instructions/liquid-swap.js +167 -0
  101. package/dist/instructions/liquid-swap.js.map +1 -0
  102. package/dist/instructions/liquid.d.ts +297 -0
  103. package/dist/instructions/liquid.d.ts.map +1 -0
  104. package/dist/instructions/liquid.js +483 -0
  105. package/dist/instructions/liquid.js.map +1 -0
  106. package/dist/instructions/program-cache.d.ts +35 -0
  107. package/dist/instructions/program-cache.d.ts.map +1 -0
  108. package/dist/instructions/program-cache.js +68 -0
  109. package/dist/instructions/program-cache.js.map +1 -0
  110. package/dist/math/amm.d.ts +42 -0
  111. package/dist/math/amm.d.ts.map +1 -0
  112. package/dist/math/amm.js +109 -0
  113. package/dist/math/amm.js.map +1 -0
  114. package/dist/math/bonding-curve.d.ts +34 -0
  115. package/dist/math/bonding-curve.d.ts.map +1 -0
  116. package/dist/math/bonding-curve.js +80 -0
  117. package/dist/math/bonding-curve.js.map +1 -0
  118. package/dist/math/constants.d.ts +14 -0
  119. package/dist/math/constants.d.ts.map +1 -0
  120. package/dist/math/constants.js +14 -0
  121. package/dist/math/constants.js.map +1 -0
  122. package/dist/math/fees.d.ts +88 -0
  123. package/dist/math/fees.d.ts.map +1 -0
  124. package/dist/math/fees.js +135 -0
  125. package/dist/math/fees.js.map +1 -0
  126. package/dist/math/index.d.ts +8 -0
  127. package/dist/math/index.d.ts.map +1 -0
  128. package/dist/math/index.js +6 -0
  129. package/dist/math/index.js.map +1 -0
  130. package/dist/math/tiered-fees.d.ts +80 -0
  131. package/dist/math/tiered-fees.d.ts.map +1 -0
  132. package/dist/math/tiered-fees.js +129 -0
  133. package/dist/math/tiered-fees.js.map +1 -0
  134. package/dist/oracle.d.ts +53 -0
  135. package/dist/oracle.d.ts.map +1 -0
  136. package/dist/oracle.js +70 -0
  137. package/dist/oracle.js.map +1 -0
  138. package/dist/pda/index.d.ts +89 -0
  139. package/dist/pda/index.d.ts.map +1 -0
  140. package/dist/pda/index.js +127 -0
  141. package/dist/pda/index.js.map +1 -0
  142. package/dist/pda/liquid-fees.d.ts +27 -0
  143. package/dist/pda/liquid-fees.d.ts.map +1 -0
  144. package/dist/pda/liquid-fees.js +36 -0
  145. package/dist/pda/liquid-fees.js.map +1 -0
  146. package/dist/pda/liquid-state.d.ts +56 -0
  147. package/dist/pda/liquid-state.d.ts.map +1 -0
  148. package/dist/pda/liquid-state.js +79 -0
  149. package/dist/pda/liquid-state.js.map +1 -0
  150. package/dist/pda/liquid-swap.d.ts +76 -0
  151. package/dist/pda/liquid-swap.d.ts.map +1 -0
  152. package/dist/pda/liquid-swap.js +103 -0
  153. package/dist/pda/liquid-swap.js.map +1 -0
  154. package/dist/pda/liquid.d.ts +67 -0
  155. package/dist/pda/liquid.d.ts.map +1 -0
  156. package/dist/pda/liquid.js +91 -0
  157. package/dist/pda/liquid.js.map +1 -0
  158. package/dist/provider.d.ts +26 -0
  159. package/dist/provider.d.ts.map +1 -0
  160. package/dist/provider.js +47 -0
  161. package/dist/provider.js.map +1 -0
  162. package/dist/transaction/builder.d.ts +30 -0
  163. package/dist/transaction/builder.d.ts.map +1 -0
  164. package/dist/transaction/builder.js +48 -0
  165. package/dist/transaction/builder.js.map +1 -0
  166. package/dist/transaction/index.d.ts +3 -0
  167. package/dist/transaction/index.d.ts.map +1 -0
  168. package/dist/transaction/index.js +3 -0
  169. package/dist/transaction/index.js.map +1 -0
  170. package/dist/transaction/send.d.ts +25 -0
  171. package/dist/transaction/send.d.ts.map +1 -0
  172. package/dist/transaction/send.js +52 -0
  173. package/dist/transaction/send.js.map +1 -0
  174. package/dist/types.d.ts +311 -0
  175. package/dist/types.d.ts.map +1 -0
  176. package/dist/types.js +46 -0
  177. package/dist/types.js.map +1 -0
  178. package/package.json +112 -0
  179. package/src/accounts/index.ts +26 -0
  180. package/src/accounts/liquid-fees.ts +38 -0
  181. package/src/accounts/liquid-state.ts +134 -0
  182. package/src/accounts/liquid-swap.ts +79 -0
  183. package/src/accounts/liquid.ts +100 -0
  184. package/src/client.ts +1001 -0
  185. package/src/config.ts +91 -0
  186. package/src/errors.ts +94 -0
  187. package/src/events/index.ts +42 -0
  188. package/src/events/parser.ts +90 -0
  189. package/src/events/types.ts +310 -0
  190. package/src/helpers/index.ts +23 -0
  191. package/src/helpers/preview.ts +798 -0
  192. package/src/helpers/user.ts +24 -0
  193. package/src/idl/index.ts +94 -0
  194. package/src/idl/liquid.json +10516 -0
  195. package/src/idl/liquid.ts +10522 -0
  196. package/src/idl/liquid_fees.json +1513 -0
  197. package/src/idl/liquid_fees.ts +1519 -0
  198. package/src/idl/liquid_state.json +2929 -0
  199. package/src/idl/liquid_state.ts +2935 -0
  200. package/src/idl/liquid_swap.json +5842 -0
  201. package/src/idl/liquid_swap.ts +5848 -0
  202. package/src/index.ts +98 -0
  203. package/src/instructions/index.ts +109 -0
  204. package/src/instructions/liquid-fees.ts +289 -0
  205. package/src/instructions/liquid-state.ts +336 -0
  206. package/src/instructions/liquid-swap.ts +414 -0
  207. package/src/instructions/liquid.ts +884 -0
  208. package/src/instructions/program-cache.ts +106 -0
  209. package/src/math/amm.ts +146 -0
  210. package/src/math/bonding-curve.ts +122 -0
  211. package/src/math/constants.ts +19 -0
  212. package/src/math/fees.ts +191 -0
  213. package/src/math/index.ts +40 -0
  214. package/src/math/tiered-fees.ts +165 -0
  215. package/src/oracle.ts +97 -0
  216. package/src/pda/index.ts +331 -0
  217. package/src/pda/liquid-fees.ts +58 -0
  218. package/src/pda/liquid-state.ts +123 -0
  219. package/src/pda/liquid-swap.ts +162 -0
  220. package/src/pda/liquid.ts +152 -0
  221. package/src/provider.ts +60 -0
  222. package/src/transaction/builder.ts +80 -0
  223. package/src/transaction/index.ts +6 -0
  224. package/src/transaction/send.ts +72 -0
  225. package/src/types.ts +354 -0
@@ -0,0 +1,129 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import BN from "bn.js";
3
+ /** WSOL mint address (native SOL wrapped as SPL token) */
4
+ export const WSOL_MINT = new PublicKey("So11111111111111111111111111111111111111112");
5
+ /** Lamports per SOL constant */
6
+ const LAMPORTS_PER_SOL = new BN(1000000000);
7
+ /**
8
+ * Calculate pool fully diluted market cap in USD.
9
+ *
10
+ * The market cap is calculated as:
11
+ * - Pool token price (in USD) × base token total supply
12
+ * - Pool token price = (quote vault value in USD) / base vault amount
13
+ *
14
+ * For WSOL pools, the quote vault is converted to USD using the oracle price.
15
+ * For USDC pools, the quote vault is already in USD (assumed 1:1 peg).
16
+ *
17
+ * @param quoteVaultAmount - Quote vault balance (lamports for WSOL, 6 decimals for USDC)
18
+ * @param baseVaultAmount - Base vault balance (token decimals)
19
+ * @param baseTotalSupply - Total supply of base token (token decimals)
20
+ * @param solPriceUsd - SOL/USD price from oracle (6 decimals)
21
+ * @param quoteMint - Quote mint pubkey (to detect WSOL vs stable)
22
+ * @returns Market cap in USD (6 decimals)
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // Pool with 100 SOL and 1M tokens, SOL = $150, supply = 1B tokens
27
+ * // Token price = (100 SOL × $150) / 1M = $0.015 per token
28
+ * // Market cap = $0.015 × 1B = $15M
29
+ * const marketCap = calculatePoolMarketCap(
30
+ * new BN(100_000_000_000), // 100 SOL in lamports
31
+ * new BN(1_000_000_000_000), // 1M tokens (6 decimals)
32
+ * new BN(1_000_000_000_000_000), // 1B tokens (6 decimals)
33
+ * new BN(150_000_000), // $150 (6 decimals)
34
+ * WSOL_MINT,
35
+ * );
36
+ * // Returns: 15_000_000_000_000 ($15M with 6 decimals)
37
+ * ```
38
+ */
39
+ export function calculatePoolMarketCap(quoteVaultAmount, baseVaultAmount, baseTotalSupply, solPriceUsd, quoteMint) {
40
+ // Prevent division by zero
41
+ if (baseVaultAmount.isZero()) {
42
+ throw new Error("Base vault amount cannot be zero");
43
+ }
44
+ if (quoteMint.equals(WSOL_MINT)) {
45
+ // For WSOL pools: convert quote reserves to USD, then compute market cap
46
+ // Formula: market_cap = (quote_lamports × sol_price_usd / 1e9) × base_supply / base_vault
47
+ //
48
+ // Combined to avoid intermediate truncation:
49
+ // market_cap = (quote_lamports × sol_price_usd × base_supply) / (1e9 × base_vault)
50
+ const marketCap = quoteVaultAmount
51
+ .mul(solPriceUsd)
52
+ .mul(baseTotalSupply)
53
+ .div(LAMPORTS_PER_SOL)
54
+ .div(baseVaultAmount);
55
+ return marketCap;
56
+ }
57
+ else {
58
+ // For USDC and other stablecoins: assume 1:1 with USD
59
+ // quote_vault already in 6 decimals for USDC
60
+ // Formula: market_cap = (quote_amount × base_supply) / base_vault
61
+ const marketCap = quoteVaultAmount
62
+ .mul(baseTotalSupply)
63
+ .div(baseVaultAmount);
64
+ return marketCap;
65
+ }
66
+ }
67
+ /**
68
+ * Find appropriate fee tier for given market cap.
69
+ *
70
+ * Performs a linear scan through the active fee tiers to find the tier
71
+ * whose range contains the given market cap. If the market cap exceeds
72
+ * all tier ranges, returns the last tier.
73
+ *
74
+ * @param marketCapUsd - Pool market cap in USD (6 decimals)
75
+ * @param tiers - Array of active fee tiers (sorted, validated)
76
+ * @returns Tuple of [lpFeeRate, protocolFeeRate, creatorFeeRate] in basis points
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const tiers = [
81
+ * { rangeStartInclusive: new BN(0), rangeEndExclusive: new BN(1_000_000_000_000), lpFeeRate: 30, protocolFeeRate: 5, creatorFeeRate: 5 },
82
+ * { rangeStartInclusive: new BN(1_000_000_000_000), rangeEndExclusive: new BN('18446744073709551615'), lpFeeRate: 20, protocolFeeRate: 3, creatorFeeRate: 3 },
83
+ * ];
84
+ *
85
+ * // Market cap = $500K -> uses first tier (high fees)
86
+ * const [lp, protocol, creator] = lookupFeeTier(new BN(500_000_000_000), tiers);
87
+ * // Returns: [30, 5, 5]
88
+ *
89
+ * // Market cap = $5M -> uses second tier (low fees)
90
+ * const [lp2, protocol2, creator2] = lookupFeeTier(new BN(5_000_000_000_000), tiers);
91
+ * // Returns: [20, 3, 3]
92
+ * ```
93
+ */
94
+ export function lookupFeeTier(marketCapUsd, tiers) {
95
+ if (tiers.length === 0) {
96
+ throw new Error("No fee tiers configured");
97
+ }
98
+ // Linear scan to find matching tier
99
+ for (const tier of tiers) {
100
+ if (marketCapUsd.gte(tier.rangeStartInclusive) &&
101
+ marketCapUsd.lt(tier.rangeEndExclusive)) {
102
+ return [tier.lpFeeRate, tier.protocolFeeRate, tier.creatorFeeRate];
103
+ }
104
+ }
105
+ // If market cap exceeds all tiers, use the last tier
106
+ const lastTier = tiers[tiers.length - 1];
107
+ return [
108
+ lastTier.lpFeeRate,
109
+ lastTier.protocolFeeRate,
110
+ lastTier.creatorFeeRate,
111
+ ];
112
+ }
113
+ /**
114
+ * Calculate the fee rates that would apply for a given pool state.
115
+ * Helper function that combines market cap calculation and tier lookup.
116
+ *
117
+ * @param quoteVaultAmount - Quote vault balance
118
+ * @param baseVaultAmount - Base vault balance
119
+ * @param baseTotalSupply - Total supply of base token
120
+ * @param solPriceUsd - SOL/USD price from oracle (6 decimals)
121
+ * @param quoteMint - Quote mint pubkey
122
+ * @param tiers - Array of active fee tiers
123
+ * @returns Tuple of [lpFeeRate, protocolFeeRate, creatorFeeRate] in basis points
124
+ */
125
+ export function calculateFeesForPool(quoteVaultAmount, baseVaultAmount, baseTotalSupply, solPriceUsd, quoteMint, tiers) {
126
+ const marketCap = calculatePoolMarketCap(quoteVaultAmount, baseVaultAmount, baseTotalSupply, solPriceUsd, quoteMint);
127
+ return lookupFeeTier(marketCap, tiers);
128
+ }
129
+ //# sourceMappingURL=tiered-fees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiered-fees.js","sourceRoot":"","sources":["../../src/math/tiered-fees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,OAAO,CAAC;AAGvB,0DAA0D;AAC1D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,CACrC,6CAA6C,CAC7C,CAAC;AAEF,gCAAgC;AAChC,MAAM,gBAAgB,GAAG,IAAI,EAAE,CAAC,UAAa,CAAC,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,sBAAsB,CACrC,gBAAoB,EACpB,eAAmB,EACnB,eAAmB,EACnB,WAAe,EACf,SAAoB;IAEpB,2BAA2B;IAC3B,IAAI,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,yEAAyE;QACzE,0FAA0F;QAC1F,EAAE;QACF,6CAA6C;QAC7C,mFAAmF;QACnF,MAAM,SAAS,GAAG,gBAAgB;aAChC,GAAG,CAAC,WAAW,CAAC;aAChB,GAAG,CAAC,eAAe,CAAC;aACpB,GAAG,CAAC,gBAAgB,CAAC;aACrB,GAAG,CAAC,eAAe,CAAC,CAAC;QAEvB,OAAO,SAAS,CAAC;IAClB,CAAC;SAAM,CAAC;QACP,sDAAsD;QACtD,6CAA6C;QAC7C,kEAAkE;QAClE,MAAM,SAAS,GAAG,gBAAgB;aAChC,GAAG,CAAC,eAAe,CAAC;aACpB,GAAG,CAAC,eAAe,CAAC,CAAC;QAEvB,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,aAAa,CAC5B,YAAgB,EAChB,KAAgB;IAEhB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IAED,oCAAoC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IACC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC1C,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACtC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACpE,CAAC;IACF,CAAC;IAED,qDAAqD;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO;QACN,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,eAAe;QACxB,QAAQ,CAAC,cAAc;KACvB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CACnC,gBAAoB,EACpB,eAAmB,EACnB,eAAmB,EACnB,WAAe,EACf,SAAoB,EACpB,KAAgB;IAEhB,MAAM,SAAS,GAAG,sBAAsB,CACvC,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,WAAW,EACX,SAAS,CACT,CAAC;IAEF,OAAO,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * SOL/USD feed ID from Pyth.
3
+ *
4
+ * This is a universal identifier for the SOL/USD price pair used across all networks
5
+ * (mainnet, devnet, testnet, and localnet). Feed IDs are asset pair identifiers,
6
+ * not account addresses. The actual price feed accounts differ per network, but all
7
+ * contain data for this feed ID.
8
+ *
9
+ * Must match the constant in programs/liquid/src/instructions/shared/oracle.rs
10
+ */
11
+ export declare const SOL_USD_FEED_ID = "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d";
12
+ /**
13
+ * Standard Pyth exponent for SOL/USD (8 decimals)
14
+ */
15
+ export declare const PYTH_EXPONENT = -8;
16
+ /**
17
+ * USD decimals used in the protocol
18
+ */
19
+ export declare const USD_DECIMALS = 6;
20
+ /**
21
+ * Calculates the expected virtual SOL reserves for a given virtual reserve value and SOL price.
22
+ * Matches the calculation in oracle.rs::calculate_virtual_sol_reserves
23
+ *
24
+ * @param initialVirtualReserveUsd - Initial virtual reserve value in USD (6 decimals)
25
+ * @param solPriceUsd - SOL price in USD (6 decimals)
26
+ * @returns Virtual SOL reserves in lamports
27
+ */
28
+ export declare function calculateVirtualSolReserves(initialVirtualReserveUsd: bigint, solPriceUsd: bigint): bigint;
29
+ /**
30
+ * Calculates the market cap of a token in USD for native curves.
31
+ * Matches the calculation in oracle.rs::calculate_market_cap_usd
32
+ *
33
+ * Market Cap = Token Price (in SOL) × Total Supply × SOL Price (in USD)
34
+ *
35
+ * @param virtualSolReserves - Virtual SOL reserves in lamports
36
+ * @param virtualTokenReserves - Virtual token reserves (6 decimals)
37
+ * @param tokenTotalSupply - Total supply of tokens (6 decimals)
38
+ * @param solPriceUsd - SOL price in USD (6 decimals)
39
+ * @returns Market cap in USD (6 decimals)
40
+ */
41
+ export declare function calculateNativeMarketCapUsd(virtualSolReserves: bigint, virtualTokenReserves: bigint, tokenTotalSupply: bigint, solPriceUsd: bigint): bigint;
42
+ /**
43
+ * Calculates the market cap of a token in USD for stable curves (USDC quote).
44
+ *
45
+ * Market Cap = Token Price (in USDC) × Total Supply
46
+ *
47
+ * @param virtualQuoteReserves - Virtual USDC reserves (6 decimals)
48
+ * @param virtualTokenReserves - Virtual token reserves (6 decimals)
49
+ * @param tokenTotalSupply - Total supply of tokens (6 decimals)
50
+ * @returns Market cap in USD (6 decimals)
51
+ */
52
+ export declare function calculateTokenMarketCapUsd(virtualQuoteReserves: bigint, virtualTokenReserves: bigint, tokenTotalSupply: bigint): bigint;
53
+ //# sourceMappingURL=oracle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,uEACyC,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAC1C,wBAAwB,EAAE,MAAM,EAChC,WAAW,EAAE,MAAM,GACjB,MAAM,CAGR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAC1C,kBAAkB,EAAE,MAAM,EAC1B,oBAAoB,EAAE,MAAM,EAC5B,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,GACjB,MAAM,CAcR;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACzC,oBAAoB,EAAE,MAAM,EAC5B,oBAAoB,EAAE,MAAM,EAC5B,gBAAgB,EAAE,MAAM,GACtB,MAAM,CAUR"}
package/dist/oracle.js ADDED
@@ -0,0 +1,70 @@
1
+ /**
2
+ * SOL/USD feed ID from Pyth.
3
+ *
4
+ * This is a universal identifier for the SOL/USD price pair used across all networks
5
+ * (mainnet, devnet, testnet, and localnet). Feed IDs are asset pair identifiers,
6
+ * not account addresses. The actual price feed accounts differ per network, but all
7
+ * contain data for this feed ID.
8
+ *
9
+ * Must match the constant in programs/liquid/src/instructions/shared/oracle.rs
10
+ */
11
+ export const SOL_USD_FEED_ID = "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d";
12
+ /**
13
+ * Standard Pyth exponent for SOL/USD (8 decimals)
14
+ */
15
+ export const PYTH_EXPONENT = -8;
16
+ /**
17
+ * USD decimals used in the protocol
18
+ */
19
+ export const USD_DECIMALS = 6;
20
+ /**
21
+ * Calculates the expected virtual SOL reserves for a given virtual reserve value and SOL price.
22
+ * Matches the calculation in oracle.rs::calculate_virtual_sol_reserves
23
+ *
24
+ * @param initialVirtualReserveUsd - Initial virtual reserve value in USD (6 decimals)
25
+ * @param solPriceUsd - SOL price in USD (6 decimals)
26
+ * @returns Virtual SOL reserves in lamports
27
+ */
28
+ export function calculateVirtualSolReserves(initialVirtualReserveUsd, solPriceUsd) {
29
+ // virtual_sol (lamports) = initial_virtual_reserve_usd / sol_price_usd * 10^9
30
+ return (initialVirtualReserveUsd * BigInt(1000000000)) / solPriceUsd;
31
+ }
32
+ /**
33
+ * Calculates the market cap of a token in USD for native curves.
34
+ * Matches the calculation in oracle.rs::calculate_market_cap_usd
35
+ *
36
+ * Market Cap = Token Price (in SOL) × Total Supply × SOL Price (in USD)
37
+ *
38
+ * @param virtualSolReserves - Virtual SOL reserves in lamports
39
+ * @param virtualTokenReserves - Virtual token reserves (6 decimals)
40
+ * @param tokenTotalSupply - Total supply of tokens (6 decimals)
41
+ * @param solPriceUsd - SOL price in USD (6 decimals)
42
+ * @returns Market cap in USD (6 decimals)
43
+ */
44
+ export function calculateNativeMarketCapUsd(virtualSolReserves, virtualTokenReserves, tokenTotalSupply, solPriceUsd) {
45
+ // Token price in lamports per token (scaled by 1e6 for precision)
46
+ const tokenPriceLamports = (virtualSolReserves * BigInt(1000000)) / virtualTokenReserves;
47
+ // Market cap in lamports
48
+ const marketCapLamports = (tokenPriceLamports * tokenTotalSupply) / BigInt(1000000);
49
+ // Convert to USD
50
+ const marketCapUsd = (marketCapLamports * solPriceUsd) / BigInt(1000000000);
51
+ return marketCapUsd;
52
+ }
53
+ /**
54
+ * Calculates the market cap of a token in USD for stable curves (USDC quote).
55
+ *
56
+ * Market Cap = Token Price (in USDC) × Total Supply
57
+ *
58
+ * @param virtualQuoteReserves - Virtual USDC reserves (6 decimals)
59
+ * @param virtualTokenReserves - Virtual token reserves (6 decimals)
60
+ * @param tokenTotalSupply - Total supply of tokens (6 decimals)
61
+ * @returns Market cap in USD (6 decimals)
62
+ */
63
+ export function calculateTokenMarketCapUsd(virtualQuoteReserves, virtualTokenReserves, tokenTotalSupply) {
64
+ // Token price in USDC (scaled by 1e6 for precision)
65
+ const tokenPriceUsdc = (virtualQuoteReserves * BigInt(1000000)) / virtualTokenReserves;
66
+ // Market cap = price * total_supply
67
+ const marketCapUsd = (tokenPriceUsdc * tokenTotalSupply) / BigInt(1000000);
68
+ return marketCapUsd;
69
+ }
70
+ //# sourceMappingURL=oracle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAC3B,oEAAoE,CAAC;AAEtE;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC;AAEhC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAC1C,wBAAgC,EAChC,WAAmB;IAEnB,8EAA8E;IAC9E,OAAO,CAAC,wBAAwB,GAAG,MAAM,CAAC,UAAa,CAAC,CAAC,GAAG,WAAW,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAC1C,kBAA0B,EAC1B,oBAA4B,EAC5B,gBAAwB,EACxB,WAAmB;IAEnB,kEAAkE;IAClE,MAAM,kBAAkB,GACvB,CAAC,kBAAkB,GAAG,MAAM,CAAC,OAAS,CAAC,CAAC,GAAG,oBAAoB,CAAC;IAEjE,yBAAyB;IACzB,MAAM,iBAAiB,GACtB,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,MAAM,CAAC,OAAS,CAAC,CAAC;IAE7D,iBAAiB;IACjB,MAAM,YAAY,GACjB,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC,UAAa,CAAC,CAAC;IAE3D,OAAO,YAAY,CAAC;AACrB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CACzC,oBAA4B,EAC5B,oBAA4B,EAC5B,gBAAwB;IAExB,oDAAoD;IACpD,MAAM,cAAc,GACnB,CAAC,oBAAoB,GAAG,MAAM,CAAC,OAAS,CAAC,CAAC,GAAG,oBAAoB,CAAC;IAEnE,oCAAoC;IACpC,MAAM,YAAY,GACjB,CAAC,cAAc,GAAG,gBAAgB,CAAC,GAAG,MAAM,CAAC,OAAS,CAAC,CAAC;IAEzD,OAAO,YAAY,CAAC;AACrB,CAAC"}
@@ -0,0 +1,89 @@
1
+ export { getLiquidGlobalConfigPDA, getBondingCurvePDA, getBondingCurveSolVaultPDA, getBondingCurveTokenAccount, getReferralVaultPDA, getReferralTokenVault, getBuybackVaultPDA, getStableBondingCurvePDA, } from "./liquid.js";
2
+ export { getSwapGlobalConfigPDA, getSwapAuthorityPDA, getPoolPDA, getPoolLpMintPDA, getPoolVaultPDA, getObservationPDA, getProtocolFeeVaultPDA, getTempWsolPDA, getSwapBuybackVaultPDA, } from "./liquid-swap.js";
3
+ export { getFeeConfigPDA, getFeeVaultPDA, getRecipientVaultPDA, } from "./liquid-fees.js";
4
+ export { getUserPropertiesPDA, getGlobalCurveVolumePDA, getGlobalAmmVolumePDA, getTokenVolumePDA, getCashbackConfigPDA, getUserSnapshotPDA, getDealPDA, } from "./liquid-state.js";
5
+ import type { PublicKey } from "@solana/web3.js";
6
+ import { type LiquidConfig } from "../config.js";
7
+ /** All PDAs associated with a bonding curve token */
8
+ export interface BondingCurvePDAs {
9
+ bondingCurve: PublicKey;
10
+ bondingCurveSolVault: PublicKey;
11
+ referralVault: PublicKey;
12
+ buybackVault: PublicKey;
13
+ feeConfig: PublicKey;
14
+ feeVault: PublicKey;
15
+ userProperties: PublicKey;
16
+ tokenVolume: PublicKey;
17
+ }
18
+ /**
19
+ * Derives all PDAs associated with a bonding curve token.
20
+ *
21
+ * @param mint - Token mint address
22
+ * @param creator - Bonding curve creator public key
23
+ * @param config - Liquid protocol configuration
24
+ * @returns All bonding curve-related PDAs
25
+ */
26
+ export declare const getAllBondingCurvePDAs: (mint: PublicKey, creator: PublicKey, config: LiquidConfig) => BondingCurvePDAs;
27
+ /** All PDAs associated with an AMM pool */
28
+ export interface PoolPDAs {
29
+ poolState: PublicKey;
30
+ lpMint: PublicKey;
31
+ baseVault: PublicKey;
32
+ quoteVault: PublicKey;
33
+ observation: PublicKey;
34
+ ammConfig: PublicKey;
35
+ ammAuthority: PublicKey;
36
+ feeConfig: PublicKey;
37
+ tokenVolume: PublicKey;
38
+ }
39
+ /**
40
+ * Derives all PDAs associated with an AMM pool.
41
+ *
42
+ * @param baseMint - Base token mint address
43
+ * @param quoteMint - Quote token mint address
44
+ * @param config - Liquid protocol configuration
45
+ * @returns All pool-related PDAs
46
+ */
47
+ export declare const getAllPoolPDAs: (baseMint: PublicKey, quoteMint: PublicKey, config: LiquidConfig) => PoolPDAs;
48
+ /** All PDAs needed for bonding curve to AMM migration */
49
+ export interface MigrationPDAs {
50
+ bondingCurve: PublicKey;
51
+ ammPoolState: PublicKey;
52
+ ammLpMint: PublicKey;
53
+ ammBaseVault: PublicKey;
54
+ ammQuoteVault: PublicKey;
55
+ ammObservation: PublicKey;
56
+ ammConfig: PublicKey;
57
+ ammAuthority: PublicKey;
58
+ ammBuybackVault: PublicKey;
59
+ }
60
+ /**
61
+ * Derives all PDAs needed for migration from bonding curve to AMM.
62
+ *
63
+ * @param tokenMint - Token mint address
64
+ * @param config - Liquid protocol configuration
65
+ * @returns All migration-related PDAs
66
+ */
67
+ export declare const getMigrationPDAs: (tokenMint: PublicKey, config?: LiquidConfig) => MigrationPDAs;
68
+ /** All PDAs needed for token bonding curve to AMM migration */
69
+ export interface TokenMigrationPDAs {
70
+ bondingCurve: PublicKey;
71
+ ammPoolState: PublicKey;
72
+ ammLpMint: PublicKey;
73
+ ammBaseVault: PublicKey;
74
+ ammQuoteVault: PublicKey;
75
+ ammObservation: PublicKey;
76
+ ammConfig: PublicKey;
77
+ ammAuthority: PublicKey;
78
+ ammBuybackVault: PublicKey;
79
+ }
80
+ /**
81
+ * Derives all PDAs needed for migration from token bonding curve to AMM.
82
+ *
83
+ * @param tokenMint - Token mint address
84
+ * @param quoteMint - Quote token mint address (e.g., USDC)
85
+ * @param config - Liquid protocol configuration
86
+ * @returns All migration-related PDAs
87
+ */
88
+ export declare const getTokenMigrationPDAs: (tokenMint: PublicKey, quoteMint: PublicKey, config: LiquidConfig) => TokenMigrationPDAs;
89
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pda/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ export { getLiquidGlobalConfigPDA, getBondingCurvePDA, getBondingCurveSolVaultPDA, getBondingCurveTokenAccount, getReferralVaultPDA, getReferralTokenVault, getBuybackVaultPDA, getStableBondingCurvePDA, } from "./liquid.js";
2
+ export { getSwapGlobalConfigPDA, getSwapAuthorityPDA, getPoolPDA, getPoolLpMintPDA, getPoolVaultPDA, getObservationPDA, getProtocolFeeVaultPDA, getTempWsolPDA, getSwapBuybackVaultPDA, } from "./liquid-swap.js";
3
+ export { getFeeConfigPDA, getFeeVaultPDA, getRecipientVaultPDA, } from "./liquid-fees.js";
4
+ export { getUserPropertiesPDA, getGlobalCurveVolumePDA, getGlobalAmmVolumePDA, getTokenVolumePDA, getCashbackConfigPDA, getUserSnapshotPDA, getDealPDA, } from "./liquid-state.js";
5
+ import { MAINNET_CONFIG, WSOL_MINT } from "../config.js";
6
+ import { getBondingCurvePDA, getBondingCurveSolVaultPDA, getReferralVaultPDA, getBuybackVaultPDA, getStableBondingCurvePDA, } from "./liquid.js";
7
+ import { getPoolPDA, getPoolLpMintPDA, getPoolVaultPDA, getObservationPDA, getSwapGlobalConfigPDA, getSwapAuthorityPDA, getSwapBuybackVaultPDA, } from "./liquid-swap.js";
8
+ import { getFeeConfigPDA, getFeeVaultPDA } from "./liquid-fees.js";
9
+ import { getUserPropertiesPDA, getTokenVolumePDA } from "./liquid-state.js";
10
+ /**
11
+ * Derives all PDAs associated with a bonding curve token.
12
+ *
13
+ * @param mint - Token mint address
14
+ * @param creator - Bonding curve creator public key
15
+ * @param config - Liquid protocol configuration
16
+ * @returns All bonding curve-related PDAs
17
+ */
18
+ export const getAllBondingCurvePDAs = (mint, creator, config) => {
19
+ const [bondingCurve] = getBondingCurvePDA(mint, config.liquidProgramId);
20
+ const [bondingCurveSolVault] = getBondingCurveSolVaultPDA(bondingCurve, config.liquidProgramId);
21
+ const [referralVault] = getReferralVaultPDA(creator, config.liquidProgramId);
22
+ const [buybackVault] = getBuybackVaultPDA(bondingCurve, config.liquidProgramId);
23
+ const [feeConfig] = getFeeConfigPDA(mint, config.liquidFeesProgramId);
24
+ const [feeVault] = getFeeVaultPDA(feeConfig, config.liquidFeesProgramId);
25
+ const [userProperties] = getUserPropertiesPDA(creator, config.liquidStateProgramId);
26
+ const [tokenVolume] = getTokenVolumePDA(mint, config.liquidStateProgramId);
27
+ return {
28
+ bondingCurve,
29
+ bondingCurveSolVault,
30
+ referralVault,
31
+ buybackVault,
32
+ feeConfig,
33
+ feeVault,
34
+ userProperties,
35
+ tokenVolume,
36
+ };
37
+ };
38
+ /**
39
+ * Derives all PDAs associated with an AMM pool.
40
+ *
41
+ * @param baseMint - Base token mint address
42
+ * @param quoteMint - Quote token mint address
43
+ * @param config - Liquid protocol configuration
44
+ * @returns All pool-related PDAs
45
+ */
46
+ export const getAllPoolPDAs = (baseMint, quoteMint, config) => {
47
+ const [poolState] = getPoolPDA(baseMint, quoteMint, config.liquidSwapProgramId);
48
+ const [lpMint] = getPoolLpMintPDA(poolState, config.liquidSwapProgramId);
49
+ const [baseVault] = getPoolVaultPDA(poolState, baseMint, config.liquidSwapProgramId);
50
+ const [quoteVault] = getPoolVaultPDA(poolState, quoteMint, config.liquidSwapProgramId);
51
+ const [observation] = getObservationPDA(poolState, config.liquidSwapProgramId);
52
+ const [ammConfig] = getSwapGlobalConfigPDA(config.liquidSwapProgramId);
53
+ const [ammAuthority] = getSwapAuthorityPDA(config.liquidSwapProgramId);
54
+ const [feeConfig] = getFeeConfigPDA(baseMint, config.liquidFeesProgramId);
55
+ const [tokenVolume] = getTokenVolumePDA(baseMint, config.liquidStateProgramId);
56
+ return {
57
+ poolState,
58
+ lpMint,
59
+ baseVault,
60
+ quoteVault,
61
+ observation,
62
+ ammConfig,
63
+ ammAuthority,
64
+ feeConfig,
65
+ tokenVolume,
66
+ };
67
+ };
68
+ /**
69
+ * Derives all PDAs needed for migration from bonding curve to AMM.
70
+ *
71
+ * @param tokenMint - Token mint address
72
+ * @param config - Liquid protocol configuration
73
+ * @returns All migration-related PDAs
74
+ */
75
+ export const getMigrationPDAs = (tokenMint, config = MAINNET_CONFIG) => {
76
+ const [bondingCurve] = getBondingCurvePDA(tokenMint, config.liquidProgramId);
77
+ const [ammPoolState] = getPoolPDA(tokenMint, WSOL_MINT, config.liquidSwapProgramId);
78
+ const [ammLpMint] = getPoolLpMintPDA(ammPoolState, config.liquidSwapProgramId);
79
+ const [ammBaseVault] = getPoolVaultPDA(ammPoolState, tokenMint, config.liquidSwapProgramId);
80
+ const [ammQuoteVault] = getPoolVaultPDA(ammPoolState, WSOL_MINT, config.liquidSwapProgramId);
81
+ const [ammObservation] = getObservationPDA(ammPoolState, config.liquidSwapProgramId);
82
+ const [ammConfig] = getSwapGlobalConfigPDA(config.liquidSwapProgramId);
83
+ const [ammAuthority] = getSwapAuthorityPDA(config.liquidSwapProgramId);
84
+ const [ammBuybackVault] = getSwapBuybackVaultPDA(ammPoolState, WSOL_MINT, config.liquidSwapProgramId);
85
+ return {
86
+ bondingCurve,
87
+ ammPoolState,
88
+ ammLpMint,
89
+ ammBaseVault,
90
+ ammQuoteVault,
91
+ ammObservation,
92
+ ammConfig,
93
+ ammAuthority,
94
+ ammBuybackVault,
95
+ };
96
+ };
97
+ /**
98
+ * Derives all PDAs needed for migration from token bonding curve to AMM.
99
+ *
100
+ * @param tokenMint - Token mint address
101
+ * @param quoteMint - Quote token mint address (e.g., USDC)
102
+ * @param config - Liquid protocol configuration
103
+ * @returns All migration-related PDAs
104
+ */
105
+ export const getTokenMigrationPDAs = (tokenMint, quoteMint, config) => {
106
+ const [bondingCurve] = getStableBondingCurvePDA(tokenMint, quoteMint, config.liquidProgramId);
107
+ const [ammPoolState] = getPoolPDA(tokenMint, quoteMint, config.liquidSwapProgramId);
108
+ const [ammLpMint] = getPoolLpMintPDA(ammPoolState, config.liquidSwapProgramId);
109
+ const [ammBaseVault] = getPoolVaultPDA(ammPoolState, tokenMint, config.liquidSwapProgramId);
110
+ const [ammQuoteVault] = getPoolVaultPDA(ammPoolState, quoteMint, config.liquidSwapProgramId);
111
+ const [ammObservation] = getObservationPDA(ammPoolState, config.liquidSwapProgramId);
112
+ const [ammConfig] = getSwapGlobalConfigPDA(config.liquidSwapProgramId);
113
+ const [ammAuthority] = getSwapAuthorityPDA(config.liquidSwapProgramId);
114
+ const [ammBuybackVault] = getSwapBuybackVaultPDA(ammPoolState, quoteMint, config.liquidSwapProgramId);
115
+ return {
116
+ bondingCurve,
117
+ ammPoolState,
118
+ ammLpMint,
119
+ ammBaseVault,
120
+ ammQuoteVault,
121
+ ammObservation,
122
+ ammConfig,
123
+ ammAuthority,
124
+ ammBuybackVault,
125
+ };
126
+ };
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pda/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ /**
3
+ * Derives the fee config PDA for a token mint.
4
+ *
5
+ * @param tokenMint - Token mint address
6
+ * @param programId - Liquid Fees program ID
7
+ * @returns Tuple of [PDA address, bump seed]
8
+ */
9
+ export declare const getFeeConfigPDA: (tokenMint: PublicKey, programId: PublicKey) => [PublicKey, number];
10
+ /**
11
+ * Derives the fee vault PDA for a fee config.
12
+ *
13
+ * @param feeConfig - Fee config PDA address
14
+ * @param programId - Liquid Fees program ID
15
+ * @returns Tuple of [PDA address, bump seed]
16
+ */
17
+ export declare const getFeeVaultPDA: (feeConfig: PublicKey, programId: PublicKey) => [PublicKey, number];
18
+ /**
19
+ * Derives the recipient vault PDA for a specific recipient within a fee config.
20
+ *
21
+ * @param feeConfig - Fee config PDA address
22
+ * @param recipient - Recipient wallet address
23
+ * @param programId - Liquid Fees program ID
24
+ * @returns Tuple of [PDA address, bump seed]
25
+ */
26
+ export declare const getRecipientVaultPDA: (feeConfig: PublicKey, recipient: PublicKey, programId: PublicKey) => [PublicKey, number];
27
+ //# sourceMappingURL=liquid-fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquid-fees.d.ts","sourceRoot":"","sources":["../../src/pda/liquid-fees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAM5C;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC3B,WAAW,SAAS,EACpB,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAKpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAC1B,WAAW,SAAS,EACpB,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAKpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAChC,WAAW,SAAS,EACpB,WAAW,SAAS,EACpB,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAKpB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ const SEED_FEE_CONFIG = Buffer.from("fee_config");
3
+ const SEED_FEE_VAULT = Buffer.from("fee_vault");
4
+ const SEED_RECIPIENT_VAULT = Buffer.from("recipient_vault");
5
+ /**
6
+ * Derives the fee config PDA for a token mint.
7
+ *
8
+ * @param tokenMint - Token mint address
9
+ * @param programId - Liquid Fees program ID
10
+ * @returns Tuple of [PDA address, bump seed]
11
+ */
12
+ export const getFeeConfigPDA = (tokenMint, programId) => {
13
+ return PublicKey.findProgramAddressSync([SEED_FEE_CONFIG, tokenMint.toBuffer()], programId);
14
+ };
15
+ /**
16
+ * Derives the fee vault PDA for a fee config.
17
+ *
18
+ * @param feeConfig - Fee config PDA address
19
+ * @param programId - Liquid Fees program ID
20
+ * @returns Tuple of [PDA address, bump seed]
21
+ */
22
+ export const getFeeVaultPDA = (feeConfig, programId) => {
23
+ return PublicKey.findProgramAddressSync([SEED_FEE_VAULT, feeConfig.toBuffer()], programId);
24
+ };
25
+ /**
26
+ * Derives the recipient vault PDA for a specific recipient within a fee config.
27
+ *
28
+ * @param feeConfig - Fee config PDA address
29
+ * @param recipient - Recipient wallet address
30
+ * @param programId - Liquid Fees program ID
31
+ * @returns Tuple of [PDA address, bump seed]
32
+ */
33
+ export const getRecipientVaultPDA = (feeConfig, recipient, programId) => {
34
+ return PublicKey.findProgramAddressSync([SEED_RECIPIENT_VAULT, feeConfig.toBuffer(), recipient.toBuffer()], programId);
35
+ };
36
+ //# sourceMappingURL=liquid-fees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquid-fees.js","sourceRoot":"","sources":["../../src/pda/liquid-fees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChD,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,SAAoB,EACpB,SAAoB,EACE,EAAE;IACxB,OAAO,SAAS,CAAC,sBAAsB,CACtC,CAAC,eAAe,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,EACvC,SAAS,CACT,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,SAAoB,EACpB,SAAoB,EACE,EAAE;IACxB,OAAO,SAAS,CAAC,sBAAsB,CACtC,CAAC,cAAc,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,EACtC,SAAS,CACT,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CACnC,SAAoB,EACpB,SAAoB,EACpB,SAAoB,EACE,EAAE;IACxB,OAAO,SAAS,CAAC,sBAAsB,CACtC,CAAC,oBAAoB,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,EAClE,SAAS,CACT,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ /**
3
+ * Derives the user properties PDA.
4
+ *
5
+ * @param user - User's public key
6
+ * @param programId - Liquid State program ID
7
+ * @returns Tuple of [PDA address, bump seed]
8
+ */
9
+ export declare const getUserPropertiesPDA: (user: PublicKey, programId: PublicKey) => [PublicKey, number];
10
+ /**
11
+ * Derives the global curve volume accumulator PDA.
12
+ *
13
+ * @param programId - Liquid State program ID
14
+ * @returns Tuple of [PDA address, bump seed]
15
+ */
16
+ export declare const getGlobalCurveVolumePDA: (programId: PublicKey) => [PublicKey, number];
17
+ /**
18
+ * Derives the global AMM volume accumulator PDA.
19
+ *
20
+ * @param programId - Liquid State program ID
21
+ * @returns Tuple of [PDA address, bump seed]
22
+ */
23
+ export declare const getGlobalAmmVolumePDA: (programId: PublicKey) => [PublicKey, number];
24
+ /**
25
+ * Derives the token volume accumulator PDA for a mint.
26
+ *
27
+ * @param mint - Token mint address
28
+ * @param programId - Liquid State program ID
29
+ * @returns Tuple of [PDA address, bump seed]
30
+ */
31
+ export declare const getTokenVolumePDA: (mint: PublicKey, programId: PublicKey) => [PublicKey, number];
32
+ /**
33
+ * Derives the cashback config PDA.
34
+ *
35
+ * @param programId - Liquid State program ID
36
+ * @returns Tuple of [PDA address, bump seed]
37
+ */
38
+ export declare const getCashbackConfigPDA: (programId: PublicKey) => [PublicKey, number];
39
+ /**
40
+ * Derives the user snapshot PDA for a given user and index.
41
+ *
42
+ * @param user - User's public key
43
+ * @param index - Snapshot index (0-based)
44
+ * @param programId - Liquid State program ID
45
+ * @returns Tuple of [PDA address, bump seed]
46
+ */
47
+ export declare const getUserSnapshotPDA: (user: PublicKey, index: number, programId: PublicKey) => [PublicKey, number];
48
+ /**
49
+ * Derives the deal PDA for a given owner.
50
+ *
51
+ * @param owner - Deal owner's public key
52
+ * @param programId - Liquid State program ID
53
+ * @returns Tuple of [PDA address, bump seed]
54
+ */
55
+ export declare const getDealPDA: (owner: PublicKey, programId: PublicKey) => [PublicKey, number];
56
+ //# sourceMappingURL=liquid-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquid-state.d.ts","sourceRoot":"","sources":["../../src/pda/liquid-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU5C;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAChC,MAAM,SAAS,EACf,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAKpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GACnC,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAKpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GACjC,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAKpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC7B,MAAM,SAAS,EACf,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAKpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAChC,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAEpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,EACf,OAAO,MAAM,EACb,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAOpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GACtB,OAAO,SAAS,EAChB,WAAW,SAAS,KAClB,CAAC,SAAS,EAAE,MAAM,CAKpB,CAAC"}