@elemental-stv-core/sdk 0.1.1 → 0.3.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 (131) hide show
  1. package/dist/elemental-lend/accounts.d.ts +4 -1
  2. package/dist/elemental-lend/accounts.d.ts.map +1 -1
  3. package/dist/elemental-lend/accounts.js +34 -0
  4. package/dist/elemental-lend/accounts.js.map +1 -1
  5. package/dist/elemental-lend/constants.d.ts +5 -0
  6. package/dist/elemental-lend/constants.d.ts.map +1 -1
  7. package/dist/elemental-lend/constants.js +9 -1
  8. package/dist/elemental-lend/constants.js.map +1 -1
  9. package/dist/elemental-lend/index.d.ts +2 -0
  10. package/dist/elemental-lend/index.d.ts.map +1 -1
  11. package/dist/elemental-lend/index.js +2 -0
  12. package/dist/elemental-lend/index.js.map +1 -1
  13. package/dist/elemental-lend/instructions.d.ts +24 -4
  14. package/dist/elemental-lend/instructions.d.ts.map +1 -1
  15. package/dist/elemental-lend/instructions.js +49 -12
  16. package/dist/elemental-lend/instructions.js.map +1 -1
  17. package/dist/elemental-lend/jupiter-lend.d.ts +36 -0
  18. package/dist/elemental-lend/jupiter-lend.d.ts.map +1 -1
  19. package/dist/elemental-lend/jupiter-lend.js +94 -1
  20. package/dist/elemental-lend/jupiter-lend.js.map +1 -1
  21. package/dist/elemental-lend/kamino-vault.d.ts +173 -0
  22. package/dist/elemental-lend/kamino-vault.d.ts.map +1 -0
  23. package/dist/elemental-lend/kamino-vault.js +460 -0
  24. package/dist/elemental-lend/kamino-vault.js.map +1 -0
  25. package/dist/elemental-lend/pda.d.ts +1 -0
  26. package/dist/elemental-lend/pda.d.ts.map +1 -1
  27. package/dist/elemental-lend/pda.js +4 -0
  28. package/dist/elemental-lend/pda.js.map +1 -1
  29. package/dist/elemental-lend/protocol-actions.d.ts +49 -0
  30. package/dist/elemental-lend/protocol-actions.d.ts.map +1 -0
  31. package/dist/elemental-lend/protocol-actions.js +228 -0
  32. package/dist/elemental-lend/protocol-actions.js.map +1 -0
  33. package/dist/elemental-lend/types.d.ts +17 -1
  34. package/dist/elemental-lend/types.d.ts.map +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2 -2
  38. package/dist/index.js.map +1 -1
  39. package/dist/jlpd-strategy/accounts.d.ts +17 -0
  40. package/dist/jlpd-strategy/accounts.d.ts.map +1 -0
  41. package/dist/{jlp-strategy → jlpd-strategy}/accounts.js +50 -28
  42. package/dist/jlpd-strategy/accounts.js.map +1 -0
  43. package/dist/jlpd-strategy/constants.d.ts +62 -0
  44. package/dist/jlpd-strategy/constants.d.ts.map +1 -0
  45. package/dist/jlpd-strategy/constants.js +86 -0
  46. package/dist/jlpd-strategy/constants.js.map +1 -0
  47. package/dist/jlpd-strategy/index.d.ts +9 -0
  48. package/dist/jlpd-strategy/index.d.ts.map +1 -0
  49. package/dist/{jlp-strategy → jlpd-strategy}/index.js +4 -0
  50. package/dist/jlpd-strategy/index.js.map +1 -0
  51. package/dist/jlpd-strategy/instructions.d.ts +41 -0
  52. package/dist/jlpd-strategy/instructions.d.ts.map +1 -0
  53. package/dist/jlpd-strategy/instructions.js +64 -0
  54. package/dist/jlpd-strategy/instructions.js.map +1 -0
  55. package/dist/jlpd-strategy/jlp-data.d.ts +73 -0
  56. package/dist/jlpd-strategy/jlp-data.d.ts.map +1 -0
  57. package/dist/jlpd-strategy/jlp-data.js +406 -0
  58. package/dist/jlpd-strategy/jlp-data.js.map +1 -0
  59. package/dist/jlpd-strategy/pda.d.ts +8 -0
  60. package/dist/jlpd-strategy/pda.d.ts.map +1 -0
  61. package/dist/{jlp-strategy → jlpd-strategy}/pda.js +10 -3
  62. package/dist/jlpd-strategy/pda.js.map +1 -0
  63. package/dist/jlpd-strategy/settle-yield.d.ts +54 -0
  64. package/dist/jlpd-strategy/settle-yield.d.ts.map +1 -0
  65. package/dist/jlpd-strategy/settle-yield.js +103 -0
  66. package/dist/jlpd-strategy/settle-yield.js.map +1 -0
  67. package/dist/jlpd-strategy/swap-jlp.d.ts +151 -0
  68. package/dist/jlpd-strategy/swap-jlp.d.ts.map +1 -0
  69. package/dist/jlpd-strategy/swap-jlp.js +429 -0
  70. package/dist/jlpd-strategy/swap-jlp.js.map +1 -0
  71. package/dist/jlpd-strategy/types.d.ts +56 -0
  72. package/dist/jlpd-strategy/types.d.ts.map +1 -0
  73. package/dist/{jlp-strategy → jlpd-strategy}/types.js.map +1 -1
  74. package/dist/p-stv-core/accounts.d.ts +4 -1
  75. package/dist/p-stv-core/accounts.d.ts.map +1 -1
  76. package/dist/p-stv-core/accounts.js +59 -22
  77. package/dist/p-stv-core/accounts.js.map +1 -1
  78. package/dist/p-stv-core/constants.d.ts +12 -1
  79. package/dist/p-stv-core/constants.d.ts.map +1 -1
  80. package/dist/p-stv-core/constants.js +16 -2
  81. package/dist/p-stv-core/constants.js.map +1 -1
  82. package/dist/p-stv-core/events.d.ts.map +1 -1
  83. package/dist/p-stv-core/events.js +21 -9
  84. package/dist/p-stv-core/events.js.map +1 -1
  85. package/dist/p-stv-core/index.d.ts +4 -0
  86. package/dist/p-stv-core/index.d.ts.map +1 -1
  87. package/dist/p-stv-core/index.js +4 -0
  88. package/dist/p-stv-core/index.js.map +1 -1
  89. package/dist/p-stv-core/instructions.d.ts +58 -1
  90. package/dist/p-stv-core/instructions.d.ts.map +1 -1
  91. package/dist/p-stv-core/instructions.js +93 -9
  92. package/dist/p-stv-core/instructions.js.map +1 -1
  93. package/dist/p-stv-core/pda.d.ts +1 -0
  94. package/dist/p-stv-core/pda.d.ts.map +1 -1
  95. package/dist/p-stv-core/pda.js +4 -0
  96. package/dist/p-stv-core/pda.js.map +1 -1
  97. package/dist/p-stv-core/prices.d.ts +21 -0
  98. package/dist/p-stv-core/prices.d.ts.map +1 -0
  99. package/dist/p-stv-core/prices.js +78 -0
  100. package/dist/p-stv-core/prices.js.map +1 -0
  101. package/dist/p-stv-core/remaining-accounts.d.ts +99 -0
  102. package/dist/p-stv-core/remaining-accounts.d.ts.map +1 -0
  103. package/dist/p-stv-core/remaining-accounts.js +262 -0
  104. package/dist/p-stv-core/remaining-accounts.js.map +1 -0
  105. package/dist/p-stv-core/send-tx.d.ts +56 -0
  106. package/dist/p-stv-core/send-tx.d.ts.map +1 -0
  107. package/dist/p-stv-core/send-tx.js +299 -0
  108. package/dist/p-stv-core/send-tx.js.map +1 -0
  109. package/dist/p-stv-core/sol-wrap.d.ts +35 -0
  110. package/dist/p-stv-core/sol-wrap.d.ts.map +1 -0
  111. package/dist/p-stv-core/sol-wrap.js +95 -0
  112. package/dist/p-stv-core/sol-wrap.js.map +1 -0
  113. package/dist/p-stv-core/types.d.ts +35 -4
  114. package/dist/p-stv-core/types.d.ts.map +1 -1
  115. package/package.json +5 -5
  116. package/dist/jlp-strategy/accounts.d.ts +0 -11
  117. package/dist/jlp-strategy/accounts.d.ts.map +0 -1
  118. package/dist/jlp-strategy/accounts.js.map +0 -1
  119. package/dist/jlp-strategy/constants.d.ts +0 -36
  120. package/dist/jlp-strategy/constants.d.ts.map +0 -1
  121. package/dist/jlp-strategy/constants.js +0 -47
  122. package/dist/jlp-strategy/constants.js.map +0 -1
  123. package/dist/jlp-strategy/index.d.ts +0 -5
  124. package/dist/jlp-strategy/index.d.ts.map +0 -1
  125. package/dist/jlp-strategy/index.js.map +0 -1
  126. package/dist/jlp-strategy/pda.d.ts +0 -5
  127. package/dist/jlp-strategy/pda.d.ts.map +0 -1
  128. package/dist/jlp-strategy/pda.js.map +0 -1
  129. package/dist/jlp-strategy/types.d.ts +0 -25
  130. package/dist/jlp-strategy/types.d.ts.map +0 -1
  131. /package/dist/{jlp-strategy → jlpd-strategy}/types.js +0 -0
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ /**
3
+ * Remaining accounts builders for p-STV Core instructions.
4
+ *
5
+ * These functions build the complete `remainingAccounts` arrays needed for
6
+ * deposit, claim_withdraw, and process_epoch instructions, pulling all the
7
+ * lend + protocol AUM + strategy pair + auto-route/unroute account building
8
+ * logic out of the frontend and into the SDK.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.buildDepositContext = buildDepositContext;
12
+ exports.buildClaimWithdrawContext = buildClaimWithdrawContext;
13
+ exports.buildDepositToStrategyContext = buildDepositToStrategyContext;
14
+ exports.buildProcessEpochContext = buildProcessEpochContext;
15
+ const web3_js_1 = require("@solana/web3.js");
16
+ const pda_1 = require("../elemental-lend/pda");
17
+ const accounts_1 = require("../elemental-lend/accounts");
18
+ const jupiter_lend_1 = require("../elemental-lend/jupiter-lend");
19
+ const kamino_vault_1 = require("../elemental-lend/kamino-vault");
20
+ const spl_token_1 = require("@solana/spl-token");
21
+ // ---------------------------------------------------------------------------
22
+ // Helpers
23
+ // ---------------------------------------------------------------------------
24
+ const DEFAULT_PUBKEY = web3_js_1.PublicKey.default;
25
+ const TOKEN_PROGRAM = new web3_js_1.PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
26
+ const USDC_MINT = new web3_js_1.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
27
+ const STRATEGY_STATE_SEED = Buffer.from("strategy_state");
28
+ const POSITION_SEED = Buffer.from("position");
29
+ function isDefault(pubkey) {
30
+ return pubkey.equals(DEFAULT_PUBKEY);
31
+ }
32
+ /** Derive the ATA address (same logic as @solana/spl-token getAssociatedTokenAddressSync) */
33
+ function findAta(mint, owner, tokenProgram) {
34
+ const [ata] = web3_js_1.PublicKey.findProgramAddressSync([owner.toBuffer(), tokenProgram.toBuffer(), mint.toBuffer()], spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
35
+ return ata;
36
+ }
37
+ /**
38
+ * Build the 4 fixed lend accounts: [lendProgram, lendStrategyState, lendPosition, lendBaseAta]
39
+ */
40
+ function buildFixedLendAccounts(lendProgram, baseMint, stvAddress) {
41
+ const [lendStrategyState] = (0, pda_1.findStrategyStatePda)(baseMint, lendProgram);
42
+ const [lendPosition] = (0, pda_1.findStvPositionPda)(stvAddress, lendProgram);
43
+ const lendBaseAta = findAta(baseMint, lendStrategyState, TOKEN_PROGRAM);
44
+ return {
45
+ lendStrategyState,
46
+ accounts: [
47
+ { pubkey: lendProgram, isSigner: false, isWritable: false },
48
+ { pubkey: lendStrategyState, isSigner: false, isWritable: true },
49
+ { pubkey: lendPosition, isSigner: false, isWritable: true },
50
+ { pubkey: lendBaseAta, isSigner: false, isWritable: true },
51
+ ],
52
+ };
53
+ }
54
+ /**
55
+ * Build strategy pair accounts for NAV computation.
56
+ * For each active strategy: [strategy_state, stv_position, strategy_program (deduplicated)]
57
+ */
58
+ function buildStrategyPairAccounts(vault) {
59
+ const accounts = [];
60
+ if (vault.strategyCount === 0)
61
+ return accounts;
62
+ for (let i = 0; i < vault.strategyCount; i++) {
63
+ const strategyProgram = vault.strategies[i];
64
+ if (isDefault(strategyProgram))
65
+ continue;
66
+ const [stratState] = web3_js_1.PublicKey.findProgramAddressSync([STRATEGY_STATE_SEED, vault.baseMint.toBuffer()], strategyProgram);
67
+ const [stratPos] = web3_js_1.PublicKey.findProgramAddressSync([POSITION_SEED, vault.address.toBuffer()], strategyProgram);
68
+ accounts.push({ pubkey: stratState, isSigner: false, isWritable: true }, { pubkey: stratPos, isSigner: false, isWritable: true });
69
+ // Note: strategy program is NOT added to remaining_accounts.
70
+ // The on-chain code expects exactly 2 accounts per strategy (state + position).
71
+ // The strategy program resolves from the transaction's account list via invoke_signed.
72
+ }
73
+ return accounts;
74
+ }
75
+ /**
76
+ */
77
+ // ---------------------------------------------------------------------------
78
+ // Context Builders
79
+ // ---------------------------------------------------------------------------
80
+ /**
81
+ * Build the complete remaining_accounts for a deposit instruction.
82
+ *
83
+ * Layout: [4 lend, N protocol_aum, M*2+P strategy_pairs, K auto_route]
84
+ *
85
+ * - If lend is active, derives lend PDAs and fetches protocol AUM accounts
86
+ * - Builds strategy pair accounts for each active strategy
87
+ * - If USDC + Jupiter Lend registered, appends auto-route accounts
88
+ * - Checks for stale kVaults (returned in preInstructions once invest ix is available)
89
+ */
90
+ async function buildDepositContext(connection, vault, payer) {
91
+ const remainingAccounts = [];
92
+ const preInstructions = [];
93
+ let protocolAumCount = 0;
94
+ // 1. Lend accounts (if active)
95
+ if (!isDefault(vault.lendProgram)) {
96
+ const { accounts: lendAccounts, lendStrategyState } = buildFixedLendAccounts(vault.lendProgram, vault.baseMint, vault.address);
97
+ remainingAccounts.push(...lendAccounts);
98
+ // Protocol AUM accounts
99
+ const conn = connection;
100
+ try {
101
+ const lendState = await (0, accounts_1.fetchLendStrategyState)(conn, vault.baseMint, vault.lendProgram);
102
+ const protocolAccounts = await (0, accounts_1.buildProtocolAccountsForAum)(conn, lendState, lendStrategyState, TOKEN_PROGRAM);
103
+ protocolAumCount = protocolAccounts.length;
104
+ remainingAccounts.push(...protocolAccounts);
105
+ }
106
+ catch {
107
+ // If strategy state not found, skip protocol accounts
108
+ }
109
+ // Check kVault staleness — prepend invest ix if stale
110
+ try {
111
+ const conn = connection;
112
+ const lendState = await (0, accounts_1.fetchLendStrategyState)(conn, vault.baseMint, vault.lendProgram).catch(() => null);
113
+ if (lendState) {
114
+ const protocolKeys = lendState.protocols
115
+ .filter((p) => !isDefault(p));
116
+ // Need a payer for the invest ix — will be set by the caller
117
+ // Use PublicKey.default as placeholder; the caller replaces it
118
+ const investIxs = payer ? await (0, kamino_vault_1.buildKaminoInvestIxsIfStale)(conn, payer, vault.baseMint, protocolKeys) : [];
119
+ preInstructions.push(...investIxs);
120
+ }
121
+ }
122
+ catch {
123
+ // Skip if staleness check fails
124
+ }
125
+ }
126
+ // 2. Strategy pair accounts (2 per strategy: state + position)
127
+ const strategyAccounts = buildStrategyPairAccounts(vault);
128
+ remainingAccounts.push(...strategyAccounts);
129
+ // 3. Auto-route to Jupiter Lend (for any asset with a configured pool)
130
+ let autoRouteCount = 0;
131
+ const jupPool = jupiter_lend_1.JUP_LEND_POOLS[vault.baseMint.toBase58()];
132
+ if (!isDefault(vault.lendProgram) && jupPool) {
133
+ try {
134
+ const [lendSS] = (0, pda_1.findStrategyStatePda)(vault.baseMint, vault.lendProgram);
135
+ const strategyBaseAta = findAta(vault.baseMint, lendSS, TOKEN_PROGRAM);
136
+ const strategyFtokenAta = findAta(jupPool.fTokenMint, lendSS, TOKEN_PROGRAM);
137
+ const autoRouteAccounts = (0, jupiter_lend_1.buildJupLendAutoRouteAccounts)(jupPool, lendSS, strategyBaseAta, strategyFtokenAta);
138
+ autoRouteCount = autoRouteAccounts.length;
139
+ for (const acc of autoRouteAccounts) {
140
+ remainingAccounts.push({ ...acc, isSigner: false });
141
+ }
142
+ }
143
+ catch {
144
+ // Skip auto-route if account resolution fails
145
+ }
146
+ }
147
+ // 4. Strategy programs (after auto-route, for CPI resolution)
148
+ // These must be in the transaction but are NOT counted as auto-route or strategy pairs.
149
+ // The on-chain code uses auto_route_count to bound the auto-route slice.
150
+ const seenPrograms = new Set();
151
+ for (let i = 0; i < vault.strategyCount; i++) {
152
+ const prog = vault.strategies[i];
153
+ if (isDefault(prog))
154
+ continue;
155
+ const key = prog.toBase58();
156
+ if (!seenPrograms.has(key)) {
157
+ seenPrograms.add(key);
158
+ remainingAccounts.push({ pubkey: prog, isSigner: false, isWritable: false });
159
+ }
160
+ }
161
+ return { remainingAccounts, protocolAumCount, autoRouteCount, preInstructions };
162
+ }
163
+ /**
164
+ * Build the complete remaining_accounts for a claim_withdraw instruction.
165
+ *
166
+ * Layout: [4 lend, K auto_unroute]
167
+ *
168
+ * - If lend is active, derives lend PDAs
169
+ * - If USDC + Jupiter Lend, appends auto-unroute accounts
170
+ */
171
+ async function buildClaimWithdrawContext(connection, vault) {
172
+ const remainingAccounts = [];
173
+ const preInstructions = [];
174
+ let autoUnrouteCount = 0;
175
+ if (!isDefault(vault.lendProgram)) {
176
+ const { accounts: lendAccounts, lendStrategyState } = buildFixedLendAccounts(vault.lendProgram, vault.baseMint, vault.address);
177
+ remainingAccounts.push(...lendAccounts);
178
+ // Auto-unroute from Jupiter Lend (for any asset with a configured pool)
179
+ const jupPoolForUnroute = jupiter_lend_1.JUP_LEND_POOLS[vault.baseMint.toBase58()];
180
+ if (jupPoolForUnroute) {
181
+ try {
182
+ const lendBaseAta = findAta(vault.baseMint, lendStrategyState, TOKEN_PROGRAM);
183
+ const strategyFtokenAta = findAta(jupPoolForUnroute.fTokenMint, lendStrategyState, TOKEN_PROGRAM);
184
+ const autoUnrouteAccounts = (0, jupiter_lend_1.buildJupLendAutoUnrouteAccounts)(jupPoolForUnroute, lendStrategyState, strategyFtokenAta, lendBaseAta);
185
+ autoUnrouteCount = autoUnrouteAccounts.length;
186
+ remainingAccounts.push(...autoUnrouteAccounts.map(a => ({ ...a, isSigner: false })));
187
+ }
188
+ catch {
189
+ // Skip auto-unroute if resolution fails
190
+ }
191
+ }
192
+ }
193
+ return { remainingAccounts, autoUnrouteCount, preInstructions };
194
+ }
195
+ /**
196
+ * Build the complete remaining_accounts for a deposit_to_strategy instruction.
197
+ *
198
+ * Layout: [4 lend, K auto_unroute]
199
+ *
200
+ * Same as claim_withdraw: if lend is active, derives lend PDAs.
201
+ * If USDC + Jupiter Lend, appends auto-unroute accounts for unsweep.
202
+ *
203
+ * Note: no Kamino invest pre-instructions here — deposit_to_strategy unsweeps
204
+ * from the active protocol (Jupiter Lend for USDC), not Kamino.
205
+ */
206
+ async function buildDepositToStrategyContext(connection, vault) {
207
+ const remainingAccounts = [];
208
+ let autoUnrouteCount = 0;
209
+ if (!isDefault(vault.lendProgram)) {
210
+ const { accounts: lendAccounts, lendStrategyState } = buildFixedLendAccounts(vault.lendProgram, vault.baseMint, vault.address);
211
+ remainingAccounts.push(...lendAccounts);
212
+ // Auto-unroute from Jupiter Lend (for any asset with a configured pool)
213
+ const jupPoolForUnroute = jupiter_lend_1.JUP_LEND_POOLS[vault.baseMint.toBase58()];
214
+ if (jupPoolForUnroute) {
215
+ try {
216
+ const lendBaseAta = findAta(vault.baseMint, lendStrategyState, TOKEN_PROGRAM);
217
+ const strategyFtokenAta = findAta(jupPoolForUnroute.fTokenMint, lendStrategyState, TOKEN_PROGRAM);
218
+ const autoUnrouteAccounts = (0, jupiter_lend_1.buildJupLendAutoUnrouteAccounts)(jupPoolForUnroute, lendStrategyState, strategyFtokenAta, lendBaseAta);
219
+ autoUnrouteCount = autoUnrouteAccounts.length;
220
+ remainingAccounts.push(...autoUnrouteAccounts.map(a => ({ ...a, isSigner: false })));
221
+ }
222
+ catch {
223
+ // Skip auto-unroute if resolution fails
224
+ }
225
+ }
226
+ }
227
+ return { remainingAccounts, autoUnrouteCount, preInstructions: [] };
228
+ }
229
+ /**
230
+ * Build the complete remaining_accounts for a process_epoch instruction.
231
+ *
232
+ * @param phase - 'lockPps': needs lend + protocol AUM + strategy pairs for NAV.
233
+ * 'advance': empty remaining_accounts.
234
+ */
235
+ async function buildProcessEpochContext(connection, vault, phase) {
236
+ if (phase === "advance") {
237
+ return { remainingAccounts: [], protocolAumCount: 0, preInstructions: [] };
238
+ }
239
+ // lockPps: same as deposit (lend + protocol AUM + strategy pairs) but without auto-route
240
+ const remainingAccounts = [];
241
+ const preInstructions = [];
242
+ let protocolAumCount = 0;
243
+ if (!isDefault(vault.lendProgram)) {
244
+ const { accounts: lendAccounts, lendStrategyState } = buildFixedLendAccounts(vault.lendProgram, vault.baseMint, vault.address);
245
+ remainingAccounts.push(...lendAccounts);
246
+ const conn = connection;
247
+ try {
248
+ const lendState = await (0, accounts_1.fetchLendStrategyState)(conn, vault.baseMint, vault.lendProgram);
249
+ const protocolAccounts = await (0, accounts_1.buildProtocolAccountsForAum)(conn, lendState, lendStrategyState, TOKEN_PROGRAM);
250
+ protocolAumCount = protocolAccounts.length;
251
+ remainingAccounts.push(...protocolAccounts);
252
+ }
253
+ catch {
254
+ // Skip protocol accounts if unavailable
255
+ }
256
+ }
257
+ // Strategy pairs for NAV
258
+ const strategyAccounts = buildStrategyPairAccounts(vault);
259
+ remainingAccounts.push(...strategyAccounts);
260
+ return { remainingAccounts, protocolAumCount, preInstructions };
261
+ }
262
+ //# sourceMappingURL=remaining-accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remaining-accounts.js","sourceRoot":"","sources":["../../src/p-stv-core/remaining-accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Smart transaction builder and sender.
3
+ *
4
+ * Features:
5
+ * - Simulates to get exact compute units, adds 10% buffer
6
+ * - Fetches priority fee from Helius (medium tier)
7
+ * - Pre-checks size to decide legacy vs versioned tx with LUT (no double-sign)
8
+ * - Uses lastValidBlockHeight for reliable confirmation
9
+ * - Parallel fetches where possible
10
+ */
11
+ import { AddressLookupTableAccount, PublicKey, TransactionInstruction } from "@solana/web3.js";
12
+ /** @deprecated Use DEFAULT_LUT_ADDRESSES instead */
13
+ export declare const DEFAULT_LUT_ADDRESS: PublicKey;
14
+ /**
15
+ * Default LUTs for Elemental Vaults.
16
+ * These are fetched in parallel and merged for every versioned transaction.
17
+ *
18
+ * After creating new LUTs with `scripts/create-luts.ts --create`,
19
+ * replace these placeholder addresses with the real ones.
20
+ */
21
+ export declare const DEFAULT_LUT_ADDRESSES: {
22
+ /** Elemental Lend (Kamino + Jupiter Lend + protocol infra) */
23
+ lend: PublicKey;
24
+ /** p-STV Core (vaults, evMints, vault ATAs, config) */
25
+ stv: PublicKey;
26
+ /** JLPD Strategy (config, strategy states, positions, JLP, oracles) */
27
+ jlpd: PublicKey;
28
+ };
29
+ export type SignTransactionFn = (tx: any) => Promise<any>;
30
+ export type SmartTxConnection = any;
31
+ export interface SmartTxOptions {
32
+ /** Single LUT address (deprecated — use additionalLuts or DEFAULT_LUT_ADDRESSES) */
33
+ lutAddress?: PublicKey;
34
+ /** Additional pre-fetched ALTs to merge (e.g. Jupiter ALTs) */
35
+ additionalLuts?: AddressLookupTableAccount[];
36
+ /** Skip priority fee fetch (use 0) */
37
+ noPriorityFee?: boolean;
38
+ /** Custom compute unit limit (skips simulation) */
39
+ computeUnits?: number;
40
+ }
41
+ /**
42
+ * Build, simulate, and send a transaction with optimal compute budget.
43
+ *
44
+ * 1. Fetches blockhash + LUT + priority fee in parallel
45
+ * 2. Pre-checks serialized size to choose legacy vs versioned
46
+ * 3. Simulates to get exact CU, adds 10% buffer
47
+ * 4. Prepends ComputeBudget instructions
48
+ * 5. Signs and sends with lastValidBlockHeight confirmation
49
+ */
50
+ export declare function sendSmartTx(connection: SmartTxConnection, instructions: TransactionInstruction[], payer: PublicKey, signTransaction: SignTransactionFn, optionsOrLut?: PublicKey | SmartTxOptions): Promise<string>;
51
+ /**
52
+ * Simulate a transaction without signing. Returns true if simulation succeeds.
53
+ * Use this to gate combined-tx attempts before asking the wallet to sign.
54
+ */
55
+ export declare function simulateSmartTx(connection: SmartTxConnection, instructions: TransactionInstruction[], payer: PublicKey, optionsOrLut?: PublicKey | SmartTxOptions): Promise<boolean>;
56
+ //# sourceMappingURL=send-tx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-tx.d.ts","sourceRoot":"","sources":["../../src/p-stv-core/send-tx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,yBAAyB,EAGzB,SAAS,EAET,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AAEzB,oDAAoD;AACpD,eAAO,MAAM,mBAAmB,WAE/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;IAChC,8DAA8D;;IAE9D,uDAAuD;;IAEvD,uEAAuE;;CAExE,CAAC;AAeF,MAAM,MAAM,iBAAiB,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAG1D,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAEpC,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC7C,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,sBAAsB,EAAE,EACtC,KAAK,EAAE,SAAS,EAChB,eAAe,EAAE,iBAAiB,EAClC,YAAY,CAAC,EAAE,SAAS,GAAG,cAAc,GACxC,OAAO,CAAC,MAAM,CAAC,CA4FjB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,sBAAsB,EAAE,EACtC,KAAK,EAAE,SAAS,EAChB,YAAY,CAAC,EAAE,SAAS,GAAG,cAAc,GACxC,OAAO,CAAC,OAAO,CAAC,CAwClB"}
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ /**
3
+ * Smart transaction builder and sender.
4
+ *
5
+ * Features:
6
+ * - Simulates to get exact compute units, adds 10% buffer
7
+ * - Fetches priority fee from Helius (medium tier)
8
+ * - Pre-checks size to decide legacy vs versioned tx with LUT (no double-sign)
9
+ * - Uses lastValidBlockHeight for reliable confirmation
10
+ * - Parallel fetches where possible
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.DEFAULT_LUT_ADDRESSES = exports.DEFAULT_LUT_ADDRESS = void 0;
14
+ exports.sendSmartTx = sendSmartTx;
15
+ exports.simulateSmartTx = simulateSmartTx;
16
+ const web3_js_1 = require("@solana/web3.js");
17
+ /** @deprecated Use DEFAULT_LUT_ADDRESSES instead */
18
+ exports.DEFAULT_LUT_ADDRESS = new web3_js_1.PublicKey("CCkFGzcR7bMe1HZ9eRkpnu3Ts8EKXErfapbLtpcCAbQk");
19
+ /**
20
+ * Default LUTs for Elemental Vaults.
21
+ * These are fetched in parallel and merged for every versioned transaction.
22
+ *
23
+ * After creating new LUTs with `scripts/create-luts.ts --create`,
24
+ * replace these placeholder addresses with the real ones.
25
+ */
26
+ exports.DEFAULT_LUT_ADDRESSES = {
27
+ /** Elemental Lend (Kamino + Jupiter Lend + protocol infra) */
28
+ lend: new web3_js_1.PublicKey("AnZTDbTmVvCezuiFpTMUVrmELFJajT5c8GM3FBu115w7"),
29
+ /** p-STV Core (vaults, evMints, vault ATAs, config) */
30
+ stv: new web3_js_1.PublicKey("5fECdwxyeXL49PEKPK52RgwupuXvtND4X4hvjFKZ9J32"),
31
+ /** JLPD Strategy (config, strategy states, positions, JLP, oracles) */
32
+ jlpd: new web3_js_1.PublicKey("EMd8YPN5ak2Kht1aktgtWfjakJJQoh98KqCqA3tRTTAn"),
33
+ };
34
+ /** Max legacy transaction size */
35
+ const MAX_LEGACY_SIZE = 1232;
36
+ /** Compute unit buffer (10% above simulated) */
37
+ const CU_BUFFER_MULTIPLIER = 1.05;
38
+ /** Fallback compute units if simulation fails */
39
+ const FALLBACK_CU = 400000;
40
+ /** Fallback priority fee (micro-lamports per CU) if Helius is unavailable */
41
+ const FALLBACK_PRIORITY_FEE = 50000;
42
+ /**
43
+ * Build, simulate, and send a transaction with optimal compute budget.
44
+ *
45
+ * 1. Fetches blockhash + LUT + priority fee in parallel
46
+ * 2. Pre-checks serialized size to choose legacy vs versioned
47
+ * 3. Simulates to get exact CU, adds 10% buffer
48
+ * 4. Prepends ComputeBudget instructions
49
+ * 5. Signs and sends with lastValidBlockHeight confirmation
50
+ */
51
+ async function sendSmartTx(connection, instructions, payer, signTransaction, optionsOrLut) {
52
+ // Backward compat: accept PublicKey as 5th arg (old signature)
53
+ const options = optionsOrLut instanceof web3_js_1.PublicKey
54
+ ? { lutAddress: optionsOrLut }
55
+ : (optionsOrLut ?? {});
56
+ // 1. Parallel fetch: blockhash + all LUTs + priority fee
57
+ const lutAddresses = buildLutAddressList(options);
58
+ const [blockhashResult, priorityFee, ...lutResults] = await Promise.all([
59
+ connection.getLatestBlockhash("confirmed"),
60
+ options.noPriorityFee ? Promise.resolve(0) : fetchPriorityFee(connection),
61
+ ...lutAddresses.map(addr => connection.getAddressLookupTable(addr)),
62
+ ]);
63
+ const { blockhash, lastValidBlockHeight } = blockhashResult;
64
+ // Merge all fetched LUTs + any pre-fetched additional LUTs
65
+ const allLuts = [];
66
+ for (const result of lutResults) {
67
+ if (result.value)
68
+ allLuts.push(result.value);
69
+ }
70
+ if (options.additionalLuts)
71
+ allLuts.push(...options.additionalLuts);
72
+ // 2. Determine if we need versioned tx (pre-check size without signing)
73
+ const needsVersionedTx = checkNeedsVersionedTx(instructions, payer, blockhash);
74
+ // 3. Simulate to get exact CU (use versioned tx for simulation if needed)
75
+ let computeUnits = options.computeUnits ?? 0;
76
+ if (!computeUnits) {
77
+ computeUnits = await simulateForCU(connection, instructions, payer, blockhash, needsVersionedTx && allLuts.length > 0 ? allLuts : undefined);
78
+ }
79
+ // 4. Prepend compute budget instructions
80
+ const finalIxs = [
81
+ web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: computeUnits }),
82
+ ...(priorityFee > 0
83
+ ? [web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: priorityFee })]
84
+ : []),
85
+ ...instructions,
86
+ ];
87
+ // 5. Build transaction (legacy or versioned)
88
+ let signedTx;
89
+ if (needsVersionedTx && allLuts.length > 0) {
90
+ const msgV0 = new web3_js_1.TransactionMessage({
91
+ payerKey: payer,
92
+ recentBlockhash: blockhash,
93
+ instructions: finalIxs,
94
+ }).compileToV0Message(allLuts);
95
+ const vtx = new web3_js_1.VersionedTransaction(msgV0);
96
+ signedTx = await signTransaction(vtx);
97
+ }
98
+ else {
99
+ // Try legacy — if the compute budget ixs push it over, fall back to versioned
100
+ const tx = new web3_js_1.Transaction();
101
+ for (const ix of finalIxs)
102
+ tx.add(ix);
103
+ tx.feePayer = payer;
104
+ tx.recentBlockhash = blockhash;
105
+ try {
106
+ tx.serialize({ requireAllSignatures: false });
107
+ signedTx = await signTransaction(tx);
108
+ }
109
+ catch {
110
+ // Legacy too large with compute budget ixs — use versioned
111
+ if (allLuts.length > 0) {
112
+ const msgV0 = new web3_js_1.TransactionMessage({
113
+ payerKey: payer,
114
+ recentBlockhash: blockhash,
115
+ instructions: finalIxs,
116
+ }).compileToV0Message(allLuts);
117
+ const vtx = new web3_js_1.VersionedTransaction(msgV0);
118
+ signedTx = await signTransaction(vtx);
119
+ }
120
+ else {
121
+ throw new Error("Transaction too large and no LUT available");
122
+ }
123
+ }
124
+ }
125
+ // 6. Send and confirm with lastValidBlockHeight
126
+ const sig = await connection.sendRawTransaction(signedTx instanceof web3_js_1.VersionedTransaction
127
+ ? signedTx.serialize()
128
+ : signedTx.serialize(), { skipPreflight: false, preflightCommitment: "confirmed" });
129
+ await connection.confirmTransaction({ signature: sig, blockhash, lastValidBlockHeight }, "confirmed");
130
+ return sig;
131
+ }
132
+ /**
133
+ * Simulate a transaction without signing. Returns true if simulation succeeds.
134
+ * Use this to gate combined-tx attempts before asking the wallet to sign.
135
+ */
136
+ async function simulateSmartTx(connection, instructions, payer, optionsOrLut) {
137
+ const options = optionsOrLut instanceof web3_js_1.PublicKey
138
+ ? { lutAddress: optionsOrLut }
139
+ : (optionsOrLut ?? {});
140
+ const lutAddresses = buildLutAddressList(options);
141
+ const [blockhashResult, ...lutResults] = await Promise.all([
142
+ connection.getLatestBlockhash("confirmed"),
143
+ ...lutAddresses.map(addr => connection.getAddressLookupTable(addr)),
144
+ ]);
145
+ const { blockhash } = blockhashResult;
146
+ const allLuts = [];
147
+ for (const result of lutResults) {
148
+ if (result.value)
149
+ allLuts.push(result.value);
150
+ }
151
+ if (options.additionalLuts)
152
+ allLuts.push(...options.additionalLuts);
153
+ try {
154
+ const conn = connection;
155
+ const simIxs = [
156
+ web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 1400000 }),
157
+ ...instructions,
158
+ ];
159
+ const msgV0 = new web3_js_1.TransactionMessage({
160
+ payerKey: payer,
161
+ recentBlockhash: blockhash,
162
+ instructions: simIxs,
163
+ }).compileToV0Message(allLuts);
164
+ const simTx = new web3_js_1.VersionedTransaction(msgV0);
165
+ const simResult = await conn.simulateTransaction(simTx, {
166
+ sigVerify: false,
167
+ replaceRecentBlockhash: true,
168
+ });
169
+ return !simResult.value.err;
170
+ }
171
+ catch {
172
+ return false;
173
+ }
174
+ }
175
+ // ---------------------------------------------------------------------------
176
+ // Helpers
177
+ // ---------------------------------------------------------------------------
178
+ /**
179
+ * Build the list of LUT addresses to fetch.
180
+ * Combines DEFAULT_LUT_ADDRESSES with any explicit lutAddress override.
181
+ */
182
+ function buildLutAddressList(options) {
183
+ const addrs = [];
184
+ const seen = new Set();
185
+ function add(addr) {
186
+ if (!addr)
187
+ return;
188
+ const key = addr.toBase58();
189
+ if (seen.has(key))
190
+ return;
191
+ seen.add(key);
192
+ addrs.push(addr);
193
+ }
194
+ // Always include configured default LUTs
195
+ add(exports.DEFAULT_LUT_ADDRESSES.lend);
196
+ add(exports.DEFAULT_LUT_ADDRESSES.stv);
197
+ add(exports.DEFAULT_LUT_ADDRESSES.jlpd);
198
+ // Include explicit override (backward compat)
199
+ if (options.lutAddress)
200
+ add(options.lutAddress);
201
+ return addrs;
202
+ }
203
+ /**
204
+ * Pre-check if instructions will fit in a legacy transaction.
205
+ * Cheaper than actually signing — just serialize without signatures.
206
+ */
207
+ function checkNeedsVersionedTx(instructions, payer, blockhash) {
208
+ try {
209
+ const tx = new web3_js_1.Transaction();
210
+ // Add 2 placeholder compute budget ixs (they'll be prepended)
211
+ tx.add(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 200000 }));
212
+ tx.add(web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 50000 }));
213
+ for (const ix of instructions)
214
+ tx.add(ix);
215
+ tx.feePayer = payer;
216
+ tx.recentBlockhash = blockhash;
217
+ tx.serialize({ requireAllSignatures: false });
218
+ return false; // fits in legacy
219
+ }
220
+ catch {
221
+ return true; // needs versioned
222
+ }
223
+ }
224
+ /**
225
+ * Simulate transaction to get exact compute units consumed.
226
+ * Returns simulated CU + 10% buffer, or fallback if simulation fails.
227
+ */
228
+ async function simulateForCU(connection, instructions, payer, blockhash, luts) {
229
+ try {
230
+ // Build a simulation tx with max CU to avoid hitting the limit during sim
231
+ const simIxs = [
232
+ web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 1400000 }),
233
+ ...instructions,
234
+ ];
235
+ // Try versioned simulation first (works with LUTs)
236
+ const conn = connection;
237
+ const msgV0 = new web3_js_1.TransactionMessage({
238
+ payerKey: payer,
239
+ recentBlockhash: blockhash,
240
+ instructions: simIxs,
241
+ }).compileToV0Message(luts ?? []);
242
+ const simTx = new web3_js_1.VersionedTransaction(msgV0);
243
+ const simResult = await conn.simulateTransaction(simTx, {
244
+ sigVerify: false,
245
+ replaceRecentBlockhash: true,
246
+ });
247
+ if (simResult.value.err) {
248
+ // Simulation failed — use fallback
249
+ return FALLBACK_CU;
250
+ }
251
+ const unitsConsumed = simResult.value.unitsConsumed ?? FALLBACK_CU;
252
+ return Math.ceil(unitsConsumed * CU_BUFFER_MULTIPLIER);
253
+ }
254
+ catch {
255
+ return FALLBACK_CU;
256
+ }
257
+ }
258
+ /**
259
+ * Fetch recommended priority fee from Helius (medium tier).
260
+ * Falls back to a default if Helius is unavailable.
261
+ */
262
+ async function fetchPriorityFee(connection) {
263
+ try {
264
+ // Extract RPC URL from connection
265
+ const conn = connection;
266
+ const rpcUrl = conn._rpcEndpoint ?? "";
267
+ // Only use Helius priority fee API if it's a Helius RPC
268
+ if (!rpcUrl.includes("helius")) {
269
+ return FALLBACK_PRIORITY_FEE;
270
+ }
271
+ const response = await fetch(rpcUrl, {
272
+ method: "POST",
273
+ headers: { "Content-Type": "application/json" },
274
+ body: JSON.stringify({
275
+ jsonrpc: "2.0",
276
+ id: "priority-fee",
277
+ method: "getPriorityFeeEstimate",
278
+ params: [{
279
+ options: {
280
+ priorityLevel: "Medium",
281
+ },
282
+ }],
283
+ }),
284
+ });
285
+ if (response.ok) {
286
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
287
+ const data = await response.json();
288
+ const fee = data?.result?.priorityFeeEstimate;
289
+ if (typeof fee === "number" && fee > 0) {
290
+ return Math.ceil(fee);
291
+ }
292
+ }
293
+ }
294
+ catch {
295
+ // Priority fee fetch failed — use fallback
296
+ }
297
+ return FALLBACK_PRIORITY_FEE;
298
+ }
299
+ //# sourceMappingURL=send-tx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-tx.js","sourceRoot":"","sources":["../../src/p-stv-core/send-tx.ts"],"names":[],"mappings":"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"}