@drift-labs/sdk 2.31.1-beta.7 → 2.31.1-beta.9
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.
- package/VERSION +1 -1
- package/lib/driftClient.d.ts +2 -1
- package/lib/driftClient.js +15 -4
- package/lib/idl/drift.json +1 -1
- package/lib/tx/retryTxSender.d.ts +12 -3
- package/lib/tx/retryTxSender.js +22 -22
- package/lib/tx/types.d.ts +2 -2
- package/package.json +1 -1
- package/src/driftClient.ts +18 -4
- package/src/idl/drift.json +1 -1
- package/src/tx/retryTxSender.ts +39 -35
- package/src/tx/types.ts +2 -2
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.31.1-beta.
|
|
1
|
+
2.31.1-beta.9
|
package/lib/driftClient.d.ts
CHANGED
|
@@ -124,6 +124,7 @@ export declare class DriftClient {
|
|
|
124
124
|
getReferrerNameAccountsForAuthority(authority: PublicKey): Promise<ReferrerNameAccount[]>;
|
|
125
125
|
deleteUser(subAccountId?: number, txParams?: TxParams): Promise<TransactionSignature>;
|
|
126
126
|
getUser(subAccountId?: number, authority?: PublicKey): User;
|
|
127
|
+
hasUser(subAccountId?: number, authority?: PublicKey): boolean;
|
|
127
128
|
getUsers(): User[];
|
|
128
129
|
getUserStats(): UserStats;
|
|
129
130
|
fetchReferrerNameAccount(name: string): Promise<ReferrerNameAccount | undefined>;
|
|
@@ -191,7 +192,7 @@ export declare class DriftClient {
|
|
|
191
192
|
private getWrappedSolAccountCreationIxs;
|
|
192
193
|
getAssociatedTokenAccountCreationIx(tokenMintAddress: PublicKey, associatedTokenAddress: PublicKey): anchor.web3.TransactionInstruction;
|
|
193
194
|
/**
|
|
194
|
-
* Creates the
|
|
195
|
+
* Creates the User account for a user, and deposits some initial collateral
|
|
195
196
|
* @param amount
|
|
196
197
|
* @param userTokenAccount
|
|
197
198
|
* @param marketIndex
|
package/lib/driftClient.js
CHANGED
|
@@ -136,7 +136,12 @@ class DriftClient {
|
|
|
136
136
|
this.accountSubscriber = new webSocketDriftClientAccountSubscriber_1.WebSocketDriftClientAccountSubscriber(this.program, (_r = config.perpMarketIndexes) !== null && _r !== void 0 ? _r : [], (_s = config.spotMarketIndexes) !== null && _s !== void 0 ? _s : [], (_t = config.oracleInfos) !== null && _t !== void 0 ? _t : [], noMarketsAndOraclesSpecified);
|
|
137
137
|
}
|
|
138
138
|
this.eventEmitter = this.accountSubscriber.eventEmitter;
|
|
139
|
-
this.txSender =
|
|
139
|
+
this.txSender =
|
|
140
|
+
(_u = config.txSender) !== null && _u !== void 0 ? _u : new retryTxSender_1.RetryTxSender({
|
|
141
|
+
connection: this.connection,
|
|
142
|
+
wallet: this.wallet,
|
|
143
|
+
opts: this.opts,
|
|
144
|
+
});
|
|
140
145
|
}
|
|
141
146
|
getUserMapKey(subAccountId, authority) {
|
|
142
147
|
return `${subAccountId}_${authority.toString()}`;
|
|
@@ -287,7 +292,7 @@ class DriftClient {
|
|
|
287
292
|
const newProgram = new anchor_1.Program(drift_json_1.default, this.program.programId, newProvider);
|
|
288
293
|
this.skipLoadUsers = false;
|
|
289
294
|
// Update provider for txSender with new wallet details
|
|
290
|
-
this.txSender.
|
|
295
|
+
this.txSender.wallet = newWallet;
|
|
291
296
|
this.wallet = newWallet;
|
|
292
297
|
this.provider = newProvider;
|
|
293
298
|
this.program = newProgram;
|
|
@@ -619,10 +624,16 @@ class DriftClient {
|
|
|
619
624
|
authority = authority !== null && authority !== void 0 ? authority : this.authority;
|
|
620
625
|
const userMapKey = this.getUserMapKey(subAccountId, authority);
|
|
621
626
|
if (!this.users.has(userMapKey)) {
|
|
622
|
-
throw new Error(`
|
|
627
|
+
throw new Error(`DriftClient has no user for user id ${userMapKey}`);
|
|
623
628
|
}
|
|
624
629
|
return this.users.get(userMapKey);
|
|
625
630
|
}
|
|
631
|
+
hasUser(subAccountId, authority) {
|
|
632
|
+
subAccountId = subAccountId !== null && subAccountId !== void 0 ? subAccountId : this.activeSubAccountId;
|
|
633
|
+
authority = authority !== null && authority !== void 0 ? authority : this.authority;
|
|
634
|
+
const userMapKey = this.getUserMapKey(subAccountId, authority);
|
|
635
|
+
return this.users.has(userMapKey);
|
|
636
|
+
}
|
|
626
637
|
getUsers() {
|
|
627
638
|
// delegate users get added to the end
|
|
628
639
|
return [...this.users.values()]
|
|
@@ -1077,7 +1088,7 @@ class DriftClient {
|
|
|
1077
1088
|
return (0, spl_token_1.createAssociatedTokenAccountInstruction)(this.wallet.publicKey, associatedTokenAddress, this.wallet.publicKey, tokenMintAddress);
|
|
1078
1089
|
}
|
|
1079
1090
|
/**
|
|
1080
|
-
* Creates the
|
|
1091
|
+
* Creates the User account for a user, and deposits some initial collateral
|
|
1081
1092
|
* @param amount
|
|
1082
1093
|
* @param userTokenAccount
|
|
1083
1094
|
* @param marketIndex
|
package/lib/idl/drift.json
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { TxSender, TxSigAndSlot } from './types';
|
|
3
3
|
import { Commitment, ConfirmOptions, RpcResponseAndContext, Signer, SignatureResult, Transaction, TransactionSignature, Connection, VersionedTransaction, TransactionInstruction, AddressLookupTableAccount } from '@solana/web3.js';
|
|
4
|
-
import {
|
|
4
|
+
import { IWallet } from '../types';
|
|
5
5
|
type ResolveReference = {
|
|
6
6
|
resolve?: () => void;
|
|
7
7
|
};
|
|
8
8
|
export declare class RetryTxSender implements TxSender {
|
|
9
|
-
|
|
9
|
+
connection: Connection;
|
|
10
|
+
wallet: IWallet;
|
|
11
|
+
opts: ConfirmOptions;
|
|
10
12
|
timeout: number;
|
|
11
13
|
retrySleep: number;
|
|
12
14
|
additionalConnections: Connection[];
|
|
13
15
|
timoutCount: number;
|
|
14
|
-
constructor(
|
|
16
|
+
constructor({ connection, wallet, opts, timeout, retrySleep, additionalConnections, }: {
|
|
17
|
+
connection: Connection;
|
|
18
|
+
wallet: IWallet;
|
|
19
|
+
opts?: ConfirmOptions;
|
|
20
|
+
timeout?: number;
|
|
21
|
+
retrySleep?: number;
|
|
22
|
+
additionalConnections?: any;
|
|
23
|
+
});
|
|
15
24
|
send(tx: Transaction, additionalSigners?: Array<Signer>, opts?: ConfirmOptions, preSigned?: boolean): Promise<TxSigAndSlot>;
|
|
16
25
|
prepareTx(tx: Transaction, additionalSigners: Array<Signer>, opts: ConfirmOptions): Promise<Transaction>;
|
|
17
26
|
getVersionedTransaction(ixs: TransactionInstruction[], lookupTableAccounts: AddressLookupTableAccount[], additionalSigners?: Array<Signer>, opts?: ConfirmOptions): Promise<VersionedTransaction>;
|
package/lib/tx/retryTxSender.js
CHANGED
|
@@ -5,16 +5,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.RetryTxSender = void 0;
|
|
7
7
|
const web3_js_1 = require("@solana/web3.js");
|
|
8
|
+
const anchor_1 = require("@coral-xyz/anchor");
|
|
8
9
|
const assert_1 = __importDefault(require("assert"));
|
|
9
10
|
const bs58_1 = __importDefault(require("bs58"));
|
|
10
11
|
const DEFAULT_TIMEOUT = 35000;
|
|
11
12
|
const DEFAULT_RETRY = 8000;
|
|
12
13
|
class RetryTxSender {
|
|
13
|
-
constructor(
|
|
14
|
+
constructor({ connection, wallet, opts = anchor_1.AnchorProvider.defaultOptions(), timeout = DEFAULT_TIMEOUT, retrySleep = DEFAULT_RETRY, additionalConnections = new Array(), }) {
|
|
14
15
|
this.timoutCount = 0;
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
16
|
+
this.connection = connection;
|
|
17
|
+
this.wallet = wallet;
|
|
18
|
+
this.opts = opts;
|
|
19
|
+
this.timeout = timeout;
|
|
20
|
+
this.retrySleep = retrySleep;
|
|
18
21
|
this.additionalConnections = additionalConnections;
|
|
19
22
|
}
|
|
20
23
|
async send(tx, additionalSigners, opts, preSigned) {
|
|
@@ -22,7 +25,7 @@ class RetryTxSender {
|
|
|
22
25
|
additionalSigners = [];
|
|
23
26
|
}
|
|
24
27
|
if (opts === undefined) {
|
|
25
|
-
opts = this.
|
|
28
|
+
opts = this.opts;
|
|
26
29
|
}
|
|
27
30
|
const signedTx = preSigned
|
|
28
31
|
? tx
|
|
@@ -30,14 +33,14 @@ class RetryTxSender {
|
|
|
30
33
|
return this.sendRawTransaction(signedTx.serialize(), opts);
|
|
31
34
|
}
|
|
32
35
|
async prepareTx(tx, additionalSigners, opts) {
|
|
33
|
-
tx.feePayer = this.
|
|
34
|
-
tx.recentBlockhash = (await this.
|
|
36
|
+
tx.feePayer = this.wallet.publicKey;
|
|
37
|
+
tx.recentBlockhash = (await this.connection.getRecentBlockhash(opts.preflightCommitment)).blockhash;
|
|
35
38
|
additionalSigners
|
|
36
39
|
.filter((s) => s !== undefined)
|
|
37
40
|
.forEach((kp) => {
|
|
38
41
|
tx.partialSign(kp);
|
|
39
42
|
});
|
|
40
|
-
const signedTx = await this.
|
|
43
|
+
const signedTx = await this.wallet.signTransaction(tx);
|
|
41
44
|
return signedTx;
|
|
42
45
|
}
|
|
43
46
|
async getVersionedTransaction(ixs, lookupTableAccounts, additionalSigners, opts) {
|
|
@@ -45,11 +48,11 @@ class RetryTxSender {
|
|
|
45
48
|
additionalSigners = [];
|
|
46
49
|
}
|
|
47
50
|
if (opts === undefined) {
|
|
48
|
-
opts = this.
|
|
51
|
+
opts = this.opts;
|
|
49
52
|
}
|
|
50
53
|
const message = new web3_js_1.TransactionMessage({
|
|
51
|
-
payerKey: this.
|
|
52
|
-
recentBlockhash: (await this.
|
|
54
|
+
payerKey: this.wallet.publicKey,
|
|
55
|
+
recentBlockhash: (await this.connection.getRecentBlockhash(opts.preflightCommitment)).blockhash,
|
|
53
56
|
instructions: ixs,
|
|
54
57
|
}).compileToV0Message(lookupTableAccounts);
|
|
55
58
|
const tx = new web3_js_1.VersionedTransaction(message);
|
|
@@ -61,9 +64,9 @@ class RetryTxSender {
|
|
|
61
64
|
signedTx = tx;
|
|
62
65
|
// @ts-ignore
|
|
63
66
|
}
|
|
64
|
-
else if (this.
|
|
67
|
+
else if (this.wallet.payer) {
|
|
65
68
|
// @ts-ignore
|
|
66
|
-
tx.sign((additionalSigners !== null && additionalSigners !== void 0 ? additionalSigners : []).concat(this.
|
|
69
|
+
tx.sign((additionalSigners !== null && additionalSigners !== void 0 ? additionalSigners : []).concat(this.wallet.payer));
|
|
67
70
|
signedTx = tx;
|
|
68
71
|
}
|
|
69
72
|
else {
|
|
@@ -71,10 +74,10 @@ class RetryTxSender {
|
|
|
71
74
|
tx.sign([kp]);
|
|
72
75
|
});
|
|
73
76
|
// @ts-ignore
|
|
74
|
-
signedTx = await this.
|
|
77
|
+
signedTx = await this.wallet.signTransaction(tx);
|
|
75
78
|
}
|
|
76
79
|
if (opts === undefined) {
|
|
77
|
-
opts = this.
|
|
80
|
+
opts = this.opts;
|
|
78
81
|
}
|
|
79
82
|
return this.sendRawTransaction(signedTx.serialize(), opts);
|
|
80
83
|
}
|
|
@@ -82,7 +85,7 @@ class RetryTxSender {
|
|
|
82
85
|
const startTime = this.getTimestamp();
|
|
83
86
|
let txid;
|
|
84
87
|
try {
|
|
85
|
-
txid = await this.
|
|
88
|
+
txid = await this.connection.sendRawTransaction(rawTransaction, opts);
|
|
86
89
|
this.sendToAdditionalConnections(rawTransaction, opts);
|
|
87
90
|
}
|
|
88
91
|
catch (e) {
|
|
@@ -103,7 +106,7 @@ class RetryTxSender {
|
|
|
103
106
|
while (!done && this.getTimestamp() - startTime < this.timeout) {
|
|
104
107
|
await this.sleep(resolveReference);
|
|
105
108
|
if (!done) {
|
|
106
|
-
this.
|
|
109
|
+
this.connection
|
|
107
110
|
.sendRawTransaction(rawTransaction, opts)
|
|
108
111
|
.catch((e) => {
|
|
109
112
|
console.error(e);
|
|
@@ -137,12 +140,9 @@ class RetryTxSender {
|
|
|
137
140
|
}
|
|
138
141
|
(0, assert_1.default)(decodedSignature.length === 64, 'signature has invalid length');
|
|
139
142
|
const start = Date.now();
|
|
140
|
-
const subscriptionCommitment = commitment || this.
|
|
143
|
+
const subscriptionCommitment = commitment || this.opts.commitment;
|
|
141
144
|
const subscriptionIds = new Array();
|
|
142
|
-
const connections = [
|
|
143
|
-
this.provider.connection,
|
|
144
|
-
...this.additionalConnections,
|
|
145
|
-
];
|
|
145
|
+
const connections = [this.connection, ...this.additionalConnections];
|
|
146
146
|
let response = null;
|
|
147
147
|
const promises = connections.map((connection, i) => {
|
|
148
148
|
let subscriptionId;
|
package/lib/tx/types.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { Provider } from '@coral-xyz/anchor';
|
|
3
2
|
import { AddressLookupTableAccount, ConfirmOptions, Signer, Transaction, TransactionInstruction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';
|
|
3
|
+
import { IWallet } from '../types';
|
|
4
4
|
export type TxSigAndSlot = {
|
|
5
5
|
txSig: TransactionSignature;
|
|
6
6
|
slot: number;
|
|
7
7
|
};
|
|
8
8
|
export interface TxSender {
|
|
9
|
-
|
|
9
|
+
wallet: IWallet;
|
|
10
10
|
send(tx: Transaction, additionalSigners?: Array<Signer>, opts?: ConfirmOptions, preSigned?: boolean): Promise<TxSigAndSlot>;
|
|
11
11
|
sendVersionedTransaction(tx: VersionedTransaction, additionalSigners?: Array<Signer>, opts?: ConfirmOptions, preSigned?: boolean): Promise<TxSigAndSlot>;
|
|
12
12
|
getVersionedTransaction(ixs: TransactionInstruction[], lookupTableAccounts: AddressLookupTableAccount[], additionalSigners?: Array<Signer>, opts?: ConfirmOptions): Promise<VersionedTransaction>;
|
package/package.json
CHANGED
package/src/driftClient.ts
CHANGED
|
@@ -273,7 +273,13 @@ export class DriftClient {
|
|
|
273
273
|
);
|
|
274
274
|
}
|
|
275
275
|
this.eventEmitter = this.accountSubscriber.eventEmitter;
|
|
276
|
-
this.txSender =
|
|
276
|
+
this.txSender =
|
|
277
|
+
config.txSender ??
|
|
278
|
+
new RetryTxSender({
|
|
279
|
+
connection: this.connection,
|
|
280
|
+
wallet: this.wallet,
|
|
281
|
+
opts: this.opts,
|
|
282
|
+
});
|
|
277
283
|
}
|
|
278
284
|
|
|
279
285
|
public getUserMapKey(subAccountId: number, authority: PublicKey): string {
|
|
@@ -514,7 +520,7 @@ export class DriftClient {
|
|
|
514
520
|
|
|
515
521
|
this.skipLoadUsers = false;
|
|
516
522
|
// Update provider for txSender with new wallet details
|
|
517
|
-
this.txSender.
|
|
523
|
+
this.txSender.wallet = newWallet;
|
|
518
524
|
this.wallet = newWallet;
|
|
519
525
|
this.provider = newProvider;
|
|
520
526
|
this.program = newProgram;
|
|
@@ -1044,11 +1050,19 @@ export class DriftClient {
|
|
|
1044
1050
|
const userMapKey = this.getUserMapKey(subAccountId, authority);
|
|
1045
1051
|
|
|
1046
1052
|
if (!this.users.has(userMapKey)) {
|
|
1047
|
-
throw new Error(`
|
|
1053
|
+
throw new Error(`DriftClient has no user for user id ${userMapKey}`);
|
|
1048
1054
|
}
|
|
1049
1055
|
return this.users.get(userMapKey);
|
|
1050
1056
|
}
|
|
1051
1057
|
|
|
1058
|
+
public hasUser(subAccountId?: number, authority?: PublicKey): boolean {
|
|
1059
|
+
subAccountId = subAccountId ?? this.activeSubAccountId;
|
|
1060
|
+
authority = authority ?? this.authority;
|
|
1061
|
+
const userMapKey = this.getUserMapKey(subAccountId, authority);
|
|
1062
|
+
|
|
1063
|
+
return this.users.has(userMapKey);
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1052
1066
|
public getUsers(): User[] {
|
|
1053
1067
|
// delegate users get added to the end
|
|
1054
1068
|
return [...this.users.values()]
|
|
@@ -1706,7 +1720,7 @@ export class DriftClient {
|
|
|
1706
1720
|
}
|
|
1707
1721
|
|
|
1708
1722
|
/**
|
|
1709
|
-
* Creates the
|
|
1723
|
+
* Creates the User account for a user, and deposits some initial collateral
|
|
1710
1724
|
* @param amount
|
|
1711
1725
|
* @param userTokenAccount
|
|
1712
1726
|
* @param marketIndex
|
package/src/idl/drift.json
CHANGED
package/src/tx/retryTxSender.ts
CHANGED
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
import { AnchorProvider } from '@coral-xyz/anchor';
|
|
18
18
|
import assert from 'assert';
|
|
19
19
|
import bs58 from 'bs58';
|
|
20
|
+
import { IWallet } from '../types';
|
|
20
21
|
|
|
21
22
|
const DEFAULT_TIMEOUT = 35000;
|
|
22
23
|
const DEFAULT_RETRY = 8000;
|
|
@@ -26,21 +27,34 @@ type ResolveReference = {
|
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
export class RetryTxSender implements TxSender {
|
|
29
|
-
|
|
30
|
+
connection: Connection;
|
|
31
|
+
wallet: IWallet;
|
|
32
|
+
opts: ConfirmOptions;
|
|
30
33
|
timeout: number;
|
|
31
34
|
retrySleep: number;
|
|
32
35
|
additionalConnections: Connection[];
|
|
33
36
|
timoutCount = 0;
|
|
34
37
|
|
|
35
|
-
public constructor(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
public constructor({
|
|
39
|
+
connection,
|
|
40
|
+
wallet,
|
|
41
|
+
opts = AnchorProvider.defaultOptions(),
|
|
42
|
+
timeout = DEFAULT_TIMEOUT,
|
|
43
|
+
retrySleep = DEFAULT_RETRY,
|
|
44
|
+
additionalConnections = new Array<Connection>(),
|
|
45
|
+
}: {
|
|
46
|
+
connection: Connection;
|
|
47
|
+
wallet: IWallet;
|
|
48
|
+
opts?: ConfirmOptions;
|
|
49
|
+
timeout?: number;
|
|
50
|
+
retrySleep?: number;
|
|
51
|
+
additionalConnections?;
|
|
52
|
+
}) {
|
|
53
|
+
this.connection = connection;
|
|
54
|
+
this.wallet = wallet;
|
|
55
|
+
this.opts = opts;
|
|
56
|
+
this.timeout = timeout;
|
|
57
|
+
this.retrySleep = retrySleep;
|
|
44
58
|
this.additionalConnections = additionalConnections;
|
|
45
59
|
}
|
|
46
60
|
|
|
@@ -54,7 +68,7 @@ export class RetryTxSender implements TxSender {
|
|
|
54
68
|
additionalSigners = [];
|
|
55
69
|
}
|
|
56
70
|
if (opts === undefined) {
|
|
57
|
-
opts = this.
|
|
71
|
+
opts = this.opts;
|
|
58
72
|
}
|
|
59
73
|
|
|
60
74
|
const signedTx = preSigned
|
|
@@ -69,11 +83,9 @@ export class RetryTxSender implements TxSender {
|
|
|
69
83
|
additionalSigners: Array<Signer>,
|
|
70
84
|
opts: ConfirmOptions
|
|
71
85
|
): Promise<Transaction> {
|
|
72
|
-
tx.feePayer = this.
|
|
86
|
+
tx.feePayer = this.wallet.publicKey;
|
|
73
87
|
tx.recentBlockhash = (
|
|
74
|
-
await this.
|
|
75
|
-
opts.preflightCommitment
|
|
76
|
-
)
|
|
88
|
+
await this.connection.getRecentBlockhash(opts.preflightCommitment)
|
|
77
89
|
).blockhash;
|
|
78
90
|
|
|
79
91
|
additionalSigners
|
|
@@ -82,7 +94,7 @@ export class RetryTxSender implements TxSender {
|
|
|
82
94
|
tx.partialSign(kp);
|
|
83
95
|
});
|
|
84
96
|
|
|
85
|
-
const signedTx = await this.
|
|
97
|
+
const signedTx = await this.wallet.signTransaction(tx);
|
|
86
98
|
|
|
87
99
|
return signedTx;
|
|
88
100
|
}
|
|
@@ -97,15 +109,13 @@ export class RetryTxSender implements TxSender {
|
|
|
97
109
|
additionalSigners = [];
|
|
98
110
|
}
|
|
99
111
|
if (opts === undefined) {
|
|
100
|
-
opts = this.
|
|
112
|
+
opts = this.opts;
|
|
101
113
|
}
|
|
102
114
|
|
|
103
115
|
const message = new TransactionMessage({
|
|
104
|
-
payerKey: this.
|
|
116
|
+
payerKey: this.wallet.publicKey,
|
|
105
117
|
recentBlockhash: (
|
|
106
|
-
await this.
|
|
107
|
-
opts.preflightCommitment
|
|
108
|
-
)
|
|
118
|
+
await this.connection.getRecentBlockhash(opts.preflightCommitment)
|
|
109
119
|
).blockhash,
|
|
110
120
|
instructions: ixs,
|
|
111
121
|
}).compileToV0Message(lookupTableAccounts);
|
|
@@ -125,9 +135,9 @@ export class RetryTxSender implements TxSender {
|
|
|
125
135
|
if (preSigned) {
|
|
126
136
|
signedTx = tx;
|
|
127
137
|
// @ts-ignore
|
|
128
|
-
} else if (this.
|
|
138
|
+
} else if (this.wallet.payer) {
|
|
129
139
|
// @ts-ignore
|
|
130
|
-
tx.sign((additionalSigners ?? []).concat(this.
|
|
140
|
+
tx.sign((additionalSigners ?? []).concat(this.wallet.payer));
|
|
131
141
|
signedTx = tx;
|
|
132
142
|
} else {
|
|
133
143
|
additionalSigners
|
|
@@ -136,11 +146,11 @@ export class RetryTxSender implements TxSender {
|
|
|
136
146
|
tx.sign([kp]);
|
|
137
147
|
});
|
|
138
148
|
// @ts-ignore
|
|
139
|
-
signedTx = await this.
|
|
149
|
+
signedTx = await this.wallet.signTransaction(tx);
|
|
140
150
|
}
|
|
141
151
|
|
|
142
152
|
if (opts === undefined) {
|
|
143
|
-
opts = this.
|
|
153
|
+
opts = this.opts;
|
|
144
154
|
}
|
|
145
155
|
|
|
146
156
|
return this.sendRawTransaction(signedTx.serialize(), opts);
|
|
@@ -154,10 +164,7 @@ export class RetryTxSender implements TxSender {
|
|
|
154
164
|
|
|
155
165
|
let txid: TransactionSignature;
|
|
156
166
|
try {
|
|
157
|
-
txid = await this.
|
|
158
|
-
rawTransaction,
|
|
159
|
-
opts
|
|
160
|
-
);
|
|
167
|
+
txid = await this.connection.sendRawTransaction(rawTransaction, opts);
|
|
161
168
|
this.sendToAdditionalConnections(rawTransaction, opts);
|
|
162
169
|
} catch (e) {
|
|
163
170
|
console.error(e);
|
|
@@ -179,7 +186,7 @@ export class RetryTxSender implements TxSender {
|
|
|
179
186
|
while (!done && this.getTimestamp() - startTime < this.timeout) {
|
|
180
187
|
await this.sleep(resolveReference);
|
|
181
188
|
if (!done) {
|
|
182
|
-
this.
|
|
189
|
+
this.connection
|
|
183
190
|
.sendRawTransaction(rawTransaction, opts)
|
|
184
191
|
.catch((e) => {
|
|
185
192
|
console.error(e);
|
|
@@ -218,13 +225,10 @@ export class RetryTxSender implements TxSender {
|
|
|
218
225
|
assert(decodedSignature.length === 64, 'signature has invalid length');
|
|
219
226
|
|
|
220
227
|
const start = Date.now();
|
|
221
|
-
const subscriptionCommitment = commitment || this.
|
|
228
|
+
const subscriptionCommitment = commitment || this.opts.commitment;
|
|
222
229
|
|
|
223
230
|
const subscriptionIds = new Array<number>();
|
|
224
|
-
const connections = [
|
|
225
|
-
this.provider.connection,
|
|
226
|
-
...this.additionalConnections,
|
|
227
|
-
];
|
|
231
|
+
const connections = [this.connection, ...this.additionalConnections];
|
|
228
232
|
let response: RpcResponseAndContext<SignatureResult> | null = null;
|
|
229
233
|
const promises = connections.map((connection, i) => {
|
|
230
234
|
let subscriptionId;
|
package/src/tx/types.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Provider } from '@coral-xyz/anchor';
|
|
2
1
|
import {
|
|
3
2
|
AddressLookupTableAccount,
|
|
4
3
|
ConfirmOptions,
|
|
@@ -8,6 +7,7 @@ import {
|
|
|
8
7
|
TransactionSignature,
|
|
9
8
|
VersionedTransaction,
|
|
10
9
|
} from '@solana/web3.js';
|
|
10
|
+
import { IWallet } from '../types';
|
|
11
11
|
|
|
12
12
|
export type TxSigAndSlot = {
|
|
13
13
|
txSig: TransactionSignature;
|
|
@@ -15,7 +15,7 @@ export type TxSigAndSlot = {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
export interface TxSender {
|
|
18
|
-
|
|
18
|
+
wallet: IWallet;
|
|
19
19
|
|
|
20
20
|
send(
|
|
21
21
|
tx: Transaction,
|