@deserialize/multi-vm-wallet 1.0.37 → 1.0.371
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/utils.js +182 -19
- package/dist/svm/utils.js.map +1 -1
- package/package.json +1 -1
- package/utils/svm/utils.ts +220 -28
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,78 +63,112 @@ 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
|
};
|
|
57
84
|
exports.getSureAssociatedTokenAddressAndAccount = getSureAssociatedTokenAddressAndAccount;
|
|
58
85
|
const getProgramIdOfToken = async (owner, token, connection) => {
|
|
86
|
+
console.log('getProgramIdOfToken: Starting');
|
|
87
|
+
console.log('Owner:', owner.toString());
|
|
88
|
+
console.log('Token:', token.toString());
|
|
59
89
|
if (token.equals(spl_token_1.NATIVE_MINT)) {
|
|
90
|
+
console.log('Token is native mint, returning TOKEN_PROGRAM_ID');
|
|
60
91
|
return spl_token_1.TOKEN_PROGRAM_ID;
|
|
61
92
|
}
|
|
62
93
|
let ATA;
|
|
63
94
|
let programId = spl_token_1.TOKEN_PROGRAM_ID;
|
|
64
95
|
let tokenAccount;
|
|
65
96
|
try {
|
|
97
|
+
console.log('Trying with TOKEN_PROGRAM_ID');
|
|
66
98
|
ATA = (0, spl_token_1.getAssociatedTokenAddressSync)(token, owner, true, programId);
|
|
67
99
|
tokenAccount = await (0, spl_token_1.getAccount)(connection, ATA, "confirmed", programId);
|
|
100
|
+
console.log('Found with TOKEN_PROGRAM_ID');
|
|
68
101
|
return spl_token_1.TOKEN_PROGRAM_ID;
|
|
69
102
|
}
|
|
70
103
|
catch (error) {
|
|
104
|
+
console.log('Failed with TOKEN_PROGRAM_ID, returning TOKEN_2022_PROGRAM_ID');
|
|
105
|
+
console.log('Error:', error);
|
|
71
106
|
return spl_token_1.TOKEN_2022_PROGRAM_ID;
|
|
72
107
|
}
|
|
73
108
|
};
|
|
74
109
|
exports.getProgramIdOfToken = getProgramIdOfToken;
|
|
75
110
|
//get native balance
|
|
76
111
|
const getSvmNativeBalance = async (address, connection) => {
|
|
112
|
+
console.log('getSvmNativeBalance: Getting balance for', address.toString());
|
|
77
113
|
const balance = await connection.getBalance(address);
|
|
114
|
+
console.log('Raw balance:', balance);
|
|
115
|
+
console.log('Formatted balance:', balance / web3_js_1.LAMPORTS_PER_SOL, 'SOL');
|
|
78
116
|
return { balance: new bn_js_1.BN(balance), formatted: balance / web3_js_1.LAMPORTS_PER_SOL, decimal: 9 };
|
|
79
117
|
};
|
|
80
118
|
exports.getSvmNativeBalance = getSvmNativeBalance;
|
|
81
119
|
const getTokenBalance = async (address, token, connection) => {
|
|
120
|
+
console.log('getTokenBalance: Starting');
|
|
121
|
+
console.log('Address:', address.toString());
|
|
122
|
+
console.log('Token:', token.toString());
|
|
82
123
|
try {
|
|
83
124
|
// Get the balance from the token account
|
|
84
125
|
const tokenAccount = await (0, exports.getTokenAccountAccount)(token, address, connection);
|
|
85
126
|
if (!tokenAccount) {
|
|
86
|
-
console.
|
|
127
|
+
console.log("Token account not found");
|
|
87
128
|
return 0;
|
|
88
129
|
}
|
|
130
|
+
console.log('Token account found:', tokenAccount.address.toString());
|
|
89
131
|
const tokenBalance = await connection.getTokenAccountBalance(tokenAccount.address);
|
|
90
132
|
if (!tokenBalance) {
|
|
91
|
-
console.
|
|
133
|
+
console.log("Token balance not found");
|
|
92
134
|
return 0;
|
|
93
135
|
}
|
|
136
|
+
console.log('Token balance:', tokenBalance.value);
|
|
94
137
|
return tokenBalance.value;
|
|
95
138
|
}
|
|
96
139
|
catch (error) {
|
|
140
|
+
console.log('Error in getTokenBalance:', error);
|
|
97
141
|
return 0;
|
|
98
142
|
}
|
|
99
143
|
};
|
|
100
144
|
exports.getTokenBalance = getTokenBalance;
|
|
101
145
|
const getTokenAccountAccount = async (token, address, connection) => {
|
|
146
|
+
console.log('getTokenAccountAccount: Starting');
|
|
147
|
+
console.log('Token:', token.toString());
|
|
148
|
+
console.log('Address:', address.toString());
|
|
102
149
|
try {
|
|
103
150
|
// Get the associated token account address for the user and the token mint
|
|
104
151
|
const associatedTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(token, // The token mint address
|
|
105
152
|
address // The user's public key
|
|
106
153
|
);
|
|
154
|
+
console.log('Associated token account:', associatedTokenAccount.toString());
|
|
107
155
|
// Fetch the token account information
|
|
108
156
|
const tokenAccount = await (0, spl_token_1.getAccount)(connection, associatedTokenAccount);
|
|
157
|
+
console.log('Token account retrieved successfully');
|
|
109
158
|
return tokenAccount;
|
|
110
159
|
}
|
|
111
160
|
catch (error) {
|
|
112
|
-
console.
|
|
161
|
+
console.log("Error getting token account:", error);
|
|
113
162
|
return null;
|
|
114
163
|
}
|
|
115
164
|
};
|
|
116
165
|
exports.getTokenAccountAccount = getTokenAccountAccount;
|
|
117
166
|
const getTransferNativeInx = async (from, to, amount) => {
|
|
167
|
+
console.log('getTransferNativeInx: Creating transfer instruction');
|
|
168
|
+
console.log('From:', from.toString());
|
|
169
|
+
console.log('To:', to.toString());
|
|
170
|
+
console.log('Amount:', amount, 'SOL');
|
|
171
|
+
console.log('Lamports:', amount * web3_js_1.LAMPORTS_PER_SOL);
|
|
118
172
|
return web3_js_1.SystemProgram.transfer({
|
|
119
173
|
fromPubkey: from,
|
|
120
174
|
toPubkey: to,
|
|
@@ -123,46 +177,82 @@ const getTransferNativeInx = async (from, to, amount) => {
|
|
|
123
177
|
};
|
|
124
178
|
exports.getTransferNativeInx = getTransferNativeInx;
|
|
125
179
|
const getTransferNativeTransaction = async (from, to, amount, connection) => {
|
|
180
|
+
console.log('getTransferNativeTransaction: Starting');
|
|
126
181
|
const instruction = await (0, exports.getTransferNativeInx)(from.publicKey, to, amount);
|
|
127
182
|
const transaction = await (0, exports.createV0Transaction)(connection, [instruction], [from], from.publicKey);
|
|
183
|
+
console.log('getTransferNativeTransaction: Completed');
|
|
128
184
|
return transaction;
|
|
129
185
|
};
|
|
130
186
|
exports.getTransferNativeTransaction = getTransferNativeTransaction;
|
|
131
187
|
const getTransferTokenInx = async (from, to, token, amount, connection) => {
|
|
188
|
+
console.log('getTransferTokenInx: Starting');
|
|
189
|
+
console.log('From:', from.toString());
|
|
190
|
+
console.log('To:', to.toString());
|
|
191
|
+
console.log('Token:', token);
|
|
192
|
+
console.log('Amount:', amount);
|
|
132
193
|
const inx = [];
|
|
133
194
|
const tokenToSend = new web3_js_1.PublicKey(token.address);
|
|
195
|
+
console.log('Token to send:', tokenToSend.toString());
|
|
134
196
|
const { ATA: source, programId, tokenAccount } = await (0, exports.getSureAssociatedTokenAddressAndAccount)(connection, from, tokenToSend);
|
|
197
|
+
console.log('Source ATA:', source.toString());
|
|
135
198
|
const { associatedToken: destination, AtaTokenIx } = await (0, exports.createAtaAndIx)(tokenToSend, to, programId, connection);
|
|
199
|
+
console.log('Destination ATA:', destination.toString());
|
|
136
200
|
if (!tokenAccount) {
|
|
201
|
+
console.log('Token account not found, throwing error');
|
|
137
202
|
throw new Error("Token account not found");
|
|
138
203
|
}
|
|
139
204
|
if (AtaTokenIx) {
|
|
205
|
+
console.log('Adding ATA creation instruction');
|
|
140
206
|
inx.push(AtaTokenIx);
|
|
141
207
|
}
|
|
208
|
+
console.log('Creating transfer instruction');
|
|
142
209
|
const tInx = (0, spl_token_1.createTransferCheckedInstruction)(source, tokenToSend, destination, from, amount, token.decimals, undefined, programId);
|
|
143
210
|
inx.push(tInx);
|
|
211
|
+
console.log('getTransferTokenInx: Completed with', inx.length, 'instructions');
|
|
144
212
|
return inx;
|
|
145
213
|
};
|
|
146
214
|
exports.getTransferTokenInx = getTransferTokenInx;
|
|
147
215
|
const getTransferTokenTransaction = async (from, to, token, amount, connection) => {
|
|
216
|
+
console.log('getTransferTokenTransaction: Starting');
|
|
148
217
|
const instruction = await (0, exports.getTransferTokenInx)(from.publicKey, to, token, amount, connection);
|
|
149
218
|
const transaction = await (0, exports.createV0Transaction)(connection, instruction, [from], from.publicKey);
|
|
219
|
+
console.log('getTransferTokenTransaction: Completed');
|
|
150
220
|
return transaction;
|
|
151
221
|
};
|
|
152
222
|
exports.getTransferTokenTransaction = getTransferTokenTransaction;
|
|
153
223
|
const signAndSendTransaction = async (transaction, connection, signers) => {
|
|
224
|
+
console.log('signAndSendTransaction: Starting');
|
|
225
|
+
console.log('Signers count:', signers.length);
|
|
154
226
|
transaction.sign(signers);
|
|
227
|
+
console.log('Transaction signed');
|
|
155
228
|
const blockhash = await connection.getLatestBlockhash();
|
|
156
|
-
|
|
229
|
+
console.log('Got latest blockhash:', blockhash.blockhash);
|
|
230
|
+
console.log('Sending transaction...');
|
|
231
|
+
const res = await (0, transactionSender_1.transactionSenderAndConfirmationWaiter)({
|
|
232
|
+
connection,
|
|
233
|
+
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
234
|
+
blockhashWithExpiryBlockHeight: {
|
|
235
|
+
blockhash: blockhash.blockhash,
|
|
236
|
+
lastValidBlockHeight: blockhash.lastValidBlockHeight
|
|
237
|
+
}
|
|
238
|
+
});
|
|
157
239
|
if (!res) {
|
|
240
|
+
console.log('Transaction failed to send or confirm');
|
|
158
241
|
throw new Error("Transaction failed to send or confirm");
|
|
159
242
|
}
|
|
160
|
-
|
|
243
|
+
const signature = res.transaction.signatures[0];
|
|
244
|
+
console.log('Transaction successful, signature:', signature);
|
|
245
|
+
return signature;
|
|
161
246
|
};
|
|
162
247
|
exports.signAndSendTransaction = signAndSendTransaction;
|
|
163
248
|
//swap
|
|
164
249
|
//you will. use jupiter for this
|
|
165
250
|
const getJupiterQuote = async (inputMint, outputMint, amount, slippageBps = 50) => {
|
|
251
|
+
console.log('getJupiterQuote: Starting');
|
|
252
|
+
console.log('Input mint:', inputMint);
|
|
253
|
+
console.log('Output mint:', outputMint);
|
|
254
|
+
console.log('Amount:', amount);
|
|
255
|
+
console.log('Slippage BPS:', slippageBps);
|
|
166
256
|
const params = new URLSearchParams({
|
|
167
257
|
inputMint,
|
|
168
258
|
outputMint,
|
|
@@ -171,15 +261,36 @@ const getJupiterQuote = async (inputMint, outputMint, amount, slippageBps = 50)
|
|
|
171
261
|
onlyDirectRoutes: 'false',
|
|
172
262
|
asLegacyTransaction: 'false'
|
|
173
263
|
});
|
|
174
|
-
const
|
|
264
|
+
const url = `${JUPITER_BASE_URL}/swap/v1/quote?${params}`;
|
|
265
|
+
console.log('Request URL:', url);
|
|
266
|
+
const response = await fetch(url);
|
|
267
|
+
console.log('Response status:', response.status);
|
|
268
|
+
console.log('Response status text:', response.statusText);
|
|
175
269
|
if (!response.ok) {
|
|
176
|
-
|
|
177
|
-
|
|
270
|
+
console.log('Jupiter quote request failed');
|
|
271
|
+
console.log('Status:', response.status);
|
|
272
|
+
console.log('Status Text:', response.statusText);
|
|
273
|
+
console.log('URL:', url);
|
|
274
|
+
try {
|
|
275
|
+
const error = await response.json();
|
|
276
|
+
console.log('Error details:', error);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
const textError = await response.text();
|
|
280
|
+
console.log('Error text:', textError);
|
|
281
|
+
}
|
|
282
|
+
throw new Error(`Jupiter quote failed: ${response.statusText}`);
|
|
178
283
|
}
|
|
179
|
-
|
|
284
|
+
const result = await response.json();
|
|
285
|
+
console.log('Jupiter quote successful');
|
|
286
|
+
console.log('Quote result:', result);
|
|
287
|
+
return result;
|
|
180
288
|
};
|
|
181
289
|
exports.getJupiterQuote = getJupiterQuote;
|
|
182
290
|
const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationFeeLamports) => {
|
|
291
|
+
console.log('buildJupiterSwapTransaction: Starting');
|
|
292
|
+
console.log('User public key:', userPublicKey);
|
|
293
|
+
console.log('Prioritization fee:', prioritizationFeeLamports || 1000);
|
|
183
294
|
const body = {
|
|
184
295
|
quoteResponse: quote,
|
|
185
296
|
userPublicKey,
|
|
@@ -195,6 +306,7 @@ const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationF
|
|
|
195
306
|
dynamicComputeUnitLimit: true,
|
|
196
307
|
skipUserAccountsRpcCalls: false
|
|
197
308
|
};
|
|
309
|
+
console.log('Request body:', body);
|
|
198
310
|
const response = await fetch(`${JUPITER_BASE_URL}/swap/v1/swap`, {
|
|
199
311
|
method: 'POST',
|
|
200
312
|
headers: {
|
|
@@ -202,14 +314,35 @@ const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationF
|
|
|
202
314
|
},
|
|
203
315
|
body: JSON.stringify(body),
|
|
204
316
|
});
|
|
317
|
+
console.log('Swap transaction build response status:', response.status);
|
|
205
318
|
if (!response.ok) {
|
|
206
|
-
|
|
207
|
-
|
|
319
|
+
console.log('Jupiter swap transaction build failed');
|
|
320
|
+
console.log('Status:', response.status);
|
|
321
|
+
console.log('Status text:', response.statusText);
|
|
322
|
+
try {
|
|
323
|
+
const error = await response.json();
|
|
324
|
+
console.log('Swap build error details:', error);
|
|
325
|
+
throw new Error(`Jupiter swap transaction build failed: ${error.message || response.statusText}`);
|
|
326
|
+
}
|
|
327
|
+
catch (parseError) {
|
|
328
|
+
console.log('Failed to parse error response:', parseError);
|
|
329
|
+
throw new Error(`Jupiter swap transaction build failed: ${response.statusText}`);
|
|
330
|
+
}
|
|
208
331
|
}
|
|
209
|
-
|
|
332
|
+
const result = await response.json();
|
|
333
|
+
console.log('Jupiter swap transaction built successfully');
|
|
334
|
+
return result;
|
|
210
335
|
};
|
|
211
336
|
exports.buildJupiterSwapTransaction = buildJupiterSwapTransaction;
|
|
212
337
|
const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
338
|
+
console.log('executeJupiterSwap: Starting');
|
|
339
|
+
console.log('Swap params:', {
|
|
340
|
+
fromToken: swapParams.fromToken.toString(),
|
|
341
|
+
toToken: swapParams.toToken.toString(),
|
|
342
|
+
amount: swapParams.amount,
|
|
343
|
+
slippageBps: swapParams.slippageBps,
|
|
344
|
+
userPublicKey: swapParams.userPublicKey.toString()
|
|
345
|
+
});
|
|
213
346
|
try {
|
|
214
347
|
console.log('Getting Jupiter quote...');
|
|
215
348
|
const quote = await (0, exports.getJupiterQuote)(swapParams.fromToken.toString(), swapParams.toToken.toString(), swapParams.amount, swapParams.slippageBps);
|
|
@@ -222,11 +355,15 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
|
222
355
|
const swapResponse = await (0, exports.buildJupiterSwapTransaction)(quote, swapParams.userPublicKey.toString());
|
|
223
356
|
console.log('Deserializing transaction...');
|
|
224
357
|
const swapTransactionBuf = Buffer.from(swapResponse.swapTransaction, 'base64');
|
|
358
|
+
console.log('Transaction buffer length:', swapTransactionBuf.length);
|
|
225
359
|
const transaction = web3_js_1.VersionedTransaction.deserialize(swapTransactionBuf);
|
|
360
|
+
console.log('Transaction deserialized successfully');
|
|
226
361
|
console.log('Signing transaction...');
|
|
227
362
|
transaction.sign([payer]);
|
|
363
|
+
console.log('Transaction signed');
|
|
228
364
|
console.log('Sending transaction...');
|
|
229
365
|
const blockhash = await connection.getLatestBlockhash();
|
|
366
|
+
console.log('Got latest blockhash for confirmation');
|
|
230
367
|
const signature = await (0, transactionSender_1.transactionSenderAndConfirmationWaiter)({
|
|
231
368
|
connection,
|
|
232
369
|
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
@@ -236,22 +373,27 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
|
236
373
|
}
|
|
237
374
|
});
|
|
238
375
|
if (!signature) {
|
|
376
|
+
console.log('Transaction failed to confirm');
|
|
239
377
|
return {
|
|
240
378
|
success: false,
|
|
241
379
|
error: 'Transaction failed to confirm'
|
|
242
380
|
};
|
|
243
381
|
}
|
|
244
|
-
|
|
382
|
+
const txSignature = signature.transaction.signatures[0];
|
|
383
|
+
console.log('Swap successful! Signature:', txSignature);
|
|
245
384
|
return {
|
|
246
385
|
success: true,
|
|
247
|
-
hash:
|
|
386
|
+
hash: txSignature,
|
|
248
387
|
inputAmount: quote.inAmount,
|
|
249
388
|
outputAmount: quote.outAmount,
|
|
250
389
|
priceImpact: quote.priceImpactPct
|
|
251
390
|
};
|
|
252
391
|
}
|
|
253
392
|
catch (error) {
|
|
254
|
-
console.
|
|
393
|
+
console.log('Jupiter swap failed with error:', error);
|
|
394
|
+
console.log('Error type:', typeof error);
|
|
395
|
+
console.log('Error message:', error instanceof Error ? error.message : 'Unknown error');
|
|
396
|
+
console.log('Error stack:', error instanceof Error ? error.stack : 'No stack trace');
|
|
255
397
|
return {
|
|
256
398
|
success: false,
|
|
257
399
|
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
@@ -260,44 +402,65 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
|
260
402
|
};
|
|
261
403
|
exports.executeJupiterSwap = executeJupiterSwap;
|
|
262
404
|
const uiAmountToBaseUnits = (uiAmount, decimals) => {
|
|
263
|
-
|
|
405
|
+
console.log('uiAmountToBaseUnits: Converting', uiAmount, 'with', decimals, 'decimals');
|
|
406
|
+
const result = Math.floor(uiAmount * Math.pow(10, decimals));
|
|
407
|
+
console.log('Converted to base units:', result);
|
|
408
|
+
return result;
|
|
264
409
|
};
|
|
265
410
|
exports.uiAmountToBaseUnits = uiAmountToBaseUnits;
|
|
266
411
|
const baseUnitsToUiAmount = (baseAmount, decimals) => {
|
|
267
|
-
|
|
412
|
+
console.log('baseUnitsToUiAmount: Converting', baseAmount, 'with', decimals, 'decimals');
|
|
413
|
+
const result = Number(baseAmount) / Math.pow(10, decimals);
|
|
414
|
+
console.log('Converted to UI amount:', result);
|
|
415
|
+
return result;
|
|
268
416
|
};
|
|
269
417
|
exports.baseUnitsToUiAmount = baseUnitsToUiAmount;
|
|
270
418
|
const getJupiterTokenList = async () => {
|
|
419
|
+
console.log('getJupiterTokenList: Fetching token list');
|
|
271
420
|
try {
|
|
272
421
|
const response = await fetch(`${JUPITER_BASE_URL}/tokens/v1/mints/tradable`);
|
|
422
|
+
console.log('Token list response status:', response.status);
|
|
273
423
|
if (!response.ok) {
|
|
424
|
+
console.log('Failed to fetch token list:', response.statusText);
|
|
274
425
|
throw new Error(`Failed to fetch token list: ${response.statusText}`);
|
|
275
426
|
}
|
|
276
|
-
|
|
427
|
+
const result = await response.json();
|
|
428
|
+
console.log('Token list fetched, count:', result.length);
|
|
429
|
+
return result;
|
|
277
430
|
}
|
|
278
431
|
catch (error) {
|
|
279
|
-
console.
|
|
432
|
+
console.log('Failed to fetch Jupiter token list:', error);
|
|
280
433
|
return [];
|
|
281
434
|
}
|
|
282
435
|
};
|
|
283
436
|
exports.getJupiterTokenList = getJupiterTokenList;
|
|
284
437
|
const validateJupiterTokens = async (inputMint, outputMint) => {
|
|
438
|
+
console.log('validateJupiterTokens: Starting validation');
|
|
439
|
+
console.log('Input mint:', inputMint);
|
|
440
|
+
console.log('Output mint:', outputMint);
|
|
285
441
|
try {
|
|
286
442
|
const tokenList = await (0, exports.getJupiterTokenList)();
|
|
287
443
|
const inputSupported = tokenList.includes(inputMint);
|
|
288
444
|
const outputSupported = tokenList.includes(outputMint);
|
|
445
|
+
console.log('Input token supported:', inputSupported);
|
|
446
|
+
console.log('Output token supported:', outputSupported);
|
|
289
447
|
if (!inputSupported && !outputSupported) {
|
|
448
|
+
console.log('Both tokens not supported');
|
|
290
449
|
return { valid: false, message: 'Both input and output tokens are not supported' };
|
|
291
450
|
}
|
|
292
451
|
if (!inputSupported) {
|
|
452
|
+
console.log('Input token not supported');
|
|
293
453
|
return { valid: false, message: 'Input token is not supported' };
|
|
294
454
|
}
|
|
295
455
|
if (!outputSupported) {
|
|
456
|
+
console.log('Output token not supported');
|
|
296
457
|
return { valid: false, message: 'Output token is not supported' };
|
|
297
458
|
}
|
|
459
|
+
console.log('Both tokens are supported');
|
|
298
460
|
return { valid: true };
|
|
299
461
|
}
|
|
300
462
|
catch (error) {
|
|
463
|
+
console.log('Token validation failed:', error);
|
|
301
464
|
return { valid: false, message: 'Failed to validate tokens' };
|
|
302
465
|
}
|
|
303
466
|
};
|
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":";AAAA,+CAA+C;;;AAE/C,iDAA6P;AAC7P,6CAAoK;AAEpK,2DAA6E;AAC7E,iCAA2B;AAE3B,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAuD5C,MAAM,mBAAmB,GAAG,KAAK,EACpC,UAAsB,EACtB,GAA6B,EAC7B,OAAkB,EAClB,WAAsB,EACtB,SAAkB,EACpB,EAAE;IACA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEzD,MAAM,SAAS,GACX,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,4BAAkB,CAAC;QACnC,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,GAAG;QACjB,eAAe,EAAE,SAAS;KAC7B,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAExB,MAAM,WAAW,GAAG,IAAI,8BAAoB,CAAC,OAAO,CAAC,CAAC;IACtD,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AA/BW,QAAA,mBAAmB,uBA+B9B;AAEK,MAAM,cAAc,GAAG,KAAK,EAC/B,KAAgB,EAChB,cAAyB,EACzB,cAAyB,EACzB,UAAsB,EACxB,EAAE;IACA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE5D,IAAI,UAAU,CAAC;IACf,MAAM,eAAe,GAAG,IAAA,yCAA6B,EACjD,KAAK,EACL,cAAc,EACd,KAAK,EACL,cAAc,CACjB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErE,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACtE,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,UAAU,GAAG,IAAA,6DAAiD,EAC1D,cAAc,EACd,eAAe,EACf,cAAc,EACd,KAAK,EACL,cAAc,CACjB,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO;QACH,UAAU;QACV,eAAe;KAClB,CAAC;AACN,CAAC,CAAC;AAvCW,QAAA,cAAc,kBAuCzB;AAEK,MAAM,uCAAuC,GAAG,KAAK,EACxD,UAAsB,EACtB,KAAgB,EAChB,KAAgB,EAClB,EAAE;IACA,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExC,IAAI,GAAc,CAAC;IACnB,IAAI,SAAoB,CAAC;IACzB,IAAI,YAAqB,CAAC;IAC1B,IAAI,CAAC;QACD,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,uBAAW,CAAC;YACjC,CAAC,CAAC,4BAAgB;YAClB,CAAC,CAAC,iCAAqB,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE7D,GAAG,GAAG,IAAA,yCAA6B,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5C,YAAY,GAAG,MAAM,IAAA,sBAAU,EAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE7B,SAAS,GAAG,4BAAgB,CAAC;QAC7B,GAAG,GAAG,IAAA,yCAA6B,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEhD,YAAY,GAAG,MAAM,IAAA,sBAAU,EAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAC5C,CAAC;AACL,CAAC,CAAC;AApCW,QAAA,uCAAuC,2CAoClD;AAEK,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAAgB,EAAE,KAAgB,EAAE,UAAsB,EAAE,EAAE;IACpG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExC,IAAI,KAAK,CAAC,MAAM,CAAC,uBAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,4BAAgB,CAAC;IAC5B,CAAC;IACD,IAAI,GAAc,CAAC;IACnB,IAAI,SAAS,GAAc,4BAAgB,CAAA;IAC3C,IAAI,YAAqB,CAAC;IAC1B,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,GAAG,GAAG,IAAA,yCAA6B,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACnE,YAAY,GAAG,MAAM,IAAA,sBAAU,EAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,4BAAgB,CAAA;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,iCAAqB,CAAC;IACjC,CAAC;AACL,CAAC,CAAA;AAvBY,QAAA,mBAAmB,uBAuB/B;AAED,oBAAoB;AACb,MAAM,mBAAmB,GAAG,KAAK,EAAE,OAAkB,EAAE,UAAsB,EAAG,EAAE;IACrF,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,GAAG,0BAAgB,EAAE,KAAK,CAAC,CAAC;IACrE,OAAO,EAAE,OAAO,EAAE,IAAI,UAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,0BAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC3F,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B;AAEK,MAAM,eAAe,GAAG,KAAK,EAAE,OAAkB,EAAE,KAAgB,EAAE,UAAsB,EAAE,EAAE;IAClG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC;QACD,yCAAyC;QACzC,MAAM,YAAY,GAAG,MAAM,IAAA,8BAAsB,EAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACb,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAErE,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,sBAAsB,CACxD,YAAY,CAAC,OAAO,CACvB,CAAC;QAEF,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACb,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,YAAY,CAAC,KAAK,CAAC;IAE9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC;IACb,CAAC;AACL,CAAC,CAAA;AA9BY,QAAA,eAAe,mBA8B3B;AAEM,MAAM,sBAAsB,GAAG,KAAK,EAAE,KAAgB,EAAE,OAAkB,EAAE,UAAsB,EAA2B,EAAE;IAClI,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE5C,IAAI,CAAC;QACD,2EAA2E;QAC3E,MAAM,sBAAsB,GAAG,MAAM,IAAA,qCAAyB,EAC1D,KAAK,EAAE,yBAAyB;QAChC,OAAO,CAAC,wBAAwB;SACnC,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5E,sCAAsC;QACtC,MAAM,YAAY,GAAG,MAAM,IAAA,sBAAU,EACjC,UAAU,EACV,sBAAsB,CACzB,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,YAAY,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAzBW,QAAA,sBAAsB,0BAyBjC;AAEK,MAAM,oBAAoB,GAAG,KAAK,EAAE,IAAe,EAAE,EAAa,EAAE,MAAc,EAAmC,EAAE;IAC1H,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,0BAAgB,CAAC,CAAC;IAEpD,OAAO,uBAAa,CAAC,QAAQ,CAAC;QAC1B,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,MAAM,GAAG,0BAAgB,EAAE,0BAA0B;KAClE,CAAC,CAAA;AACN,CAAC,CAAA;AAZY,QAAA,oBAAoB,wBAYhC;AAEM,MAAM,4BAA4B,GAAG,KAAK,EAAE,IAAa,EAAE,EAAa,EAAE,MAAc,EAAE,UAAsB,EAAE,EAAE;IACvH,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,IAAA,4BAAoB,EAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAmB,EAAC,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,WAAW,CAAC;AACvB,CAAC,CAAA;AANY,QAAA,4BAA4B,gCAMxC;AAEM,MAAM,mBAAmB,GAAG,KAAK,EAAE,IAAe,EAAE,EAAa,EAAE,KAAgB,EAAE,MAAc,EAAE,UAAsB,EAAqC,EAAE;IACrK,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE/B,MAAM,GAAG,GAA6B,EAAE,CAAA;IAExC,MAAM,WAAW,GAAG,IAAI,mBAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEtD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,+CAAuC,EAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9H,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9C,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,sBAAc,EAAC,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAClH,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExD,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAA,4CAAgC,EAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IACnI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEf,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC;AACf,CAAC,CAAA;AAjCY,QAAA,mBAAmB,uBAiC/B;AAEM,MAAM,2BAA2B,GAAG,KAAK,EAAE,IAAa,EAAE,EAAa,EAAE,KAAgB,EAAE,MAAc,EAAE,UAAsB,EAAiC,EAAE;IACvK,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAmB,EAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAmB,EAAC,UAAU,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,WAAW,CAAC;AACvB,CAAC,CAAA;AANY,QAAA,2BAA2B,+BAMvC;AAEM,MAAM,sBAAsB,GAAG,KAAK,EAAE,WAAiC,EAAE,UAAsB,EAAE,OAAkB,EAAE,EAAE;IAC1H,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9C,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACzB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAA;IACvD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,IAAA,0DAAsC,EAAC;QACrD,UAAU;QACV,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3D,8BAA8B,EAAE;YAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,oBAAoB,EAAE,SAAS,CAAC,oBAAoB;SACvD;KACJ,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,SAAS,CAAC,CAAC;IAC7D,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA;AA5BY,QAAA,sBAAsB,0BA4BlC;AAED,MAAM;AACN,gCAAgC;AAEzB,MAAM,eAAe,GAAG,KAAK,EAChC,SAAiB,EACjB,UAAkB,EAClB,MAAc,EACd,cAAsB,EAAE,EACK,EAAE;IAC/B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QAC/B,SAAS;QACT,UAAU;QACV,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;QACzB,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;QACnC,gBAAgB,EAAE,OAAO;QACzB,mBAAmB,EAAE,OAAO;KAC/B,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,GAAG,gBAAgB,kBAAkB,MAAM,EAAE,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE1D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAjDW,QAAA,eAAe,mBAiD1B;AAEK,MAAM,2BAA2B,GAAG,KAAK,EAC5C,KAA2B,EAC3B,aAAqB,EACrB,yBAAkC,EACN,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,yBAAyB,IAAI,IAAI,CAAC,CAAC;IAEtE,MAAM,IAAI,GAAG;QACT,aAAa,EAAE,KAAK;QACpB,aAAa;QACb,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,IAAI;QACvB,UAAU,EAAE,SAAS;QACrB,eAAe,EAAE,SAAS;QAC1B,6BAA6B,EAAE,SAAS;QACxC,yBAAyB,EAAE,yBAAyB,IAAI,IAAI;QAC5D,mBAAmB,EAAE,KAAK;QAC1B,cAAc,EAAE,KAAK;QACrB,uBAAuB,EAAE,SAAS;QAClC,uBAAuB,EAAE,IAAI;QAC7B,wBAAwB,EAAE,KAAK;KAClC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,eAAe,EAAE;QAC7D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,kBAAkB;SACrC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC7B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAExE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEjD,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,0CAA0C,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACtG,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,UAAU,CAAC,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACrF,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAvDW,QAAA,2BAA2B,+BAuDtC;AAEK,MAAM,kBAAkB,GAAG,KAAK,EACnC,UAAsB,EACtB,UAAsB,EACtB,KAAc,EACK,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;QACxB,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE;QAC1C,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE;QACtC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAe,EAC/B,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,EAC/B,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAC7B,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,WAAW,CACzB,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;YAC3B,WAAW,EAAE,KAAK,CAAC,QAAQ;YAC3B,YAAY,EAAE,KAAK,CAAC,SAAS;YAC7B,WAAW,EAAE,KAAK,CAAC,cAAc;SACpC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAA,mCAA2B,EAClD,KAAK,EACL,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,CACtC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAErE,MAAM,WAAW,GAAG,8BAAoB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QAErD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAElC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,MAAM,IAAA,0DAAsC,EAAC;YAC3D,UAAU;YACV,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAC3D,8BAA8B,EAAE;gBAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,oBAAoB,EAAE,SAAS,CAAC,oBAAoB;aACvD;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC7C,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,+BAA+B;aACzC,CAAC;QACN,CAAC;QAED,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,WAAW,CAAC,CAAC;QAExD,OAAO;YACH,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,KAAK,CAAC,QAAQ;YAC3B,YAAY,EAAE,KAAK,CAAC,SAAS;YAC7B,WAAW,EAAE,KAAK,CAAC,cAAc;SACpC,CAAC;IAEN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,KAAK,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAErF,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;SAC3E,CAAC;IACN,CAAC;AACL,CAAC,CAAC;AAzFW,QAAA,kBAAkB,sBAyF7B;AAEK,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAU,EAAE;IAC9E,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AALW,QAAA,mBAAmB,uBAK9B;AAEK,MAAM,mBAAmB,GAAG,CAAC,UAA2B,EAAE,QAAgB,EAAU,EAAE;IACzF,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AALW,QAAA,mBAAmB,uBAK9B;AAEK,MAAM,mBAAmB,GAAG,KAAK,IAAoB,EAAE;IAC1D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,2BAA2B,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC,CAAC;AAjBW,QAAA,mBAAmB,uBAiB9B;AAEK,MAAM,qBAAqB,GAAG,KAAK,EACtC,SAAiB,EACjB,UAAkB,EAC2B,EAAE;IAC/C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAA,2BAAmB,GAAE,CAAC;QAC9C,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC;QAExD,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;QACtE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;IAClE,CAAC;AACL,CAAC,CAAC;AAnCW,QAAA,qBAAqB,yBAmChC"}
|
package/package.json
CHANGED
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,90 +151,128 @@ 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
|
+
console.log('getProgramIdOfToken: Starting');
|
|
178
|
+
console.log('Owner:', owner.toString());
|
|
179
|
+
console.log('Token:', token.toString());
|
|
180
|
+
|
|
141
181
|
if (token.equals(NATIVE_MINT)) {
|
|
182
|
+
console.log('Token is native mint, returning TOKEN_PROGRAM_ID');
|
|
142
183
|
return TOKEN_PROGRAM_ID;
|
|
143
184
|
}
|
|
144
185
|
let ATA: PublicKey;
|
|
145
186
|
let programId: PublicKey = TOKEN_PROGRAM_ID
|
|
146
187
|
let tokenAccount: Account;
|
|
147
188
|
try {
|
|
189
|
+
console.log('Trying with TOKEN_PROGRAM_ID');
|
|
148
190
|
ATA = getAssociatedTokenAddressSync(token, owner, true, programId);
|
|
149
191
|
tokenAccount = await getAccount(connection, ATA, "confirmed", programId);
|
|
192
|
+
console.log('Found with TOKEN_PROGRAM_ID');
|
|
150
193
|
return TOKEN_PROGRAM_ID
|
|
151
194
|
} catch (error) {
|
|
195
|
+
console.log('Failed with TOKEN_PROGRAM_ID, returning TOKEN_2022_PROGRAM_ID');
|
|
196
|
+
console.log('Error:', error);
|
|
152
197
|
return TOKEN_2022_PROGRAM_ID;
|
|
153
|
-
|
|
154
198
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
199
|
}
|
|
159
|
-
//get native balance
|
|
160
200
|
|
|
201
|
+
//get native balance
|
|
161
202
|
export const getSvmNativeBalance = async (address: PublicKey, connection: Connection,) => {
|
|
203
|
+
console.log('getSvmNativeBalance: Getting balance for', address.toString());
|
|
162
204
|
const balance = await connection.getBalance(address);
|
|
205
|
+
console.log('Raw balance:', balance);
|
|
206
|
+
console.log('Formatted balance:', balance / LAMPORTS_PER_SOL, 'SOL');
|
|
163
207
|
return { balance: new BN(balance), formatted: balance / LAMPORTS_PER_SOL, decimal: 9 };
|
|
164
208
|
};
|
|
165
209
|
|
|
166
210
|
export const getTokenBalance = async (address: PublicKey, token: PublicKey, connection: Connection) => {
|
|
211
|
+
console.log('getTokenBalance: Starting');
|
|
212
|
+
console.log('Address:', address.toString());
|
|
213
|
+
console.log('Token:', token.toString());
|
|
167
214
|
|
|
168
215
|
try {
|
|
169
216
|
// Get the balance from the token account
|
|
170
217
|
const tokenAccount = await getTokenAccountAccount(token, address, connection);
|
|
171
218
|
if (!tokenAccount) {
|
|
172
|
-
console.
|
|
219
|
+
console.log("Token account not found");
|
|
173
220
|
return 0;
|
|
174
221
|
}
|
|
222
|
+
console.log('Token account found:', tokenAccount.address.toString());
|
|
223
|
+
|
|
175
224
|
const tokenBalance = await connection.getTokenAccountBalance(
|
|
176
225
|
tokenAccount.address
|
|
177
226
|
);
|
|
178
227
|
|
|
179
228
|
if (!tokenBalance) {
|
|
180
|
-
console.
|
|
229
|
+
console.log("Token balance not found");
|
|
181
230
|
return 0;
|
|
182
231
|
}
|
|
183
232
|
|
|
233
|
+
console.log('Token balance:', tokenBalance.value);
|
|
184
234
|
return tokenBalance.value;
|
|
185
235
|
|
|
186
236
|
} catch (error) {
|
|
237
|
+
console.log('Error in getTokenBalance:', error);
|
|
187
238
|
return 0;
|
|
188
239
|
}
|
|
189
240
|
}
|
|
190
241
|
|
|
191
242
|
export const getTokenAccountAccount = async (token: PublicKey, address: PublicKey, connection: Connection): Promise<Account | null> => {
|
|
192
|
-
|
|
243
|
+
console.log('getTokenAccountAccount: Starting');
|
|
244
|
+
console.log('Token:', token.toString());
|
|
245
|
+
console.log('Address:', address.toString());
|
|
193
246
|
|
|
247
|
+
try {
|
|
194
248
|
// Get the associated token account address for the user and the token mint
|
|
195
249
|
const associatedTokenAccount = await getAssociatedTokenAddress(
|
|
196
250
|
token, // The token mint address
|
|
197
251
|
address // The user's public key
|
|
198
252
|
);
|
|
253
|
+
console.log('Associated token account:', associatedTokenAccount.toString());
|
|
254
|
+
|
|
199
255
|
// Fetch the token account information
|
|
200
256
|
const tokenAccount = await getAccount(
|
|
201
257
|
connection,
|
|
202
258
|
associatedTokenAccount
|
|
203
259
|
);
|
|
204
260
|
|
|
261
|
+
console.log('Token account retrieved successfully');
|
|
205
262
|
return tokenAccount;
|
|
206
263
|
} catch (error) {
|
|
207
|
-
console.
|
|
264
|
+
console.log("Error getting token account:", error);
|
|
208
265
|
return null;
|
|
209
266
|
}
|
|
210
267
|
};
|
|
211
268
|
|
|
212
269
|
export const getTransferNativeInx = async (from: PublicKey, to: PublicKey, amount: number): Promise<TransactionInstruction> => {
|
|
270
|
+
console.log('getTransferNativeInx: Creating transfer instruction');
|
|
271
|
+
console.log('From:', from.toString());
|
|
272
|
+
console.log('To:', to.toString());
|
|
273
|
+
console.log('Amount:', amount, 'SOL');
|
|
274
|
+
console.log('Lamports:', amount * LAMPORTS_PER_SOL);
|
|
275
|
+
|
|
213
276
|
return SystemProgram.transfer({
|
|
214
277
|
fromPubkey: from,
|
|
215
278
|
toPubkey: to,
|
|
@@ -218,48 +281,86 @@ export const getTransferNativeInx = async (from: PublicKey, to: PublicKey, amoun
|
|
|
218
281
|
}
|
|
219
282
|
|
|
220
283
|
export const getTransferNativeTransaction = async (from: Keypair, to: PublicKey, amount: number, connection: Connection) => {
|
|
284
|
+
console.log('getTransferNativeTransaction: Starting');
|
|
221
285
|
const instruction = await getTransferNativeInx(from.publicKey, to, amount);
|
|
222
286
|
const transaction = await createV0Transaction(connection, [instruction], [from], from.publicKey);
|
|
287
|
+
console.log('getTransferNativeTransaction: Completed');
|
|
223
288
|
return transaction;
|
|
224
289
|
}
|
|
225
290
|
|
|
226
291
|
export const getTransferTokenInx = async (from: PublicKey, to: PublicKey, token: TokenInfo, amount: number, connection: Connection): Promise<TransactionInstruction[]> => {
|
|
292
|
+
console.log('getTransferTokenInx: Starting');
|
|
293
|
+
console.log('From:', from.toString());
|
|
294
|
+
console.log('To:', to.toString());
|
|
295
|
+
console.log('Token:', token);
|
|
296
|
+
console.log('Amount:', amount);
|
|
297
|
+
|
|
227
298
|
const inx: TransactionInstruction[] = []
|
|
228
299
|
|
|
229
300
|
const tokenToSend = new PublicKey(token.address);
|
|
301
|
+
console.log('Token to send:', tokenToSend.toString());
|
|
302
|
+
|
|
230
303
|
const { ATA: source, programId, tokenAccount } = await getSureAssociatedTokenAddressAndAccount(connection, from, tokenToSend);
|
|
304
|
+
console.log('Source ATA:', source.toString());
|
|
305
|
+
|
|
231
306
|
const { associatedToken: destination, AtaTokenIx } = await createAtaAndIx(tokenToSend, to, programId, connection);
|
|
307
|
+
console.log('Destination ATA:', destination.toString());
|
|
232
308
|
|
|
233
309
|
if (!tokenAccount) {
|
|
310
|
+
console.log('Token account not found, throwing error');
|
|
234
311
|
throw new Error("Token account not found");
|
|
235
312
|
}
|
|
236
313
|
if (AtaTokenIx) {
|
|
314
|
+
console.log('Adding ATA creation instruction');
|
|
237
315
|
inx.push(AtaTokenIx);
|
|
238
316
|
}
|
|
317
|
+
|
|
318
|
+
console.log('Creating transfer instruction');
|
|
239
319
|
const tInx = createTransferCheckedInstruction(source, tokenToSend, destination, from, amount, token.decimals, undefined, programId)
|
|
240
320
|
inx.push(tInx);
|
|
241
321
|
|
|
322
|
+
console.log('getTransferTokenInx: Completed with', inx.length, 'instructions');
|
|
242
323
|
return inx;
|
|
243
|
-
|
|
244
324
|
}
|
|
325
|
+
|
|
245
326
|
export const getTransferTokenTransaction = async (from: Keypair, to: PublicKey, token: TokenInfo, amount: number, connection: Connection): Promise<VersionedTransaction> => {
|
|
327
|
+
console.log('getTransferTokenTransaction: Starting');
|
|
246
328
|
const instruction = await getTransferTokenInx(from.publicKey, to, token, amount, connection);
|
|
247
329
|
const transaction = await createV0Transaction(connection, instruction, [from], from.publicKey);
|
|
330
|
+
console.log('getTransferTokenTransaction: Completed');
|
|
248
331
|
return transaction;
|
|
249
332
|
}
|
|
333
|
+
|
|
250
334
|
export const signAndSendTransaction = async (transaction: VersionedTransaction, connection: Connection, signers: Keypair[]) => {
|
|
335
|
+
console.log('signAndSendTransaction: Starting');
|
|
336
|
+
console.log('Signers count:', signers.length);
|
|
337
|
+
|
|
251
338
|
transaction.sign(signers)
|
|
339
|
+
console.log('Transaction signed');
|
|
340
|
+
|
|
252
341
|
const blockhash = await connection.getLatestBlockhash()
|
|
253
|
-
|
|
342
|
+
console.log('Got latest blockhash:', blockhash.blockhash);
|
|
343
|
+
|
|
344
|
+
console.log('Sending transaction...');
|
|
345
|
+
const res = await transactionSenderAndConfirmationWaiter({
|
|
346
|
+
connection,
|
|
347
|
+
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
348
|
+
blockhashWithExpiryBlockHeight: {
|
|
349
|
+
blockhash: blockhash.blockhash,
|
|
350
|
+
lastValidBlockHeight: blockhash.lastValidBlockHeight
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
|
|
254
354
|
if (!res) {
|
|
355
|
+
console.log('Transaction failed to send or confirm');
|
|
255
356
|
throw new Error("Transaction failed to send or confirm");
|
|
256
357
|
}
|
|
257
|
-
return res.transaction.signatures[0];
|
|
258
358
|
|
|
359
|
+
const signature = res.transaction.signatures[0];
|
|
360
|
+
console.log('Transaction successful, signature:', signature);
|
|
361
|
+
return signature;
|
|
259
362
|
}
|
|
260
363
|
|
|
261
|
-
|
|
262
|
-
|
|
263
364
|
//swap
|
|
264
365
|
//you will. use jupiter for this
|
|
265
366
|
|
|
@@ -269,6 +370,12 @@ export const getJupiterQuote = async (
|
|
|
269
370
|
amount: number,
|
|
270
371
|
slippageBps: number = 50
|
|
271
372
|
): Promise<JupiterQuoteResponse> => {
|
|
373
|
+
console.log('getJupiterQuote: Starting');
|
|
374
|
+
console.log('Input mint:', inputMint);
|
|
375
|
+
console.log('Output mint:', outputMint);
|
|
376
|
+
console.log('Amount:', amount);
|
|
377
|
+
console.log('Slippage BPS:', slippageBps);
|
|
378
|
+
|
|
272
379
|
const params = new URLSearchParams({
|
|
273
380
|
inputMint,
|
|
274
381
|
outputMint,
|
|
@@ -278,14 +385,34 @@ export const getJupiterQuote = async (
|
|
|
278
385
|
asLegacyTransaction: 'false'
|
|
279
386
|
});
|
|
280
387
|
|
|
281
|
-
const
|
|
388
|
+
const url = `${JUPITER_BASE_URL}/swap/v1/quote?${params}`;
|
|
389
|
+
console.log('Request URL:', url);
|
|
390
|
+
|
|
391
|
+
const response = await fetch(url);
|
|
392
|
+
console.log('Response status:', response.status);
|
|
393
|
+
console.log('Response status text:', response.statusText);
|
|
282
394
|
|
|
283
395
|
if (!response.ok) {
|
|
284
|
-
|
|
285
|
-
|
|
396
|
+
console.log('Jupiter quote request failed');
|
|
397
|
+
console.log('Status:', response.status);
|
|
398
|
+
console.log('Status Text:', response.statusText);
|
|
399
|
+
console.log('URL:', url);
|
|
400
|
+
|
|
401
|
+
try {
|
|
402
|
+
const error = await response.json();
|
|
403
|
+
console.log('Error details:', error);
|
|
404
|
+
} catch {
|
|
405
|
+
const textError = await response.text();
|
|
406
|
+
console.log('Error text:', textError);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
throw new Error(`Jupiter quote failed: ${response.statusText}`);
|
|
286
410
|
}
|
|
287
411
|
|
|
288
|
-
|
|
412
|
+
const result = await response.json();
|
|
413
|
+
console.log('Jupiter quote successful');
|
|
414
|
+
console.log('Quote result:', result);
|
|
415
|
+
return result;
|
|
289
416
|
};
|
|
290
417
|
|
|
291
418
|
export const buildJupiterSwapTransaction = async (
|
|
@@ -293,6 +420,10 @@ export const buildJupiterSwapTransaction = async (
|
|
|
293
420
|
userPublicKey: string,
|
|
294
421
|
prioritizationFeeLamports?: number
|
|
295
422
|
): Promise<JupiterSwapResponse> => {
|
|
423
|
+
console.log('buildJupiterSwapTransaction: Starting');
|
|
424
|
+
console.log('User public key:', userPublicKey);
|
|
425
|
+
console.log('Prioritization fee:', prioritizationFeeLamports || 1000);
|
|
426
|
+
|
|
296
427
|
const body = {
|
|
297
428
|
quoteResponse: quote,
|
|
298
429
|
userPublicKey,
|
|
@@ -309,6 +440,8 @@ export const buildJupiterSwapTransaction = async (
|
|
|
309
440
|
skipUserAccountsRpcCalls: false
|
|
310
441
|
};
|
|
311
442
|
|
|
443
|
+
console.log('Request body:', body);
|
|
444
|
+
|
|
312
445
|
const response = await fetch(`${JUPITER_BASE_URL}/swap/v1/swap`, {
|
|
313
446
|
method: 'POST',
|
|
314
447
|
headers: {
|
|
@@ -317,12 +450,26 @@ export const buildJupiterSwapTransaction = async (
|
|
|
317
450
|
body: JSON.stringify(body),
|
|
318
451
|
});
|
|
319
452
|
|
|
453
|
+
console.log('Swap transaction build response status:', response.status);
|
|
454
|
+
|
|
320
455
|
if (!response.ok) {
|
|
321
|
-
|
|
322
|
-
|
|
456
|
+
console.log('Jupiter swap transaction build failed');
|
|
457
|
+
console.log('Status:', response.status);
|
|
458
|
+
console.log('Status text:', response.statusText);
|
|
459
|
+
|
|
460
|
+
try {
|
|
461
|
+
const error = await response.json();
|
|
462
|
+
console.log('Swap build error details:', error);
|
|
463
|
+
throw new Error(`Jupiter swap transaction build failed: ${error.message || response.statusText}`);
|
|
464
|
+
} catch (parseError) {
|
|
465
|
+
console.log('Failed to parse error response:', parseError);
|
|
466
|
+
throw new Error(`Jupiter swap transaction build failed: ${response.statusText}`);
|
|
467
|
+
}
|
|
323
468
|
}
|
|
324
469
|
|
|
325
|
-
|
|
470
|
+
const result = await response.json();
|
|
471
|
+
console.log('Jupiter swap transaction built successfully');
|
|
472
|
+
return result;
|
|
326
473
|
};
|
|
327
474
|
|
|
328
475
|
export const executeJupiterSwap = async (
|
|
@@ -330,6 +477,15 @@ export const executeJupiterSwap = async (
|
|
|
330
477
|
connection: Connection,
|
|
331
478
|
payer: Keypair
|
|
332
479
|
): Promise<SwapResult> => {
|
|
480
|
+
console.log('executeJupiterSwap: Starting');
|
|
481
|
+
console.log('Swap params:', {
|
|
482
|
+
fromToken: swapParams.fromToken.toString(),
|
|
483
|
+
toToken: swapParams.toToken.toString(),
|
|
484
|
+
amount: swapParams.amount,
|
|
485
|
+
slippageBps: swapParams.slippageBps,
|
|
486
|
+
userPublicKey: swapParams.userPublicKey.toString()
|
|
487
|
+
});
|
|
488
|
+
|
|
333
489
|
try {
|
|
334
490
|
console.log('Getting Jupiter quote...');
|
|
335
491
|
const quote = await getJupiterQuote(
|
|
@@ -353,13 +509,19 @@ export const executeJupiterSwap = async (
|
|
|
353
509
|
|
|
354
510
|
console.log('Deserializing transaction...');
|
|
355
511
|
const swapTransactionBuf = Buffer.from(swapResponse.swapTransaction, 'base64');
|
|
512
|
+
console.log('Transaction buffer length:', swapTransactionBuf.length);
|
|
513
|
+
|
|
356
514
|
const transaction = VersionedTransaction.deserialize(swapTransactionBuf);
|
|
515
|
+
console.log('Transaction deserialized successfully');
|
|
357
516
|
|
|
358
517
|
console.log('Signing transaction...');
|
|
359
518
|
transaction.sign([payer]);
|
|
519
|
+
console.log('Transaction signed');
|
|
360
520
|
|
|
361
521
|
console.log('Sending transaction...');
|
|
362
522
|
const blockhash = await connection.getLatestBlockhash();
|
|
523
|
+
console.log('Got latest blockhash for confirmation');
|
|
524
|
+
|
|
363
525
|
const signature = await transactionSenderAndConfirmationWaiter({
|
|
364
526
|
connection,
|
|
365
527
|
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
@@ -370,24 +532,30 @@ export const executeJupiterSwap = async (
|
|
|
370
532
|
});
|
|
371
533
|
|
|
372
534
|
if (!signature) {
|
|
535
|
+
console.log('Transaction failed to confirm');
|
|
373
536
|
return {
|
|
374
537
|
success: false,
|
|
375
538
|
error: 'Transaction failed to confirm'
|
|
376
539
|
};
|
|
377
540
|
}
|
|
378
541
|
|
|
379
|
-
|
|
542
|
+
const txSignature = signature.transaction.signatures[0];
|
|
543
|
+
console.log('Swap successful! Signature:', txSignature);
|
|
380
544
|
|
|
381
545
|
return {
|
|
382
546
|
success: true,
|
|
383
|
-
hash:
|
|
547
|
+
hash: txSignature,
|
|
384
548
|
inputAmount: quote.inAmount,
|
|
385
549
|
outputAmount: quote.outAmount,
|
|
386
550
|
priceImpact: quote.priceImpactPct
|
|
387
551
|
};
|
|
388
552
|
|
|
389
553
|
} catch (error) {
|
|
390
|
-
console.
|
|
554
|
+
console.log('Jupiter swap failed with error:', error);
|
|
555
|
+
console.log('Error type:', typeof error);
|
|
556
|
+
console.log('Error message:', error instanceof Error ? error.message : 'Unknown error');
|
|
557
|
+
console.log('Error stack:', error instanceof Error ? error.stack : 'No stack trace');
|
|
558
|
+
|
|
391
559
|
return {
|
|
392
560
|
success: false,
|
|
393
561
|
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
@@ -396,22 +564,34 @@ export const executeJupiterSwap = async (
|
|
|
396
564
|
};
|
|
397
565
|
|
|
398
566
|
export const uiAmountToBaseUnits = (uiAmount: number, decimals: number): number => {
|
|
399
|
-
|
|
567
|
+
console.log('uiAmountToBaseUnits: Converting', uiAmount, 'with', decimals, 'decimals');
|
|
568
|
+
const result = Math.floor(uiAmount * Math.pow(10, decimals));
|
|
569
|
+
console.log('Converted to base units:', result);
|
|
570
|
+
return result;
|
|
400
571
|
};
|
|
401
572
|
|
|
402
573
|
export const baseUnitsToUiAmount = (baseAmount: string | number, decimals: number): number => {
|
|
403
|
-
|
|
574
|
+
console.log('baseUnitsToUiAmount: Converting', baseAmount, 'with', decimals, 'decimals');
|
|
575
|
+
const result = Number(baseAmount) / Math.pow(10, decimals);
|
|
576
|
+
console.log('Converted to UI amount:', result);
|
|
577
|
+
return result;
|
|
404
578
|
};
|
|
405
579
|
|
|
406
580
|
export const getJupiterTokenList = async (): Promise<any[]> => {
|
|
581
|
+
console.log('getJupiterTokenList: Fetching token list');
|
|
407
582
|
try {
|
|
408
583
|
const response = await fetch(`${JUPITER_BASE_URL}/tokens/v1/mints/tradable`);
|
|
584
|
+
console.log('Token list response status:', response.status);
|
|
585
|
+
|
|
409
586
|
if (!response.ok) {
|
|
587
|
+
console.log('Failed to fetch token list:', response.statusText);
|
|
410
588
|
throw new Error(`Failed to fetch token list: ${response.statusText}`);
|
|
411
589
|
}
|
|
412
|
-
|
|
590
|
+
const result = await response.json();
|
|
591
|
+
console.log('Token list fetched, count:', result.length);
|
|
592
|
+
return result;
|
|
413
593
|
} catch (error) {
|
|
414
|
-
console.
|
|
594
|
+
console.log('Failed to fetch Jupiter token list:', error);
|
|
415
595
|
return [];
|
|
416
596
|
}
|
|
417
597
|
};
|
|
@@ -420,23 +600,35 @@ export const validateJupiterTokens = async (
|
|
|
420
600
|
inputMint: string,
|
|
421
601
|
outputMint: string
|
|
422
602
|
): Promise<{ valid: boolean; message?: string }> => {
|
|
603
|
+
console.log('validateJupiterTokens: Starting validation');
|
|
604
|
+
console.log('Input mint:', inputMint);
|
|
605
|
+
console.log('Output mint:', outputMint);
|
|
606
|
+
|
|
423
607
|
try {
|
|
424
608
|
const tokenList = await getJupiterTokenList();
|
|
425
609
|
const inputSupported = tokenList.includes(inputMint);
|
|
426
610
|
const outputSupported = tokenList.includes(outputMint);
|
|
427
611
|
|
|
612
|
+
console.log('Input token supported:', inputSupported);
|
|
613
|
+
console.log('Output token supported:', outputSupported);
|
|
614
|
+
|
|
428
615
|
if (!inputSupported && !outputSupported) {
|
|
616
|
+
console.log('Both tokens not supported');
|
|
429
617
|
return { valid: false, message: 'Both input and output tokens are not supported' };
|
|
430
618
|
}
|
|
431
619
|
if (!inputSupported) {
|
|
620
|
+
console.log('Input token not supported');
|
|
432
621
|
return { valid: false, message: 'Input token is not supported' };
|
|
433
622
|
}
|
|
434
623
|
if (!outputSupported) {
|
|
624
|
+
console.log('Output token not supported');
|
|
435
625
|
return { valid: false, message: 'Output token is not supported' };
|
|
436
626
|
}
|
|
437
627
|
|
|
628
|
+
console.log('Both tokens are supported');
|
|
438
629
|
return { valid: true };
|
|
439
630
|
} catch (error) {
|
|
631
|
+
console.log('Token validation failed:', error);
|
|
440
632
|
return { valid: false, message: 'Failed to validate tokens' };
|
|
441
633
|
}
|
|
442
634
|
};
|