@haven-fi/solauto-sdk 1.0.243 → 1.0.245
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/clients/solautoClient.d.ts +3 -2
- package/dist/clients/solautoClient.d.ts.map +1 -1
- package/dist/clients/solautoClient.js +14 -11
- package/dist/transactions/transactionsManager.d.ts +3 -1
- package/dist/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/transactions/transactionsManager.js +32 -15
- package/package.json +1 -1
- package/src/clients/solautoClient.ts +25 -17
- package/src/transactions/transactionsManager.ts +57 -34
@@ -42,8 +42,9 @@ export declare abstract class SolautoClient extends ReferralStateManager {
|
|
42
42
|
lutAccountsToAdd(): PublicKey[];
|
43
43
|
fetchExistingAuthorityLutAccounts(): Promise<PublicKey[]>;
|
44
44
|
updateLookupTable(): Promise<{
|
45
|
-
|
46
|
-
|
45
|
+
tx: TransactionBuilder;
|
46
|
+
new: boolean;
|
47
|
+
accountsToAdd: PublicKey[];
|
47
48
|
} | undefined>;
|
48
49
|
solautoPositionSettings(): SolautoSettingsParameters | undefined;
|
49
50
|
solautoPositionActiveDca(): DCASettings | undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAEhC,sBAAsB,EAKvB,MAAM,cAAc,CAAC;AAUtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,SAAS,EAAG,SAAS,CAAC;IACtB,MAAM,EAAG,MAAM,CAAC;IAEhB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,eAAe,EAAG,SAAS,CAAC;IAC5B,mBAAmB,EAAG,eAAe,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAG,aAAa,GAAG,SAAS,CAAC;IAEjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,UAAU,EAAG,SAAS,CAAC;IACvB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,QAAQ,EAAG,SAAS,CAAC;IACrB,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,mBAAmB,EAAE,mBAAmB,CAA6B;IAEtE,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA8ExC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAuB1C,QAAQ,CAAC,eAAe,IAAI,SAAS;IAErC,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAqBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,
|
1
|
+
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"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"}
|
@@ -145,18 +145,21 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
145
145
|
const accountsToAdd = this.lutAccountsToAdd().filter((x) => !existingLutAccounts
|
146
146
|
.map((x) => x.toString().toLowerCase())
|
147
147
|
.includes(x.toString().toLowerCase()));
|
148
|
-
if (accountsToAdd.length
|
149
|
-
|
150
|
-
payer: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey),
|
151
|
-
authority: this.authority,
|
152
|
-
lookupTable: this.authorityLutAddress,
|
153
|
-
addresses: accountsToAdd,
|
154
|
-
})));
|
155
|
-
}
|
156
|
-
if (tx.getInstructions().length > 0) {
|
157
|
-
this.log("Updating authority lookup table...");
|
148
|
+
if (accountsToAdd.length === 0) {
|
149
|
+
return undefined;
|
158
150
|
}
|
159
|
-
|
151
|
+
tx = tx.add((0, solanaUtils_1.getWrappedInstruction)(this.signer, web3_js_1.AddressLookupTableProgram.extendLookupTable({
|
152
|
+
payer: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey),
|
153
|
+
authority: this.authority,
|
154
|
+
lookupTable: this.authorityLutAddress,
|
155
|
+
addresses: accountsToAdd,
|
156
|
+
})));
|
157
|
+
this.log("Requires authority LUT update...");
|
158
|
+
return {
|
159
|
+
tx,
|
160
|
+
new: existingLutAccounts.length === 0,
|
161
|
+
accountsToAdd,
|
162
|
+
};
|
160
163
|
}
|
161
164
|
solautoPositionSettings() {
|
162
165
|
return (this.livePositionUpdates.settings ??
|
@@ -11,6 +11,7 @@ export declare class TransactionItem {
|
|
11
11
|
name?: string | undefined;
|
12
12
|
lookupTableAddresses: string[];
|
13
13
|
tx?: TransactionBuilder;
|
14
|
+
initialized: boolean;
|
14
15
|
constructor(fetchTx: (attemptNum: number) => Promise<TransactionItemInputs | undefined>, name?: string | undefined);
|
15
16
|
initialize(): Promise<void>;
|
16
17
|
refetch(attemptNum: number): Promise<void>;
|
@@ -47,8 +48,9 @@ export declare class TransactionsManager {
|
|
47
48
|
private debugAccounts;
|
48
49
|
private getUpdatedPriorityFeeSetting;
|
49
50
|
private updateStatusForSets;
|
51
|
+
private updateLut;
|
50
52
|
clientSend(transactions: TransactionItem[]): Promise<TransactionManagerStatuses>;
|
51
|
-
send(items: TransactionItem[]
|
53
|
+
send(items: TransactionItem[]): Promise<TransactionManagerStatuses>;
|
52
54
|
private processTransactionSet;
|
53
55
|
private refreshItemSet;
|
54
56
|
private sendTransaction;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;
|
1
|
+
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAK7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AAgFD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;IAVpB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;gBAGzB,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,aAAa,CAAC,EAAE,aAAa,YAAA,EAC7B,OAAO,GAAE,MAAU,EACnB,UAAU,GAAE,MAAY;YAQpB,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA8CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,mBAAmB;YAMb,SAAS;IAgBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA4EzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YA6BxB,qBAAqB;YAiDrB,cAAc;YAyBd,eAAe;CAkD9B"}
|
@@ -11,6 +11,7 @@ const generalUtils_1 = require("../utils/generalUtils");
|
|
11
11
|
const transactionUtils_1 = require("./transactionUtils");
|
12
12
|
const types_1 = require("../types");
|
13
13
|
const web3_js_1 = require("@solana/web3.js");
|
14
|
+
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
14
15
|
// import { sendJitoBundledTransactions } from "../utils/jitoUtils";
|
15
16
|
class TransactionTooLargeError extends Error {
|
16
17
|
constructor(message) {
|
@@ -44,9 +45,11 @@ class TransactionItem {
|
|
44
45
|
constructor(fetchTx, name) {
|
45
46
|
this.fetchTx = fetchTx;
|
46
47
|
this.name = name;
|
48
|
+
this.initialized = false;
|
47
49
|
}
|
48
50
|
async initialize() {
|
49
51
|
await this.refetch(0);
|
52
|
+
this.initialized = true;
|
50
53
|
}
|
51
54
|
async refetch(attemptNum) {
|
52
55
|
const resp = await this.fetchTx(attemptNum);
|
@@ -236,30 +239,44 @@ class TransactionsManager {
|
|
236
239
|
this.updateStatus(itemSet.name(), TransactionStatus.Queued, 0);
|
237
240
|
});
|
238
241
|
}
|
242
|
+
async updateLut(tx) {
|
243
|
+
const updateLutTxName = "create lookup table";
|
244
|
+
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => await this.sendTransaction(tx, updateLutTxName, attemptNum, this.getUpdatedPriorityFeeSetting(prevError)), 3, 150, this.errorsToThrow);
|
245
|
+
}
|
239
246
|
async clientSend(transactions) {
|
240
247
|
const items = [...transactions];
|
241
248
|
const client = this.txHandler;
|
242
249
|
const updateLookupTable = await client.updateLookupTable();
|
243
|
-
|
244
|
-
if (updateLookupTable &&
|
245
|
-
|
246
|
-
|
247
|
-
|
250
|
+
let isolatedLutTx = updateLookupTable?.new;
|
251
|
+
if (updateLookupTable && !isolatedLutTx) {
|
252
|
+
for (const item of items) {
|
253
|
+
await item.initialize();
|
254
|
+
}
|
255
|
+
const txAccounts = items.flatMap((x) => x.tx.getInstructions().flatMap((x) => x.keys.flatMap((x) => x.pubkey)));
|
256
|
+
const newAccountsUsage = txAccounts.reduce((count, item) => {
|
257
|
+
return updateLookupTable.accountsToAdd.find((x) => x.equals((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(item)))
|
258
|
+
? count + 1
|
259
|
+
: count;
|
260
|
+
}, 0);
|
261
|
+
isolatedLutTx = newAccountsUsage > 1;
|
262
|
+
}
|
263
|
+
if (updateLookupTable && isolatedLutTx) {
|
264
|
+
await this.updateLut(updateLookupTable.tx);
|
248
265
|
}
|
249
266
|
this.lookupTables.defaultLuts = client.defaultLookupTables();
|
250
|
-
|
251
|
-
|
267
|
+
if (!items[0].initialized || (updateLookupTable && isolatedLutTx)) {
|
268
|
+
for (const item of items) {
|
269
|
+
await item.initialize();
|
270
|
+
}
|
252
271
|
}
|
253
|
-
let choresBeforeName;
|
254
272
|
const [choresBefore, choresAfter] = await (0, transactionUtils_1.getTransactionChores)(client, (0, umi_1.transactionBuilder)().add(items
|
255
273
|
.filter((x) => x.tx && x.tx.getInstructions().length > 0)
|
256
274
|
.map((x) => x.tx)));
|
257
|
-
if (updateLookupTable && !
|
258
|
-
choresBefore.prepend(updateLookupTable.
|
259
|
-
choresBeforeName = "update lookup table";
|
275
|
+
if (updateLookupTable && !isolatedLutTx) {
|
276
|
+
choresBefore.prepend(updateLookupTable.tx);
|
260
277
|
}
|
261
278
|
if (choresBefore.getInstructions().length > 0) {
|
262
|
-
const chore = new TransactionItem(async () => ({ tx: choresBefore
|
279
|
+
const chore = new TransactionItem(async () => ({ tx: choresBefore }));
|
263
280
|
await chore.initialize();
|
264
281
|
items.unshift(chore);
|
265
282
|
this.txHandler.log("Chores before: ", choresBefore.getInstructions().length);
|
@@ -270,7 +287,7 @@ class TransactionsManager {
|
|
270
287
|
items.push(chore);
|
271
288
|
this.txHandler.log("Chores after: ", choresAfter.getInstructions().length);
|
272
289
|
}
|
273
|
-
const result = await this.send(items
|
290
|
+
const result = await this.send(items).catch((e) => {
|
274
291
|
client.resetLiveTxUpdates(false);
|
275
292
|
throw e;
|
276
293
|
});
|
@@ -279,10 +296,10 @@ class TransactionsManager {
|
|
279
296
|
}
|
280
297
|
return result;
|
281
298
|
}
|
282
|
-
async send(items
|
299
|
+
async send(items) {
|
283
300
|
this.statuses = [];
|
284
301
|
this.lookupTables.reset();
|
285
|
-
if (!initialized) {
|
302
|
+
if (!items[0].initialized) {
|
286
303
|
for (const item of items) {
|
287
304
|
await item.initialize();
|
288
305
|
}
|
package/package.json
CHANGED
@@ -247,7 +247,12 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
247
247
|
}
|
248
248
|
|
249
249
|
async updateLookupTable(): Promise<
|
250
|
-
|
250
|
+
| {
|
251
|
+
tx: TransactionBuilder;
|
252
|
+
new: boolean;
|
253
|
+
accountsToAdd: PublicKey[];
|
254
|
+
}
|
255
|
+
| undefined
|
251
256
|
> {
|
252
257
|
const existingLutAccounts = await this.fetchExistingAuthorityLutAccounts();
|
253
258
|
if (
|
@@ -279,25 +284,28 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
279
284
|
.map((x) => x.toString().toLowerCase())
|
280
285
|
.includes(x.toString().toLowerCase())
|
281
286
|
);
|
282
|
-
if (accountsToAdd.length
|
283
|
-
|
284
|
-
getWrappedInstruction(
|
285
|
-
this.signer,
|
286
|
-
AddressLookupTableProgram.extendLookupTable({
|
287
|
-
payer: toWeb3JsPublicKey(this.signer.publicKey),
|
288
|
-
authority: this.authority,
|
289
|
-
lookupTable: this.authorityLutAddress,
|
290
|
-
addresses: accountsToAdd,
|
291
|
-
})
|
292
|
-
)
|
293
|
-
);
|
287
|
+
if (accountsToAdd.length === 0) {
|
288
|
+
return undefined;
|
294
289
|
}
|
295
290
|
|
296
|
-
|
297
|
-
|
298
|
-
|
291
|
+
tx = tx.add(
|
292
|
+
getWrappedInstruction(
|
293
|
+
this.signer,
|
294
|
+
AddressLookupTableProgram.extendLookupTable({
|
295
|
+
payer: toWeb3JsPublicKey(this.signer.publicKey),
|
296
|
+
authority: this.authority,
|
297
|
+
lookupTable: this.authorityLutAddress,
|
298
|
+
addresses: accountsToAdd,
|
299
|
+
})
|
300
|
+
)
|
301
|
+
);
|
299
302
|
|
300
|
-
|
303
|
+
this.log("Requires authority LUT update...");
|
304
|
+
return {
|
305
|
+
tx,
|
306
|
+
new: existingLutAccounts.length === 0,
|
307
|
+
accountsToAdd,
|
308
|
+
};
|
301
309
|
}
|
302
310
|
|
303
311
|
solautoPositionSettings(): SolautoSettingsParameters | undefined {
|
@@ -23,6 +23,7 @@ import {
|
|
23
23
|
} from "../types";
|
24
24
|
import { ReferralStateManager, TxHandler } from "../clients";
|
25
25
|
import { TransactionExpiredBlockheightExceededError } from "@solana/web3.js";
|
26
|
+
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
26
27
|
// import { sendJitoBundledTransactions } from "../utils/jitoUtils";
|
27
28
|
|
28
29
|
export class TransactionTooLargeError extends Error {
|
@@ -71,6 +72,7 @@ class LookupTables {
|
|
71
72
|
export class TransactionItem {
|
72
73
|
lookupTableAddresses!: string[];
|
73
74
|
tx?: TransactionBuilder;
|
75
|
+
public initialized: boolean = false;
|
74
76
|
|
75
77
|
constructor(
|
76
78
|
public fetchTx: (
|
@@ -81,6 +83,7 @@ export class TransactionItem {
|
|
81
83
|
|
82
84
|
async initialize() {
|
83
85
|
await this.refetch(0);
|
86
|
+
this.initialized = true;
|
84
87
|
}
|
85
88
|
|
86
89
|
async refetch(attemptNum: number) {
|
@@ -339,6 +342,22 @@ export class TransactionsManager {
|
|
339
342
|
});
|
340
343
|
}
|
341
344
|
|
345
|
+
private async updateLut(tx: TransactionBuilder) {
|
346
|
+
const updateLutTxName = "create lookup table";
|
347
|
+
await retryWithExponentialBackoff(
|
348
|
+
async (attemptNum, prevError) =>
|
349
|
+
await this.sendTransaction(
|
350
|
+
tx,
|
351
|
+
updateLutTxName,
|
352
|
+
attemptNum,
|
353
|
+
this.getUpdatedPriorityFeeSetting(prevError)
|
354
|
+
),
|
355
|
+
3,
|
356
|
+
150,
|
357
|
+
this.errorsToThrow
|
358
|
+
);
|
359
|
+
}
|
360
|
+
|
342
361
|
public async clientSend(
|
343
362
|
transactions: TransactionItem[]
|
344
363
|
): Promise<TransactionManagerStatuses> {
|
@@ -346,33 +365,35 @@ export class TransactionsManager {
|
|
346
365
|
const client = this.txHandler as SolautoClient;
|
347
366
|
|
348
367
|
const updateLookupTable = await client.updateLookupTable();
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
await this.sendTransaction(
|
358
|
-
updateLookupTable.updateLutTx,
|
359
|
-
updateLutTxName,
|
360
|
-
attemptNum,
|
361
|
-
this.getUpdatedPriorityFeeSetting(prevError)
|
362
|
-
),
|
363
|
-
3,
|
364
|
-
150,
|
365
|
-
this.errorsToThrow
|
368
|
+
|
369
|
+
let isolatedLutTx = updateLookupTable?.new;
|
370
|
+
if (updateLookupTable && !isolatedLutTx) {
|
371
|
+
for (const item of items) {
|
372
|
+
await item.initialize();
|
373
|
+
}
|
374
|
+
const txAccounts = items.flatMap((x) =>
|
375
|
+
x.tx!.getInstructions().flatMap((x) => x.keys.flatMap((x) => x.pubkey))
|
366
376
|
);
|
377
|
+
const newAccountsUsage = txAccounts.reduce((count, item) => {
|
378
|
+
return updateLookupTable.accountsToAdd.find((x) =>
|
379
|
+
x.equals(toWeb3JsPublicKey(item))
|
380
|
+
)
|
381
|
+
? count + 1
|
382
|
+
: count;
|
383
|
+
}, 0);
|
384
|
+
isolatedLutTx = newAccountsUsage > 1;
|
385
|
+
}
|
386
|
+
if (updateLookupTable && isolatedLutTx) {
|
387
|
+
await this.updateLut(updateLookupTable.tx);
|
367
388
|
}
|
368
|
-
|
369
389
|
this.lookupTables.defaultLuts = client.defaultLookupTables();
|
370
390
|
|
371
|
-
|
372
|
-
|
391
|
+
if (!items[0].initialized || (updateLookupTable && isolatedLutTx)) {
|
392
|
+
for (const item of items) {
|
393
|
+
await item.initialize();
|
394
|
+
}
|
373
395
|
}
|
374
396
|
|
375
|
-
let choresBeforeName: string | undefined;
|
376
397
|
const [choresBefore, choresAfter] = await getTransactionChores(
|
377
398
|
client,
|
378
399
|
transactionBuilder().add(
|
@@ -381,12 +402,11 @@ export class TransactionsManager {
|
|
381
402
|
.map((x) => x.tx!)
|
382
403
|
)
|
383
404
|
);
|
384
|
-
if (updateLookupTable && !
|
385
|
-
choresBefore.prepend(updateLookupTable.
|
386
|
-
choresBeforeName = "update lookup table";
|
405
|
+
if (updateLookupTable && !isolatedLutTx) {
|
406
|
+
choresBefore.prepend(updateLookupTable.tx);
|
387
407
|
}
|
388
408
|
if (choresBefore.getInstructions().length > 0) {
|
389
|
-
const chore = new TransactionItem(async () => ({ tx: choresBefore
|
409
|
+
const chore = new TransactionItem(async () => ({ tx: choresBefore }));
|
390
410
|
await chore.initialize();
|
391
411
|
items.unshift(chore);
|
392
412
|
this.txHandler.log(
|
@@ -404,7 +424,7 @@ export class TransactionsManager {
|
|
404
424
|
);
|
405
425
|
}
|
406
426
|
|
407
|
-
const result = await this.send(items
|
427
|
+
const result = await this.send(items).catch((e) => {
|
408
428
|
client.resetLiveTxUpdates(false);
|
409
429
|
throw e;
|
410
430
|
});
|
@@ -417,13 +437,12 @@ export class TransactionsManager {
|
|
417
437
|
}
|
418
438
|
|
419
439
|
public async send(
|
420
|
-
items: TransactionItem[]
|
421
|
-
initialized?: boolean
|
440
|
+
items: TransactionItem[]
|
422
441
|
): Promise<TransactionManagerStatuses> {
|
423
442
|
this.statuses = [];
|
424
443
|
this.lookupTables.reset();
|
425
444
|
|
426
|
-
if (!initialized) {
|
445
|
+
if (!items[0].initialized) {
|
427
446
|
for (const item of items) {
|
428
447
|
await item.initialize();
|
429
448
|
}
|
@@ -490,7 +509,7 @@ export class TransactionsManager {
|
|
490
509
|
this.updateStatus(
|
491
510
|
itemSet.name(),
|
492
511
|
TransactionStatus.Failed,
|
493
|
-
this.retries
|
512
|
+
this.retries
|
494
513
|
);
|
495
514
|
}
|
496
515
|
throw e;
|
@@ -504,17 +523,21 @@ export class TransactionsManager {
|
|
504
523
|
): Promise<TransactionSet | undefined> {
|
505
524
|
const itemSet = itemSets[currentIndex];
|
506
525
|
await itemSet.refetchAll(attemptNum);
|
507
|
-
|
526
|
+
|
508
527
|
const newItemSets = await this.assembleTransactionSets([
|
509
528
|
...itemSet.items,
|
510
529
|
...itemSets.slice(currentIndex + 1).flatMap((set) => set.items),
|
511
530
|
]);
|
512
|
-
|
531
|
+
|
513
532
|
if (newItemSets.length > 1) {
|
514
|
-
itemSets.splice(
|
533
|
+
itemSets.splice(
|
534
|
+
currentIndex + 1,
|
535
|
+
itemSets.length - currentIndex - 1,
|
536
|
+
...newItemSets.slice(1)
|
537
|
+
);
|
515
538
|
this.updateStatusForSets(newItemSets.slice(1));
|
516
539
|
}
|
517
|
-
|
540
|
+
|
518
541
|
return newItemSets[0];
|
519
542
|
}
|
520
543
|
|