@deserialize/multi-vm-wallet 1.0.37 → 1.0.41
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/dist/svm/transactionSender.js +6 -2
- package/dist/svm/transactionSender.js.map +1 -1
- package/dist/svm/utils.js +159 -20
- package/dist/svm/utils.js.map +1 -1
- package/dist/test.d.ts +2 -0
- package/dist/test.js +42 -0
- package/dist/test.js.map +1 -0
- package/package.json +1 -1
- package/utils/svm/transactionSender.ts +7 -2
- package/utils/svm/utils.ts +201 -29
- package/utils/test.ts +49 -0
|
@@ -12,6 +12,7 @@ const SEND_OPTIONS = {
|
|
|
12
12
|
};
|
|
13
13
|
async function transactionSenderAndConfirmationWaiter({ connection, serializedTransaction, blockhashWithExpiryBlockHeight, }) {
|
|
14
14
|
const txid = await connection.sendRawTransaction(serializedTransaction, SEND_OPTIONS);
|
|
15
|
+
console.log('initial send txid: ', txid);
|
|
15
16
|
const controller = new AbortController();
|
|
16
17
|
const abortSignal = controller.signal;
|
|
17
18
|
const abortableResender = async () => {
|
|
@@ -31,7 +32,8 @@ async function transactionSenderAndConfirmationWaiter({ connection, serializedTr
|
|
|
31
32
|
abortableResender();
|
|
32
33
|
const lastValidBlockHeight = blockhashWithExpiryBlockHeight.lastValidBlockHeight - 150;
|
|
33
34
|
// this would throw TransactionExpiredBlockheightExceededError
|
|
34
|
-
|
|
35
|
+
// console.log("conforming the transaction ....")
|
|
36
|
+
const res = await Promise.race([
|
|
35
37
|
connection.confirmTransaction({
|
|
36
38
|
...blockhashWithExpiryBlockHeight,
|
|
37
39
|
lastValidBlockHeight,
|
|
@@ -51,11 +53,13 @@ async function transactionSenderAndConfirmationWaiter({ connection, serializedTr
|
|
|
51
53
|
}
|
|
52
54
|
}),
|
|
53
55
|
]);
|
|
56
|
+
console.log('res: ', res);
|
|
54
57
|
}
|
|
55
58
|
catch (e) {
|
|
59
|
+
console.log('e: ', e);
|
|
56
60
|
if (e instanceof web3_js_1.TransactionExpiredBlockheightExceededError) {
|
|
57
61
|
// we consume this error and getTransaction would return null
|
|
58
|
-
return null;
|
|
62
|
+
// return null;
|
|
59
63
|
}
|
|
60
64
|
else {
|
|
61
65
|
// invalid state from web3.js
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionSender.js","sourceRoot":"","sources":["../../utils/svm/transactionSender.ts"],"names":[],"mappings":";;;;;AAmBA,
|
|
1
|
+
{"version":3,"file":"transactionSender.js","sourceRoot":"","sources":["../../utils/svm/transactionSender.ts"],"names":[],"mappings":"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"}
|
package/dist/svm/utils.js
CHANGED
|
@@ -8,7 +8,12 @@ const transactionSender_1 = require("./transactionSender");
|
|
|
8
8
|
const bn_js_1 = require("bn.js");
|
|
9
9
|
const JUPITER_BASE_URL = 'https://lite-api.jup.ag';
|
|
10
10
|
const createV0Transaction = async (connection, inX, signers, payerPubKey, blockHash) => {
|
|
11
|
+
console.log('createV0Transaction: Starting transaction creation');
|
|
12
|
+
console.log('Instructions count:', inX.length);
|
|
13
|
+
console.log('Signers count:', signers.length);
|
|
14
|
+
console.log('Payer public key:', payerPubKey.toString());
|
|
11
15
|
const blockhash = blockHash || (await connection.getLatestBlockhash()).blockhash;
|
|
16
|
+
console.log('Using blockhash:', blockhash);
|
|
12
17
|
const message = new web3_js_1.TransactionMessage({
|
|
13
18
|
payerKey: payerPubKey,
|
|
14
19
|
instructions: inX,
|
|
@@ -17,18 +22,30 @@ const createV0Transaction = async (connection, inX, signers, payerPubKey, blockH
|
|
|
17
22
|
const transaction = new web3_js_1.VersionedTransaction(message);
|
|
18
23
|
transaction.message.staticAccountKeys;
|
|
19
24
|
if (signers.length < 1) {
|
|
25
|
+
console.log('Signing transaction with signers');
|
|
20
26
|
transaction.sign(signers);
|
|
21
27
|
}
|
|
28
|
+
console.log('createV0Transaction: Transaction created successfully');
|
|
22
29
|
return transaction;
|
|
23
30
|
};
|
|
24
31
|
exports.createV0Transaction = createV0Transaction;
|
|
25
32
|
const createAtaAndIx = async (token, ownerPublicKey, tokenProgramId, connection) => {
|
|
33
|
+
console.log('createAtaAndIx: Starting ATA creation');
|
|
34
|
+
console.log('Token:', token.toString());
|
|
35
|
+
console.log('Owner:', ownerPublicKey.toString());
|
|
36
|
+
console.log('Token Program ID:', tokenProgramId.toString());
|
|
26
37
|
let AtaTokenIx;
|
|
27
38
|
const associatedToken = (0, spl_token_1.getAssociatedTokenAddressSync)(token, ownerPublicKey, false, tokenProgramId);
|
|
39
|
+
console.log('Associated token address:', associatedToken.toString());
|
|
28
40
|
const accountExist = await connection.getAccountInfo(associatedToken);
|
|
29
41
|
if (!accountExist) {
|
|
42
|
+
console.log('Account does not exist, creating ATA instruction');
|
|
30
43
|
AtaTokenIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(ownerPublicKey, associatedToken, ownerPublicKey, token, tokenProgramId);
|
|
31
44
|
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('Account already exists, no ATA instruction needed');
|
|
47
|
+
}
|
|
48
|
+
console.log('createAtaAndIx: Completed');
|
|
32
49
|
return {
|
|
33
50
|
AtaTokenIx,
|
|
34
51
|
associatedToken,
|
|
@@ -36,6 +53,9 @@ const createAtaAndIx = async (token, ownerPublicKey, tokenProgramId, connection)
|
|
|
36
53
|
};
|
|
37
54
|
exports.createAtaAndIx = createAtaAndIx;
|
|
38
55
|
const getSureAssociatedTokenAddressAndAccount = async (connection, token, owner) => {
|
|
56
|
+
console.log('getSureAssociatedTokenAddressAndAccount: Starting');
|
|
57
|
+
console.log('Token:', token.toString());
|
|
58
|
+
console.log('Owner:', owner.toString());
|
|
39
59
|
let ATA;
|
|
40
60
|
let programId;
|
|
41
61
|
let tokenAccount;
|
|
@@ -43,14 +63,21 @@ const getSureAssociatedTokenAddressAndAccount = async (connection, token, owner)
|
|
|
43
63
|
programId = token.equals(spl_token_1.NATIVE_MINT)
|
|
44
64
|
? spl_token_1.TOKEN_PROGRAM_ID
|
|
45
65
|
: spl_token_1.TOKEN_2022_PROGRAM_ID;
|
|
66
|
+
console.log('Trying with program ID:', programId.toString());
|
|
46
67
|
ATA = (0, spl_token_1.getAssociatedTokenAddressSync)(token, owner, true, programId);
|
|
68
|
+
console.log('ATA address:', ATA.toString());
|
|
47
69
|
tokenAccount = await (0, spl_token_1.getAccount)(connection, ATA, "confirmed", programId);
|
|
70
|
+
console.log('Token account found with TOKEN_2022_PROGRAM_ID');
|
|
48
71
|
return { ATA, programId, tokenAccount };
|
|
49
72
|
}
|
|
50
73
|
catch (error) {
|
|
74
|
+
console.log('Failed with TOKEN_2022_PROGRAM_ID, trying TOKEN_PROGRAM_ID');
|
|
75
|
+
console.log('Error:', error);
|
|
51
76
|
programId = spl_token_1.TOKEN_PROGRAM_ID;
|
|
52
77
|
ATA = (0, spl_token_1.getAssociatedTokenAddressSync)(token, owner, true, programId);
|
|
78
|
+
console.log('New ATA address:', ATA.toString());
|
|
53
79
|
tokenAccount = await (0, spl_token_1.getAccount)(connection, ATA, "confirmed", programId);
|
|
80
|
+
console.log('Token account found with TOKEN_PROGRAM_ID');
|
|
54
81
|
return { ATA, programId, tokenAccount };
|
|
55
82
|
}
|
|
56
83
|
};
|
|
@@ -68,6 +95,7 @@ const getProgramIdOfToken = async (owner, token, connection) => {
|
|
|
68
95
|
return spl_token_1.TOKEN_PROGRAM_ID;
|
|
69
96
|
}
|
|
70
97
|
catch (error) {
|
|
98
|
+
console.log('Failed with TOKEN_PROGRAM_ID, returning TOKEN_2022_PROGRAM_ID');
|
|
71
99
|
return spl_token_1.TOKEN_2022_PROGRAM_ID;
|
|
72
100
|
}
|
|
73
101
|
};
|
|
@@ -83,17 +111,20 @@ const getTokenBalance = async (address, token, connection) => {
|
|
|
83
111
|
// Get the balance from the token account
|
|
84
112
|
const tokenAccount = await (0, exports.getTokenAccountAccount)(token, address, connection);
|
|
85
113
|
if (!tokenAccount) {
|
|
86
|
-
console.
|
|
114
|
+
console.log("Token account not found");
|
|
87
115
|
return 0;
|
|
88
116
|
}
|
|
117
|
+
console.log('Token account found:', tokenAccount.address.toString());
|
|
89
118
|
const tokenBalance = await connection.getTokenAccountBalance(tokenAccount.address);
|
|
90
119
|
if (!tokenBalance) {
|
|
91
|
-
console.
|
|
120
|
+
console.log("Token balance not found");
|
|
92
121
|
return 0;
|
|
93
122
|
}
|
|
123
|
+
console.log('Token balance:', tokenBalance.value);
|
|
94
124
|
return tokenBalance.value;
|
|
95
125
|
}
|
|
96
126
|
catch (error) {
|
|
127
|
+
console.log('Error in getTokenBalance:', error);
|
|
97
128
|
return 0;
|
|
98
129
|
}
|
|
99
130
|
};
|
|
@@ -104,12 +135,14 @@ const getTokenAccountAccount = async (token, address, connection) => {
|
|
|
104
135
|
const associatedTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(token, // The token mint address
|
|
105
136
|
address // The user's public key
|
|
106
137
|
);
|
|
138
|
+
console.log('Associated token account:', associatedTokenAccount.toString());
|
|
107
139
|
// Fetch the token account information
|
|
108
140
|
const tokenAccount = await (0, spl_token_1.getAccount)(connection, associatedTokenAccount);
|
|
141
|
+
console.log('Token account retrieved successfully');
|
|
109
142
|
return tokenAccount;
|
|
110
143
|
}
|
|
111
144
|
catch (error) {
|
|
112
|
-
console.
|
|
145
|
+
console.log("Not token account for this");
|
|
113
146
|
return null;
|
|
114
147
|
}
|
|
115
148
|
};
|
|
@@ -123,46 +156,77 @@ const getTransferNativeInx = async (from, to, amount) => {
|
|
|
123
156
|
};
|
|
124
157
|
exports.getTransferNativeInx = getTransferNativeInx;
|
|
125
158
|
const getTransferNativeTransaction = async (from, to, amount, connection) => {
|
|
159
|
+
console.log('getTransferNativeTransaction: Starting');
|
|
126
160
|
const instruction = await (0, exports.getTransferNativeInx)(from.publicKey, to, amount);
|
|
127
161
|
const transaction = await (0, exports.createV0Transaction)(connection, [instruction], [from], from.publicKey);
|
|
162
|
+
console.log('getTransferNativeTransaction: Completed');
|
|
128
163
|
return transaction;
|
|
129
164
|
};
|
|
130
165
|
exports.getTransferNativeTransaction = getTransferNativeTransaction;
|
|
131
166
|
const getTransferTokenInx = async (from, to, token, amount, connection) => {
|
|
132
167
|
const inx = [];
|
|
133
168
|
const tokenToSend = new web3_js_1.PublicKey(token.address);
|
|
169
|
+
console.log('Token to send:', tokenToSend.toString());
|
|
134
170
|
const { ATA: source, programId, tokenAccount } = await (0, exports.getSureAssociatedTokenAddressAndAccount)(connection, from, tokenToSend);
|
|
171
|
+
console.log('Source ATA:', source.toString());
|
|
135
172
|
const { associatedToken: destination, AtaTokenIx } = await (0, exports.createAtaAndIx)(tokenToSend, to, programId, connection);
|
|
173
|
+
console.log('Destination ATA:', destination.toString());
|
|
136
174
|
if (!tokenAccount) {
|
|
175
|
+
console.log('Token account not found, throwing error');
|
|
137
176
|
throw new Error("Token account not found");
|
|
138
177
|
}
|
|
139
178
|
if (AtaTokenIx) {
|
|
179
|
+
console.log('Adding ATA creation instruction');
|
|
140
180
|
inx.push(AtaTokenIx);
|
|
141
181
|
}
|
|
182
|
+
console.log('Creating transfer instruction');
|
|
142
183
|
const tInx = (0, spl_token_1.createTransferCheckedInstruction)(source, tokenToSend, destination, from, amount, token.decimals, undefined, programId);
|
|
143
184
|
inx.push(tInx);
|
|
185
|
+
console.log('getTransferTokenInx: Completed with', inx.length, 'instructions');
|
|
144
186
|
return inx;
|
|
145
187
|
};
|
|
146
188
|
exports.getTransferTokenInx = getTransferTokenInx;
|
|
147
189
|
const getTransferTokenTransaction = async (from, to, token, amount, connection) => {
|
|
190
|
+
console.log('getTransferTokenTransaction: Starting');
|
|
148
191
|
const instruction = await (0, exports.getTransferTokenInx)(from.publicKey, to, token, amount, connection);
|
|
149
192
|
const transaction = await (0, exports.createV0Transaction)(connection, instruction, [from], from.publicKey);
|
|
193
|
+
console.log('getTransferTokenTransaction: Completed');
|
|
150
194
|
return transaction;
|
|
151
195
|
};
|
|
152
196
|
exports.getTransferTokenTransaction = getTransferTokenTransaction;
|
|
153
197
|
const signAndSendTransaction = async (transaction, connection, signers) => {
|
|
198
|
+
console.log('signAndSendTransaction: Starting');
|
|
199
|
+
console.log('Signers count:', signers.length);
|
|
154
200
|
transaction.sign(signers);
|
|
201
|
+
console.log('Transaction signed');
|
|
155
202
|
const blockhash = await connection.getLatestBlockhash();
|
|
156
|
-
|
|
203
|
+
console.log('Got latest blockhash:', blockhash.blockhash);
|
|
204
|
+
console.log('Sending transaction...');
|
|
205
|
+
const res = await (0, transactionSender_1.transactionSenderAndConfirmationWaiter)({
|
|
206
|
+
connection,
|
|
207
|
+
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
208
|
+
blockhashWithExpiryBlockHeight: {
|
|
209
|
+
blockhash: blockhash.blockhash,
|
|
210
|
+
lastValidBlockHeight: blockhash.lastValidBlockHeight
|
|
211
|
+
}
|
|
212
|
+
});
|
|
157
213
|
if (!res) {
|
|
214
|
+
console.log('Transaction failed to send or confirm');
|
|
158
215
|
throw new Error("Transaction failed to send or confirm");
|
|
159
216
|
}
|
|
160
|
-
|
|
217
|
+
const signature = res.transaction.signatures[0];
|
|
218
|
+
console.log('Transaction successful, signature:', signature);
|
|
219
|
+
return signature;
|
|
161
220
|
};
|
|
162
221
|
exports.signAndSendTransaction = signAndSendTransaction;
|
|
163
222
|
//swap
|
|
164
223
|
//you will. use jupiter for this
|
|
165
224
|
const getJupiterQuote = async (inputMint, outputMint, amount, slippageBps = 50) => {
|
|
225
|
+
// console.log('getJupiterQuote: Starting');
|
|
226
|
+
// console.log('Input mint:', inputMint);
|
|
227
|
+
// console.log('Output mint:', outputMint);
|
|
228
|
+
// console.log('Amount:', amount);
|
|
229
|
+
// console.log('Slippage BPS:', slippageBps);
|
|
166
230
|
const params = new URLSearchParams({
|
|
167
231
|
inputMint,
|
|
168
232
|
outputMint,
|
|
@@ -171,15 +235,37 @@ const getJupiterQuote = async (inputMint, outputMint, amount, slippageBps = 50)
|
|
|
171
235
|
onlyDirectRoutes: 'false',
|
|
172
236
|
asLegacyTransaction: 'false'
|
|
173
237
|
});
|
|
174
|
-
const
|
|
238
|
+
const url = `${JUPITER_BASE_URL}/swap/v1/quote?${params}`;
|
|
239
|
+
console.log('Request URL:', url);
|
|
240
|
+
const response = await fetch(url);
|
|
241
|
+
console.log('Response status:', response.status);
|
|
242
|
+
console.log('Response status text:', response.statusText);
|
|
175
243
|
if (!response.ok) {
|
|
176
|
-
|
|
177
|
-
|
|
244
|
+
console.log('Jupiter quote request failed');
|
|
245
|
+
console.log('Status:', response.status);
|
|
246
|
+
console.log('Status Text:', response.statusText);
|
|
247
|
+
console.log('URL:', url);
|
|
248
|
+
try {
|
|
249
|
+
const error = await response.json();
|
|
250
|
+
console.log('Error details:', error);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
const textError = await response.text();
|
|
254
|
+
console.log('Error text:', textError);
|
|
255
|
+
}
|
|
256
|
+
throw new Error(`Jupiter quote failed: ${response.statusText}`);
|
|
178
257
|
}
|
|
179
|
-
|
|
258
|
+
const result = await response.json();
|
|
259
|
+
console.log('Jupiter quote successful');
|
|
260
|
+
console.log('Quote result:', result);
|
|
261
|
+
return result;
|
|
180
262
|
};
|
|
181
263
|
exports.getJupiterQuote = getJupiterQuote;
|
|
182
264
|
const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationFeeLamports) => {
|
|
265
|
+
console.log('buildJupiterSwapTransaction: Starting');
|
|
266
|
+
console.log('User public key:', userPublicKey);
|
|
267
|
+
const priorityFee = prioritizationFeeLamports || 5000;
|
|
268
|
+
console.log('Prioritization fee:', priorityFee);
|
|
183
269
|
const body = {
|
|
184
270
|
quoteResponse: quote,
|
|
185
271
|
userPublicKey,
|
|
@@ -188,13 +274,14 @@ const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationF
|
|
|
188
274
|
feeAccount: undefined,
|
|
189
275
|
trackingAccount: undefined,
|
|
190
276
|
computeUnitPriceMicroLamports: undefined,
|
|
191
|
-
prioritizationFeeLamports:
|
|
277
|
+
prioritizationFeeLamports: priorityFee,
|
|
192
278
|
asLegacyTransaction: false,
|
|
193
279
|
useTokenLedger: false,
|
|
194
280
|
destinationTokenAccount: undefined,
|
|
195
281
|
dynamicComputeUnitLimit: true,
|
|
196
282
|
skipUserAccountsRpcCalls: false
|
|
197
283
|
};
|
|
284
|
+
console.log('Request body:', body);
|
|
198
285
|
const response = await fetch(`${JUPITER_BASE_URL}/swap/v1/swap`, {
|
|
199
286
|
method: 'POST',
|
|
200
287
|
headers: {
|
|
@@ -202,14 +289,35 @@ const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationF
|
|
|
202
289
|
},
|
|
203
290
|
body: JSON.stringify(body),
|
|
204
291
|
});
|
|
292
|
+
console.log('Swap transaction build response status:', response.status);
|
|
205
293
|
if (!response.ok) {
|
|
206
|
-
|
|
207
|
-
|
|
294
|
+
console.log('Jupiter swap transaction build failed');
|
|
295
|
+
console.log('Status:', response.status);
|
|
296
|
+
console.log('Status text:', response.statusText);
|
|
297
|
+
try {
|
|
298
|
+
const error = await response.json();
|
|
299
|
+
console.log('Swap build error details:', error);
|
|
300
|
+
throw new Error(`Jupiter swap transaction build failed: ${error.message || response.statusText}`);
|
|
301
|
+
}
|
|
302
|
+
catch (parseError) {
|
|
303
|
+
console.log('Failed to parse error response:', parseError);
|
|
304
|
+
throw new Error(`Jupiter swap transaction build failed: ${response.statusText}`);
|
|
305
|
+
}
|
|
208
306
|
}
|
|
209
|
-
|
|
307
|
+
const result = await response.json();
|
|
308
|
+
console.log('Jupiter swap transaction built successfully');
|
|
309
|
+
return result;
|
|
210
310
|
};
|
|
211
311
|
exports.buildJupiterSwapTransaction = buildJupiterSwapTransaction;
|
|
212
312
|
const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
313
|
+
console.log('executeJupiterSwap: Starting');
|
|
314
|
+
console.log('Swap params:', {
|
|
315
|
+
fromToken: swapParams.fromToken.toString(),
|
|
316
|
+
toToken: swapParams.toToken.toString(),
|
|
317
|
+
amount: swapParams.amount,
|
|
318
|
+
slippageBps: swapParams.slippageBps,
|
|
319
|
+
userPublicKey: swapParams.userPublicKey.toString()
|
|
320
|
+
});
|
|
213
321
|
try {
|
|
214
322
|
console.log('Getting Jupiter quote...');
|
|
215
323
|
const quote = await (0, exports.getJupiterQuote)(swapParams.fromToken.toString(), swapParams.toToken.toString(), swapParams.amount, swapParams.slippageBps);
|
|
@@ -222,11 +330,15 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
|
222
330
|
const swapResponse = await (0, exports.buildJupiterSwapTransaction)(quote, swapParams.userPublicKey.toString());
|
|
223
331
|
console.log('Deserializing transaction...');
|
|
224
332
|
const swapTransactionBuf = Buffer.from(swapResponse.swapTransaction, 'base64');
|
|
333
|
+
console.log('Transaction buffer length:', swapTransactionBuf.length);
|
|
225
334
|
const transaction = web3_js_1.VersionedTransaction.deserialize(swapTransactionBuf);
|
|
335
|
+
console.log('Transaction deserialized successfully');
|
|
226
336
|
console.log('Signing transaction...');
|
|
227
337
|
transaction.sign([payer]);
|
|
338
|
+
console.log('Transaction signed');
|
|
228
339
|
console.log('Sending transaction...');
|
|
229
340
|
const blockhash = await connection.getLatestBlockhash();
|
|
341
|
+
console.log('Got latest blockhash for confirmation');
|
|
230
342
|
const signature = await (0, transactionSender_1.transactionSenderAndConfirmationWaiter)({
|
|
231
343
|
connection,
|
|
232
344
|
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
@@ -235,23 +347,29 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
|
235
347
|
lastValidBlockHeight: blockhash.lastValidBlockHeight
|
|
236
348
|
}
|
|
237
349
|
});
|
|
350
|
+
// console.log('signature: ', signature);
|
|
238
351
|
if (!signature) {
|
|
352
|
+
console.log('Transaction failed to confirm');
|
|
239
353
|
return {
|
|
240
354
|
success: false,
|
|
241
355
|
error: 'Transaction failed to confirm'
|
|
242
356
|
};
|
|
243
357
|
}
|
|
244
|
-
|
|
358
|
+
const txSignature = signature.transaction.signatures[0];
|
|
359
|
+
console.log('Swap successful! Signature:', txSignature);
|
|
245
360
|
return {
|
|
246
361
|
success: true,
|
|
247
|
-
hash:
|
|
362
|
+
hash: txSignature,
|
|
248
363
|
inputAmount: quote.inAmount,
|
|
249
364
|
outputAmount: quote.outAmount,
|
|
250
365
|
priceImpact: quote.priceImpactPct
|
|
251
366
|
};
|
|
252
367
|
}
|
|
253
368
|
catch (error) {
|
|
254
|
-
console.
|
|
369
|
+
console.log('Jupiter swap failed with error:', error);
|
|
370
|
+
console.log('Error type:', typeof error);
|
|
371
|
+
console.log('Error message:', error instanceof Error ? error.message : 'Unknown error');
|
|
372
|
+
console.log('Error stack:', error instanceof Error ? error.stack : 'No stack trace');
|
|
255
373
|
return {
|
|
256
374
|
success: false,
|
|
257
375
|
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
@@ -260,44 +378,65 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
|
260
378
|
};
|
|
261
379
|
exports.executeJupiterSwap = executeJupiterSwap;
|
|
262
380
|
const uiAmountToBaseUnits = (uiAmount, decimals) => {
|
|
263
|
-
|
|
381
|
+
console.log('uiAmountToBaseUnits: Converting', uiAmount, 'with', decimals, 'decimals');
|
|
382
|
+
const result = Math.floor(uiAmount * Math.pow(10, decimals));
|
|
383
|
+
console.log('Converted to base units:', result);
|
|
384
|
+
return result;
|
|
264
385
|
};
|
|
265
386
|
exports.uiAmountToBaseUnits = uiAmountToBaseUnits;
|
|
266
387
|
const baseUnitsToUiAmount = (baseAmount, decimals) => {
|
|
267
|
-
|
|
388
|
+
console.log('baseUnitsToUiAmount: Converting', baseAmount, 'with', decimals, 'decimals');
|
|
389
|
+
const result = Number(baseAmount) / Math.pow(10, decimals);
|
|
390
|
+
console.log('Converted to UI amount:', result);
|
|
391
|
+
return result;
|
|
268
392
|
};
|
|
269
393
|
exports.baseUnitsToUiAmount = baseUnitsToUiAmount;
|
|
270
394
|
const getJupiterTokenList = async () => {
|
|
395
|
+
console.log('getJupiterTokenList: Fetching token list');
|
|
271
396
|
try {
|
|
272
397
|
const response = await fetch(`${JUPITER_BASE_URL}/tokens/v1/mints/tradable`);
|
|
398
|
+
console.log('Token list response status:', response.status);
|
|
273
399
|
if (!response.ok) {
|
|
400
|
+
console.log('Failed to fetch token list:', response.statusText);
|
|
274
401
|
throw new Error(`Failed to fetch token list: ${response.statusText}`);
|
|
275
402
|
}
|
|
276
|
-
|
|
403
|
+
const result = await response.json();
|
|
404
|
+
console.log('Token list fetched, count:', result.length);
|
|
405
|
+
return result;
|
|
277
406
|
}
|
|
278
407
|
catch (error) {
|
|
279
|
-
console.
|
|
408
|
+
console.log('Failed to fetch Jupiter token list:', error);
|
|
280
409
|
return [];
|
|
281
410
|
}
|
|
282
411
|
};
|
|
283
412
|
exports.getJupiterTokenList = getJupiterTokenList;
|
|
284
413
|
const validateJupiterTokens = async (inputMint, outputMint) => {
|
|
414
|
+
console.log('validateJupiterTokens: Starting validation');
|
|
415
|
+
console.log('Input mint:', inputMint);
|
|
416
|
+
console.log('Output mint:', outputMint);
|
|
285
417
|
try {
|
|
286
418
|
const tokenList = await (0, exports.getJupiterTokenList)();
|
|
287
419
|
const inputSupported = tokenList.includes(inputMint);
|
|
288
420
|
const outputSupported = tokenList.includes(outputMint);
|
|
421
|
+
console.log('Input token supported:', inputSupported);
|
|
422
|
+
console.log('Output token supported:', outputSupported);
|
|
289
423
|
if (!inputSupported && !outputSupported) {
|
|
424
|
+
console.log('Both tokens not supported');
|
|
290
425
|
return { valid: false, message: 'Both input and output tokens are not supported' };
|
|
291
426
|
}
|
|
292
427
|
if (!inputSupported) {
|
|
428
|
+
console.log('Input token not supported');
|
|
293
429
|
return { valid: false, message: 'Input token is not supported' };
|
|
294
430
|
}
|
|
295
431
|
if (!outputSupported) {
|
|
432
|
+
console.log('Output token not supported');
|
|
296
433
|
return { valid: false, message: 'Output token is not supported' };
|
|
297
434
|
}
|
|
435
|
+
console.log('Both tokens are supported');
|
|
298
436
|
return { valid: true };
|
|
299
437
|
}
|
|
300
438
|
catch (error) {
|
|
439
|
+
console.log('Token validation failed:', error);
|
|
301
440
|
return { valid: false, message: 'Failed to validate tokens' };
|
|
302
441
|
}
|
|
303
442
|
};
|
package/dist/svm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../utils/svm/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../utils/svm/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/test.d.ts
ADDED
package/dist/test.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.testUserKeyPair = void 0;
|
|
7
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
8
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
9
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
10
|
+
const bip32_1 = require("./bip32");
|
|
11
|
+
const svm_1 = require("./svm");
|
|
12
|
+
const vm_1 = require("./vm");
|
|
13
|
+
const mnemonic = (0, bip32_1.GenerateNewMnemonic)();
|
|
14
|
+
console.log('mnemonic: ', mnemonic);
|
|
15
|
+
const seed = vm_1.VM.mnemonicToSeed(mnemonic);
|
|
16
|
+
const pKey = "4QxETeX9pndiF1XNghUiDTnZnHq3cfjmuPLBJysrgocsLq1yb8w96aPWALa8ZnRZWmDU4wM8Tg8d1ZRVVByj7uXE";
|
|
17
|
+
exports.testUserKeyPair = web3_js_1.Keypair.fromSecretKey(bs58_1.default.decode(pKey));
|
|
18
|
+
const vm = new svm_1.SVMVM(seed);
|
|
19
|
+
// const vmFromMnemonic = SVMVM.fromMnemonic(mnemonic)
|
|
20
|
+
// const keyFromMnemonic = vmFromMnemonic.generatePrivateKey(0)
|
|
21
|
+
// console.log('keyFromMnemonic: ', keyFromMnemonic.privateKey.publicKey);
|
|
22
|
+
const key = vm.generatePrivateKey(0);
|
|
23
|
+
console.log('key: ', key.privateKey.publicKey);
|
|
24
|
+
const chainConfig = {
|
|
25
|
+
chainId: "solana-mainnet",
|
|
26
|
+
name: "Solana",
|
|
27
|
+
rpcUrl: "https://solana-mainnet.g.alchemy.com/v2/vB5mKztdJeFdz9RkW99Qf",
|
|
28
|
+
explorerUrl: "https://explorer.solana.com",
|
|
29
|
+
nativeToken: { name: "Solana", symbol: "SOL", decimals: 9 },
|
|
30
|
+
confirmationNo: 1,
|
|
31
|
+
};
|
|
32
|
+
const wallet = new svm_1.SVMChainWallet(chainConfig, exports.testUserKeyPair, key.index);
|
|
33
|
+
const toBuy = new web3_js_1.PublicKey("9BB6NFEcjBCtnNLFko2FqVQBq8HHM13kCyYcdQbgpump");
|
|
34
|
+
wallet.swap({
|
|
35
|
+
name: spl_token_1.NATIVE_MINT.toBase58(),
|
|
36
|
+
address: spl_token_1.NATIVE_MINT.toBase58(),
|
|
37
|
+
symbol: spl_token_1.NATIVE_MINT.toBase58(),
|
|
38
|
+
decimals: 9
|
|
39
|
+
}, toBuy, 0.005).then(res => console.log(res));
|
|
40
|
+
// console.log('wal: ', wal.address);
|
|
41
|
+
// wal.getNativeBalance().then(e => console.log(e))
|
|
42
|
+
//# sourceMappingURL=test.js.map
|
package/dist/test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../utils/test.ts"],"names":[],"mappings":";;;;;;AAEA,6CAAqD;AACrD,gDAA0B;AAC1B,iDAAgD;AAChD,mCAA8C;AAC9C,+BAA8C;AAC9C,6BAA0B;AAE1B,MAAM,QAAQ,GAAG,IAAA,2BAAmB,GAAE,CAAA;AAGtC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAEpC,MAAM,IAAI,GAAG,OAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;AACxC,MAAM,IAAI,GAAG,0FAA0F,CAAA;AAE1F,QAAA,eAAe,GAAG,iBAAO,CAAC,aAAa,CAAC,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,MAAM,EAAE,GAAG,IAAI,WAAK,CAAC,IAAI,CAAC,CAAA;AAC1B,sDAAsD;AACtD,+DAA+D;AAC/D,0EAA0E;AAC1E,MAAM,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;AACpC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAsB;IACnC,OAAO,EAAE,gBAAgB;IACzB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,+DAA+D;IACvE,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC3D,cAAc,EAAE,CAAC;CAEpB,CAAA;AAGD,MAAM,MAAM,GAAG,IAAI,oBAAc,CAAC,WAAW,EAAE,uBAAe,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;AAC1E,MAAM,KAAK,GAAG,IAAI,mBAAS,CAAC,8CAA8C,CAAC,CAAA;AAC3E,MAAM,CAAC,IAAI,CAAC;IACR,IAAI,EAAE,uBAAW,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,uBAAW,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,uBAAW,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC;CACd,EAAE,KAAK,EAAE,KAAK,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAG/C,qCAAqC;AACrC,mDAAmD"}
|
package/package.json
CHANGED
|
@@ -26,6 +26,7 @@ export async function transactionSenderAndConfirmationWaiter({
|
|
|
26
26
|
serializedTransaction,
|
|
27
27
|
SEND_OPTIONS
|
|
28
28
|
);
|
|
29
|
+
console.log('initial send txid: ', txid);
|
|
29
30
|
|
|
30
31
|
const controller = new AbortController();
|
|
31
32
|
const abortSignal = controller.signal;
|
|
@@ -51,7 +52,8 @@ export async function transactionSenderAndConfirmationWaiter({
|
|
|
51
52
|
blockhashWithExpiryBlockHeight.lastValidBlockHeight - 150;
|
|
52
53
|
|
|
53
54
|
// this would throw TransactionExpiredBlockheightExceededError
|
|
54
|
-
|
|
55
|
+
// console.log("conforming the transaction ....")
|
|
56
|
+
const res = await Promise.race([
|
|
55
57
|
connection.confirmTransaction(
|
|
56
58
|
{
|
|
57
59
|
...blockhashWithExpiryBlockHeight,
|
|
@@ -74,10 +76,13 @@ export async function transactionSenderAndConfirmationWaiter({
|
|
|
74
76
|
}
|
|
75
77
|
}),
|
|
76
78
|
]);
|
|
79
|
+
console.log('res: ', res);
|
|
80
|
+
|
|
77
81
|
} catch (e) {
|
|
82
|
+
console.log('e: ', e);
|
|
78
83
|
if (e instanceof TransactionExpiredBlockheightExceededError) {
|
|
79
84
|
// we consume this error and getTransaction would return null
|
|
80
|
-
return null;
|
|
85
|
+
// return null;
|
|
81
86
|
} else {
|
|
82
87
|
// invalid state from web3.js
|
|
83
88
|
throw e;
|
package/utils/svm/utils.ts
CHANGED
|
@@ -68,8 +68,15 @@ export const createV0Transaction = async (
|
|
|
68
68
|
payerPubKey: PublicKey,
|
|
69
69
|
blockHash?: string
|
|
70
70
|
) => {
|
|
71
|
+
console.log('createV0Transaction: Starting transaction creation');
|
|
72
|
+
console.log('Instructions count:', inX.length);
|
|
73
|
+
console.log('Signers count:', signers.length);
|
|
74
|
+
console.log('Payer public key:', payerPubKey.toString());
|
|
75
|
+
|
|
71
76
|
const blockhash =
|
|
72
77
|
blockHash || (await connection.getLatestBlockhash()).blockhash;
|
|
78
|
+
console.log('Using blockhash:', blockhash);
|
|
79
|
+
|
|
73
80
|
const message = new TransactionMessage({
|
|
74
81
|
payerKey: payerPubKey,
|
|
75
82
|
instructions: inX,
|
|
@@ -79,9 +86,11 @@ export const createV0Transaction = async (
|
|
|
79
86
|
const transaction = new VersionedTransaction(message);
|
|
80
87
|
transaction.message.staticAccountKeys;
|
|
81
88
|
if (signers.length < 1) {
|
|
89
|
+
console.log('Signing transaction with signers');
|
|
82
90
|
transaction.sign(signers);
|
|
83
91
|
}
|
|
84
92
|
|
|
93
|
+
console.log('createV0Transaction: Transaction created successfully');
|
|
85
94
|
return transaction;
|
|
86
95
|
};
|
|
87
96
|
|
|
@@ -91,6 +100,11 @@ export const createAtaAndIx = async (
|
|
|
91
100
|
tokenProgramId: PublicKey,
|
|
92
101
|
connection: Connection,
|
|
93
102
|
) => {
|
|
103
|
+
console.log('createAtaAndIx: Starting ATA creation');
|
|
104
|
+
console.log('Token:', token.toString());
|
|
105
|
+
console.log('Owner:', ownerPublicKey.toString());
|
|
106
|
+
console.log('Token Program ID:', tokenProgramId.toString());
|
|
107
|
+
|
|
94
108
|
let AtaTokenIx;
|
|
95
109
|
const associatedToken = getAssociatedTokenAddressSync(
|
|
96
110
|
token,
|
|
@@ -98,9 +112,11 @@ export const createAtaAndIx = async (
|
|
|
98
112
|
false,
|
|
99
113
|
tokenProgramId
|
|
100
114
|
);
|
|
115
|
+
console.log('Associated token address:', associatedToken.toString());
|
|
101
116
|
|
|
102
117
|
const accountExist = await connection.getAccountInfo(associatedToken);
|
|
103
118
|
if (!accountExist) {
|
|
119
|
+
console.log('Account does not exist, creating ATA instruction');
|
|
104
120
|
AtaTokenIx = createAssociatedTokenAccountIdempotentInstruction(
|
|
105
121
|
ownerPublicKey,
|
|
106
122
|
associatedToken,
|
|
@@ -108,17 +124,26 @@ export const createAtaAndIx = async (
|
|
|
108
124
|
token,
|
|
109
125
|
tokenProgramId
|
|
110
126
|
);
|
|
127
|
+
} else {
|
|
128
|
+
console.log('Account already exists, no ATA instruction needed');
|
|
111
129
|
}
|
|
130
|
+
|
|
131
|
+
console.log('createAtaAndIx: Completed');
|
|
112
132
|
return {
|
|
113
133
|
AtaTokenIx,
|
|
114
134
|
associatedToken,
|
|
115
135
|
};
|
|
116
136
|
};
|
|
137
|
+
|
|
117
138
|
export const getSureAssociatedTokenAddressAndAccount = async (
|
|
118
139
|
connection: Connection,
|
|
119
140
|
token: PublicKey,
|
|
120
141
|
owner: PublicKey,
|
|
121
142
|
) => {
|
|
143
|
+
console.log('getSureAssociatedTokenAddressAndAccount: Starting');
|
|
144
|
+
console.log('Token:', token.toString());
|
|
145
|
+
console.log('Owner:', owner.toString());
|
|
146
|
+
|
|
122
147
|
let ATA: PublicKey;
|
|
123
148
|
let programId: PublicKey;
|
|
124
149
|
let tokenAccount: Account;
|
|
@@ -126,19 +151,32 @@ export const getSureAssociatedTokenAddressAndAccount = async (
|
|
|
126
151
|
programId = token.equals(NATIVE_MINT)
|
|
127
152
|
? TOKEN_PROGRAM_ID
|
|
128
153
|
: TOKEN_2022_PROGRAM_ID;
|
|
154
|
+
console.log('Trying with program ID:', programId.toString());
|
|
155
|
+
|
|
129
156
|
ATA = getAssociatedTokenAddressSync(token, owner, true, programId);
|
|
157
|
+
console.log('ATA address:', ATA.toString());
|
|
158
|
+
|
|
130
159
|
tokenAccount = await getAccount(connection, ATA, "confirmed", programId);
|
|
160
|
+
console.log('Token account found with TOKEN_2022_PROGRAM_ID');
|
|
131
161
|
return { ATA, programId, tokenAccount };
|
|
132
162
|
} catch (error) {
|
|
163
|
+
console.log('Failed with TOKEN_2022_PROGRAM_ID, trying TOKEN_PROGRAM_ID');
|
|
164
|
+
console.log('Error:', error);
|
|
165
|
+
|
|
133
166
|
programId = TOKEN_PROGRAM_ID;
|
|
134
167
|
ATA = getAssociatedTokenAddressSync(token, owner, true, programId);
|
|
168
|
+
console.log('New ATA address:', ATA.toString());
|
|
169
|
+
|
|
135
170
|
tokenAccount = await getAccount(connection, ATA, "confirmed", programId);
|
|
171
|
+
console.log('Token account found with TOKEN_PROGRAM_ID');
|
|
136
172
|
return { ATA, programId, tokenAccount };
|
|
137
173
|
}
|
|
138
174
|
};
|
|
139
175
|
|
|
140
176
|
export const getProgramIdOfToken = async (owner: PublicKey, token: PublicKey, connection: Connection) => {
|
|
177
|
+
|
|
141
178
|
if (token.equals(NATIVE_MINT)) {
|
|
179
|
+
|
|
142
180
|
return TOKEN_PROGRAM_ID;
|
|
143
181
|
}
|
|
144
182
|
let ATA: PublicKey;
|
|
@@ -147,17 +185,15 @@ export const getProgramIdOfToken = async (owner: PublicKey, token: PublicKey, co
|
|
|
147
185
|
try {
|
|
148
186
|
ATA = getAssociatedTokenAddressSync(token, owner, true, programId);
|
|
149
187
|
tokenAccount = await getAccount(connection, ATA, "confirmed", programId);
|
|
188
|
+
|
|
150
189
|
return TOKEN_PROGRAM_ID
|
|
151
190
|
} catch (error) {
|
|
191
|
+
console.log('Failed with TOKEN_PROGRAM_ID, returning TOKEN_2022_PROGRAM_ID');
|
|
152
192
|
return TOKEN_2022_PROGRAM_ID;
|
|
153
|
-
|
|
154
193
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
194
|
}
|
|
159
|
-
//get native balance
|
|
160
195
|
|
|
196
|
+
//get native balance
|
|
161
197
|
export const getSvmNativeBalance = async (address: PublicKey, connection: Connection,) => {
|
|
162
198
|
const balance = await connection.getBalance(address);
|
|
163
199
|
return { balance: new BN(balance), formatted: balance / LAMPORTS_PER_SOL, decimal: 9 };
|
|
@@ -165,51 +201,61 @@ export const getSvmNativeBalance = async (address: PublicKey, connection: Connec
|
|
|
165
201
|
|
|
166
202
|
export const getTokenBalance = async (address: PublicKey, token: PublicKey, connection: Connection) => {
|
|
167
203
|
|
|
204
|
+
|
|
168
205
|
try {
|
|
169
206
|
// Get the balance from the token account
|
|
170
207
|
const tokenAccount = await getTokenAccountAccount(token, address, connection);
|
|
171
208
|
if (!tokenAccount) {
|
|
172
|
-
console.
|
|
209
|
+
console.log("Token account not found");
|
|
173
210
|
return 0;
|
|
174
211
|
}
|
|
212
|
+
console.log('Token account found:', tokenAccount.address.toString());
|
|
213
|
+
|
|
175
214
|
const tokenBalance = await connection.getTokenAccountBalance(
|
|
176
215
|
tokenAccount.address
|
|
177
216
|
);
|
|
178
217
|
|
|
179
218
|
if (!tokenBalance) {
|
|
180
|
-
console.
|
|
219
|
+
console.log("Token balance not found");
|
|
181
220
|
return 0;
|
|
182
221
|
}
|
|
183
222
|
|
|
223
|
+
console.log('Token balance:', tokenBalance.value);
|
|
184
224
|
return tokenBalance.value;
|
|
185
225
|
|
|
186
226
|
} catch (error) {
|
|
227
|
+
console.log('Error in getTokenBalance:', error);
|
|
187
228
|
return 0;
|
|
188
229
|
}
|
|
189
230
|
}
|
|
190
231
|
|
|
191
232
|
export const getTokenAccountAccount = async (token: PublicKey, address: PublicKey, connection: Connection): Promise<Account | null> => {
|
|
192
|
-
try {
|
|
193
233
|
|
|
234
|
+
try {
|
|
194
235
|
// Get the associated token account address for the user and the token mint
|
|
195
236
|
const associatedTokenAccount = await getAssociatedTokenAddress(
|
|
196
237
|
token, // The token mint address
|
|
197
238
|
address // The user's public key
|
|
198
239
|
);
|
|
240
|
+
console.log('Associated token account:', associatedTokenAccount.toString());
|
|
241
|
+
|
|
199
242
|
// Fetch the token account information
|
|
200
243
|
const tokenAccount = await getAccount(
|
|
201
244
|
connection,
|
|
202
245
|
associatedTokenAccount
|
|
203
246
|
);
|
|
204
247
|
|
|
248
|
+
console.log('Token account retrieved successfully');
|
|
205
249
|
return tokenAccount;
|
|
206
250
|
} catch (error) {
|
|
207
|
-
console.
|
|
251
|
+
console.log("Not token account for this");
|
|
208
252
|
return null;
|
|
209
253
|
}
|
|
210
254
|
};
|
|
211
255
|
|
|
212
256
|
export const getTransferNativeInx = async (from: PublicKey, to: PublicKey, amount: number): Promise<TransactionInstruction> => {
|
|
257
|
+
|
|
258
|
+
|
|
213
259
|
return SystemProgram.transfer({
|
|
214
260
|
fromPubkey: from,
|
|
215
261
|
toPubkey: to,
|
|
@@ -218,48 +264,82 @@ export const getTransferNativeInx = async (from: PublicKey, to: PublicKey, amoun
|
|
|
218
264
|
}
|
|
219
265
|
|
|
220
266
|
export const getTransferNativeTransaction = async (from: Keypair, to: PublicKey, amount: number, connection: Connection) => {
|
|
267
|
+
console.log('getTransferNativeTransaction: Starting');
|
|
221
268
|
const instruction = await getTransferNativeInx(from.publicKey, to, amount);
|
|
222
269
|
const transaction = await createV0Transaction(connection, [instruction], [from], from.publicKey);
|
|
270
|
+
console.log('getTransferNativeTransaction: Completed');
|
|
223
271
|
return transaction;
|
|
224
272
|
}
|
|
225
273
|
|
|
226
274
|
export const getTransferTokenInx = async (from: PublicKey, to: PublicKey, token: TokenInfo, amount: number, connection: Connection): Promise<TransactionInstruction[]> => {
|
|
275
|
+
|
|
276
|
+
|
|
227
277
|
const inx: TransactionInstruction[] = []
|
|
228
278
|
|
|
229
279
|
const tokenToSend = new PublicKey(token.address);
|
|
280
|
+
console.log('Token to send:', tokenToSend.toString());
|
|
281
|
+
|
|
230
282
|
const { ATA: source, programId, tokenAccount } = await getSureAssociatedTokenAddressAndAccount(connection, from, tokenToSend);
|
|
283
|
+
console.log('Source ATA:', source.toString());
|
|
284
|
+
|
|
231
285
|
const { associatedToken: destination, AtaTokenIx } = await createAtaAndIx(tokenToSend, to, programId, connection);
|
|
286
|
+
console.log('Destination ATA:', destination.toString());
|
|
232
287
|
|
|
233
288
|
if (!tokenAccount) {
|
|
289
|
+
console.log('Token account not found, throwing error');
|
|
234
290
|
throw new Error("Token account not found");
|
|
235
291
|
}
|
|
236
292
|
if (AtaTokenIx) {
|
|
293
|
+
console.log('Adding ATA creation instruction');
|
|
237
294
|
inx.push(AtaTokenIx);
|
|
238
295
|
}
|
|
296
|
+
|
|
297
|
+
console.log('Creating transfer instruction');
|
|
239
298
|
const tInx = createTransferCheckedInstruction(source, tokenToSend, destination, from, amount, token.decimals, undefined, programId)
|
|
240
299
|
inx.push(tInx);
|
|
241
300
|
|
|
301
|
+
console.log('getTransferTokenInx: Completed with', inx.length, 'instructions');
|
|
242
302
|
return inx;
|
|
243
|
-
|
|
244
303
|
}
|
|
304
|
+
|
|
245
305
|
export const getTransferTokenTransaction = async (from: Keypair, to: PublicKey, token: TokenInfo, amount: number, connection: Connection): Promise<VersionedTransaction> => {
|
|
306
|
+
console.log('getTransferTokenTransaction: Starting');
|
|
246
307
|
const instruction = await getTransferTokenInx(from.publicKey, to, token, amount, connection);
|
|
247
308
|
const transaction = await createV0Transaction(connection, instruction, [from], from.publicKey);
|
|
309
|
+
console.log('getTransferTokenTransaction: Completed');
|
|
248
310
|
return transaction;
|
|
249
311
|
}
|
|
312
|
+
|
|
250
313
|
export const signAndSendTransaction = async (transaction: VersionedTransaction, connection: Connection, signers: Keypair[]) => {
|
|
314
|
+
console.log('signAndSendTransaction: Starting');
|
|
315
|
+
console.log('Signers count:', signers.length);
|
|
316
|
+
|
|
251
317
|
transaction.sign(signers)
|
|
318
|
+
console.log('Transaction signed');
|
|
319
|
+
|
|
252
320
|
const blockhash = await connection.getLatestBlockhash()
|
|
253
|
-
|
|
321
|
+
console.log('Got latest blockhash:', blockhash.blockhash);
|
|
322
|
+
|
|
323
|
+
console.log('Sending transaction...');
|
|
324
|
+
const res = await transactionSenderAndConfirmationWaiter({
|
|
325
|
+
connection,
|
|
326
|
+
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
327
|
+
blockhashWithExpiryBlockHeight: {
|
|
328
|
+
blockhash: blockhash.blockhash,
|
|
329
|
+
lastValidBlockHeight: blockhash.lastValidBlockHeight
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
|
|
254
333
|
if (!res) {
|
|
334
|
+
console.log('Transaction failed to send or confirm');
|
|
255
335
|
throw new Error("Transaction failed to send or confirm");
|
|
256
336
|
}
|
|
257
|
-
return res.transaction.signatures[0];
|
|
258
337
|
|
|
338
|
+
const signature = res.transaction.signatures[0];
|
|
339
|
+
console.log('Transaction successful, signature:', signature);
|
|
340
|
+
return signature;
|
|
259
341
|
}
|
|
260
342
|
|
|
261
|
-
|
|
262
|
-
|
|
263
343
|
//swap
|
|
264
344
|
//you will. use jupiter for this
|
|
265
345
|
|
|
@@ -269,6 +349,12 @@ export const getJupiterQuote = async (
|
|
|
269
349
|
amount: number,
|
|
270
350
|
slippageBps: number = 50
|
|
271
351
|
): Promise<JupiterQuoteResponse> => {
|
|
352
|
+
// console.log('getJupiterQuote: Starting');
|
|
353
|
+
// console.log('Input mint:', inputMint);
|
|
354
|
+
// console.log('Output mint:', outputMint);
|
|
355
|
+
// console.log('Amount:', amount);
|
|
356
|
+
// console.log('Slippage BPS:', slippageBps);
|
|
357
|
+
|
|
272
358
|
const params = new URLSearchParams({
|
|
273
359
|
inputMint,
|
|
274
360
|
outputMint,
|
|
@@ -278,14 +364,34 @@ export const getJupiterQuote = async (
|
|
|
278
364
|
asLegacyTransaction: 'false'
|
|
279
365
|
});
|
|
280
366
|
|
|
281
|
-
const
|
|
367
|
+
const url = `${JUPITER_BASE_URL}/swap/v1/quote?${params}`;
|
|
368
|
+
console.log('Request URL:', url);
|
|
369
|
+
|
|
370
|
+
const response = await fetch(url);
|
|
371
|
+
console.log('Response status:', response.status);
|
|
372
|
+
console.log('Response status text:', response.statusText);
|
|
282
373
|
|
|
283
374
|
if (!response.ok) {
|
|
284
|
-
|
|
285
|
-
|
|
375
|
+
console.log('Jupiter quote request failed');
|
|
376
|
+
console.log('Status:', response.status);
|
|
377
|
+
console.log('Status Text:', response.statusText);
|
|
378
|
+
console.log('URL:', url);
|
|
379
|
+
|
|
380
|
+
try {
|
|
381
|
+
const error = await response.json();
|
|
382
|
+
console.log('Error details:', error);
|
|
383
|
+
} catch {
|
|
384
|
+
const textError = await response.text();
|
|
385
|
+
console.log('Error text:', textError);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
throw new Error(`Jupiter quote failed: ${response.statusText}`);
|
|
286
389
|
}
|
|
287
390
|
|
|
288
|
-
|
|
391
|
+
const result = await response.json();
|
|
392
|
+
console.log('Jupiter quote successful');
|
|
393
|
+
console.log('Quote result:', result);
|
|
394
|
+
return result;
|
|
289
395
|
};
|
|
290
396
|
|
|
291
397
|
export const buildJupiterSwapTransaction = async (
|
|
@@ -293,6 +399,10 @@ export const buildJupiterSwapTransaction = async (
|
|
|
293
399
|
userPublicKey: string,
|
|
294
400
|
prioritizationFeeLamports?: number
|
|
295
401
|
): Promise<JupiterSwapResponse> => {
|
|
402
|
+
console.log('buildJupiterSwapTransaction: Starting');
|
|
403
|
+
console.log('User public key:', userPublicKey);
|
|
404
|
+
const priorityFee = prioritizationFeeLamports || 5000;
|
|
405
|
+
console.log('Prioritization fee:', priorityFee);
|
|
296
406
|
const body = {
|
|
297
407
|
quoteResponse: quote,
|
|
298
408
|
userPublicKey,
|
|
@@ -301,7 +411,7 @@ export const buildJupiterSwapTransaction = async (
|
|
|
301
411
|
feeAccount: undefined,
|
|
302
412
|
trackingAccount: undefined,
|
|
303
413
|
computeUnitPriceMicroLamports: undefined,
|
|
304
|
-
prioritizationFeeLamports:
|
|
414
|
+
prioritizationFeeLamports: priorityFee,
|
|
305
415
|
asLegacyTransaction: false,
|
|
306
416
|
useTokenLedger: false,
|
|
307
417
|
destinationTokenAccount: undefined,
|
|
@@ -309,6 +419,8 @@ export const buildJupiterSwapTransaction = async (
|
|
|
309
419
|
skipUserAccountsRpcCalls: false
|
|
310
420
|
};
|
|
311
421
|
|
|
422
|
+
console.log('Request body:', body);
|
|
423
|
+
|
|
312
424
|
const response = await fetch(`${JUPITER_BASE_URL}/swap/v1/swap`, {
|
|
313
425
|
method: 'POST',
|
|
314
426
|
headers: {
|
|
@@ -317,12 +429,26 @@ export const buildJupiterSwapTransaction = async (
|
|
|
317
429
|
body: JSON.stringify(body),
|
|
318
430
|
});
|
|
319
431
|
|
|
432
|
+
console.log('Swap transaction build response status:', response.status);
|
|
433
|
+
|
|
320
434
|
if (!response.ok) {
|
|
321
|
-
|
|
322
|
-
|
|
435
|
+
console.log('Jupiter swap transaction build failed');
|
|
436
|
+
console.log('Status:', response.status);
|
|
437
|
+
console.log('Status text:', response.statusText);
|
|
438
|
+
|
|
439
|
+
try {
|
|
440
|
+
const error = await response.json();
|
|
441
|
+
console.log('Swap build error details:', error);
|
|
442
|
+
throw new Error(`Jupiter swap transaction build failed: ${error.message || response.statusText}`);
|
|
443
|
+
} catch (parseError) {
|
|
444
|
+
console.log('Failed to parse error response:', parseError);
|
|
445
|
+
throw new Error(`Jupiter swap transaction build failed: ${response.statusText}`);
|
|
446
|
+
}
|
|
323
447
|
}
|
|
324
448
|
|
|
325
|
-
|
|
449
|
+
const result = await response.json();
|
|
450
|
+
console.log('Jupiter swap transaction built successfully');
|
|
451
|
+
return result;
|
|
326
452
|
};
|
|
327
453
|
|
|
328
454
|
export const executeJupiterSwap = async (
|
|
@@ -330,6 +456,15 @@ export const executeJupiterSwap = async (
|
|
|
330
456
|
connection: Connection,
|
|
331
457
|
payer: Keypair
|
|
332
458
|
): Promise<SwapResult> => {
|
|
459
|
+
console.log('executeJupiterSwap: Starting');
|
|
460
|
+
console.log('Swap params:', {
|
|
461
|
+
fromToken: swapParams.fromToken.toString(),
|
|
462
|
+
toToken: swapParams.toToken.toString(),
|
|
463
|
+
amount: swapParams.amount,
|
|
464
|
+
slippageBps: swapParams.slippageBps,
|
|
465
|
+
userPublicKey: swapParams.userPublicKey.toString()
|
|
466
|
+
});
|
|
467
|
+
|
|
333
468
|
try {
|
|
334
469
|
console.log('Getting Jupiter quote...');
|
|
335
470
|
const quote = await getJupiterQuote(
|
|
@@ -353,13 +488,19 @@ export const executeJupiterSwap = async (
|
|
|
353
488
|
|
|
354
489
|
console.log('Deserializing transaction...');
|
|
355
490
|
const swapTransactionBuf = Buffer.from(swapResponse.swapTransaction, 'base64');
|
|
491
|
+
console.log('Transaction buffer length:', swapTransactionBuf.length);
|
|
492
|
+
|
|
356
493
|
const transaction = VersionedTransaction.deserialize(swapTransactionBuf);
|
|
494
|
+
console.log('Transaction deserialized successfully');
|
|
357
495
|
|
|
358
496
|
console.log('Signing transaction...');
|
|
359
497
|
transaction.sign([payer]);
|
|
498
|
+
console.log('Transaction signed');
|
|
360
499
|
|
|
361
500
|
console.log('Sending transaction...');
|
|
362
501
|
const blockhash = await connection.getLatestBlockhash();
|
|
502
|
+
console.log('Got latest blockhash for confirmation');
|
|
503
|
+
|
|
363
504
|
const signature = await transactionSenderAndConfirmationWaiter({
|
|
364
505
|
connection,
|
|
365
506
|
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
@@ -369,25 +510,32 @@ export const executeJupiterSwap = async (
|
|
|
369
510
|
}
|
|
370
511
|
});
|
|
371
512
|
|
|
513
|
+
// console.log('signature: ', signature);
|
|
372
514
|
if (!signature) {
|
|
515
|
+
console.log('Transaction failed to confirm');
|
|
373
516
|
return {
|
|
374
517
|
success: false,
|
|
375
518
|
error: 'Transaction failed to confirm'
|
|
376
519
|
};
|
|
377
520
|
}
|
|
378
521
|
|
|
379
|
-
|
|
522
|
+
const txSignature = signature.transaction.signatures[0];
|
|
523
|
+
console.log('Swap successful! Signature:', txSignature);
|
|
380
524
|
|
|
381
525
|
return {
|
|
382
526
|
success: true,
|
|
383
|
-
hash:
|
|
527
|
+
hash: txSignature,
|
|
384
528
|
inputAmount: quote.inAmount,
|
|
385
529
|
outputAmount: quote.outAmount,
|
|
386
530
|
priceImpact: quote.priceImpactPct
|
|
387
531
|
};
|
|
388
532
|
|
|
389
533
|
} catch (error) {
|
|
390
|
-
console.
|
|
534
|
+
console.log('Jupiter swap failed with error:', error);
|
|
535
|
+
console.log('Error type:', typeof error);
|
|
536
|
+
console.log('Error message:', error instanceof Error ? error.message : 'Unknown error');
|
|
537
|
+
console.log('Error stack:', error instanceof Error ? error.stack : 'No stack trace');
|
|
538
|
+
|
|
391
539
|
return {
|
|
392
540
|
success: false,
|
|
393
541
|
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
@@ -396,22 +544,34 @@ export const executeJupiterSwap = async (
|
|
|
396
544
|
};
|
|
397
545
|
|
|
398
546
|
export const uiAmountToBaseUnits = (uiAmount: number, decimals: number): number => {
|
|
399
|
-
|
|
547
|
+
console.log('uiAmountToBaseUnits: Converting', uiAmount, 'with', decimals, 'decimals');
|
|
548
|
+
const result = Math.floor(uiAmount * Math.pow(10, decimals));
|
|
549
|
+
console.log('Converted to base units:', result);
|
|
550
|
+
return result;
|
|
400
551
|
};
|
|
401
552
|
|
|
402
553
|
export const baseUnitsToUiAmount = (baseAmount: string | number, decimals: number): number => {
|
|
403
|
-
|
|
554
|
+
console.log('baseUnitsToUiAmount: Converting', baseAmount, 'with', decimals, 'decimals');
|
|
555
|
+
const result = Number(baseAmount) / Math.pow(10, decimals);
|
|
556
|
+
console.log('Converted to UI amount:', result);
|
|
557
|
+
return result;
|
|
404
558
|
};
|
|
405
559
|
|
|
406
560
|
export const getJupiterTokenList = async (): Promise<any[]> => {
|
|
561
|
+
console.log('getJupiterTokenList: Fetching token list');
|
|
407
562
|
try {
|
|
408
563
|
const response = await fetch(`${JUPITER_BASE_URL}/tokens/v1/mints/tradable`);
|
|
564
|
+
console.log('Token list response status:', response.status);
|
|
565
|
+
|
|
409
566
|
if (!response.ok) {
|
|
567
|
+
console.log('Failed to fetch token list:', response.statusText);
|
|
410
568
|
throw new Error(`Failed to fetch token list: ${response.statusText}`);
|
|
411
569
|
}
|
|
412
|
-
|
|
570
|
+
const result = await response.json();
|
|
571
|
+
console.log('Token list fetched, count:', result.length);
|
|
572
|
+
return result;
|
|
413
573
|
} catch (error) {
|
|
414
|
-
console.
|
|
574
|
+
console.log('Failed to fetch Jupiter token list:', error);
|
|
415
575
|
return [];
|
|
416
576
|
}
|
|
417
577
|
};
|
|
@@ -420,23 +580,35 @@ export const validateJupiterTokens = async (
|
|
|
420
580
|
inputMint: string,
|
|
421
581
|
outputMint: string
|
|
422
582
|
): Promise<{ valid: boolean; message?: string }> => {
|
|
583
|
+
console.log('validateJupiterTokens: Starting validation');
|
|
584
|
+
console.log('Input mint:', inputMint);
|
|
585
|
+
console.log('Output mint:', outputMint);
|
|
586
|
+
|
|
423
587
|
try {
|
|
424
588
|
const tokenList = await getJupiterTokenList();
|
|
425
589
|
const inputSupported = tokenList.includes(inputMint);
|
|
426
590
|
const outputSupported = tokenList.includes(outputMint);
|
|
427
591
|
|
|
592
|
+
console.log('Input token supported:', inputSupported);
|
|
593
|
+
console.log('Output token supported:', outputSupported);
|
|
594
|
+
|
|
428
595
|
if (!inputSupported && !outputSupported) {
|
|
596
|
+
console.log('Both tokens not supported');
|
|
429
597
|
return { valid: false, message: 'Both input and output tokens are not supported' };
|
|
430
598
|
}
|
|
431
599
|
if (!inputSupported) {
|
|
600
|
+
console.log('Input token not supported');
|
|
432
601
|
return { valid: false, message: 'Input token is not supported' };
|
|
433
602
|
}
|
|
434
603
|
if (!outputSupported) {
|
|
604
|
+
console.log('Output token not supported');
|
|
435
605
|
return { valid: false, message: 'Output token is not supported' };
|
|
436
606
|
}
|
|
437
607
|
|
|
608
|
+
console.log('Both tokens are supported');
|
|
438
609
|
return { valid: true };
|
|
439
610
|
} catch (error) {
|
|
611
|
+
console.log('Token validation failed:', error);
|
|
440
612
|
return { valid: false, message: 'Failed to validate tokens' };
|
|
441
613
|
}
|
|
442
614
|
};
|
package/utils/test.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { generateKey } from "crypto";
|
|
2
|
+
|
|
3
|
+
import { Keypair, PublicKey } from "@solana/web3.js";
|
|
4
|
+
import base58 from "bs58";
|
|
5
|
+
import { NATIVE_MINT } from "@solana/spl-token";
|
|
6
|
+
import { GenerateNewMnemonic } from "./bip32";
|
|
7
|
+
import { SVMChainWallet, SVMVM } from "./svm";
|
|
8
|
+
import { VM } from "./vm";
|
|
9
|
+
import { ChainWalletConfig } from "./types";
|
|
10
|
+
const mnemonic = GenerateNewMnemonic()
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
console.log('mnemonic: ', mnemonic);
|
|
14
|
+
|
|
15
|
+
const seed = VM.mnemonicToSeed(mnemonic)
|
|
16
|
+
const pKey = "4QxETeX9pndiF1XNghUiDTnZnHq3cfjmuPLBJysrgocsLq1yb8w96aPWALa8ZnRZWmDU4wM8Tg8d1ZRVVByj7uXE"
|
|
17
|
+
|
|
18
|
+
export const testUserKeyPair = Keypair.fromSecretKey(base58.decode(pKey));
|
|
19
|
+
const vm = new SVMVM(seed)
|
|
20
|
+
// const vmFromMnemonic = SVMVM.fromMnemonic(mnemonic)
|
|
21
|
+
// const keyFromMnemonic = vmFromMnemonic.generatePrivateKey(0)
|
|
22
|
+
// console.log('keyFromMnemonic: ', keyFromMnemonic.privateKey.publicKey);
|
|
23
|
+
const key = vm.generatePrivateKey(0)
|
|
24
|
+
console.log('key: ', key.privateKey.publicKey);
|
|
25
|
+
const chainConfig: ChainWalletConfig = {
|
|
26
|
+
chainId: "solana-mainnet",
|
|
27
|
+
name: "Solana",
|
|
28
|
+
rpcUrl: "https://solana-mainnet.g.alchemy.com/v2/vB5mKztdJeFdz9RkW99Qf",
|
|
29
|
+
explorerUrl: "https://explorer.solana.com",
|
|
30
|
+
nativeToken: { name: "Solana", symbol: "SOL", decimals: 9 },
|
|
31
|
+
confirmationNo: 1,
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
const wallet = new SVMChainWallet(chainConfig, testUserKeyPair, key.index)
|
|
37
|
+
const toBuy = new PublicKey("9BB6NFEcjBCtnNLFko2FqVQBq8HHM13kCyYcdQbgpump")
|
|
38
|
+
wallet.swap({
|
|
39
|
+
name: NATIVE_MINT.toBase58(),
|
|
40
|
+
address: NATIVE_MINT.toBase58(),
|
|
41
|
+
symbol: NATIVE_MINT.toBase58(),
|
|
42
|
+
decimals: 9
|
|
43
|
+
}, toBuy, 0.005,).then(res => console.log(res))
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
// console.log('wal: ', wal.address);
|
|
47
|
+
// wal.getNativeBalance().then(e => console.log(e))
|
|
48
|
+
|
|
49
|
+
|