@helium/spl-utils 0.2.21 → 0.2.22-next.33
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/package.json +9 -9
- package/lib/cjs/anchorError.js +0 -265
- package/lib/cjs/anchorError.js.map +0 -1
- package/lib/cjs/constants.js +0 -11
- package/lib/cjs/constants.js.map +0 -1
- package/lib/cjs/executeRemoteTxn.js +0 -109
- package/lib/cjs/executeRemoteTxn.js.map +0 -1
- package/lib/cjs/extendBorsh.js +0 -33
- package/lib/cjs/extendBorsh.js.map +0 -1
- package/lib/cjs/index.js +0 -33
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/mplAssetAPI.js +0 -188
- package/lib/cjs/mplAssetAPI.js.map +0 -1
- package/lib/cjs/proofArgsAndAccounts.js +0 -52
- package/lib/cjs/proofArgsAndAccounts.js.map +0 -1
- package/lib/cjs/token.js +0 -235
- package/lib/cjs/token.js.map +0 -1
- package/lib/cjs/transaction.js +0 -479
- package/lib/cjs/transaction.js.map +0 -1
- package/lib/cjs/utils.js +0 -116
- package/lib/cjs/utils.js.map +0 -1
- package/lib/esm/src/anchorError.js +0 -262
- package/lib/esm/src/anchorError.js.map +0 -1
- package/lib/esm/src/constants.js +0 -8
- package/lib/esm/src/constants.js.map +0 -1
- package/lib/esm/src/executeRemoteTxn.js +0 -79
- package/lib/esm/src/executeRemoteTxn.js.map +0 -1
- package/lib/esm/src/extendBorsh.js +0 -26
- package/lib/esm/src/extendBorsh.js.map +0 -1
- package/lib/esm/src/index.js +0 -10
- package/lib/esm/src/index.js.map +0 -1
- package/lib/esm/src/mplAssetAPI.js +0 -167
- package/lib/esm/src/mplAssetAPI.js.map +0 -1
- package/lib/esm/src/proofArgsAndAccounts.js +0 -37
- package/lib/esm/src/proofArgsAndAccounts.js.map +0 -1
- package/lib/esm/src/token.js +0 -208
- package/lib/esm/src/token.js.map +0 -1
- package/lib/esm/src/transaction.js +0 -415
- package/lib/esm/src/transaction.js.map +0 -1
- package/lib/esm/src/utils.js +0 -73
- package/lib/esm/src/utils.js.map +0 -1
- package/lib/esm/tsconfig.esm.tsbuildinfo +0 -1
- package/lib/types/src/anchorError.d.ts +0 -9
- package/lib/types/src/anchorError.d.ts.map +0 -1
- package/lib/types/src/constants.d.ts +0 -7
- package/lib/types/src/constants.d.ts.map +0 -1
- package/lib/types/src/executeRemoteTxn.d.ts +0 -23
- package/lib/types/src/executeRemoteTxn.d.ts.map +0 -1
- package/lib/types/src/extendBorsh.d.ts +0 -3
- package/lib/types/src/extendBorsh.d.ts.map +0 -1
- package/lib/types/src/index.d.ts +0 -12
- package/lib/types/src/index.d.ts.map +0 -1
- package/lib/types/src/mplAssetAPI.d.ts +0 -70
- package/lib/types/src/mplAssetAPI.d.ts.map +0 -1
- package/lib/types/src/proofArgsAndAccounts.d.ts +0 -21
- package/lib/types/src/proofArgsAndAccounts.d.ts.map +0 -1
- package/lib/types/src/token.d.ts +0 -21
- package/lib/types/src/token.d.ts.map +0 -1
- package/lib/types/src/transaction.d.ts +0 -37
- package/lib/types/src/transaction.d.ts.map +0 -1
- package/lib/types/src/utils.d.ts +0 -19
- package/lib/types/src/utils.d.ts.map +0 -1
package/lib/esm/src/token.js
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { createCreateMasterEditionV3Instruction, createCreateMetadataAccountV3Instruction, createVerifyCollectionInstruction, PROGRAM_ID as METADATA_PROGRAM_ID, } from "@metaplex-foundation/mpl-token-metadata";
|
|
2
|
-
import { createAssociatedTokenAccountInstruction, createInitializeMintInstruction, createMintToInstruction, createTransferInstruction, getAssociatedTokenAddress, TOKEN_PROGRAM_ID, } from "@solana/spl-token";
|
|
3
|
-
import { Keypair, PublicKey, SystemProgram, Transaction, } from "@solana/web3.js";
|
|
4
|
-
export async function mintTo(provider, mint, amount, destination) {
|
|
5
|
-
const mintTx = new Transaction();
|
|
6
|
-
mintTx.add(createMintToInstruction(mint, destination, provider.wallet.publicKey, amount));
|
|
7
|
-
try {
|
|
8
|
-
await provider.sendAndConfirm(mintTx);
|
|
9
|
-
}
|
|
10
|
-
catch (e) {
|
|
11
|
-
console.log("Error", e, e.logs);
|
|
12
|
-
if (e.logs) {
|
|
13
|
-
console.error(e.logs.join("\n"));
|
|
14
|
-
}
|
|
15
|
-
throw e;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export async function createAtaAndTransferInstructions(provider, mint, amount, from = provider.wallet.publicKey, to = provider.wallet.publicKey, payer = provider.wallet.publicKey) {
|
|
19
|
-
const toAta = await getAssociatedTokenAddress(mint, to, true);
|
|
20
|
-
const instructions = [];
|
|
21
|
-
if (!(await provider.connection.getAccountInfo(toAta))) {
|
|
22
|
-
instructions.push(createAssociatedTokenAccountInstruction(payer, toAta, to, mint));
|
|
23
|
-
}
|
|
24
|
-
const fromAta = await getAssociatedTokenAddress(mint, from, true);
|
|
25
|
-
if (amount != 0) {
|
|
26
|
-
instructions.push(createTransferInstruction(fromAta, toAta, from, BigInt(amount.toString())));
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
instructions,
|
|
30
|
-
toAta,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
export async function createAtaAndTransfer(provider, mint, amount, from = provider.wallet.publicKey, to = provider.wallet.publicKey, authority = provider.wallet.publicKey, payer = provider.wallet.publicKey, confirmOptions) {
|
|
34
|
-
const transferIx = new Transaction();
|
|
35
|
-
const { instructions, toAta } = await createAtaAndTransferInstructions(provider, mint, amount, from, to, payer);
|
|
36
|
-
if (instructions.length > 0)
|
|
37
|
-
transferIx.add(...instructions);
|
|
38
|
-
try {
|
|
39
|
-
if (instructions.length > 0)
|
|
40
|
-
await provider.sendAndConfirm(transferIx, undefined, confirmOptions);
|
|
41
|
-
}
|
|
42
|
-
catch (e) {
|
|
43
|
-
console.log("Error", e, e.logs);
|
|
44
|
-
if (e.logs) {
|
|
45
|
-
console.error(e.logs.join("\n"));
|
|
46
|
-
}
|
|
47
|
-
throw e;
|
|
48
|
-
}
|
|
49
|
-
return toAta;
|
|
50
|
-
}
|
|
51
|
-
export async function createAtaAndMintInstructions(provider, mint, amount, to = provider.wallet.publicKey, authority = provider.wallet.publicKey, payer = provider.wallet.publicKey) {
|
|
52
|
-
const ata = await getAssociatedTokenAddress(mint, to, true);
|
|
53
|
-
const instructions = [];
|
|
54
|
-
if (!(await provider.connection.getAccountInfo(ata))) {
|
|
55
|
-
instructions.push(createAssociatedTokenAccountInstruction(payer, ata, to, mint));
|
|
56
|
-
}
|
|
57
|
-
if (amount != 0) {
|
|
58
|
-
instructions.push(createMintToInstruction(mint, ata, authority, BigInt(amount.toString())));
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
instructions,
|
|
62
|
-
ata,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
export async function createAtaAndMint(provider, mint, amount, to = provider.wallet.publicKey, authority = provider.wallet.publicKey, payer = provider.wallet.publicKey, confirmOptions) {
|
|
66
|
-
const mintTx = new Transaction();
|
|
67
|
-
const { instructions, ata } = await createAtaAndMintInstructions(provider, mint, amount, to, authority, payer);
|
|
68
|
-
if (instructions.length > 0)
|
|
69
|
-
mintTx.add(...instructions);
|
|
70
|
-
try {
|
|
71
|
-
if (instructions.length > 0)
|
|
72
|
-
await provider.sendAndConfirm(mintTx, undefined, confirmOptions);
|
|
73
|
-
}
|
|
74
|
-
catch (e) {
|
|
75
|
-
console.log("Error", e, e.logs);
|
|
76
|
-
if (e.logs) {
|
|
77
|
-
console.error(e.logs.join("\n"));
|
|
78
|
-
}
|
|
79
|
-
throw e;
|
|
80
|
-
}
|
|
81
|
-
return ata;
|
|
82
|
-
}
|
|
83
|
-
export async function createMintInstructions(provider, decimals, mintAuthority, freezeAuthority = null, mintKeypair = Keypair.generate()) {
|
|
84
|
-
const mintKey = mintKeypair.publicKey;
|
|
85
|
-
return [
|
|
86
|
-
SystemProgram.createAccount({
|
|
87
|
-
fromPubkey: provider.wallet.publicKey,
|
|
88
|
-
newAccountPubkey: mintKey,
|
|
89
|
-
space: 82,
|
|
90
|
-
lamports: await provider.connection.getMinimumBalanceForRentExemption(82),
|
|
91
|
-
programId: TOKEN_PROGRAM_ID,
|
|
92
|
-
}),
|
|
93
|
-
await createInitializeMintInstruction(mintKeypair.publicKey, decimals, mintAuthority, freezeAuthority),
|
|
94
|
-
];
|
|
95
|
-
}
|
|
96
|
-
export async function createMint(provider, decimals, mintAuthority, freezeAuthority = null, mintKeypair = Keypair.generate()) {
|
|
97
|
-
const tx = new Transaction();
|
|
98
|
-
tx.add(...(await createMintInstructions(provider, decimals, mintAuthority, freezeAuthority, mintKeypair)));
|
|
99
|
-
try {
|
|
100
|
-
await provider.sendAndConfirm(tx, [mintKeypair]);
|
|
101
|
-
}
|
|
102
|
-
catch (e) {
|
|
103
|
-
console.log("Error", e, e.logs);
|
|
104
|
-
if (e.logs) {
|
|
105
|
-
console.error(e.logs.join("\n"));
|
|
106
|
-
}
|
|
107
|
-
throw e;
|
|
108
|
-
}
|
|
109
|
-
return mintKeypair.publicKey;
|
|
110
|
-
}
|
|
111
|
-
export async function createNft(provider, recipient, data = {}, collectionKey, mintKeypair = Keypair.generate(), holderKey = provider.wallet.publicKey) {
|
|
112
|
-
const mintKey = mintKeypair.publicKey;
|
|
113
|
-
const instructions = await createMintInstructions(provider, 0, provider.wallet.publicKey, provider.wallet.publicKey, mintKeypair);
|
|
114
|
-
const [metadata] = PublicKey.findProgramAddressSync([
|
|
115
|
-
Buffer.from("metadata", "utf8"),
|
|
116
|
-
METADATA_PROGRAM_ID.toBuffer(),
|
|
117
|
-
mintKey.toBuffer(),
|
|
118
|
-
], METADATA_PROGRAM_ID);
|
|
119
|
-
instructions.push(await createCreateMetadataAccountV3Instruction({
|
|
120
|
-
metadata,
|
|
121
|
-
mint: mintKey,
|
|
122
|
-
mintAuthority: provider.wallet.publicKey,
|
|
123
|
-
payer: provider.wallet.publicKey,
|
|
124
|
-
updateAuthority: provider.wallet.publicKey,
|
|
125
|
-
}, {
|
|
126
|
-
createMetadataAccountArgsV3: {
|
|
127
|
-
data: {
|
|
128
|
-
name: "test",
|
|
129
|
-
symbol: "TST",
|
|
130
|
-
uri: "https://shdw-drive.genesysgo.net/6tcnBSybPG7piEDShBcrVtYJDPSvGrDbVvXmXKpzBvWP/dc.json",
|
|
131
|
-
sellerFeeBasisPoints: 10,
|
|
132
|
-
creators: [
|
|
133
|
-
{
|
|
134
|
-
address: holderKey,
|
|
135
|
-
verified: true,
|
|
136
|
-
share: 100,
|
|
137
|
-
},
|
|
138
|
-
],
|
|
139
|
-
collection: collectionKey
|
|
140
|
-
? { key: collectionKey, verified: false }
|
|
141
|
-
: null,
|
|
142
|
-
uses: null,
|
|
143
|
-
...data,
|
|
144
|
-
},
|
|
145
|
-
isMutable: true,
|
|
146
|
-
collectionDetails: null,
|
|
147
|
-
},
|
|
148
|
-
}));
|
|
149
|
-
const { instructions: mintInstrs } = await createAtaAndMintInstructions(provider, mintKeypair.publicKey, 1, recipient);
|
|
150
|
-
instructions.push(...mintInstrs);
|
|
151
|
-
if (collectionKey) {
|
|
152
|
-
const [collectionMetadataAccount] = PublicKey.findProgramAddressSync([
|
|
153
|
-
Buffer.from("metadata", "utf8"),
|
|
154
|
-
METADATA_PROGRAM_ID.toBuffer(),
|
|
155
|
-
collectionKey.toBuffer(),
|
|
156
|
-
], METADATA_PROGRAM_ID);
|
|
157
|
-
const [collectionMasterEdition] = PublicKey.findProgramAddressSync([
|
|
158
|
-
Buffer.from("metadata", "utf8"),
|
|
159
|
-
METADATA_PROGRAM_ID.toBuffer(),
|
|
160
|
-
collectionKey.toBuffer(),
|
|
161
|
-
Buffer.from("edition", "utf8"),
|
|
162
|
-
], METADATA_PROGRAM_ID);
|
|
163
|
-
const instruction = createVerifyCollectionInstruction({
|
|
164
|
-
metadata: metadata,
|
|
165
|
-
collectionAuthority: provider.wallet.publicKey,
|
|
166
|
-
payer: provider.wallet.publicKey,
|
|
167
|
-
collectionMint: collectionKey,
|
|
168
|
-
collection: collectionMetadataAccount,
|
|
169
|
-
collectionMasterEditionAccount: collectionMasterEdition,
|
|
170
|
-
});
|
|
171
|
-
instructions.push(instruction);
|
|
172
|
-
}
|
|
173
|
-
const [edition] = PublicKey.findProgramAddressSync([
|
|
174
|
-
Buffer.from("metadata", "utf8"),
|
|
175
|
-
METADATA_PROGRAM_ID.toBuffer(),
|
|
176
|
-
mintKey.toBuffer(),
|
|
177
|
-
Buffer.from("edition", "utf8"),
|
|
178
|
-
], METADATA_PROGRAM_ID);
|
|
179
|
-
instructions.push(createCreateMasterEditionV3Instruction({
|
|
180
|
-
edition,
|
|
181
|
-
mint: mintKey,
|
|
182
|
-
updateAuthority: provider.wallet.publicKey,
|
|
183
|
-
mintAuthority: provider.wallet.publicKey,
|
|
184
|
-
payer: provider.wallet.publicKey,
|
|
185
|
-
metadata,
|
|
186
|
-
}, {
|
|
187
|
-
createMasterEditionArgs: {
|
|
188
|
-
maxSupply: 0,
|
|
189
|
-
},
|
|
190
|
-
}));
|
|
191
|
-
const tx = new Transaction();
|
|
192
|
-
tx.add(...instructions);
|
|
193
|
-
try {
|
|
194
|
-
await provider.sendAndConfirm(tx, [mintKeypair]);
|
|
195
|
-
}
|
|
196
|
-
catch (e) {
|
|
197
|
-
console.log("Error", e, e.logs);
|
|
198
|
-
if (e.logs) {
|
|
199
|
-
console.error(e.logs.join("\n"));
|
|
200
|
-
}
|
|
201
|
-
throw e;
|
|
202
|
-
}
|
|
203
|
-
return {
|
|
204
|
-
mintKey,
|
|
205
|
-
collectionKey,
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
//# sourceMappingURL=token.js.map
|
package/lib/esm/src/token.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/token.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,415 +0,0 @@
|
|
|
1
|
-
import { Transaction, } from "@solana/web3.js";
|
|
2
|
-
import bs58 from "bs58";
|
|
3
|
-
import { ProgramError } from "./anchorError";
|
|
4
|
-
export const chunks = (array, size) => Array.apply(0, new Array(Math.ceil(array.length / size))).map((_, index) => array.slice(index * size, (index + 1) * size));
|
|
5
|
-
async function sleep(ms) {
|
|
6
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
-
}
|
|
8
|
-
async function promiseAllInOrder(it) {
|
|
9
|
-
let ret = [];
|
|
10
|
-
for (const i of it) {
|
|
11
|
-
ret.push(await i());
|
|
12
|
-
}
|
|
13
|
-
return ret;
|
|
14
|
-
}
|
|
15
|
-
export async function sendInstructions(provider, instructions, signers = [], payer = provider.wallet.publicKey, commitment = "confirmed", idlErrors = new Map()) {
|
|
16
|
-
if (instructions.length == 0) {
|
|
17
|
-
return "";
|
|
18
|
-
}
|
|
19
|
-
let tx = new Transaction();
|
|
20
|
-
tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
|
|
21
|
-
tx.feePayer = payer || provider.wallet.publicKey;
|
|
22
|
-
tx.add(...instructions);
|
|
23
|
-
if (signers.length > 0) {
|
|
24
|
-
tx.partialSign(...signers);
|
|
25
|
-
}
|
|
26
|
-
if (tx.feePayer.equals(provider.wallet.publicKey) ||
|
|
27
|
-
tx.instructions.some((ix) => ix.keys.some((key) => key.isSigner && key.pubkey.equals(provider.wallet.publicKey)))) {
|
|
28
|
-
tx = await provider.wallet.signTransaction(tx);
|
|
29
|
-
}
|
|
30
|
-
try {
|
|
31
|
-
const { txid } = await sendAndConfirmWithRetry(provider.connection, tx.serialize(), {
|
|
32
|
-
skipPreflight: true,
|
|
33
|
-
}, commitment);
|
|
34
|
-
return txid;
|
|
35
|
-
}
|
|
36
|
-
catch (e) {
|
|
37
|
-
console.error(e);
|
|
38
|
-
const wrappedE = ProgramError.parse(e, idlErrors);
|
|
39
|
-
throw wrappedE == null ? e : wrappedE;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function truthy(value) {
|
|
43
|
-
return !!value;
|
|
44
|
-
}
|
|
45
|
-
export async function sendMultipleInstructions(provider, instructionGroups, signerGroups, payer, finality = "confirmed", idlErrors = new Map()) {
|
|
46
|
-
const recentBlockhash = (await provider.connection.getLatestBlockhash("confirmed")).blockhash;
|
|
47
|
-
const ixAndSigners = instructionGroups
|
|
48
|
-
.map((instructions, i) => {
|
|
49
|
-
const signers = signerGroups[i];
|
|
50
|
-
return {
|
|
51
|
-
instructions,
|
|
52
|
-
signers,
|
|
53
|
-
};
|
|
54
|
-
})
|
|
55
|
-
.filter(({ instructions }) => instructions.length > 0);
|
|
56
|
-
const txns = ixAndSigners.map(({ instructions }) => {
|
|
57
|
-
const tx = new Transaction({
|
|
58
|
-
feePayer: payer || provider.wallet.publicKey,
|
|
59
|
-
recentBlockhash,
|
|
60
|
-
});
|
|
61
|
-
tx.add(...instructions);
|
|
62
|
-
return tx;
|
|
63
|
-
});
|
|
64
|
-
const txnsSignedByWallet = await provider.wallet.signAllTransactions(txns);
|
|
65
|
-
const txnsSigned = txnsSignedByWallet
|
|
66
|
-
.map((tx, index) => {
|
|
67
|
-
const signers = ixAndSigners[index].signers;
|
|
68
|
-
if (signers.length > 0) {
|
|
69
|
-
tx.partialSign(...signers);
|
|
70
|
-
}
|
|
71
|
-
return tx;
|
|
72
|
-
})
|
|
73
|
-
.map((tx) => tx.serialize());
|
|
74
|
-
console.log("Sending multiple transactions...");
|
|
75
|
-
try {
|
|
76
|
-
return await promiseAllInOrder(txnsSigned.map((txn) => async () => {
|
|
77
|
-
const { txid } = await sendAndConfirmWithRetry(provider.connection, txn, {
|
|
78
|
-
skipPreflight: true,
|
|
79
|
-
}, finality);
|
|
80
|
-
return txid;
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
catch (e) {
|
|
84
|
-
console.error(e);
|
|
85
|
-
const wrappedE = ProgramError.parse(e, idlErrors);
|
|
86
|
-
throw wrappedE == null ? e : wrappedE;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
export async function execute(program, provider, command, payer = provider.wallet.publicKey, commitment) {
|
|
90
|
-
const { instructions, signers, output } = command;
|
|
91
|
-
const errors = program.idl.errors?.reduce((acc, err) => {
|
|
92
|
-
acc.set(err.code, `${err.name}: ${err.msg}`);
|
|
93
|
-
return acc;
|
|
94
|
-
}, new Map());
|
|
95
|
-
if (instructions.length > 0) {
|
|
96
|
-
const txid = await sendInstructions(provider, instructions, signers, payer, commitment, errors);
|
|
97
|
-
return { txid, ...output };
|
|
98
|
-
}
|
|
99
|
-
// @ts-ignore
|
|
100
|
-
return output;
|
|
101
|
-
}
|
|
102
|
-
export async function executeBig(program, provider, command, payer = provider.wallet.publicKey, finality) {
|
|
103
|
-
const { instructions, signers, output } = command;
|
|
104
|
-
const errors = program.idl.errors?.reduce((acc, err) => {
|
|
105
|
-
acc.set(err.code, `${err.name}: ${err.msg}`);
|
|
106
|
-
return acc;
|
|
107
|
-
}, new Map());
|
|
108
|
-
if (instructions.length > 0) {
|
|
109
|
-
const txids = await sendMultipleInstructions(provider, instructions, signers, payer || provider.wallet.publicKey, finality, errors);
|
|
110
|
-
return {
|
|
111
|
-
...output,
|
|
112
|
-
txids: Array.from(txids),
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
// @ts-ignore
|
|
116
|
-
return output;
|
|
117
|
-
}
|
|
118
|
-
function getUnixTime() {
|
|
119
|
-
return new Date().valueOf() / 1000;
|
|
120
|
-
}
|
|
121
|
-
const SEND_TRANSACTION_INTERVAL = 10;
|
|
122
|
-
export const awaitTransactionSignatureConfirmation = async (txid, timeout, connection, commitment = "recent", queryStatus = false) => {
|
|
123
|
-
let done = false;
|
|
124
|
-
let status = {
|
|
125
|
-
slot: 0,
|
|
126
|
-
confirmations: 0,
|
|
127
|
-
err: null,
|
|
128
|
-
};
|
|
129
|
-
let subId = 0;
|
|
130
|
-
status = await new Promise(async (resolve, reject) => {
|
|
131
|
-
const t = setTimeout(() => {
|
|
132
|
-
if (done) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
done = true;
|
|
136
|
-
console.log("Rejecting for timeout...");
|
|
137
|
-
reject({ timeout: true });
|
|
138
|
-
}, timeout);
|
|
139
|
-
try {
|
|
140
|
-
subId = connection.onSignature(txid, (result, context) => {
|
|
141
|
-
status = {
|
|
142
|
-
err: result.err,
|
|
143
|
-
slot: context.slot,
|
|
144
|
-
confirmations: 0,
|
|
145
|
-
};
|
|
146
|
-
done = true;
|
|
147
|
-
if (result.err) {
|
|
148
|
-
console.log("Rejected via websocket", result.err);
|
|
149
|
-
reject(status);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
resolve(status);
|
|
153
|
-
}
|
|
154
|
-
}, commitment);
|
|
155
|
-
}
|
|
156
|
-
catch (e) {
|
|
157
|
-
console.error("WS error in setup", txid, e);
|
|
158
|
-
}
|
|
159
|
-
finally {
|
|
160
|
-
done = true;
|
|
161
|
-
clearTimeout(t);
|
|
162
|
-
}
|
|
163
|
-
while (!done && queryStatus) {
|
|
164
|
-
// eslint-disable-next-line no-loop-func
|
|
165
|
-
(async () => {
|
|
166
|
-
try {
|
|
167
|
-
const signatureStatuses = await connection.getSignatureStatuses([
|
|
168
|
-
txid,
|
|
169
|
-
]);
|
|
170
|
-
status = signatureStatuses && signatureStatuses.value[0];
|
|
171
|
-
if (!done) {
|
|
172
|
-
if (!status) {
|
|
173
|
-
}
|
|
174
|
-
else if (status.err) {
|
|
175
|
-
console.log("REST error for", txid, status);
|
|
176
|
-
done = true;
|
|
177
|
-
reject(status.err);
|
|
178
|
-
}
|
|
179
|
-
else if (!status.confirmations && !status.confirmationStatus) {
|
|
180
|
-
console.log("REST no confirmations for", txid, status);
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
console.log("REST confirmation for", txid, status);
|
|
184
|
-
if (!status.confirmationStatus ||
|
|
185
|
-
status.confirmationStatus == commitment) {
|
|
186
|
-
done = true;
|
|
187
|
-
resolve(status);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
catch (e) {
|
|
193
|
-
if (!done) {
|
|
194
|
-
console.log("REST connection error: txid", txid, e);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
})();
|
|
198
|
-
await sleep(2000);
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
if (
|
|
202
|
-
//@ts-ignore
|
|
203
|
-
connection._signatureSubscriptions &&
|
|
204
|
-
//@ts-ignore
|
|
205
|
-
connection._signatureSubscriptions[subId]) {
|
|
206
|
-
connection.removeSignatureListener(subId);
|
|
207
|
-
}
|
|
208
|
-
done = true;
|
|
209
|
-
return status;
|
|
210
|
-
};
|
|
211
|
-
async function simulateTransaction(connection, transaction, commitment) {
|
|
212
|
-
// @ts-ignore
|
|
213
|
-
transaction.recentBlockhash = await connection._recentBlockhash(
|
|
214
|
-
// @ts-ignore
|
|
215
|
-
connection._disableBlockhashCaching);
|
|
216
|
-
const signData = transaction.serializeMessage();
|
|
217
|
-
// @ts-ignore
|
|
218
|
-
const wireTransaction = transaction._serialize(signData);
|
|
219
|
-
const encodedTransaction = wireTransaction.toString("base64");
|
|
220
|
-
const config = { encoding: "base64", commitment };
|
|
221
|
-
const args = [encodedTransaction, config];
|
|
222
|
-
// @ts-ignore
|
|
223
|
-
const res = await connection._rpcRequest("simulateTransaction", args);
|
|
224
|
-
if (res.error) {
|
|
225
|
-
throw new Error("failed to simulate transaction: " + res.error.message);
|
|
226
|
-
}
|
|
227
|
-
return res.result;
|
|
228
|
-
}
|
|
229
|
-
const DEFAULT_TIMEOUT = 3 * 60 * 1000; // 3 minutes
|
|
230
|
-
/*
|
|
231
|
-
A validator has up to 120s to accept the transaction and send it into a block.
|
|
232
|
-
If it doesn’t happen within that timeframe, your transaction is dropped and you’ll need
|
|
233
|
-
to send the transaction again. You can get the transaction signature and periodically
|
|
234
|
-
Ping the network for that transaction signature. If you never get anything back,
|
|
235
|
-
that means it’s definitely been dropped. If you do get a response back, you can keep pinging
|
|
236
|
-
that means it’s definitely been dropped. If you do get a response back, you can keep pinging
|
|
237
|
-
until it’s gone to a confirmed status to move on.
|
|
238
|
-
*/
|
|
239
|
-
export async function sendAndConfirmWithRetry(connection, txn, sendOptions, commitment, timeout = DEFAULT_TIMEOUT) {
|
|
240
|
-
let done = false;
|
|
241
|
-
let slot = 0;
|
|
242
|
-
const txid = await connection.sendRawTransaction(txn, sendOptions);
|
|
243
|
-
console.log("txid", txid);
|
|
244
|
-
const startTime = getUnixTime();
|
|
245
|
-
(async () => {
|
|
246
|
-
while (!done && getUnixTime() - startTime < timeout) {
|
|
247
|
-
await connection.sendRawTransaction(txn, sendOptions);
|
|
248
|
-
await sleep(500);
|
|
249
|
-
}
|
|
250
|
-
})();
|
|
251
|
-
try {
|
|
252
|
-
const confirmation = await awaitTransactionSignatureConfirmation(txid, timeout, connection, commitment, true);
|
|
253
|
-
if (!confirmation)
|
|
254
|
-
throw new Error("Timed out awaiting confirmation on transaction");
|
|
255
|
-
if (confirmation.err) {
|
|
256
|
-
const tx = await connection.getTransaction(txid, {
|
|
257
|
-
commitment: "confirmed",
|
|
258
|
-
});
|
|
259
|
-
console.error(tx?.meta?.logMessages?.join("\n"));
|
|
260
|
-
console.error(confirmation.err);
|
|
261
|
-
throw new Error("Transaction failed: Custom instruction error");
|
|
262
|
-
}
|
|
263
|
-
slot = confirmation?.slot || 0;
|
|
264
|
-
}
|
|
265
|
-
catch (err) {
|
|
266
|
-
console.error("Error caught", err);
|
|
267
|
-
if (err.timeout) {
|
|
268
|
-
throw new Error("Timed out awaiting confirmation on transaction");
|
|
269
|
-
}
|
|
270
|
-
const tx = await connection.getTransaction(txid, {
|
|
271
|
-
commitment: "confirmed",
|
|
272
|
-
});
|
|
273
|
-
if (tx && tx.meta && tx.meta.logMessages) {
|
|
274
|
-
console.error(tx.meta.logMessages.join("\n"));
|
|
275
|
-
}
|
|
276
|
-
if (err.err) {
|
|
277
|
-
throw err.err;
|
|
278
|
-
}
|
|
279
|
-
throw err;
|
|
280
|
-
}
|
|
281
|
-
finally {
|
|
282
|
-
done = true;
|
|
283
|
-
}
|
|
284
|
-
console.log("Latency", txid, getUnixTime() - startTime);
|
|
285
|
-
return { txid };
|
|
286
|
-
}
|
|
287
|
-
export function stringToTransaction(solanaTransaction) {
|
|
288
|
-
return Transaction.from(Buffer.from(solanaTransaction));
|
|
289
|
-
}
|
|
290
|
-
export function bufferToTransaction(solanaTransaction) {
|
|
291
|
-
return Transaction.from(solanaTransaction);
|
|
292
|
-
}
|
|
293
|
-
async function withRetries(tries, input) {
|
|
294
|
-
for (let i = 0; i < tries; i++) {
|
|
295
|
-
try {
|
|
296
|
-
return await input();
|
|
297
|
-
}
|
|
298
|
-
catch (e) {
|
|
299
|
-
console.log(`Retrying ${i}...`, e);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
throw new Error("Failed after retries");
|
|
303
|
-
}
|
|
304
|
-
const TX_BATCH_SIZE = 200;
|
|
305
|
-
export async function bulkSendTransactions(provider, txs, onProgress, triesRemaining = 10 // Number of blockhashes to try resending txs with before giving up
|
|
306
|
-
) {
|
|
307
|
-
let ret = [];
|
|
308
|
-
// attempt to chunk by blockhash bounds (so signing doesn't take too long)
|
|
309
|
-
for (let chunk of chunks(txs, TX_BATCH_SIZE)) {
|
|
310
|
-
const thisRet = [];
|
|
311
|
-
// Continually send in bulk while resetting blockhash until we send them all
|
|
312
|
-
while (true) {
|
|
313
|
-
const recentBlockhash = await withRetries(5, () => provider.connection.getLatestBlockhash("confirmed"));
|
|
314
|
-
const blockhashedTxs = await Promise.all(chunk.map(async (tx) => {
|
|
315
|
-
tx.recentBlockhash = recentBlockhash.blockhash;
|
|
316
|
-
return tx;
|
|
317
|
-
}));
|
|
318
|
-
const signedTxs = await provider.wallet.signAllTransactions(blockhashedTxs);
|
|
319
|
-
const txsWithSigs = signedTxs.map((tx, index) => {
|
|
320
|
-
return {
|
|
321
|
-
transaction: chunk[index],
|
|
322
|
-
sig: bs58.encode(tx.signatures[0].signature),
|
|
323
|
-
};
|
|
324
|
-
});
|
|
325
|
-
const confirmedTxs = await bulkSendRawTransactions(provider.connection, signedTxs.map((s) => s.serialize()), ({ totalProgress, ...rest }) => onProgress &&
|
|
326
|
-
onProgress({ ...rest, totalProgress: totalProgress + ret.length + thisRet.length }), recentBlockhash.lastValidBlockHeight,
|
|
327
|
-
// Hail mary, try with preflight enabled. Sometimes this causes
|
|
328
|
-
// errors that wouldn't otherwise happen
|
|
329
|
-
triesRemaining != 1);
|
|
330
|
-
thisRet.push(...confirmedTxs);
|
|
331
|
-
if (confirmedTxs.length == signedTxs.length) {
|
|
332
|
-
break;
|
|
333
|
-
}
|
|
334
|
-
const retSet = new Set(thisRet);
|
|
335
|
-
chunk = txsWithSigs
|
|
336
|
-
.filter(({ sig }) => !retSet.has(sig))
|
|
337
|
-
.map(({ transaction }) => transaction);
|
|
338
|
-
triesRemaining--;
|
|
339
|
-
if (triesRemaining <= 0) {
|
|
340
|
-
throw new Error(`Failed to submit all txs after blockhashes expired, ${signedTxs.length - confirmedTxs.length} remain`);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
ret.push(...thisRet);
|
|
344
|
-
}
|
|
345
|
-
return ret;
|
|
346
|
-
}
|
|
347
|
-
// Returns the list of succesfully sent txns
|
|
348
|
-
// NOTE: The return signatures are ordered by confirmation, not by order they are passed
|
|
349
|
-
// This list should be in order. Seom txns may fail
|
|
350
|
-
// due to blockhash exp
|
|
351
|
-
export async function bulkSendRawTransactions(connection, txs, onProgress, lastValidBlockHeight, skipPreflight = true) {
|
|
352
|
-
const txBatchSize = TX_BATCH_SIZE;
|
|
353
|
-
let totalProgress = 0;
|
|
354
|
-
const ret = [];
|
|
355
|
-
if (!lastValidBlockHeight) {
|
|
356
|
-
const blockhash = await withRetries(5, () => connection.getLatestBlockhash("confirmed"));
|
|
357
|
-
lastValidBlockHeight = blockhash.lastValidBlockHeight;
|
|
358
|
-
}
|
|
359
|
-
for (let chunk of chunks(txs, txBatchSize)) {
|
|
360
|
-
let currentBatchProgress = 0;
|
|
361
|
-
let pendingCount = chunk.length;
|
|
362
|
-
let txids = [];
|
|
363
|
-
let lastRetry = 0;
|
|
364
|
-
while (pendingCount > 0) {
|
|
365
|
-
if ((await withRetries(5, () => connection.getBlockHeight())) >
|
|
366
|
-
lastValidBlockHeight) {
|
|
367
|
-
return ret;
|
|
368
|
-
}
|
|
369
|
-
// only resend txs every 4s
|
|
370
|
-
if (lastRetry < new Date().valueOf() - 4 * 1000) {
|
|
371
|
-
lastRetry = new Date().valueOf();
|
|
372
|
-
txids = [];
|
|
373
|
-
for (const tx of chunk) {
|
|
374
|
-
const txid = await connection.sendRawTransaction(tx, {
|
|
375
|
-
skipPreflight,
|
|
376
|
-
});
|
|
377
|
-
txids.push(txid);
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
const statuses = await getAllTxns(connection, txids);
|
|
381
|
-
const completed = statuses.filter((status) => status !== null);
|
|
382
|
-
totalProgress += completed.length;
|
|
383
|
-
currentBatchProgress += completed.length;
|
|
384
|
-
onProgress &&
|
|
385
|
-
onProgress({
|
|
386
|
-
totalProgress: totalProgress,
|
|
387
|
-
currentBatchProgress: currentBatchProgress,
|
|
388
|
-
currentBatchSize: txBatchSize,
|
|
389
|
-
});
|
|
390
|
-
const failures = completed
|
|
391
|
-
.map((status) => status !== null && status.meta?.err)
|
|
392
|
-
.filter(truthy);
|
|
393
|
-
if (failures.length > 0) {
|
|
394
|
-
console.error(failures);
|
|
395
|
-
throw new Error("Failed to run txs");
|
|
396
|
-
}
|
|
397
|
-
ret.push(...txids
|
|
398
|
-
.map((txid, idx) => statuses[idx] == null ? null : txid)
|
|
399
|
-
.filter(truthy));
|
|
400
|
-
chunk = chunk.filter((_, index) => statuses[index] === null);
|
|
401
|
-
txids = txids.filter((_, index) => statuses[index] === null);
|
|
402
|
-
pendingCount -= completed.length;
|
|
403
|
-
await sleep(1000); // Wait one seconds before querying again
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
return ret;
|
|
407
|
-
}
|
|
408
|
-
const MAX_GET_SIGNATURE_STATUSES_QUERY_ITEMS = 200;
|
|
409
|
-
async function getAllTxns(connection, txids) {
|
|
410
|
-
return (await Promise.all(chunks(txids, MAX_GET_SIGNATURE_STATUSES_QUERY_ITEMS).map((txids) => connection.getTransactions(txids, {
|
|
411
|
-
maxSupportedTransactionVersion: 0,
|
|
412
|
-
commitment: "confirmed",
|
|
413
|
-
})))).flat();
|
|
414
|
-
}
|
|
415
|
-
//# sourceMappingURL=transaction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/transaction.ts"],"names":[],"mappings":"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"}
|