@hawksightco/hawk-sdk 1.1.39 → 1.1.41-hotfix-1

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 (40) hide show
  1. package/dist/src/classes/CreateTxMetadata.d.ts.map +1 -1
  2. package/dist/src/classes/CreateTxMetadata.js +2 -12
  3. package/dist/src/classes/MultiTransaction.d.ts +76 -0
  4. package/dist/src/classes/MultiTransaction.d.ts.map +1 -0
  5. package/dist/src/classes/MultiTransaction.js +286 -0
  6. package/dist/src/classes/Transaction copy.d.ts +162 -0
  7. package/dist/src/classes/Transaction copy.d.ts.map +1 -0
  8. package/dist/src/classes/Transaction copy.js +458 -0
  9. package/dist/src/classes/Transaction.d.ts +42 -12
  10. package/dist/src/classes/Transaction.d.ts.map +1 -1
  11. package/dist/src/classes/Transaction.js +1 -0
  12. package/dist/src/classes/Transaction2.d.ts +108 -0
  13. package/dist/src/classes/Transaction2.d.ts.map +1 -0
  14. package/dist/src/classes/Transaction2.js +239 -0
  15. package/dist/src/classes/Transaction3.d.ts +166 -0
  16. package/dist/src/classes/Transaction3.d.ts.map +1 -0
  17. package/dist/src/classes/Transaction3.js +406 -0
  18. package/dist/src/classes/TransactionBatchExecute2.d.ts +18 -0
  19. package/dist/src/classes/TransactionBatchExecute2.d.ts.map +1 -1
  20. package/dist/src/classes/TransactionBatchExecute2.js +72 -1
  21. package/dist/src/classes/Transactions.d.ts +4 -2
  22. package/dist/src/classes/Transactions.d.ts.map +1 -1
  23. package/dist/src/classes/Transactions.js +17 -11
  24. package/dist/src/classes/TxGenerator.d.ts +2 -1
  25. package/dist/src/classes/TxGenerator.d.ts.map +1 -1
  26. package/dist/src/classes/TxGenerator.js +8 -23
  27. package/dist/src/functions.d.ts +25 -0
  28. package/dist/src/functions.d.ts.map +1 -1
  29. package/dist/src/functions.js +70 -1
  30. package/dist/src/hsToMeteora.d.ts.map +1 -1
  31. package/dist/src/hsToMeteora.js +173 -27
  32. package/dist/src/idl/meteora-idl.d.ts +5251 -0
  33. package/dist/src/idl/meteora-idl.d.ts.map +1 -0
  34. package/dist/src/idl/meteora-idl.js +5252 -0
  35. package/dist/src/meteora.d.ts +1 -1
  36. package/dist/src/meteora.d.ts.map +1 -1
  37. package/dist/src/meteora.js +37 -2
  38. package/dist/src/types.d.ts +6 -7
  39. package/dist/src/types.d.ts.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.Transaction3 = void 0;
36
+ ///
37
+ /// I call this the weirdshit class. I don't understand the full mechanism why.
38
+ /// The difference between `Transaction3` and `Transaction` class is its name.
39
+ /// This file is just the exact copy of `Transaction` class except this comment.
40
+ ///
41
+ /// I will keep this class for now. I just want this thing to compile with our
42
+ /// front-end. This class is meant to isolate the compile error we're experiencing.
43
+ /// But the moment I created this file, everything worked like WTF? Maybe it's
44
+ /// just a "typescript" shit or something. Some undocumented bug...
45
+ ///
46
+ /// Therefore I'll keep this for now...
47
+ ///
48
+ const client = __importStar(require("@hawksightco/swagger-client"));
49
+ const web3 = __importStar(require("@solana/web3.js"));
50
+ const bn_js_1 = require("bn.js");
51
+ const functions_1 = require("../functions");
52
+ const Logging_1 = require("./Logging");
53
+ /**
54
+ * Represents a transaction object in Solana using the web3.js library.
55
+ * This class encapsulates the logic for creating, signing, and verifying signatures of transactions.
56
+ */
57
+ class Transaction3 {
58
+ get txMessage() {
59
+ return this._txMessage;
60
+ }
61
+ get versionedTransaction() {
62
+ return this._versionedTransaction;
63
+ }
64
+ get priorityFeeEstimate() {
65
+ return this._priorityFeeEstimate;
66
+ }
67
+ /** The blockhash of a recent ledger entry */
68
+ get recentBlockhash() {
69
+ return this.latestBlockhash.blockhash;
70
+ }
71
+ get instructions() {
72
+ return this._instructions;
73
+ }
74
+ /** last valid block height */
75
+ get lastValidBlockHeight() {
76
+ return this.latestBlockhash.lastValidBlockHeight;
77
+ }
78
+ /**
79
+ * Constructs a new Transaction object.
80
+ *
81
+ * @param payerKey PublicKey of the transaction payer
82
+ * @param instructions Array of TransactionInstruction to be executed in this transaction
83
+ * @param recentBlockhash The blockhash of a recent ledger entry
84
+ * @param alts Address lookup tables that optimize account address storage
85
+ */
86
+ constructor(txMetadataResponse, payerKey, latestBlockhash, alts, generalUtility, _mainIxs = []) {
87
+ this.txMetadataResponse = txMetadataResponse;
88
+ this.payerKey = payerKey;
89
+ this.latestBlockhash = latestBlockhash;
90
+ this.alts = alts;
91
+ this.generalUtility = generalUtility;
92
+ /** Estimated fee in SOL for priority fee when addPriorityFee() method is called. */
93
+ this._priorityFeeEstimate = "";
94
+ txMetadataResponse.payer = payerKey.toBase58();
95
+ let mainIxs;
96
+ if (_mainIxs.length > 0) {
97
+ mainIxs = _mainIxs;
98
+ txMetadataResponse.mainInstructions = mainIxs.map(ix => {
99
+ const accounts = ix.keys.map(meta => {
100
+ return {
101
+ pubkey: meta.pubkey.toString(),
102
+ isSigner: meta.isSigner,
103
+ isWritable: meta.isWritable,
104
+ };
105
+ });
106
+ return {
107
+ accounts,
108
+ programId: ix.programId.toString(),
109
+ data: ix.data.toString('base64'),
110
+ };
111
+ });
112
+ }
113
+ else {
114
+ // Construct main instructions
115
+ mainIxs = txMetadataResponse.mainInstructions.map((ix) => {
116
+ return new web3.TransactionInstruction({
117
+ keys: ix.accounts.map((meta) => {
118
+ return {
119
+ pubkey: new web3.PublicKey(meta.pubkey),
120
+ isSigner: meta.isSigner,
121
+ isWritable: meta.isWritable,
122
+ };
123
+ }),
124
+ programId: new web3.PublicKey(ix.programId),
125
+ data: Buffer.from(ix.data, "base64"),
126
+ });
127
+ });
128
+ }
129
+ this._instructions = [...mainIxs];
130
+ const [txMessage, versionedTransaction] = this.buildTransaction(latestBlockhash);
131
+ this._txMessage = txMessage;
132
+ this._versionedTransaction = versionedTransaction;
133
+ this.requiredSigners = this.getRequiredSigners();
134
+ }
135
+ /**
136
+ * Signs the transaction with provided signers.
137
+ *
138
+ * @param signers Array of Signer objects whose private keys will be used to sign the transaction.
139
+ * @param idempotent Boolean indicating whether signing should be idempotent (default is false).
140
+ * @throws Error if a signer is not required or has already signed the transaction when not idempotent.
141
+ */
142
+ sign(signers, idempotent = false) {
143
+ // First validate all signers
144
+ signers.forEach((signer) => {
145
+ const key = signer.publicKey.toString();
146
+ if (typeof this.requiredSigners[key] !== "boolean") {
147
+ throw new Error(`Key ${key} is not a required signer!`);
148
+ }
149
+ if (!idempotent && this.requiredSigners[key]) {
150
+ throw new Error(`Key ${key} has already been signed by required signer!`);
151
+ }
152
+ });
153
+ // If all signers are valid and the process is idempotent or they haven't signed yet, update and sign
154
+ signers.forEach((signer) => {
155
+ const key = signer.publicKey.toString();
156
+ this.requiredSigners[key] = true;
157
+ });
158
+ this.versionedTransaction.sign(signers);
159
+ }
160
+ /**
161
+ * Add a signature on the transaction with provided signature.
162
+ *
163
+ * @param publicKey The public key of the signer
164
+ * @param signature A signature of the signed transaction
165
+ * @throws Error if a signer is not required or has already signed the transaction.
166
+ */
167
+ addSignature(publicKey, signature) {
168
+ const key = publicKey.toBase58();
169
+ if (typeof this.requiredSigners[key] !== "boolean") {
170
+ throw new Error(`Key ${key} is not a required signer!`);
171
+ }
172
+ if (this.requiredSigners[key]) {
173
+ throw new Error(`Key ${key} has already been signed by required signer!`);
174
+ }
175
+ this.requiredSigners[key] = true;
176
+ this.versionedTransaction.addSignature(publicKey, signature);
177
+ }
178
+ /**
179
+ * Checks if all required signers have signed the transaction.
180
+ *
181
+ * @returns Boolean indicating whether all required signers have signed.
182
+ */
183
+ isSignedByRequiredSigners() {
184
+ return Object.values(this.requiredSigners).every((isSigned) => isSigned);
185
+ }
186
+ /**
187
+ * Add priority fee instructions (compute budget)
188
+ *
189
+ * This method adds priority fee instructions to the transaction based on the specified
190
+ * priority level and compute unit limit. It ensures that the total fee does not exceed
191
+ * the specified maximum priority fee (in SOL) if provided.
192
+ *
193
+ * @param connection - The connection to the Solana cluster.
194
+ * @param computeUnitLimit - The limit on the number of compute units.
195
+ * @param fixedPriority - If true, a fixed priority fee is used; if false, the fee is based on priority level.
196
+ * @param priorityLevelOrPriorityFee - The priority level for the fee estimation or the fixed priority fee.
197
+ * @param maxPriorityFee - The maximum priority fee in SOL (optional, only applicable when fixedPriority is false).
198
+ * @returns An array of transaction instructions.
199
+ */
200
+ addPriorityFeeIx(connection_1, computeUnitLimit_1) {
201
+ return __awaiter(this, arguments, void 0, function* (connection, computeUnitLimit, fixedPriority = false, priorityLevelOrPriorityFee, maxPriorityFee) {
202
+ (0, Logging_1.Log)(`addPriorityFeeIx`);
203
+ // First, remove any existing priority fee instructions
204
+ this.removePriorityFeeIxs();
205
+ let totalPriorityFeeLamports;
206
+ if (fixedPriority && typeof priorityLevelOrPriorityFee === 'number') {
207
+ // For fixed priority, directly use the provided fixed priority fee
208
+ totalPriorityFeeLamports = priorityLevelOrPriorityFee - 5000;
209
+ }
210
+ else if (typeof priorityLevelOrPriorityFee === 'string') {
211
+ // Convert maxPriorityFee from SOL to lamports (1 SOL = 1_000_000_000 lamports)
212
+ const maxPriorityFeeLamports = maxPriorityFee !== undefined ? maxPriorityFee * 1000000000 : undefined;
213
+ // Get fee estimate by simulating the transaction
214
+ const startTime = new Date().getTime() / 1000;
215
+ (0, Logging_1.Log)(`addPriorityFeeIx: Starting getFeeEstimate function`);
216
+ let estimate = yield (0, functions_1.getFeeEstimate)(this.generalUtility, priorityLevelOrPriorityFee, this.txMetadataResponse);
217
+ (0, Logging_1.Log)(`addPriorityFeeIx: Starting getFeeEstimate function: Elapsed Time: ${(new Date().getTime() / 1000) - startTime}`);
218
+ // If priority is set to default or medium, we multiply estimate by 2 to increase its chance on blockchain.
219
+ if (priorityLevelOrPriorityFee === client.PriorityLevel.Default || priorityLevelOrPriorityFee === client.PriorityLevel.Medium) {
220
+ estimate = estimate * 2;
221
+ }
222
+ // Calculate the total fee in lamports
223
+ totalPriorityFeeLamports = new bn_js_1.BN(estimate).mul(new bn_js_1.BN(computeUnitLimit)).div(new bn_js_1.BN(1000000)).toNumber();
224
+ // If maxPriorityFee is defined and it is less than the total calculated fee, cap it
225
+ if (maxPriorityFeeLamports !== undefined && totalPriorityFeeLamports > maxPriorityFeeLamports) {
226
+ totalPriorityFeeLamports = maxPriorityFeeLamports - 5000;
227
+ }
228
+ }
229
+ else {
230
+ throw new Error('Invalid parameters');
231
+ }
232
+ // Convert the total priority fee back to microLamports per compute unit
233
+ const priorityFeePerUnitMicroLamports = new bn_js_1.BN(totalPriorityFeeLamports).mul(new bn_js_1.BN(1000000)).div(new bn_js_1.BN(computeUnitLimit)).toNumber();
234
+ // Create priority fee instructions for the transaction
235
+ const priorityFeeIxs = [
236
+ web3.ComputeBudgetProgram.setComputeUnitLimit({
237
+ units: computeUnitLimit,
238
+ }),
239
+ web3.ComputeBudgetProgram.setComputeUnitPrice({
240
+ microLamports: priorityFeePerUnitMicroLamports,
241
+ }),
242
+ ];
243
+ // Store the total priority fee in lamports
244
+ this._priorityFeeEstimate = totalPriorityFeeLamports.toString();
245
+ // Append priority fee instructions at the beginning
246
+ this._instructions.unshift(...priorityFeeIxs);
247
+ // Rebuild versioned transaction with the latest blockhash
248
+ const blockhash = yield connection.getLatestBlockhash();
249
+ this.buildTransaction(blockhash);
250
+ return priorityFeeIxs;
251
+ });
252
+ }
253
+ /**
254
+ * Gets the compute unit limit from a transaction simulation.
255
+ *
256
+ * This function simulates a transaction and calculates the compute unit limit
257
+ * based on the simulation results. If an additional compute limit is provided,
258
+ * it is added to the units consumed in the simulation. Otherwise, the units
259
+ * consumed are increased by 10%.
260
+ *
261
+ * @param {web3.Connection} connection - The connection object to the Solana cluster.
262
+ * @param {number} [additionalComputeLimit] - Optional additional compute limit to add to the units consumed.
263
+ * @returns {Promise<number>} - A promise that resolves to the total compute unit limit.
264
+ * @throws {Error} - Throws an error if the transaction simulation fails.
265
+ */
266
+ getComputeUnitLimit(connection, additionalComputeLimit) {
267
+ return __awaiter(this, void 0, void 0, function* () {
268
+ const simulation = yield this.simulateTransaction(connection);
269
+ if (simulation.err !== null) {
270
+ if (simulation.logs === null) {
271
+ (0, Logging_1.Log)(simulation.err);
272
+ }
273
+ else {
274
+ for (const log of simulation.logs) {
275
+ (0, Logging_1.Log)(log);
276
+ }
277
+ }
278
+ throw new Error(`Transaction simulation error. See logs above.`);
279
+ }
280
+ const totalUnitLimit = additionalComputeLimit ? simulation.unitsConsumed + additionalComputeLimit : Math.round(simulation.unitsConsumed * 1.1);
281
+ return totalUnitLimit;
282
+ });
283
+ }
284
+ /**
285
+ * Simulate transaction
286
+ *
287
+ * @param connection
288
+ * @returns
289
+ */
290
+ simulateTransaction(connection_1) {
291
+ return __awaiter(this, arguments, void 0, function* (connection, signers = []) {
292
+ const testInstructions = [
293
+ ...this.instructions,
294
+ ];
295
+ if (this.findSetComputeUnitLimitIndex(testInstructions) === -1) {
296
+ testInstructions.unshift(web3.ComputeBudgetProgram.setComputeUnitLimit({ units: 1400000 }));
297
+ }
298
+ if (this.findSetComputeUnitPriceIndex(testInstructions) === -1) {
299
+ testInstructions.unshift(web3.ComputeBudgetProgram.setComputeUnitPrice({
300
+ // CU * CU PRICE -> 1400000 * feeEstimate.priorityFeeEstimate
301
+ microLamports: 100000,
302
+ }));
303
+ }
304
+ const testVersionedTxn = new web3.VersionedTransaction(new web3.TransactionMessage({
305
+ instructions: testInstructions,
306
+ payerKey: this.payerKey,
307
+ recentBlockhash: web3.PublicKey.default.toString(),
308
+ }).compileToV0Message(this.alts));
309
+ if (signers.length > 0) {
310
+ testVersionedTxn.sign(signers);
311
+ }
312
+ const simulation = yield connection.simulateTransaction(testVersionedTxn, {
313
+ replaceRecentBlockhash: true,
314
+ sigVerify: false,
315
+ });
316
+ if (simulation.value.unitsConsumed === undefined) {
317
+ throw new Error("Unable to calculate compute budget.");
318
+ }
319
+ return {
320
+ err: simulation.value.err,
321
+ logs: simulation.value.logs,
322
+ accounts: simulation.value.accounts,
323
+ unitsConsumed: simulation.value.unitsConsumed,
324
+ returnData: simulation.value.returnData,
325
+ };
326
+ });
327
+ }
328
+ /**
329
+ * Builds transaction object
330
+ */
331
+ buildTransaction(latestBlockhash) {
332
+ this.latestBlockhash = latestBlockhash;
333
+ this._txMessage = new web3.TransactionMessage({
334
+ payerKey: this.payerKey,
335
+ instructions: this.instructions,
336
+ recentBlockhash: this.recentBlockhash,
337
+ });
338
+ this._versionedTransaction = new web3.VersionedTransaction(this.txMessage.compileToV0Message(this.alts));
339
+ return [this._txMessage, this._versionedTransaction];
340
+ }
341
+ /**
342
+ * Gathers the public keys of all parties required to sign the transaction.
343
+ *
344
+ * @returns A record of signer public keys mapped to a boolean indicating whether they have signed.
345
+ */
346
+ getRequiredSigners() {
347
+ const signerKeys = this.instructions.flatMap((ix) => ix.keys
348
+ .filter((meta) => meta.isSigner)
349
+ .map((meta) => meta.pubkey.toString()));
350
+ const result = {};
351
+ signerKeys.forEach((key) => (result[key] = false));
352
+ return result;
353
+ }
354
+ /**
355
+ * Find setComputeUnitLimit index within the instructions
356
+ */
357
+ findSetComputeUnitLimitIndex(instructions) {
358
+ let _instructions = [];
359
+ if (instructions !== undefined) {
360
+ _instructions = instructions;
361
+ }
362
+ else {
363
+ _instructions = this.instructions;
364
+ }
365
+ return _instructions.findIndex((ix) => {
366
+ const isComputeBudgetProgram = ix.programId.toString() ===
367
+ "ComputeBudget111111111111111111111111111111";
368
+ const isSetComputeLimitIx = ix.data[0] === 2;
369
+ return isComputeBudgetProgram && isSetComputeLimitIx;
370
+ });
371
+ }
372
+ /**
373
+ * Find setComputeUnitPrice index within the instructions
374
+ */
375
+ findSetComputeUnitPriceIndex(instructions) {
376
+ let _instructions = [];
377
+ if (instructions !== undefined) {
378
+ _instructions = instructions;
379
+ }
380
+ else {
381
+ _instructions = this.instructions;
382
+ }
383
+ return _instructions.findIndex((ix) => {
384
+ const isComputeBudgetProgram = ix.programId.toString() ===
385
+ "ComputeBudget111111111111111111111111111111";
386
+ const isSetComputeUnitPriceIx = ix.data[0] === 3;
387
+ return isComputeBudgetProgram && isSetComputeUnitPriceIx;
388
+ });
389
+ }
390
+ /**
391
+ * Remove priority fee instructions
392
+ */
393
+ removePriorityFeeIxs() {
394
+ while (true) {
395
+ const setComputeUnitLimitIxIndex = this.findSetComputeUnitLimitIndex();
396
+ const setComputeUnitPriceIxIndex = this.findSetComputeUnitPriceIndex();
397
+ if (setComputeUnitLimitIxIndex !== -1)
398
+ this._instructions.splice(setComputeUnitLimitIxIndex, 1);
399
+ if (setComputeUnitPriceIxIndex !== -1)
400
+ this._instructions.splice(setComputeUnitPriceIxIndex, 1);
401
+ if (setComputeUnitLimitIxIndex && setComputeUnitPriceIxIndex)
402
+ break;
403
+ }
404
+ }
405
+ }
406
+ exports.Transaction3 = Transaction3;
@@ -2,6 +2,9 @@
2
2
  import * as web3 from '@solana/web3.js';
3
3
  import { TransactionBatchExecute, DummySigners } from './TransactionBatchExecute';
4
4
  import { CreateTxMetadata } from './CreateTxMetadata';
5
+ import { InsertNonceAtOpt } from '../types';
6
+ import { GeneralUtility } from './GeneralUtility';
7
+ import { MultiTransaction } from './MultiTransaction';
5
8
  /**
6
9
  * Executes transactions in batches
7
10
  */
@@ -12,6 +15,7 @@ export declare class TransactionBatchExecute2 extends TransactionBatchExecute {
12
15
  protected createTxMetadataInstance: CreateTxMetadata;
13
16
  protected latestBlockhash: web3.BlockhashWithExpiryBlockHeight;
14
17
  protected payerKey: web3.PublicKey;
18
+ private _insertNonceAt;
15
19
  /**
16
20
  * Creates an instance of TransactionExecute class
17
21
  *
@@ -39,10 +43,20 @@ export declare class TransactionBatchExecute2 extends TransactionBatchExecute {
39
43
  * Downoad address lookup table from given cluster
40
44
  */
41
45
  protected downloadAlts2(lookupTableAddresses: web3.PublicKey[]): Promise<void>;
46
+ /**
47
+ * Option to include nonce advance instruction
48
+ *
49
+ * @param opt
50
+ */
51
+ insertNonceAt(opt: InsertNonceAtOpt): void;
42
52
  /**
43
53
  * Builds a batch of executable transaction instructions
44
54
  */
45
55
  buildBatch(): Promise<web3.TransactionInstruction[][]>;
56
+ /**
57
+ * Builds a batch of executable transaction instructions
58
+ */
59
+ buildBatchWithAlts(description: string, generalUtility: GeneralUtility): Promise<MultiTransaction>;
46
60
  /**
47
61
  * Split transactions
48
62
  *
@@ -51,6 +65,10 @@ export declare class TransactionBatchExecute2 extends TransactionBatchExecute {
51
65
  * @returns
52
66
  */
53
67
  protected splitToTransactions(simulationIxs: web3.TransactionInstruction[], dummySigners: DummySigners): Promise<web3.TransactionInstruction[][]>;
68
+ /**
69
+ * Generate nonde advance instruction (dummy instruction)
70
+ */
71
+ private generateNonceAdvanceIx;
54
72
  private getEstimateSize;
55
73
  /**
56
74
  * Find required signers from instructions
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionBatchExecute2.d.ts","sourceRoot":"","sources":["../../../src/classes/TransactionBatchExecute2.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,uBAAuB;IAWjE,SAAS,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAAE;IAChD,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,sBAAsB,EAAE;IACrD,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU;IACrC,SAAS,CAAC,wBAAwB,EAAE,gBAAgB;IACpD,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,8BAA8B;IAC9D,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS;IAdpC;;;;;;;OAOG;gBAES,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAAE,EACtC,YAAY,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAC3C,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,wBAAwB,EAAE,gBAAgB,EAC1C,eAAe,EAAE,IAAI,CAAC,8BAA8B,EACpD,QAAQ,EAAE,IAAI,CAAC,SAAS;IAWpC;;;;OAIG;IACH,MAAM,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAEzF;IAED;;OAEG;cACa,mBAAmB;IAEnC;;OAEG;cACa,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAI7F;;OAEG;cACa,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAAE;IAMpE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;IA4B5D;;;;;;OAMG;cACa,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;IA6CvJ,OAAO,CAAC,eAAe;IAqBvB;;;;;OAKG;IACH,SAAS,CAAC,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;IAsB1F;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,CAAC,eAAe,EAAE,IAAI,CAAC,8BAA8B,EAAE,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM;IAclK;;;;OAIG;IACI,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,yBAAyB,EAAE;IAmBxG;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;CAStC"}
1
+ {"version":3,"file":"TransactionBatchExecute2.d.ts","sourceRoot":"","sources":["../../../src/classes/TransactionBatchExecute2.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,uBAAuB;IAajE,SAAS,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAAE;IAChD,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,sBAAsB,EAAE;IACrD,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU;IACrC,SAAS,CAAC,wBAAwB,EAAE,gBAAgB;IACpD,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,8BAA8B;IAC9D,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS;IAhBpC,OAAO,CAAC,cAAc,CAAwB;IAE9C;;;;;;;OAOG;gBAES,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAAE,EACtC,YAAY,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAC3C,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,wBAAwB,EAAE,gBAAgB,EAC1C,eAAe,EAAE,IAAI,CAAC,8BAA8B,EACpD,QAAQ,EAAE,IAAI,CAAC,SAAS;IAWpC;;;;OAIG;IACH,MAAM,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAEzF;IAED;;OAEG;cACa,mBAAmB;IAEnC;;OAEG;cACa,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAI7F;;OAEG;cACa,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAAE;IAMpE;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,gBAAgB;IAInC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAmC5D;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqCxG;;;;;;OAMG;cACa,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAgDvJ;;OAEG;YACW,sBAAsB;IAWpC,OAAO,CAAC,eAAe;IAqBvB;;;;;OAKG;IACH,SAAS,CAAC,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;IAsB1F;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,CAAC,eAAe,EAAE,IAAI,CAAC,8BAA8B,EAAE,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM;IAclK;;;;OAIG;IACI,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,yBAAyB,EAAE;IAmBxG;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;CAStC"}
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TransactionBatchExecute2 = void 0;
37
37
  const web3 = __importStar(require("@solana/web3.js"));
38
38
  const TransactionBatchExecute_1 = require("./TransactionBatchExecute");
39
+ const MultiTransaction_1 = require("./MultiTransaction");
40
+ const functions_1 = require("../functions");
39
41
  /**
40
42
  * Executes transactions in batches
41
43
  */
@@ -57,6 +59,7 @@ class TransactionBatchExecute2 extends TransactionBatchExecute_1.TransactionBatc
57
59
  this.createTxMetadataInstance = createTxMetadataInstance;
58
60
  this.latestBlockhash = latestBlockhash;
59
61
  this.payerKey = payerKey;
62
+ this._insertNonceAt = {};
60
63
  }
61
64
  ;
62
65
  /**
@@ -83,6 +86,14 @@ class TransactionBatchExecute2 extends TransactionBatchExecute_1.TransactionBatc
83
86
  this.alts.push(...alts);
84
87
  });
85
88
  }
89
+ /**
90
+ * Option to include nonce advance instruction
91
+ *
92
+ * @param opt
93
+ */
94
+ insertNonceAt(opt) {
95
+ this._insertNonceAt = opt;
96
+ }
86
97
  /**
87
98
  * Builds a batch of executable transaction instructions
88
99
  */
@@ -97,7 +108,10 @@ class TransactionBatchExecute2 extends TransactionBatchExecute_1.TransactionBatc
97
108
  // Batch of actual instructions
98
109
  const batch = [];
99
110
  let index = 0;
111
+ let i = 0;
112
+ const lastIndex = dummyBatches.length - 1;
100
113
  for (const dummyIxs of dummyBatches) {
114
+ const isLastIndex = i == lastIndex;
101
115
  const currentBatch = [];
102
116
  for (const ix of dummyIxs) {
103
117
  // If program id is compute budget, ignore
@@ -106,7 +120,47 @@ class TransactionBatchExecute2 extends TransactionBatchExecute_1.TransactionBatc
106
120
  // Otherwise, include in batch
107
121
  currentBatch.push(this.instructions[index++]);
108
122
  }
123
+ if (isLastIndex && this._insertNonceAt.onlyEndOfTx) {
124
+ currentBatch.push(yield this.generateNonceAdvanceIx(i));
125
+ }
109
126
  batch.push(currentBatch);
127
+ i++;
128
+ }
129
+ return batch;
130
+ });
131
+ }
132
+ /**
133
+ * Builds a batch of executable transaction instructions
134
+ */
135
+ buildBatchWithAlts(description, generalUtility) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ // Download address lookup table from given cluster
138
+ yield this.downloadAlts();
139
+ // Generate dummy instructions for batch calculation
140
+ const [simulationIxs, dummySigners] = this.generateSimulationIxs();
141
+ // Split simulation ixs
142
+ const dummyBatches = yield this.splitToTransactions(simulationIxs, dummySigners);
143
+ // Batch of actual instructions
144
+ const batch = new MultiTransaction_1.MultiTransaction(description, generalUtility, this.latestBlockhash, this.payerKey);
145
+ let index = 0;
146
+ let i = 0;
147
+ const lastIndex = dummyBatches.length - 1;
148
+ for (const dummyIxs of dummyBatches) {
149
+ const isLastIndex = i == lastIndex;
150
+ const currentBatch = [];
151
+ for (const ix of dummyIxs) {
152
+ // If program id is compute budget, ignore
153
+ if (ix.programId.equals(web3.ComputeBudgetProgram.programId))
154
+ continue;
155
+ // Otherwise, include in batch
156
+ currentBatch.push(this.instructions[index++]);
157
+ }
158
+ if (lastIndex !== 0 && isLastIndex && this._insertNonceAt.onlyEndOfTx) {
159
+ currentBatch.push(yield this.generateNonceAdvanceIx(i));
160
+ }
161
+ const alts = this.findRequiredAltsForBatch2(currentBatch);
162
+ batch.push(alts, currentBatch);
163
+ i++;
110
164
  }
111
165
  return batch;
112
166
  });
@@ -140,7 +194,9 @@ class TransactionBatchExecute2 extends TransactionBatchExecute_1.TransactionBatc
140
194
  const estimateTxSize = this.getEstimateSize([...preIxs, ...batch]);
141
195
  if (estimateTxSize < this.MAX_SIZE)
142
196
  continue;
143
- const txSize = this.calculateTransactionSize(this.latestBlockhash, [...preIxs, ...batch], dummySigners);
197
+ // Generate dummy nonce advance (anticipation)
198
+ const nonceAdvance = this._insertNonceAt.onlyEndOfTx ? [yield this.generateNonceAdvanceIx(result.length)] : [];
199
+ const txSize = this.calculateTransactionSize(this.latestBlockhash, [...preIxs, ...nonceAdvance, ...batch], dummySigners);
144
200
  if (txSize > this.MAX_SIZE) {
145
201
  batch.pop();
146
202
  result.push([...preIxs, ...batch]);
@@ -159,6 +215,21 @@ class TransactionBatchExecute2 extends TransactionBatchExecute_1.TransactionBatc
159
215
  return result;
160
216
  });
161
217
  }
218
+ /**
219
+ * Generate nonde advance instruction (dummy instruction)
220
+ */
221
+ generateNonceAdvanceIx(index) {
222
+ return __awaiter(this, void 0, void 0, function* () {
223
+ const noncePubkey = yield (0, functions_1.generateNonceAddressFromIndex)(this.payerKey, index);
224
+ // Generate dummy nonce ix
225
+ return web3.SystemProgram.nonceAdvance({
226
+ /** Nonce account */
227
+ noncePubkey,
228
+ /** Public key of the nonce authority */
229
+ authorizedPubkey: this.payerKey,
230
+ });
231
+ });
232
+ }
162
233
  getEstimateSize(ixs) {
163
234
  let length = 0;
164
235
  const alts = {};
@@ -1,6 +1,8 @@
1
1
  /// <reference types="@meteora-ag/dlmm/node_modules/@solana/web3.js" />
2
2
  import * as web3 from "@solana/web3.js";
3
3
  import { MeteoraClaim, MeteoraClaimAll, MeteoraClose, MeteoraCompound, MeteoraCreatePositionAndDeposit, MeteoraDeposit, MeteoraInitializeBinArrays, MeteoraRebalance, MeteoraWithdraw, Register, TxgenParams, InitializeStorageTokenAccount, MeteoraLimitCloseAutomation, OrcaOpenPosition, OrcaClosePosition, OrcaDeposit, OrcaWithdraw, OrcaClaimRewards, TransactionMetadataResponse } from '../types';
4
+ import { GeneralUtility } from "./GeneralUtility";
5
+ import { MultiTransaction } from "./MultiTransaction";
4
6
  export declare class Transactions {
5
7
  /**
6
8
  * Generate UserPDA
@@ -70,9 +72,9 @@ export declare class Transactions {
70
72
  * @param connection The Solana web3 connection object for blockchain interactions.
71
73
  * @param payer The public key of the payer for transaction fees.
72
74
  * @param params Parameters required
73
- * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
75
+ * @returns Array of transaction instructions (simplified output)
74
76
  */
75
- meteoraClaimAll({ connection, params, }: TxgenParams<MeteoraClaimAll>): Promise<TransactionMetadataResponse>;
77
+ meteoraClaimAll({ connection, params, }: TxgenParams<MeteoraClaimAll>, payer: web3.PublicKey, generalUtility: GeneralUtility): Promise<MultiTransaction>;
76
78
  /**
77
79
  * Creates meteora instruction that closes position.
78
80
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Transactions.d.ts","sourceRoot":"","sources":["../../../src/classes/Transactions.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AAiBxC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,eAAe,EACf,+BAA+B,EAC/B,cAAc,EACd,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,QAAQ,EAER,WAAW,EACX,6BAA6B,EAC7B,2BAA2B,EAC3B,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AA6BlB,qBAAa,YAAY;IACvB;;;;;;OAMG;IACH,eAAe,CACb,UAAU,EAAE,IAAI,CAAC,SAAS,EAC1B,IAAI,GAAE,IAAI,CAAC,SAAqB,GAC/B,IAAI,CAAC,SAAS;IAIjB;;;;;;;OAOG;IACG,QAAQ,CAAC,EACb,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAqD/D;;;;;;;OAOG;IACG,+BAA+B,CAAC,EACpC,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,+BAA+B,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAkCtF;;;;;;;OAOG;IACG,0BAA0B,CAAC,EAC/B,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAwBjF;;;;;;;OAOG;IACG,cAAc,CAAC,EACnB,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA+CrE;;;;;;;OAOG;IACG,eAAe,CAAC,EACpB,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA+DtE;;;;;;;OAOG;IACG,YAAY,CAAC,EACjB,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAiCnE;;;;;;;OAOG;IACK,eAAe,CAAC,EACpB,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAqBxE;;;;;;;OAOG;IACG,oBAAoB,CAAC,EACzB,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA4B7D,oBAAoB,CAAC,EACzB,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,eAAe,CAAC;IA+DzB,qBAAqB,CAAC,EAC1B,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,gBAAgB,CAAC;IA8EhC;;;;;;OAMG;IACG,8BAA8B,CAAC,EACnC,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,6BAA6B,CAAC,GAAG,OAAO,CACrD,2BAA2B,GAAG,EAAE,CACjC;IAgEK,sBAAsB,CAAC,EAC3B,UAAU,EACV,MAAM,GACP,EAAE,WAAW,CAAC,2BAA2B,CAAC;IA+H3C,OAAO,CAAC,0BAA0B;IAkClC;;;;;;;OAOG;IACG,gBAAgB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA2DnH;;;;;;;OAOG;IACG,iBAAiB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAkDrH;;;;;;;OAOG;IACG,WAAW,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAuHzG;;;;;;;OAOG;IACG,YAAY,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAyF3G;;;;;;;OAOG;IACG,gBAAgB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAqGpH;AAED,eAAO,MAAM,KAAK,cAAqB,CAAC"}
1
+ {"version":3,"file":"Transactions.d.ts","sourceRoot":"","sources":["../../../src/classes/Transactions.ts"],"names":[],"mappings":"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"}