@oobe-protocol-labs/sap-mcp-server 0.9.37 → 0.9.50

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 (191) hide show
  1. package/.env.example +14 -0
  2. package/CHANGELOG.md +85 -0
  3. package/README.md +3 -3
  4. package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
  5. package/USER_DOCS/04_CLIENT_CONFIGS.md +3 -3
  6. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
  7. package/dist/config/env.d.ts +51 -0
  8. package/dist/config/env.d.ts.map +1 -1
  9. package/dist/config/env.js +32 -2
  10. package/dist/config/env.js.map +1 -1
  11. package/dist/core/constants.d.ts +1 -1
  12. package/dist/core/constants.js +1 -1
  13. package/dist/core/logger.js +1 -1
  14. package/dist/payments/monetization-gate.d.ts +5 -0
  15. package/dist/payments/monetization-gate.d.ts.map +1 -1
  16. package/dist/payments/monetization-gate.js +39 -2
  17. package/dist/payments/monetization-gate.js.map +1 -1
  18. package/dist/payments/prepaid-credit-store.d.ts +111 -0
  19. package/dist/payments/prepaid-credit-store.d.ts.map +1 -0
  20. package/dist/payments/prepaid-credit-store.js +230 -0
  21. package/dist/payments/prepaid-credit-store.js.map +1 -0
  22. package/dist/payments/pricing.d.ts.map +1 -1
  23. package/dist/payments/pricing.js +40 -1
  24. package/dist/payments/pricing.js.map +1 -1
  25. package/dist/payments/schema-validation.d.ts +52 -0
  26. package/dist/payments/schema-validation.d.ts.map +1 -0
  27. package/dist/payments/schema-validation.js +112 -0
  28. package/dist/payments/schema-validation.js.map +1 -0
  29. package/dist/payments/x402-paid-call.d.ts +21 -0
  30. package/dist/payments/x402-paid-call.d.ts.map +1 -1
  31. package/dist/payments/x402-paid-call.js +108 -3
  32. package/dist/payments/x402-paid-call.js.map +1 -1
  33. package/dist/perps/adrena/adrena-builder-commodity.d.ts +63 -0
  34. package/dist/perps/adrena/adrena-builder-commodity.d.ts.map +1 -0
  35. package/dist/perps/adrena/adrena-builder-commodity.js +200 -0
  36. package/dist/perps/adrena/adrena-builder-commodity.js.map +1 -0
  37. package/dist/perps/adrena/adrena-builder-core.d.ts +319 -0
  38. package/dist/perps/adrena/adrena-builder-core.d.ts.map +1 -0
  39. package/dist/perps/adrena/adrena-builder-core.js +517 -0
  40. package/dist/perps/adrena/adrena-builder-core.js.map +1 -0
  41. package/dist/perps/adrena/adrena-builder-liquidity.d.ts +50 -0
  42. package/dist/perps/adrena/adrena-builder-liquidity.d.ts.map +1 -0
  43. package/dist/perps/adrena/adrena-builder-liquidity.js +196 -0
  44. package/dist/perps/adrena/adrena-builder-liquidity.js.map +1 -0
  45. package/dist/perps/adrena/adrena-builder-staking.d.ts +57 -0
  46. package/dist/perps/adrena/adrena-builder-staking.d.ts.map +1 -0
  47. package/dist/perps/adrena/adrena-builder-staking.js +368 -0
  48. package/dist/perps/adrena/adrena-builder-staking.js.map +1 -0
  49. package/dist/perps/adrena/adrena-builder-trading.d.ts +160 -0
  50. package/dist/perps/adrena/adrena-builder-trading.d.ts.map +1 -0
  51. package/dist/perps/adrena/adrena-builder-trading.js +835 -0
  52. package/dist/perps/adrena/adrena-builder-trading.js.map +1 -0
  53. package/dist/perps/adrena/adrena-builder.d.ts +22 -0
  54. package/dist/perps/adrena/adrena-builder.d.ts.map +1 -0
  55. package/dist/perps/adrena/adrena-builder.js +22 -0
  56. package/dist/perps/adrena/adrena-builder.js.map +1 -0
  57. package/dist/perps/adrena/adrena-constants.d.ts +163 -0
  58. package/dist/perps/adrena/adrena-constants.d.ts.map +1 -0
  59. package/dist/perps/adrena/adrena-constants.js +122 -0
  60. package/dist/perps/adrena/adrena-constants.js.map +1 -0
  61. package/dist/perps/adrena/adrena-data-api.d.ts +180 -0
  62. package/dist/perps/adrena/adrena-data-api.d.ts.map +1 -0
  63. package/dist/perps/adrena/adrena-data-api.js +169 -0
  64. package/dist/perps/adrena/adrena-data-api.js.map +1 -0
  65. package/dist/perps/adrena/adrena-idl.d.ts +15084 -0
  66. package/dist/perps/adrena/adrena-idl.d.ts.map +1 -0
  67. package/dist/perps/adrena/adrena-idl.js +29903 -0
  68. package/dist/perps/adrena/adrena-idl.js.map +1 -0
  69. package/dist/perps/adrena/adrena-pda.d.ts +147 -0
  70. package/dist/perps/adrena/adrena-pda.d.ts.map +1 -0
  71. package/dist/perps/adrena/adrena-pda.js +211 -0
  72. package/dist/perps/adrena/adrena-pda.js.map +1 -0
  73. package/dist/perps/adrena/index.d.ts +12 -0
  74. package/dist/perps/adrena/index.d.ts.map +1 -0
  75. package/dist/perps/adrena/index.js +12 -0
  76. package/dist/perps/adrena/index.js.map +1 -0
  77. package/dist/perps/chart-indicators.d.ts +27 -0
  78. package/dist/perps/chart-indicators.d.ts.map +1 -0
  79. package/dist/perps/chart-indicators.js +345 -0
  80. package/dist/perps/chart-indicators.js.map +1 -0
  81. package/dist/perps/chart-tools.d.ts +45 -0
  82. package/dist/perps/chart-tools.d.ts.map +1 -0
  83. package/dist/perps/chart-tools.js +341 -0
  84. package/dist/perps/chart-tools.js.map +1 -0
  85. package/dist/perps/perp-analytics-tools.d.ts +20 -0
  86. package/dist/perps/perp-analytics-tools.d.ts.map +1 -0
  87. package/dist/perps/perp-analytics-tools.js +868 -0
  88. package/dist/perps/perp-analytics-tools.js.map +1 -0
  89. package/dist/perps/perp-constants.d.ts +362 -0
  90. package/dist/perps/perp-constants.d.ts.map +1 -0
  91. package/dist/perps/perp-constants.js +210 -0
  92. package/dist/perps/perp-constants.js.map +1 -0
  93. package/dist/perps/perp-decoders.d.ts +47 -0
  94. package/dist/perps/perp-decoders.d.ts.map +1 -0
  95. package/dist/perps/perp-decoders.js +332 -0
  96. package/dist/perps/perp-decoders.js.map +1 -0
  97. package/dist/policy/policy-engine.d.ts +42 -0
  98. package/dist/policy/policy-engine.d.ts.map +1 -1
  99. package/dist/policy/policy-engine.js +43 -0
  100. package/dist/policy/policy-engine.js.map +1 -1
  101. package/dist/premium/activation-manager.d.ts.map +1 -1
  102. package/dist/premium/activation-manager.js +20 -2
  103. package/dist/premium/activation-manager.js.map +1 -1
  104. package/dist/prompts/context/sap-agent-context.prompt.js +15 -1
  105. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  106. package/dist/server/server-metadata.d.ts +15 -0
  107. package/dist/server/server-metadata.d.ts.map +1 -1
  108. package/dist/server/server-metadata.js +16 -1
  109. package/dist/server/server-metadata.js.map +1 -1
  110. package/dist/solana/ata-utils.d.ts +39 -0
  111. package/dist/solana/ata-utils.d.ts.map +1 -0
  112. package/dist/solana/ata-utils.js +49 -0
  113. package/dist/solana/ata-utils.js.map +1 -0
  114. package/dist/strategies/trade-journal.d.ts +78 -0
  115. package/dist/strategies/trade-journal.d.ts.map +1 -0
  116. package/dist/strategies/trade-journal.js +92 -0
  117. package/dist/strategies/trade-journal.js.map +1 -0
  118. package/dist/tools/adrena/adrena-commodity-tools.d.ts +15 -0
  119. package/dist/tools/adrena/adrena-commodity-tools.d.ts.map +1 -0
  120. package/dist/tools/adrena/adrena-commodity-tools.js +137 -0
  121. package/dist/tools/adrena/adrena-commodity-tools.js.map +1 -0
  122. package/dist/tools/adrena/adrena-data-tools.d.ts +23 -0
  123. package/dist/tools/adrena/adrena-data-tools.d.ts.map +1 -0
  124. package/dist/tools/adrena/adrena-data-tools.js +437 -0
  125. package/dist/tools/adrena/adrena-data-tools.js.map +1 -0
  126. package/dist/tools/adrena/adrena-helpers.d.ts +46 -0
  127. package/dist/tools/adrena/adrena-helpers.d.ts.map +1 -0
  128. package/dist/tools/adrena/adrena-helpers.js +41 -0
  129. package/dist/tools/adrena/adrena-helpers.js.map +1 -0
  130. package/dist/tools/adrena/adrena-index.d.ts +20 -0
  131. package/dist/tools/adrena/adrena-index.d.ts.map +1 -0
  132. package/dist/tools/adrena/adrena-index.js +75 -0
  133. package/dist/tools/adrena/adrena-index.js.map +1 -0
  134. package/dist/tools/adrena/adrena-limit-order-tools.d.ts +22 -0
  135. package/dist/tools/adrena/adrena-limit-order-tools.d.ts.map +1 -0
  136. package/dist/tools/adrena/adrena-limit-order-tools.js +91 -0
  137. package/dist/tools/adrena/adrena-limit-order-tools.js.map +1 -0
  138. package/dist/tools/adrena/adrena-liquidity-tools.d.ts +15 -0
  139. package/dist/tools/adrena/adrena-liquidity-tools.d.ts.map +1 -0
  140. package/dist/tools/adrena/adrena-liquidity-tools.js +108 -0
  141. package/dist/tools/adrena/adrena-liquidity-tools.js.map +1 -0
  142. package/dist/tools/adrena/adrena-snapshot-tools.d.ts +42 -0
  143. package/dist/tools/adrena/adrena-snapshot-tools.d.ts.map +1 -0
  144. package/dist/tools/adrena/adrena-snapshot-tools.js +124 -0
  145. package/dist/tools/adrena/adrena-snapshot-tools.js.map +1 -0
  146. package/dist/tools/adrena/adrena-staking-tools.d.ts +15 -0
  147. package/dist/tools/adrena/adrena-staking-tools.d.ts.map +1 -0
  148. package/dist/tools/adrena/adrena-staking-tools.js +139 -0
  149. package/dist/tools/adrena/adrena-staking-tools.js.map +1 -0
  150. package/dist/tools/adrena/adrena-trading-tools.d.ts +78 -0
  151. package/dist/tools/adrena/adrena-trading-tools.d.ts.map +1 -0
  152. package/dist/tools/adrena/adrena-trading-tools.js +556 -0
  153. package/dist/tools/adrena/adrena-trading-tools.js.map +1 -0
  154. package/dist/tools/adrena-tools.d.ts +2 -0
  155. package/dist/tools/adrena-tools.d.ts.map +1 -0
  156. package/dist/tools/adrena-tools.js +2 -0
  157. package/dist/tools/adrena-tools.js.map +1 -0
  158. package/dist/tools/client-sdk-tools.d.ts +8 -0
  159. package/dist/tools/client-sdk-tools.d.ts.map +1 -1
  160. package/dist/tools/client-sdk-tools.js +32 -7
  161. package/dist/tools/client-sdk-tools.js.map +1 -1
  162. package/dist/tools/memory-tools.d.ts.map +1 -1
  163. package/dist/tools/memory-tools.js +170 -0
  164. package/dist/tools/memory-tools.js.map +1 -1
  165. package/dist/tools/perp-tools.d.ts +6 -31
  166. package/dist/tools/perp-tools.d.ts.map +1 -1
  167. package/dist/tools/perp-tools.js +6 -1141
  168. package/dist/tools/perp-tools.js.map +1 -1
  169. package/dist/tools/premium-tools.d.ts.map +1 -1
  170. package/dist/tools/premium-tools.js +123 -5
  171. package/dist/tools/premium-tools.js.map +1 -1
  172. package/dist/tools/quick-context-tool.js +1 -0
  173. package/dist/tools/quick-context-tool.js.map +1 -1
  174. package/dist/tools/register-tools.d.ts.map +1 -1
  175. package/dist/tools/register-tools.js +4 -0
  176. package/dist/tools/register-tools.js.map +1 -1
  177. package/dist/tools/transaction-tools.d.ts +21 -1
  178. package/dist/tools/transaction-tools.d.ts.map +1 -1
  179. package/dist/tools/transaction-tools.js +114 -30
  180. package/dist/tools/transaction-tools.js.map +1 -1
  181. package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
  182. package/dist/tools/x402-paid-call-tool.js +288 -0
  183. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  184. package/docs/07_ENDPOINTS_AND_CLIENTS.md +1 -1
  185. package/docs/10_OPERATIONS_RELEASE_AND_PM2.md +54 -6
  186. package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
  187. package/docs/BRANCH_AND_CI.md +2 -2
  188. package/package.json +3 -2
  189. package/server.json +3 -3
  190. package/skills/sap-defi/SKILL.md +93 -22
  191. package/skills/sap-mcp/TOOL_REFERENCE.md +39 -4
@@ -0,0 +1,196 @@
1
+ /**
2
+ * @name perps/adrena/adrena-builder-liquidity
3
+ * @description Liquidity and swap builders for the Adrena perps protocol.
4
+ *
5
+ * Contains builders for adding liquidity, removing liquidity, and swapping tokens.
6
+ *
7
+ * @module perps/adrena/adrena-builder-liquidity
8
+ */
9
+ import { PublicKey, } from '@solana/web3.js';
10
+ import { ADRENA_CUSTODIES, ADRENA_PROGRAM_ID, TOKEN_PROGRAM_ID, } from './adrena-constants.js';
11
+ import { deriveCortexPda, deriveOraclePda, deriveTransferAuthorityPda, deriveLpTokenMintPda, deriveStakingPda, deriveAta, } from './adrena-pda.js';
12
+ import { toBN, getPoolPublicKey, getCustodyPublicKey, getMintPublicKey, readCustodyTokenAccount, getWalletTokenBalances, checkSufficientBalance, createAdrenaProgram, buildInstruction, serializeUnsignedTx, buildResult, } from './adrena-builder-core.js';
13
+ // ─── Liquidity & Swap Builders ──────────────────────────────────────────────────
14
+ /**
15
+ * @name buildAddLiquidity
16
+ * @description Build an unsigned transaction to add liquidity to an Adrena pool.
17
+ *
18
+ * @param connection — Solana RPC connection.
19
+ * @param owner — Liquidity provider and fee payer.
20
+ * @param collateralToken — Collateral token to deposit.
21
+ * @param amountIn — Amount in human-readable units.
22
+ * @param minLpAmountOut — Minimum LP tokens to receive (0 for no slippage protection).
23
+ * @param poolName — Pool to add liquidity to.
24
+ * @returns Unsigned transaction result.
25
+ */
26
+ export async function buildAddLiquidity(connection, owner, collateralToken, amountIn, minLpAmountOut = 0n, poolName = 'main-pool') {
27
+ const program = createAdrenaProgram(connection);
28
+ const pool = getPoolPublicKey(poolName);
29
+ const custody = getCustodyPublicKey(collateralToken, poolName);
30
+ const cortex = deriveCortexPda();
31
+ const oracle = deriveOraclePda();
32
+ const transferAuthority = deriveTransferAuthorityPda();
33
+ const lpTokenMint = deriveLpTokenMintPda(pool);
34
+ const lpStaking = deriveStakingPda(lpTokenMint);
35
+ const custodyTokenAccount = await readCustodyTokenAccount(connection, custody);
36
+ const lpTokenAccount = deriveAta(owner, lpTokenMint);
37
+ const fundingAccount = deriveAta(owner, getMintPublicKey(collateralToken));
38
+ const amountRaw = BigInt(Math.floor(amountIn * Math.pow(10, ADRENA_CUSTODIES[collateralToken.toUpperCase()].decimals)));
39
+ const ix = await buildInstruction(program, 'addLiquidity', [
40
+ {
41
+ amountIn: toBN(amountRaw),
42
+ minLpAmountOut: toBN(minLpAmountOut),
43
+ oraclePrices: null,
44
+ multiOraclePrices: null,
45
+ },
46
+ ], {
47
+ owner,
48
+ fundingAccount,
49
+ lpTokenAccount,
50
+ transferAuthority,
51
+ lpStaking,
52
+ cortex,
53
+ pool,
54
+ custody,
55
+ oracle,
56
+ custodyTokenAccount,
57
+ lpTokenMint,
58
+ tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
59
+ adrenaProgram: new PublicKey(ADRENA_PROGRAM_ID),
60
+ });
61
+ const _serializeResult = await serializeUnsignedTx(connection, owner, [ix]);
62
+ const transactionBase64 = _serializeResult.transactionBase64;
63
+ // Pre-flight balance check.
64
+ const balanceCheck = await checkSufficientBalance(connection, owner, collateralToken, amountIn);
65
+ const warning = !balanceCheck.sufficient
66
+ ? `Insufficient ${collateralToken.toUpperCase()} balance: need ${amountIn}, have ${balanceCheck.availableBalance} (shortfall: ${balanceCheck.shortfall}). The transaction will fail on-chain.`
67
+ : !balanceCheck.solSufficientForFees
68
+ ? `Insufficient SOL for transaction fees: have ${balanceCheck.solBalance} SOL, need ~0.005 SOL.`
69
+ : undefined;
70
+ return buildResult(transactionBase64, owner, ['addLiquidity'], undefined, balanceCheck, warning);
71
+ }
72
+ /**
73
+ * @name buildRemoveLiquidity
74
+ * @description Build an unsigned transaction to remove liquidity from an Adrena pool.
75
+ *
76
+ * @param connection — Solana RPC connection.
77
+ * @param owner — Liquidity provider and fee payer.
78
+ * @param collateralToken — Collateral token to receive.
79
+ * @param lpAmountIn — LP tokens to burn (raw, 6 decimals).
80
+ * @param minAmountOut — Minimum collateral to receive (raw, 0 for no slippage protection).
81
+ * @param poolName — Pool to remove liquidity from.
82
+ * @returns Unsigned transaction result.
83
+ */
84
+ export async function buildRemoveLiquidity(connection, owner, collateralToken, lpAmountIn, minAmountOut = 0n, poolName = 'main-pool') {
85
+ const program = createAdrenaProgram(connection);
86
+ const pool = getPoolPublicKey(poolName);
87
+ const custody = getCustodyPublicKey(collateralToken, poolName);
88
+ const cortex = deriveCortexPda();
89
+ const oracle = deriveOraclePda();
90
+ const transferAuthority = deriveTransferAuthorityPda();
91
+ const lpTokenMint = deriveLpTokenMintPda(pool);
92
+ const custodyTokenAccount = await readCustodyTokenAccount(connection, custody);
93
+ const lpTokenAccount = deriveAta(owner, lpTokenMint);
94
+ const receivingAccount = deriveAta(owner, getMintPublicKey(collateralToken));
95
+ const ix = await buildInstruction(program, 'removeLiquidity', [
96
+ {
97
+ lpAmountIn: toBN(lpAmountIn),
98
+ minAmountOut: toBN(minAmountOut),
99
+ oraclePrices: null,
100
+ multiOraclePrices: null,
101
+ },
102
+ ], {
103
+ owner,
104
+ receivingAccount,
105
+ lpTokenAccount,
106
+ transferAuthority,
107
+ cortex,
108
+ pool,
109
+ custody,
110
+ oracle,
111
+ custodyTokenAccount,
112
+ lpTokenMint,
113
+ tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
114
+ adrenaProgram: new PublicKey(ADRENA_PROGRAM_ID),
115
+ });
116
+ const _serializeResult = await serializeUnsignedTx(connection, owner, [ix]);
117
+ const transactionBase64 = _serializeResult.transactionBase64;
118
+ // Pre-flight: show balances and check SOL for fees (removeLiquidity burns LP tokens).
119
+ const balances = await getWalletTokenBalances(connection, owner);
120
+ const solBalance = balances.find(b => b.symbol === 'SOL')?.balance ?? 0;
121
+ const warning = solBalance < 0.005
122
+ ? `Insufficient SOL for transaction fees: have ${solBalance} SOL, need ~0.005 SOL.`
123
+ : undefined;
124
+ const balanceCheck = {
125
+ wallet: owner.toBase58(),
126
+ balances,
127
+ requiredToken: 'LP',
128
+ requiredAmount: Number(lpAmountIn),
129
+ availableBalance: 0,
130
+ sufficient: true,
131
+ shortfall: 0,
132
+ solBalance,
133
+ solSufficientForFees: solBalance >= 0.005,
134
+ };
135
+ return buildResult(transactionBase64, owner, ['removeLiquidity'], undefined, balanceCheck, warning);
136
+ }
137
+ /**
138
+ * @name buildSwap
139
+ * @description Build an unsigned transaction to swap tokens through an Adrena pool.
140
+ *
141
+ * @param connection — Solana RPC connection.
142
+ * @param owner — Swapper and fee payer.
143
+ * @param fromToken — Token to swap from.
144
+ * @param toToken — Token to swap to.
145
+ * @param amountIn — Amount in human-readable units.
146
+ * @param minAmountOut — Minimum amount to receive (raw, 0 for no slippage protection).
147
+ * @returns Unsigned transaction result.
148
+ */
149
+ export async function buildSwap(connection, owner, fromToken, toToken, amountIn, minAmountOut = 0n) {
150
+ const program = createAdrenaProgram(connection);
151
+ const pool = getPoolPublicKey('main-pool');
152
+ const dispensingCustody = getCustodyPublicKey(fromToken, 'main-pool');
153
+ const receivingCustody = getCustodyPublicKey(toToken, 'main-pool');
154
+ const cortex = deriveCortexPda();
155
+ const oracle = deriveOraclePda();
156
+ const transferAuthority = deriveTransferAuthorityPda();
157
+ const receivingCustodyTokenAccount = await readCustodyTokenAccount(connection, receivingCustody);
158
+ const dispensingCustodyTokenAccount = await readCustodyTokenAccount(connection, dispensingCustody);
159
+ const fundingAccount = deriveAta(owner, getMintPublicKey(fromToken));
160
+ const receivingAccount = deriveAta(owner, getMintPublicKey(toToken));
161
+ const amountRaw = BigInt(Math.floor(amountIn * Math.pow(10, ADRENA_CUSTODIES[fromToken.toUpperCase()].decimals)));
162
+ const ix = await buildInstruction(program, 'swap', [
163
+ {
164
+ amountIn: toBN(amountRaw),
165
+ minAmountOut: toBN(minAmountOut),
166
+ oraclePrices: null,
167
+ multiOraclePrices: null,
168
+ },
169
+ ], {
170
+ caller: owner,
171
+ owner,
172
+ fundingAccount,
173
+ receivingAccount,
174
+ transferAuthority,
175
+ cortex,
176
+ pool,
177
+ receivingCustody,
178
+ oracle,
179
+ receivingCustodyTokenAccount,
180
+ dispensingCustody,
181
+ dispensingCustodyTokenAccount,
182
+ tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
183
+ adrenaProgram: new PublicKey(ADRENA_PROGRAM_ID),
184
+ });
185
+ const _serializeResult = await serializeUnsignedTx(connection, owner, [ix]);
186
+ const transactionBase64 = _serializeResult.transactionBase64;
187
+ // Pre-flight balance check.
188
+ const balanceCheck = await checkSufficientBalance(connection, owner, fromToken, amountIn);
189
+ const warning = !balanceCheck.sufficient
190
+ ? `Insufficient ${fromToken.toUpperCase()} balance: need ${amountIn}, have ${balanceCheck.availableBalance} (shortfall: ${balanceCheck.shortfall}). The transaction will fail on-chain.`
191
+ : !balanceCheck.solSufficientForFees
192
+ ? `Insufficient SOL for transaction fees: have ${balanceCheck.solBalance} SOL, need ~0.005 SOL.`
193
+ : undefined;
194
+ return buildResult(transactionBase64, owner, ['swap'], undefined, balanceCheck, warning);
195
+ }
196
+ //# sourceMappingURL=adrena-builder-liquidity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrena-builder-liquidity.js","sourceRoot":"","sources":["../../../src/perps/adrena/adrena-builder-liquidity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @name perps/adrena/adrena-builder-staking
3
+ * @description Staking builders for the Adrena perps protocol.
4
+ *
5
+ * Contains builders for initializing user staking, adding/removing liquid stakes,
6
+ * adding locked stakes, and claiming staking rewards.
7
+ *
8
+ * @module perps/adrena/adrena-builder-staking
9
+ */
10
+ import { PublicKey, Connection } from '@solana/web3.js';
11
+ import { type UnsignedTransactionResult } from './adrena-builder-core.js';
12
+ /**
13
+ * @name buildInitUserStaking
14
+ * @description Build an unsigned transaction to initialize user staking account.
15
+ * @param connection — Solana RPC connection.
16
+ * @param owner — Staker and fee payer.
17
+ * @returns Unsigned transaction result.
18
+ */
19
+ export declare function buildInitUserStaking(connection: Connection, owner: PublicKey): Promise<UnsignedTransactionResult>;
20
+ /**
21
+ * @name buildAddLiquidStake
22
+ * @description Build an unsigned transaction to add a liquid stake (LP tokens).
23
+ * @param connection — Solana RPC connection.
24
+ * @param owner — Staker and fee payer.
25
+ * @param amount — Amount of LP tokens to stake (raw, 6 decimals).
26
+ * @returns Unsigned transaction result.
27
+ */
28
+ export declare function buildAddLiquidStake(connection: Connection, owner: PublicKey, amount: bigint): Promise<UnsignedTransactionResult>;
29
+ /**
30
+ * @name buildRemoveLiquidStake
31
+ * @description Build an unsigned transaction to remove a liquid stake.
32
+ * @param connection — Solana RPC connection.
33
+ * @param owner — Staker and fee payer.
34
+ * @param amount — Amount of staked LP tokens to withdraw (raw, 6 decimals).
35
+ * @returns Unsigned transaction result.
36
+ */
37
+ export declare function buildRemoveLiquidStake(connection: Connection, owner: PublicKey, amount: bigint): Promise<UnsignedTransactionResult>;
38
+ /**
39
+ * @name buildAddLockedStake
40
+ * @description Build an unsigned transaction to add a locked stake.
41
+ * @param connection — Solana RPC connection.
42
+ * @param owner — Staker and fee payer.
43
+ * @param amount — Amount of LP tokens to lock (raw, 6 decimals).
44
+ * @param lockedDays — Lock duration in days.
45
+ * @returns Unsigned transaction result.
46
+ */
47
+ export declare function buildAddLockedStake(connection: Connection, owner: PublicKey, amount: bigint, lockedDays: number): Promise<UnsignedTransactionResult>;
48
+ /**
49
+ * @name buildClaimStakes
50
+ * @description Build an unsigned transaction to claim staking rewards.
51
+ * @param connection — Solana RPC connection.
52
+ * @param owner — Staker and fee payer.
53
+ * @param lockedStakeIndexes — Optional array of locked stake indexes to claim.
54
+ * @returns Unsigned transaction result.
55
+ */
56
+ export declare function buildClaimStakes(connection: Connection, owner: PublicKey, lockedStakeIndexes: number[] | null): Promise<UnsignedTransactionResult>;
57
+ //# sourceMappingURL=adrena-builder-staking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrena-builder-staking.d.ts","sourceRoot":"","sources":["../../../src/perps/adrena/adrena-builder-staking.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,SAAS,EACT,UAAU,EACX,MAAM,iBAAiB,CAAC;AAsBzB,OAAO,EAEL,KAAK,yBAAyB,EAQ/B,MAAM,0BAA0B,CAAC;AAIlC;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,yBAAyB,CAAC,CAyDpC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC,CAuEpC;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC,CAuEpC;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,yBAAyB,CAAC,CA+DpC;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,GAClC,OAAO,CAAC,yBAAyB,CAAC,CAkEpC"}
@@ -0,0 +1,368 @@
1
+ /**
2
+ * @name perps/adrena/adrena-builder-staking
3
+ * @description Staking builders for the Adrena perps protocol.
4
+ *
5
+ * Contains builders for initializing user staking, adding/removing liquid stakes,
6
+ * adding locked stakes, and claiming staking rewards.
7
+ *
8
+ * @module perps/adrena/adrena-builder-staking
9
+ */
10
+ import { PublicKey, } from '@solana/web3.js';
11
+ import { ADRENA_FEE_REDISTRIBUTION_MINT, ADRENA_PROGRAM_ID, TOKEN_PROGRAM_ID, SYSTEM_PROGRAM_ID, } from './adrena-constants.js';
12
+ import { deriveCortexPda, deriveTransferAuthorityPda, deriveLpTokenMintPda, deriveStakingPda, deriveUserStakingPda, deriveGenesisLockPda, deriveLmTokenTreasuryPda, deriveLmTokenMintPda, deriveGovernanceTokenMintPda, deriveStakingStakedTokenVaultPda, deriveStakingRewardTokenVaultPda, deriveStakingLmRewardTokenVaultPda, deriveAta, } from './adrena-pda.js';
13
+ import { toBN, getPoolPublicKey, getWalletTokenBalances, createAdrenaProgram, buildInstruction, serializeUnsignedTx, buildResult, } from './adrena-builder-core.js';
14
+ // ─── Staking Builders ──────────────────────────────────────────────────────────
15
+ /**
16
+ * @name buildInitUserStaking
17
+ * @description Build an unsigned transaction to initialize user staking account.
18
+ * @param connection — Solana RPC connection.
19
+ * @param owner — Staker and fee payer.
20
+ * @returns Unsigned transaction result.
21
+ */
22
+ export async function buildInitUserStaking(connection, owner) {
23
+ const program = createAdrenaProgram(connection);
24
+ const pool = getPoolPublicKey('main-pool');
25
+ const cortex = deriveCortexPda();
26
+ const lpTokenMint = deriveLpTokenMintPda(pool);
27
+ const staking = deriveStakingPda(lpTokenMint);
28
+ const userStaking = deriveUserStakingPda(owner, staking);
29
+ const lmTokenMint = deriveLmTokenMintPda();
30
+ const feeRedistributionMint = new PublicKey(ADRENA_FEE_REDISTRIBUTION_MINT);
31
+ const rewardTokenAccount = deriveAta(owner, feeRedistributionMint);
32
+ const lmTokenAccount = deriveAta(owner, lmTokenMint);
33
+ const stakingRewardTokenVault = deriveStakingRewardTokenVaultPda(staking);
34
+ const stakingLmRewardTokenVault = deriveStakingLmRewardTokenVaultPda(staking);
35
+ const transferAuthority = deriveTransferAuthorityPda();
36
+ const ix = await buildInstruction(program, 'initUserStaking', [], {
37
+ caller: owner,
38
+ payer: owner,
39
+ owner,
40
+ rewardTokenAccount,
41
+ lmTokenAccount,
42
+ stakingRewardTokenVault,
43
+ stakingLmRewardTokenVault,
44
+ userStaking,
45
+ transferAuthority,
46
+ staking,
47
+ cortex,
48
+ pool,
49
+ lmTokenMint,
50
+ feeRedistributionMint,
51
+ adrenaProgram: new PublicKey(ADRENA_PROGRAM_ID),
52
+ systemProgram: new PublicKey(SYSTEM_PROGRAM_ID),
53
+ tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
54
+ });
55
+ const _serializeResult = await serializeUnsignedTx(connection, owner, [ix]);
56
+ const transactionBase64 = _serializeResult.transactionBase64;
57
+ // Pre-flight: check SOL for fees.
58
+ const balances = await getWalletTokenBalances(connection, owner);
59
+ const solBalance = balances.find(b => b.symbol === 'SOL')?.balance ?? 0;
60
+ const warning = solBalance < 0.005
61
+ ? `Insufficient SOL for transaction fees: have ${solBalance} SOL, need ~0.005 SOL.`
62
+ : undefined;
63
+ const balanceCheck = {
64
+ wallet: owner.toBase58(),
65
+ balances,
66
+ requiredToken: 'NONE',
67
+ requiredAmount: 0,
68
+ availableBalance: 0,
69
+ sufficient: true,
70
+ shortfall: 0,
71
+ solBalance,
72
+ solSufficientForFees: solBalance >= 0.005,
73
+ };
74
+ return buildResult(transactionBase64, owner, ['initUserStaking'], undefined, balanceCheck, warning);
75
+ }
76
+ /**
77
+ * @name buildAddLiquidStake
78
+ * @description Build an unsigned transaction to add a liquid stake (LP tokens).
79
+ * @param connection — Solana RPC connection.
80
+ * @param owner — Staker and fee payer.
81
+ * @param amount — Amount of LP tokens to stake (raw, 6 decimals).
82
+ * @returns Unsigned transaction result.
83
+ */
84
+ export async function buildAddLiquidStake(connection, owner, amount) {
85
+ const program = createAdrenaProgram(connection);
86
+ const pool = getPoolPublicKey('main-pool');
87
+ const cortex = deriveCortexPda();
88
+ const lpTokenMint = deriveLpTokenMintPda(pool);
89
+ const staking = deriveStakingPda(lpTokenMint);
90
+ const userStaking = deriveUserStakingPda(owner, staking);
91
+ const genesisLock = deriveGenesisLockPda(pool);
92
+ const lmTokenTreasury = deriveLmTokenTreasuryPda(cortex);
93
+ const lmTokenMint = deriveLmTokenMintPda();
94
+ const governanceTokenMint = deriveGovernanceTokenMintPda();
95
+ const feeRedistributionMint = new PublicKey(ADRENA_FEE_REDISTRIBUTION_MINT);
96
+ const transferAuthority = deriveTransferAuthorityPda();
97
+ const fundingAccount = deriveAta(owner, lpTokenMint);
98
+ const rewardTokenAccount = deriveAta(owner, feeRedistributionMint);
99
+ const lmTokenAccount = deriveAta(owner, lmTokenMint);
100
+ const stakingStakedTokenVault = deriveStakingStakedTokenVaultPda(staking);
101
+ const stakingRewardTokenVault = deriveStakingRewardTokenVaultPda(staking);
102
+ const stakingLmRewardTokenVault = deriveStakingLmRewardTokenVaultPda(staking);
103
+ const ix = await buildInstruction(program, 'addLiquidStake', [
104
+ { amount: toBN(amount) },
105
+ ], {
106
+ owner,
107
+ fundingAccount,
108
+ rewardTokenAccount,
109
+ lmTokenAccount,
110
+ stakingStakedTokenVault,
111
+ stakingRewardTokenVault,
112
+ stakingLmRewardTokenVault,
113
+ transferAuthority,
114
+ userStaking,
115
+ staking,
116
+ cortex,
117
+ pool,
118
+ genesisLock,
119
+ lmTokenTreasury,
120
+ governanceTokenMint,
121
+ feeRedistributionMint,
122
+ governanceRealm: PublicKey.default,
123
+ governanceRealmConfig: PublicKey.default,
124
+ governanceGoverningTokenHolding: PublicKey.default,
125
+ governanceGoverningTokenOwnerRecord: PublicKey.default,
126
+ governanceProgram: new PublicKey('GovER5Lthms3bLBqWub97yVrMmEogzX7xNjdXpPPCVZw'),
127
+ adrenaProgram: new PublicKey(ADRENA_PROGRAM_ID),
128
+ systemProgram: new PublicKey(SYSTEM_PROGRAM_ID),
129
+ tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
130
+ });
131
+ const _serializeResult = await serializeUnsignedTx(connection, owner, [ix]);
132
+ const transactionBase64 = _serializeResult.transactionBase64;
133
+ // Pre-flight: check SOL for fees (LP token balance is not in standard token mints).
134
+ const balances = await getWalletTokenBalances(connection, owner);
135
+ const solBalance = balances.find(b => b.symbol === 'SOL')?.balance ?? 0;
136
+ const warning = solBalance < 0.005
137
+ ? `Insufficient SOL for transaction fees: have ${solBalance} SOL, need ~0.005 SOL.`
138
+ : undefined;
139
+ const balanceCheck = {
140
+ wallet: owner.toBase58(),
141
+ balances,
142
+ requiredToken: 'LP',
143
+ requiredAmount: Number(amount),
144
+ availableBalance: 0,
145
+ sufficient: true,
146
+ shortfall: 0,
147
+ solBalance,
148
+ solSufficientForFees: solBalance >= 0.005,
149
+ };
150
+ return buildResult(transactionBase64, owner, ['addLiquidStake'], undefined, balanceCheck, warning);
151
+ }
152
+ /**
153
+ * @name buildRemoveLiquidStake
154
+ * @description Build an unsigned transaction to remove a liquid stake.
155
+ * @param connection — Solana RPC connection.
156
+ * @param owner — Staker and fee payer.
157
+ * @param amount — Amount of staked LP tokens to withdraw (raw, 6 decimals).
158
+ * @returns Unsigned transaction result.
159
+ */
160
+ export async function buildRemoveLiquidStake(connection, owner, amount) {
161
+ const program = createAdrenaProgram(connection);
162
+ const pool = getPoolPublicKey('main-pool');
163
+ const cortex = deriveCortexPda();
164
+ const lpTokenMint = deriveLpTokenMintPda(pool);
165
+ const staking = deriveStakingPda(lpTokenMint);
166
+ const userStaking = deriveUserStakingPda(owner, staking);
167
+ const genesisLock = deriveGenesisLockPda(pool);
168
+ const lmTokenTreasury = deriveLmTokenTreasuryPda(cortex);
169
+ const lmTokenMint = deriveLmTokenMintPda();
170
+ const governanceTokenMint = deriveGovernanceTokenMintPda();
171
+ const feeRedistributionMint = new PublicKey(ADRENA_FEE_REDISTRIBUTION_MINT);
172
+ const transferAuthority = deriveTransferAuthorityPda();
173
+ const stakedTokenAccount = deriveAta(owner, lpTokenMint);
174
+ const lmTokenAccount = deriveAta(owner, lmTokenMint);
175
+ const rewardTokenAccount = deriveAta(owner, feeRedistributionMint);
176
+ const stakingStakedTokenVault = deriveStakingStakedTokenVaultPda(staking);
177
+ const stakingRewardTokenVault = deriveStakingRewardTokenVaultPda(staking);
178
+ const stakingLmRewardTokenVault = deriveStakingLmRewardTokenVaultPda(staking);
179
+ const ix = await buildInstruction(program, 'removeLiquidStake', [
180
+ { amount: toBN(amount) },
181
+ ], {
182
+ owner,
183
+ stakedTokenAccount,
184
+ lmTokenAccount,
185
+ rewardTokenAccount,
186
+ stakingStakedTokenVault,
187
+ stakingRewardTokenVault,
188
+ stakingLmRewardTokenVault,
189
+ transferAuthority,
190
+ userStaking,
191
+ staking,
192
+ cortex,
193
+ pool,
194
+ genesisLock,
195
+ lmTokenTreasury,
196
+ governanceTokenMint,
197
+ feeRedistributionMint,
198
+ governanceRealm: PublicKey.default,
199
+ governanceRealmConfig: PublicKey.default,
200
+ governanceGoverningTokenHolding: PublicKey.default,
201
+ governanceGoverningTokenOwnerRecord: PublicKey.default,
202
+ governanceProgram: new PublicKey('GovER5Lthms3bLBqWub97yVrMmEogzX7xNjdXpPPCVZw'),
203
+ adrenaProgram: new PublicKey(ADRENA_PROGRAM_ID),
204
+ systemProgram: new PublicKey(SYSTEM_PROGRAM_ID),
205
+ tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
206
+ });
207
+ const _serializeResult = await serializeUnsignedTx(connection, owner, [ix]);
208
+ const transactionBase64 = _serializeResult.transactionBase64;
209
+ // Pre-flight: check SOL for fees.
210
+ const balances = await getWalletTokenBalances(connection, owner);
211
+ const solBalance = balances.find(b => b.symbol === 'SOL')?.balance ?? 0;
212
+ const warning = solBalance < 0.005
213
+ ? `Insufficient SOL for transaction fees: have ${solBalance} SOL, need ~0.005 SOL.`
214
+ : undefined;
215
+ const balanceCheck = {
216
+ wallet: owner.toBase58(),
217
+ balances,
218
+ requiredToken: 'LP',
219
+ requiredAmount: Number(amount),
220
+ availableBalance: 0,
221
+ sufficient: true,
222
+ shortfall: 0,
223
+ solBalance,
224
+ solSufficientForFees: solBalance >= 0.005,
225
+ };
226
+ return buildResult(transactionBase64, owner, ['removeLiquidStake'], undefined, balanceCheck, warning);
227
+ }
228
+ /**
229
+ * @name buildAddLockedStake
230
+ * @description Build an unsigned transaction to add a locked stake.
231
+ * @param connection — Solana RPC connection.
232
+ * @param owner — Staker and fee payer.
233
+ * @param amount — Amount of LP tokens to lock (raw, 6 decimals).
234
+ * @param lockedDays — Lock duration in days.
235
+ * @returns Unsigned transaction result.
236
+ */
237
+ export async function buildAddLockedStake(connection, owner, amount, lockedDays) {
238
+ const program = createAdrenaProgram(connection);
239
+ const pool = getPoolPublicKey('main-pool');
240
+ const cortex = deriveCortexPda();
241
+ const lpTokenMint = deriveLpTokenMintPda(pool);
242
+ const staking = deriveStakingPda(lpTokenMint);
243
+ const userStaking = deriveUserStakingPda(owner, staking);
244
+ const lmTokenMint = deriveLmTokenMintPda();
245
+ const governanceTokenMint = deriveGovernanceTokenMintPda();
246
+ const feeRedistributionMint = new PublicKey(ADRENA_FEE_REDISTRIBUTION_MINT);
247
+ const transferAuthority = deriveTransferAuthorityPda();
248
+ const fundingAccount = deriveAta(owner, lpTokenMint);
249
+ const rewardTokenAccount = deriveAta(owner, feeRedistributionMint);
250
+ const stakingStakedTokenVault = deriveStakingStakedTokenVaultPda(staking);
251
+ const stakingRewardTokenVault = deriveStakingRewardTokenVaultPda(staking);
252
+ const ix = await buildInstruction(program, 'addLockedStake', [
253
+ { amount: toBN(amount), lockedDays },
254
+ ], {
255
+ owner,
256
+ fundingAccount,
257
+ rewardTokenAccount,
258
+ stakingStakedTokenVault,
259
+ stakingRewardTokenVault,
260
+ transferAuthority,
261
+ userStaking,
262
+ staking,
263
+ cortex,
264
+ lmTokenMint,
265
+ governanceTokenMint,
266
+ feeRedistributionMint,
267
+ governanceRealm: PublicKey.default,
268
+ governanceRealmConfig: PublicKey.default,
269
+ governanceGoverningTokenHolding: PublicKey.default,
270
+ governanceGoverningTokenOwnerRecord: PublicKey.default,
271
+ governanceProgram: new PublicKey('GovER5Lthms3bLBqWub97yVrMmEogzX7xNjdXpPPCVZw'),
272
+ adrenaProgram: new PublicKey(ADRENA_PROGRAM_ID),
273
+ systemProgram: new PublicKey(SYSTEM_PROGRAM_ID),
274
+ tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
275
+ });
276
+ const _serializeResult = await serializeUnsignedTx(connection, owner, [ix]);
277
+ const transactionBase64 = _serializeResult.transactionBase64;
278
+ // Pre-flight: check SOL for fees.
279
+ const balances = await getWalletTokenBalances(connection, owner);
280
+ const solBalance = balances.find(b => b.symbol === 'SOL')?.balance ?? 0;
281
+ const warning = solBalance < 0.005
282
+ ? `Insufficient SOL for transaction fees: have ${solBalance} SOL, need ~0.005 SOL.`
283
+ : undefined;
284
+ const balanceCheck = {
285
+ wallet: owner.toBase58(),
286
+ balances,
287
+ requiredToken: 'LP',
288
+ requiredAmount: Number(amount),
289
+ availableBalance: 0,
290
+ sufficient: true,
291
+ shortfall: 0,
292
+ solBalance,
293
+ solSufficientForFees: solBalance >= 0.005,
294
+ };
295
+ return buildResult(transactionBase64, owner, ['addLockedStake'], undefined, balanceCheck, warning);
296
+ }
297
+ /**
298
+ * @name buildClaimStakes
299
+ * @description Build an unsigned transaction to claim staking rewards.
300
+ * @param connection — Solana RPC connection.
301
+ * @param owner — Staker and fee payer.
302
+ * @param lockedStakeIndexes — Optional array of locked stake indexes to claim.
303
+ * @returns Unsigned transaction result.
304
+ */
305
+ export async function buildClaimStakes(connection, owner, lockedStakeIndexes) {
306
+ const program = createAdrenaProgram(connection);
307
+ const pool = getPoolPublicKey('main-pool');
308
+ const cortex = deriveCortexPda();
309
+ const lpTokenMint = deriveLpTokenMintPda(pool);
310
+ const staking = deriveStakingPda(lpTokenMint);
311
+ const userStaking = deriveUserStakingPda(owner, staking);
312
+ const genesisLock = deriveGenesisLockPda(pool);
313
+ const lmTokenTreasury = deriveLmTokenTreasuryPda(cortex);
314
+ const lmTokenMint = deriveLmTokenMintPda();
315
+ const feeRedistributionMint = new PublicKey(ADRENA_FEE_REDISTRIBUTION_MINT);
316
+ const transferAuthority = deriveTransferAuthorityPda();
317
+ const rewardTokenAccount = deriveAta(owner, feeRedistributionMint);
318
+ const lmTokenAccount = deriveAta(owner, lmTokenMint);
319
+ const stakingRewardTokenVault = deriveStakingRewardTokenVaultPda(staking);
320
+ const stakingLmRewardTokenVault = deriveStakingLmRewardTokenVaultPda(staking);
321
+ const ix = await buildInstruction(program, 'claimStakes', [
322
+ {
323
+ lockedStakeIndexes: lockedStakeIndexes
324
+ ? Buffer.from(lockedStakeIndexes.flatMap((i) => [i & 0xff, (i >> 8) & 0xff, (i >> 16) & 0xff, (i >> 24) & 0xff]))
325
+ : null,
326
+ },
327
+ ], {
328
+ caller: owner,
329
+ payer: owner,
330
+ owner,
331
+ rewardTokenAccount,
332
+ lmTokenAccount,
333
+ stakingRewardTokenVault,
334
+ stakingLmRewardTokenVault,
335
+ transferAuthority,
336
+ userStaking,
337
+ staking,
338
+ cortex,
339
+ pool,
340
+ genesisLock,
341
+ lmTokenTreasury,
342
+ feeRedistributionMint,
343
+ adrenaProgram: new PublicKey(ADRENA_PROGRAM_ID),
344
+ systemProgram: new PublicKey(SYSTEM_PROGRAM_ID),
345
+ tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
346
+ });
347
+ const _serializeResult = await serializeUnsignedTx(connection, owner, [ix]);
348
+ const transactionBase64 = _serializeResult.transactionBase64;
349
+ // Pre-flight: check SOL for fees.
350
+ const balances = await getWalletTokenBalances(connection, owner);
351
+ const solBalance = balances.find(b => b.symbol === 'SOL')?.balance ?? 0;
352
+ const warning = solBalance < 0.005
353
+ ? `Insufficient SOL for transaction fees: have ${solBalance} SOL, need ~0.005 SOL.`
354
+ : undefined;
355
+ const balanceCheck = {
356
+ wallet: owner.toBase58(),
357
+ balances,
358
+ requiredToken: 'NONE',
359
+ requiredAmount: 0,
360
+ availableBalance: 0,
361
+ sufficient: true,
362
+ shortfall: 0,
363
+ solBalance,
364
+ solSufficientForFees: solBalance >= 0.005,
365
+ };
366
+ return buildResult(transactionBase64, owner, ['claimStakes'], undefined, balanceCheck, warning);
367
+ }
368
+ //# sourceMappingURL=adrena-builder-staking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrena-builder-staking.js","sourceRoot":"","sources":["../../../src/perps/adrena/adrena-builder-staking.ts"],"names":[],"mappings":"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"}