@deserialize/multi-vm-wallet 1.0.2 → 1.0.4
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/IChainWallet.d.ts +17 -0
- package/dist/IChainWallet.js +23 -0
- package/dist/IChainWallet.js.map +1 -0
- package/dist/bip32.d.ts +11 -0
- package/dist/bip32.js +100 -0
- package/dist/bip32.js.map +1 -0
- package/dist/evm/evm.d.ts +56 -0
- package/dist/evm/evm.js +257 -0
- package/dist/evm/evm.js.map +1 -0
- package/dist/evm/index.d.ts +2 -0
- package/dist/evm/index.js +19 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/evm/utils.d.ts +214 -0
- package/dist/evm/utils.js +538 -0
- package/dist/evm/utils.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/old.d.ts +0 -0
- package/dist/old.js +885 -0
- package/dist/old.js.map +1 -0
- package/dist/svm/index.d.ts +1 -0
- package/dist/svm/index.js +18 -0
- package/dist/svm/index.js.map +1 -0
- package/dist/svm/svm.d.ts +37 -0
- package/dist/svm/svm.js +181 -0
- package/dist/svm/svm.js.map +1 -0
- package/dist/svm/transactionSender.d.ts +8 -0
- package/dist/svm/transactionSender.js +88 -0
- package/dist/svm/transactionSender.js.map +1 -0
- package/dist/svm/utils.d.ts +85 -0
- package/dist/svm/utils.js +470 -0
- package/dist/svm/utils.js.map +1 -0
- package/dist/test.d.ts +2 -0
- package/dist/test.js +42 -0
- package/dist/test.js.map +1 -0
- package/dist/types.d.ts +44 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/vm.d.ts +23 -0
- package/dist/vm.js +89 -0
- package/dist/vm.js.map +1 -0
- package/package.json +4 -1
- package/tsconfig.json +11 -111
- package/utils/evm/evm.ts +58 -3
- package/utils/old.ts +1005 -0
- package/utils/svm/svm.ts +29 -12
- package/utils/svm/transactionSender.ts +7 -2
- package/utils/svm/utils.ts +222 -29
- package/utils/test.ts +49 -0
- package/utils/vm.ts +50 -1
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//we will write all the svm utils function here
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.validateJupiterTokens = exports.getJupiterTokenList = exports.baseUnitsToUiAmount = exports.uiAmountToBaseUnits = exports.executeJupiterSwap = exports.buildJupiterSwapTransaction = exports.getJupiterQuote = exports.signAndSendTransaction = exports.getTransferTokenTransaction = exports.getTransferTokenInx = exports.getTransferNativeTransaction = exports.getTransferNativeInx = exports.getTokenAccountAccount = exports.getTokenBalance = exports.getSvmNativeBalance = exports.getProgramIdOfToken = exports.getSureAssociatedTokenAddressAndAccount = exports.createAtaAndIx = exports.createV0Transaction = void 0;
|
|
5
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
6
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
7
|
+
const transactionSender_1 = require("./transactionSender");
|
|
8
|
+
const bn_js_1 = require("bn.js");
|
|
9
|
+
const JUPITER_BASE_URL = 'https://lite-api.jup.ag';
|
|
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());
|
|
15
|
+
const blockhash = blockHash || (await connection.getLatestBlockhash()).blockhash;
|
|
16
|
+
console.log('Using blockhash:', blockhash);
|
|
17
|
+
const message = new web3_js_1.TransactionMessage({
|
|
18
|
+
payerKey: payerPubKey,
|
|
19
|
+
instructions: inX,
|
|
20
|
+
recentBlockhash: blockhash,
|
|
21
|
+
}).compileToV0Message();
|
|
22
|
+
const transaction = new web3_js_1.VersionedTransaction(message);
|
|
23
|
+
transaction.message.staticAccountKeys;
|
|
24
|
+
if (signers.length < 1) {
|
|
25
|
+
console.log('Signing transaction with signers');
|
|
26
|
+
transaction.sign(signers);
|
|
27
|
+
}
|
|
28
|
+
console.log('createV0Transaction: Transaction created successfully');
|
|
29
|
+
return transaction;
|
|
30
|
+
};
|
|
31
|
+
exports.createV0Transaction = createV0Transaction;
|
|
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());
|
|
37
|
+
let AtaTokenIx;
|
|
38
|
+
const associatedToken = (0, spl_token_1.getAssociatedTokenAddressSync)(token, ownerPublicKey, false, tokenProgramId);
|
|
39
|
+
console.log('Associated token address:', associatedToken.toString());
|
|
40
|
+
const accountExist = await connection.getAccountInfo(associatedToken);
|
|
41
|
+
if (!accountExist) {
|
|
42
|
+
console.log('Account does not exist, creating ATA instruction');
|
|
43
|
+
AtaTokenIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(ownerPublicKey, associatedToken, ownerPublicKey, token, tokenProgramId);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('Account already exists, no ATA instruction needed');
|
|
47
|
+
}
|
|
48
|
+
console.log('createAtaAndIx: Completed');
|
|
49
|
+
return {
|
|
50
|
+
AtaTokenIx,
|
|
51
|
+
associatedToken,
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
exports.createAtaAndIx = createAtaAndIx;
|
|
55
|
+
const getSureAssociatedTokenAddressAndAccount = async (connection, token, owner) => {
|
|
56
|
+
console.log('getSureAssociatedTokenAddressAndAccount: Starting');
|
|
57
|
+
console.log('Token:', token.toString());
|
|
58
|
+
console.log('Owner:', owner.toString());
|
|
59
|
+
let ATA;
|
|
60
|
+
let programId;
|
|
61
|
+
let tokenAccount;
|
|
62
|
+
try {
|
|
63
|
+
programId = token.equals(spl_token_1.NATIVE_MINT)
|
|
64
|
+
? spl_token_1.TOKEN_PROGRAM_ID
|
|
65
|
+
: spl_token_1.TOKEN_2022_PROGRAM_ID;
|
|
66
|
+
console.log('Trying with program ID:', programId.toString());
|
|
67
|
+
ATA = (0, spl_token_1.getAssociatedTokenAddressSync)(token, owner, true, programId);
|
|
68
|
+
console.log('ATA address:', ATA.toString());
|
|
69
|
+
tokenAccount = await (0, spl_token_1.getAccount)(connection, ATA, "confirmed", programId);
|
|
70
|
+
console.log('Token account found with TOKEN_2022_PROGRAM_ID');
|
|
71
|
+
return { ATA, programId, tokenAccount };
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.log('Failed with TOKEN_2022_PROGRAM_ID, trying TOKEN_PROGRAM_ID');
|
|
75
|
+
console.log('Error:', error);
|
|
76
|
+
programId = spl_token_1.TOKEN_PROGRAM_ID;
|
|
77
|
+
ATA = (0, spl_token_1.getAssociatedTokenAddressSync)(token, owner, true, programId);
|
|
78
|
+
console.log('New ATA address:', ATA.toString());
|
|
79
|
+
tokenAccount = await (0, spl_token_1.getAccount)(connection, ATA, "confirmed", programId);
|
|
80
|
+
console.log('Token account found with TOKEN_PROGRAM_ID');
|
|
81
|
+
return { ATA, programId, tokenAccount };
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
exports.getSureAssociatedTokenAddressAndAccount = getSureAssociatedTokenAddressAndAccount;
|
|
85
|
+
const getProgramIdOfToken = async (owner, token, connection) => {
|
|
86
|
+
console.log('getProgramIdOfToken: Starting');
|
|
87
|
+
console.log('Owner:', owner.toString());
|
|
88
|
+
console.log('Token:', token.toString());
|
|
89
|
+
if (token.equals(spl_token_1.NATIVE_MINT)) {
|
|
90
|
+
console.log('Token is native mint, returning TOKEN_PROGRAM_ID');
|
|
91
|
+
return spl_token_1.TOKEN_PROGRAM_ID;
|
|
92
|
+
}
|
|
93
|
+
let ATA;
|
|
94
|
+
let programId = spl_token_1.TOKEN_PROGRAM_ID;
|
|
95
|
+
let tokenAccount;
|
|
96
|
+
try {
|
|
97
|
+
console.log('Trying with TOKEN_PROGRAM_ID');
|
|
98
|
+
ATA = (0, spl_token_1.getAssociatedTokenAddressSync)(token, owner, true, programId);
|
|
99
|
+
tokenAccount = await (0, spl_token_1.getAccount)(connection, ATA, "confirmed", programId);
|
|
100
|
+
console.log('Found with TOKEN_PROGRAM_ID');
|
|
101
|
+
return spl_token_1.TOKEN_PROGRAM_ID;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.log('Failed with TOKEN_PROGRAM_ID, returning TOKEN_2022_PROGRAM_ID');
|
|
105
|
+
console.log('Error:', error);
|
|
106
|
+
return spl_token_1.TOKEN_2022_PROGRAM_ID;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.getProgramIdOfToken = getProgramIdOfToken;
|
|
110
|
+
//get native balance
|
|
111
|
+
const getSvmNativeBalance = async (address, connection) => {
|
|
112
|
+
console.log('getSvmNativeBalance: Getting balance for', address.toString());
|
|
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');
|
|
116
|
+
return { balance: new bn_js_1.BN(balance), formatted: balance / web3_js_1.LAMPORTS_PER_SOL, decimal: 9 };
|
|
117
|
+
};
|
|
118
|
+
exports.getSvmNativeBalance = getSvmNativeBalance;
|
|
119
|
+
const getTokenBalance = async (address, token, connection) => {
|
|
120
|
+
console.log('getTokenBalance: Starting');
|
|
121
|
+
console.log('Address:', address.toString());
|
|
122
|
+
console.log('Token:', token.toString());
|
|
123
|
+
try {
|
|
124
|
+
// Get the balance from the token account
|
|
125
|
+
const tokenAccount = await (0, exports.getTokenAccountAccount)(token, address, connection);
|
|
126
|
+
if (!tokenAccount) {
|
|
127
|
+
console.log("Token account not found");
|
|
128
|
+
return 0;
|
|
129
|
+
}
|
|
130
|
+
console.log('Token account found:', tokenAccount.address.toString());
|
|
131
|
+
const tokenBalance = await connection.getTokenAccountBalance(tokenAccount.address);
|
|
132
|
+
if (!tokenBalance) {
|
|
133
|
+
console.log("Token balance not found");
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
console.log('Token balance:', tokenBalance.value);
|
|
137
|
+
return tokenBalance.value;
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.log('Error in getTokenBalance:', error);
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
exports.getTokenBalance = getTokenBalance;
|
|
145
|
+
const getTokenAccountAccount = async (token, address, connection) => {
|
|
146
|
+
console.log('getTokenAccountAccount: Starting');
|
|
147
|
+
console.log('Token:', token.toString());
|
|
148
|
+
console.log('Address:', address.toString());
|
|
149
|
+
try {
|
|
150
|
+
// Get the associated token account address for the user and the token mint
|
|
151
|
+
const associatedTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(token, // The token mint address
|
|
152
|
+
address // The user's public key
|
|
153
|
+
);
|
|
154
|
+
console.log('Associated token account:', associatedTokenAccount.toString());
|
|
155
|
+
// Fetch the token account information
|
|
156
|
+
const tokenAccount = await (0, spl_token_1.getAccount)(connection, associatedTokenAccount);
|
|
157
|
+
console.log('Token account retrieved successfully');
|
|
158
|
+
return tokenAccount;
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
console.log("Error getting token account:", error);
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
exports.getTokenAccountAccount = getTokenAccountAccount;
|
|
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);
|
|
172
|
+
return web3_js_1.SystemProgram.transfer({
|
|
173
|
+
fromPubkey: from,
|
|
174
|
+
toPubkey: to,
|
|
175
|
+
lamports: amount * web3_js_1.LAMPORTS_PER_SOL, // Convert SOL to lamports
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
exports.getTransferNativeInx = getTransferNativeInx;
|
|
179
|
+
const getTransferNativeTransaction = async (from, to, amount, connection) => {
|
|
180
|
+
console.log('getTransferNativeTransaction: Starting');
|
|
181
|
+
const instruction = await (0, exports.getTransferNativeInx)(from.publicKey, to, amount);
|
|
182
|
+
const transaction = await (0, exports.createV0Transaction)(connection, [instruction], [from], from.publicKey);
|
|
183
|
+
console.log('getTransferNativeTransaction: Completed');
|
|
184
|
+
return transaction;
|
|
185
|
+
};
|
|
186
|
+
exports.getTransferNativeTransaction = getTransferNativeTransaction;
|
|
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);
|
|
193
|
+
const inx = [];
|
|
194
|
+
const tokenToSend = new web3_js_1.PublicKey(token.address);
|
|
195
|
+
console.log('Token to send:', tokenToSend.toString());
|
|
196
|
+
const { ATA: source, programId, tokenAccount } = await (0, exports.getSureAssociatedTokenAddressAndAccount)(connection, from, tokenToSend);
|
|
197
|
+
console.log('Source ATA:', source.toString());
|
|
198
|
+
const { associatedToken: destination, AtaTokenIx } = await (0, exports.createAtaAndIx)(tokenToSend, to, programId, connection);
|
|
199
|
+
console.log('Destination ATA:', destination.toString());
|
|
200
|
+
if (!tokenAccount) {
|
|
201
|
+
console.log('Token account not found, throwing error');
|
|
202
|
+
throw new Error("Token account not found");
|
|
203
|
+
}
|
|
204
|
+
if (AtaTokenIx) {
|
|
205
|
+
console.log('Adding ATA creation instruction');
|
|
206
|
+
inx.push(AtaTokenIx);
|
|
207
|
+
}
|
|
208
|
+
console.log('Creating transfer instruction');
|
|
209
|
+
const tInx = (0, spl_token_1.createTransferCheckedInstruction)(source, tokenToSend, destination, from, amount, token.decimals, undefined, programId);
|
|
210
|
+
inx.push(tInx);
|
|
211
|
+
console.log('getTransferTokenInx: Completed with', inx.length, 'instructions');
|
|
212
|
+
return inx;
|
|
213
|
+
};
|
|
214
|
+
exports.getTransferTokenInx = getTransferTokenInx;
|
|
215
|
+
const getTransferTokenTransaction = async (from, to, token, amount, connection) => {
|
|
216
|
+
console.log('getTransferTokenTransaction: Starting');
|
|
217
|
+
const instruction = await (0, exports.getTransferTokenInx)(from.publicKey, to, token, amount, connection);
|
|
218
|
+
const transaction = await (0, exports.createV0Transaction)(connection, instruction, [from], from.publicKey);
|
|
219
|
+
console.log('getTransferTokenTransaction: Completed');
|
|
220
|
+
return transaction;
|
|
221
|
+
};
|
|
222
|
+
exports.getTransferTokenTransaction = getTransferTokenTransaction;
|
|
223
|
+
const signAndSendTransaction = async (transaction, connection, signers) => {
|
|
224
|
+
console.log('signAndSendTransaction: Starting');
|
|
225
|
+
console.log('Signers count:', signers.length);
|
|
226
|
+
transaction.sign(signers);
|
|
227
|
+
console.log('Transaction signed');
|
|
228
|
+
const blockhash = await connection.getLatestBlockhash();
|
|
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
|
+
});
|
|
239
|
+
if (!res) {
|
|
240
|
+
console.log('Transaction failed to send or confirm');
|
|
241
|
+
throw new Error("Transaction failed to send or confirm");
|
|
242
|
+
}
|
|
243
|
+
const signature = res.transaction.signatures[0];
|
|
244
|
+
console.log('Transaction successful, signature:', signature);
|
|
245
|
+
return signature;
|
|
246
|
+
};
|
|
247
|
+
exports.signAndSendTransaction = signAndSendTransaction;
|
|
248
|
+
//swap
|
|
249
|
+
//you will. use jupiter for this
|
|
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);
|
|
256
|
+
const params = new URLSearchParams({
|
|
257
|
+
inputMint,
|
|
258
|
+
outputMint,
|
|
259
|
+
amount: amount.toString(),
|
|
260
|
+
slippageBps: slippageBps.toString(),
|
|
261
|
+
onlyDirectRoutes: 'false',
|
|
262
|
+
asLegacyTransaction: 'false'
|
|
263
|
+
});
|
|
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);
|
|
269
|
+
if (!response.ok) {
|
|
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}`);
|
|
283
|
+
}
|
|
284
|
+
const result = await response.json();
|
|
285
|
+
console.log('Jupiter quote successful');
|
|
286
|
+
console.log('Quote result:', result);
|
|
287
|
+
return result;
|
|
288
|
+
};
|
|
289
|
+
exports.getJupiterQuote = getJupiterQuote;
|
|
290
|
+
const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationFeeLamports) => {
|
|
291
|
+
console.log('buildJupiterSwapTransaction: Starting');
|
|
292
|
+
console.log('User public key:', userPublicKey);
|
|
293
|
+
const priorityFee = prioritizationFeeLamports || 5000;
|
|
294
|
+
console.log('Prioritization fee:', priorityFee);
|
|
295
|
+
const body = {
|
|
296
|
+
quoteResponse: quote,
|
|
297
|
+
userPublicKey,
|
|
298
|
+
wrapAndUnwrapSol: true,
|
|
299
|
+
useSharedAccounts: true,
|
|
300
|
+
feeAccount: undefined,
|
|
301
|
+
trackingAccount: undefined,
|
|
302
|
+
computeUnitPriceMicroLamports: undefined,
|
|
303
|
+
prioritizationFeeLamports: priorityFee,
|
|
304
|
+
asLegacyTransaction: false,
|
|
305
|
+
useTokenLedger: false,
|
|
306
|
+
destinationTokenAccount: undefined,
|
|
307
|
+
dynamicComputeUnitLimit: true,
|
|
308
|
+
skipUserAccountsRpcCalls: false
|
|
309
|
+
};
|
|
310
|
+
console.log('Request body:', body);
|
|
311
|
+
const response = await fetch(`${JUPITER_BASE_URL}/swap/v1/swap`, {
|
|
312
|
+
method: 'POST',
|
|
313
|
+
headers: {
|
|
314
|
+
'Content-Type': 'application/json',
|
|
315
|
+
},
|
|
316
|
+
body: JSON.stringify(body),
|
|
317
|
+
});
|
|
318
|
+
console.log('Swap transaction build response status:', response.status);
|
|
319
|
+
if (!response.ok) {
|
|
320
|
+
console.log('Jupiter swap transaction build failed');
|
|
321
|
+
console.log('Status:', response.status);
|
|
322
|
+
console.log('Status text:', response.statusText);
|
|
323
|
+
try {
|
|
324
|
+
const error = await response.json();
|
|
325
|
+
console.log('Swap build error details:', error);
|
|
326
|
+
throw new Error(`Jupiter swap transaction build failed: ${error.message || response.statusText}`);
|
|
327
|
+
}
|
|
328
|
+
catch (parseError) {
|
|
329
|
+
console.log('Failed to parse error response:', parseError);
|
|
330
|
+
throw new Error(`Jupiter swap transaction build failed: ${response.statusText}`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
const result = await response.json();
|
|
334
|
+
console.log('Jupiter swap transaction built successfully');
|
|
335
|
+
return result;
|
|
336
|
+
};
|
|
337
|
+
exports.buildJupiterSwapTransaction = buildJupiterSwapTransaction;
|
|
338
|
+
const executeJupiterSwap = async (swapParams, connection, payer) => {
|
|
339
|
+
console.log('executeJupiterSwap: Starting');
|
|
340
|
+
console.log('Swap params:', {
|
|
341
|
+
fromToken: swapParams.fromToken.toString(),
|
|
342
|
+
toToken: swapParams.toToken.toString(),
|
|
343
|
+
amount: swapParams.amount,
|
|
344
|
+
slippageBps: swapParams.slippageBps,
|
|
345
|
+
userPublicKey: swapParams.userPublicKey.toString()
|
|
346
|
+
});
|
|
347
|
+
try {
|
|
348
|
+
console.log('Getting Jupiter quote...');
|
|
349
|
+
const quote = await (0, exports.getJupiterQuote)(swapParams.fromToken.toString(), swapParams.toToken.toString(), swapParams.amount, swapParams.slippageBps);
|
|
350
|
+
console.log('Quote received:', {
|
|
351
|
+
inputAmount: quote.inAmount,
|
|
352
|
+
outputAmount: quote.outAmount,
|
|
353
|
+
priceImpact: quote.priceImpactPct
|
|
354
|
+
});
|
|
355
|
+
console.log('Building swap transaction...');
|
|
356
|
+
const swapResponse = await (0, exports.buildJupiterSwapTransaction)(quote, swapParams.userPublicKey.toString());
|
|
357
|
+
console.log('Deserializing transaction...');
|
|
358
|
+
const swapTransactionBuf = Buffer.from(swapResponse.swapTransaction, 'base64');
|
|
359
|
+
console.log('Transaction buffer length:', swapTransactionBuf.length);
|
|
360
|
+
const transaction = web3_js_1.VersionedTransaction.deserialize(swapTransactionBuf);
|
|
361
|
+
console.log('Transaction deserialized successfully');
|
|
362
|
+
console.log('Signing transaction...');
|
|
363
|
+
transaction.sign([payer]);
|
|
364
|
+
console.log('Transaction signed');
|
|
365
|
+
console.log('Sending transaction...');
|
|
366
|
+
const blockhash = await connection.getLatestBlockhash();
|
|
367
|
+
console.log('Got latest blockhash for confirmation');
|
|
368
|
+
const signature = await (0, transactionSender_1.transactionSenderAndConfirmationWaiter)({
|
|
369
|
+
connection,
|
|
370
|
+
serializedTransaction: Buffer.from(transaction.serialize()),
|
|
371
|
+
blockhashWithExpiryBlockHeight: {
|
|
372
|
+
blockhash: blockhash.blockhash,
|
|
373
|
+
lastValidBlockHeight: blockhash.lastValidBlockHeight
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
// console.log('signature: ', signature);
|
|
377
|
+
if (!signature) {
|
|
378
|
+
console.log('Transaction failed to confirm');
|
|
379
|
+
return {
|
|
380
|
+
success: false,
|
|
381
|
+
error: 'Transaction failed to confirm'
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
const txSignature = signature.transaction.signatures[0];
|
|
385
|
+
console.log('Swap successful! Signature:', txSignature);
|
|
386
|
+
return {
|
|
387
|
+
success: true,
|
|
388
|
+
hash: txSignature,
|
|
389
|
+
inputAmount: quote.inAmount,
|
|
390
|
+
outputAmount: quote.outAmount,
|
|
391
|
+
priceImpact: quote.priceImpactPct
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
console.log('Jupiter swap failed with error:', error);
|
|
396
|
+
console.log('Error type:', typeof error);
|
|
397
|
+
console.log('Error message:', error instanceof Error ? error.message : 'Unknown error');
|
|
398
|
+
console.log('Error stack:', error instanceof Error ? error.stack : 'No stack trace');
|
|
399
|
+
return {
|
|
400
|
+
success: false,
|
|
401
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
exports.executeJupiterSwap = executeJupiterSwap;
|
|
406
|
+
const uiAmountToBaseUnits = (uiAmount, decimals) => {
|
|
407
|
+
console.log('uiAmountToBaseUnits: Converting', uiAmount, 'with', decimals, 'decimals');
|
|
408
|
+
const result = Math.floor(uiAmount * Math.pow(10, decimals));
|
|
409
|
+
console.log('Converted to base units:', result);
|
|
410
|
+
return result;
|
|
411
|
+
};
|
|
412
|
+
exports.uiAmountToBaseUnits = uiAmountToBaseUnits;
|
|
413
|
+
const baseUnitsToUiAmount = (baseAmount, decimals) => {
|
|
414
|
+
console.log('baseUnitsToUiAmount: Converting', baseAmount, 'with', decimals, 'decimals');
|
|
415
|
+
const result = Number(baseAmount) / Math.pow(10, decimals);
|
|
416
|
+
console.log('Converted to UI amount:', result);
|
|
417
|
+
return result;
|
|
418
|
+
};
|
|
419
|
+
exports.baseUnitsToUiAmount = baseUnitsToUiAmount;
|
|
420
|
+
const getJupiterTokenList = async () => {
|
|
421
|
+
console.log('getJupiterTokenList: Fetching token list');
|
|
422
|
+
try {
|
|
423
|
+
const response = await fetch(`${JUPITER_BASE_URL}/tokens/v1/mints/tradable`);
|
|
424
|
+
console.log('Token list response status:', response.status);
|
|
425
|
+
if (!response.ok) {
|
|
426
|
+
console.log('Failed to fetch token list:', response.statusText);
|
|
427
|
+
throw new Error(`Failed to fetch token list: ${response.statusText}`);
|
|
428
|
+
}
|
|
429
|
+
const result = await response.json();
|
|
430
|
+
console.log('Token list fetched, count:', result.length);
|
|
431
|
+
return result;
|
|
432
|
+
}
|
|
433
|
+
catch (error) {
|
|
434
|
+
console.log('Failed to fetch Jupiter token list:', error);
|
|
435
|
+
return [];
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
exports.getJupiterTokenList = getJupiterTokenList;
|
|
439
|
+
const validateJupiterTokens = async (inputMint, outputMint) => {
|
|
440
|
+
console.log('validateJupiterTokens: Starting validation');
|
|
441
|
+
console.log('Input mint:', inputMint);
|
|
442
|
+
console.log('Output mint:', outputMint);
|
|
443
|
+
try {
|
|
444
|
+
const tokenList = await (0, exports.getJupiterTokenList)();
|
|
445
|
+
const inputSupported = tokenList.includes(inputMint);
|
|
446
|
+
const outputSupported = tokenList.includes(outputMint);
|
|
447
|
+
console.log('Input token supported:', inputSupported);
|
|
448
|
+
console.log('Output token supported:', outputSupported);
|
|
449
|
+
if (!inputSupported && !outputSupported) {
|
|
450
|
+
console.log('Both tokens not supported');
|
|
451
|
+
return { valid: false, message: 'Both input and output tokens are not supported' };
|
|
452
|
+
}
|
|
453
|
+
if (!inputSupported) {
|
|
454
|
+
console.log('Input token not supported');
|
|
455
|
+
return { valid: false, message: 'Input token is not supported' };
|
|
456
|
+
}
|
|
457
|
+
if (!outputSupported) {
|
|
458
|
+
console.log('Output token not supported');
|
|
459
|
+
return { valid: false, message: 'Output token is not supported' };
|
|
460
|
+
}
|
|
461
|
+
console.log('Both tokens are supported');
|
|
462
|
+
return { valid: true };
|
|
463
|
+
}
|
|
464
|
+
catch (error) {
|
|
465
|
+
console.log('Token validation failed:', error);
|
|
466
|
+
return { valid: false, message: 'Failed to validate tokens' };
|
|
467
|
+
}
|
|
468
|
+
};
|
|
469
|
+
exports.validateJupiterTokens = validateJupiterTokens;
|
|
470
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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/dist/types.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import BN from "bn.js";
|
|
2
|
+
import { EVMVM } from "./evm";
|
|
3
|
+
import { SVMVM } from "./svm";
|
|
4
|
+
export interface ChainWalletConfig {
|
|
5
|
+
chainId: string | number;
|
|
6
|
+
name: string;
|
|
7
|
+
rpcUrl: string;
|
|
8
|
+
explorerUrl: string;
|
|
9
|
+
nativeToken: {
|
|
10
|
+
name: string;
|
|
11
|
+
symbol: string;
|
|
12
|
+
decimals: number;
|
|
13
|
+
};
|
|
14
|
+
confirmationNo?: number;
|
|
15
|
+
testnet?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface TokenInfo {
|
|
18
|
+
address: string;
|
|
19
|
+
name: string;
|
|
20
|
+
symbol: string;
|
|
21
|
+
decimals: number;
|
|
22
|
+
}
|
|
23
|
+
export interface NFTInfo {
|
|
24
|
+
tokenId: string;
|
|
25
|
+
contractAddress: string;
|
|
26
|
+
name?: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
image?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface TransactionResult {
|
|
31
|
+
hash: string;
|
|
32
|
+
success: boolean;
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface Balance {
|
|
36
|
+
balance: BN;
|
|
37
|
+
formatted: number;
|
|
38
|
+
decimal: number;
|
|
39
|
+
}
|
|
40
|
+
export declare const SUPPORTED_VM: {
|
|
41
|
+
readonly EVM: typeof EVMVM;
|
|
42
|
+
readonly SVM: typeof SVMVM;
|
|
43
|
+
};
|
|
44
|
+
export type vmTypes = keyof typeof SUPPORTED_VM;
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SUPPORTED_VM = void 0;
|
|
4
|
+
const evm_1 = require("./evm");
|
|
5
|
+
const svm_1 = require("./svm");
|
|
6
|
+
exports.SUPPORTED_VM = {
|
|
7
|
+
'EVM': evm_1.EVMVM,
|
|
8
|
+
'SVM': svm_1.SVMVM
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../utils/types.ts"],"names":[],"mappings":";;;AACA,+BAA8B;AAC9B,+BAA8B;AA6CjB,QAAA,YAAY,GAAG;IACxB,KAAK,EAAE,WAAK;IACZ,KAAK,EAAE,WAAK;CACN,CAAC"}
|
package/dist/vm.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { vmTypes } from "./types";
|
|
2
|
+
export declare abstract class VM<AddressType, PrivateKeyType, ConnectionType> {
|
|
3
|
+
protected seed: string;
|
|
4
|
+
type: vmTypes;
|
|
5
|
+
constructor(seed: string, vm: vmTypes);
|
|
6
|
+
static mnemonicToSeed: (mnemonic: string) => string;
|
|
7
|
+
static generateSalt(): string;
|
|
8
|
+
static deriveKey(password: string, salt: string, iterations?: number, keySize?: number): string;
|
|
9
|
+
static encryptSeedPhrase(seedPhrase: string, password: string): {
|
|
10
|
+
encrypted: string;
|
|
11
|
+
salt: string;
|
|
12
|
+
};
|
|
13
|
+
static decryptSeedPhrase(encryptedSeedPhrase: string, password: string, salt: string): string | null;
|
|
14
|
+
generateSalt: typeof VM.generateSalt;
|
|
15
|
+
deriveKey: typeof VM.deriveKey;
|
|
16
|
+
encryptSeedPhrase: typeof VM.encryptSeedPhrase;
|
|
17
|
+
decryptSeedPhrase: typeof VM.decryptSeedPhrase;
|
|
18
|
+
abstract derivationPath: string;
|
|
19
|
+
abstract generatePrivateKey(index: number, mnemonic?: string, derivationPath?: string): {
|
|
20
|
+
privateKey: PrivateKeyType;
|
|
21
|
+
index: number;
|
|
22
|
+
};
|
|
23
|
+
}
|