@deserialize/multi-vm-wallet 1.2.10 → 1.2.21

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.
Files changed (47) hide show
  1. package/dist/IChainWallet.d.ts +5 -1
  2. package/dist/IChainWallet.js.map +1 -1
  3. package/dist/constant.d.ts +16 -0
  4. package/dist/constant.js +19 -3
  5. package/dist/constant.js.map +1 -1
  6. package/dist/evm/evm.d.ts +6 -1
  7. package/dist/evm/evm.js +36 -45
  8. package/dist/evm/evm.js.map +1 -1
  9. package/dist/evm/transactionParsing.d.ts +3687 -0
  10. package/dist/evm/transactionParsing.js +441 -0
  11. package/dist/evm/transactionParsing.js.map +1 -0
  12. package/dist/evm/utils.d.ts +2 -9
  13. package/dist/evm/utils.js +17 -16
  14. package/dist/evm/utils.js.map +1 -1
  15. package/dist/helpers/index.d.ts +4 -0
  16. package/dist/helpers/index.js +13 -0
  17. package/dist/helpers/index.js.map +1 -0
  18. package/dist/svm/constant.d.ts +15 -0
  19. package/dist/svm/constant.js +25 -0
  20. package/dist/svm/constant.js.map +1 -0
  21. package/dist/svm/svm.d.ts +5 -2
  22. package/dist/svm/svm.js +10 -0
  23. package/dist/svm/svm.js.map +1 -1
  24. package/dist/svm/transactionParsing.d.ts +28 -0
  25. package/dist/svm/transactionParsing.js +207 -0
  26. package/dist/svm/transactionParsing.js.map +1 -0
  27. package/dist/svm/utils.d.ts +4 -3
  28. package/dist/svm/utils.js +82 -9
  29. package/dist/svm/utils.js.map +1 -1
  30. package/dist/test.d.ts +1 -1
  31. package/dist/test.js +47 -9
  32. package/dist/test.js.map +1 -1
  33. package/dist/types.d.ts +5 -1
  34. package/dist/types.js.map +1 -1
  35. package/package.json +4 -2
  36. package/utils/IChainWallet.ts +6 -2
  37. package/utils/constant.ts +22 -4
  38. package/utils/evm/evm.ts +53 -48
  39. package/utils/evm/transactionParsing.ts +639 -0
  40. package/utils/evm/utils.ts +26 -25
  41. package/utils/helpers/index.ts +11 -0
  42. package/utils/svm/constant.ts +29 -0
  43. package/utils/svm/svm.ts +14 -2
  44. package/utils/svm/transactionParsing.ts +294 -0
  45. package/utils/svm/utils.ts +104 -13
  46. package/utils/test.ts +56 -6
  47. package/utils/types.ts +6 -1
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HelperAPI = void 0;
4
+ const BASE_URL = "https://helper.decane.app";
5
+ class HelperAPI {
6
+ static async getUserToken(wallet, vm, chainId) {
7
+ const res = await fetch("" + BASE_URL + `/${vm}/tokens/discover?wallet=${wallet}&chainId=${chainId}`);
8
+ const data = await res.json();
9
+ return data;
10
+ }
11
+ }
12
+ exports.HelperAPI = HelperAPI;
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/helpers/index.ts"],"names":[],"mappings":";;;AAEA,MAAM,QAAQ,GAAG,2BAA2B,CAAA;AAE5C,MAAa,SAAS;IAClB,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,EAAW,EAAE,OAAe;QAClE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,QAAQ,GAAG,IAAI,EAAE,2BAA2B,MAAM,YAAY,OAAO,EAAE,CAAC,CAAC;QACtG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAND,8BAMC"}
@@ -0,0 +1,15 @@
1
+ declare const SVM_NETWORKS_NAME: {
2
+ readonly SOLANA_MAINNET: "SOLANA_MAINNET";
3
+ readonly SOLANA_TESTNET: "SOLANA_TESTNET";
4
+ readonly ECLIPSE_MAINNET: "ECLIPSE_MAINNET";
5
+ };
6
+ export declare const SVM_CHAIN_DETAILS: {
7
+ [key: string]: SVMNetwork;
8
+ };
9
+ export type SVMNetwork = typeof SVM_NETWORKS_NAME[keyof typeof SVM_NETWORKS_NAME];
10
+ export declare const SVM_CHAIN_CONFIG: {
11
+ [key in SVMNetwork]: {
12
+ rpcUrl: string;
13
+ };
14
+ };
15
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SVM_CHAIN_CONFIG = exports.SVM_CHAIN_DETAILS = void 0;
4
+ const SVM_NETWORKS_NAME = {
5
+ SOLANA_MAINNET: "SOLANA_MAINNET",
6
+ SOLANA_TESTNET: "SOLANA_TESTNET",
7
+ ECLIPSE_MAINNET: "ECLIPSE_MAINNET"
8
+ };
9
+ exports.SVM_CHAIN_DETAILS = {
10
+ "123456789": SVM_NETWORKS_NAME.SOLANA_MAINNET,
11
+ "123456790": SVM_NETWORKS_NAME.SOLANA_TESTNET,
12
+ "123456791": SVM_NETWORKS_NAME.ECLIPSE_MAINNET
13
+ };
14
+ exports.SVM_CHAIN_CONFIG = {
15
+ [SVM_NETWORKS_NAME.SOLANA_MAINNET]: {
16
+ rpcUrl: "https://solana-mainnet.g.alchemy.com/v2/vB5mKztdJeFdz9RkW99Qf"
17
+ },
18
+ [SVM_NETWORKS_NAME.SOLANA_TESTNET]: {
19
+ rpcUrl: "https://solana-testnet.g.alchemy.com/v2/vB5mKztdJeFdz9RkW99Qf"
20
+ },
21
+ [SVM_NETWORKS_NAME.ECLIPSE_MAINNET]: {
22
+ rpcUrl: "https://mainnetbeta-rpc.eclipse.xyz"
23
+ }
24
+ };
25
+ //# sourceMappingURL=constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant.js","sourceRoot":"","sources":["../../utils/svm/constant.ts"],"names":[],"mappings":";;;AAAA,MAAM,iBAAiB,GAAG;IACtB,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;CAC5B,CAAA;AAKG,QAAA,iBAAiB,GAAkC;IAC5D,WAAW,EAAE,iBAAiB,CAAC,cAAc;IAC7C,WAAW,EAAE,iBAAiB,CAAC,cAAc;IAC7C,WAAW,EAAE,iBAAiB,CAAC,eAAe;CACjD,CAAA;AAIY,QAAA,gBAAgB,GAAgD;IACzE,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE;QAChC,MAAM,EAAE,+DAA+D;KAC1E;IACD,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE;QAChC,MAAM,EAAE,+DAA+D;KAC1E;IACD,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE;QACjC,MAAM,EAAE,qCAAqC;KAChD;CACJ,CAAA"}
package/dist/svm/svm.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import { Connection, Keypair, PublicKey } from "@solana/web3.js";
2
2
  import { VM } from "../vm";
3
3
  import { ChainWallet } from "../IChainWallet";
4
- import { Balance, ChainWalletConfig, TokenInfo, TransactionResult } from "../types";
4
+ import { Balance, ChainWalletConfig, UserTokenBalance, TokenInfo, TransactionResult } from "../types";
5
5
  import { JupiterQuoteResponse } from "./utils";
6
+ import { SVMTransactionHistoryItem } from "./transactionParsing";
6
7
  export declare class SVMVM extends VM<PublicKey, Keypair, Connection> {
7
- getTokenInfo: (tokenAddress: PublicKey, connection: Connection) => Promise<TokenInfo>;
8
+ getTokenInfo: (tokenAddress: PublicKey, connection: Connection, programId?: PublicKey) => Promise<TokenInfo>;
8
9
  static validateAddress(address: PublicKey): boolean;
9
10
  derivationPath: string;
10
11
  constructor(seed: string);
@@ -22,8 +23,10 @@ export declare class SVMChainWallet extends ChainWallet<PublicKey, Keypair, Conn
22
23
  generateAddress(): PublicKey;
23
24
  getNativeBalance(): Promise<Balance>;
24
25
  getTokenBalance(tokenAddress: PublicKey): Promise<Balance>;
26
+ discoverToken(): Promise<UserTokenBalance<PublicKey>[]>;
25
27
  transferNative(to: PublicKey, amount: number): Promise<TransactionResult>;
26
28
  transferToken(token: TokenInfo, to: PublicKey, amount: number): Promise<TransactionResult>;
29
+ getTransactionHistory(): Promise<SVMTransactionHistoryItem[]>;
27
30
  swap(fromToken: TokenInfo, toToken: PublicKey, amount: number, slippage?: number): Promise<TransactionResult>;
28
31
  getSwapQuote(fromToken: TokenInfo, toToken: PublicKey, amount: number, slippage?: number): Promise<{
29
32
  success: boolean;
package/dist/svm/svm.js CHANGED
@@ -12,6 +12,7 @@ const utils_1 = require("./utils");
12
12
  const bn_js_1 = __importDefault(require("bn.js"));
13
13
  const tweetnacl_1 = __importDefault(require("tweetnacl"));
14
14
  const bs58_1 = __importDefault(require("bs58"));
15
+ const transactionParsing_1 = require("./transactionParsing");
15
16
  class SVMVM extends vm_1.VM {
16
17
  static validateAddress(address) {
17
18
  try {
@@ -81,6 +82,11 @@ class SVMChainWallet extends IChainWallet_1.ChainWallet {
81
82
  // Implement token balance retrieval logic here
82
83
  return await SVMVM.getTokenBalance(this.address, (tokenAddress), this.connection);
83
84
  }
85
+ async discoverToken() {
86
+ // Implement token discovery logic here
87
+ const tokens = await (0, utils_1.discoverTokens)(this.address, this.connection);
88
+ return tokens;
89
+ }
84
90
  async transferNative(to, amount) {
85
91
  // Implement native transfer logic here
86
92
  const transaction = await (0, utils_1.getTransferNativeTransaction)(this.privateKey, to, amount, this.connection);
@@ -93,6 +99,10 @@ class SVMChainWallet extends IChainWallet_1.ChainWallet {
93
99
  const hash = await SVMVM.signAndSendTransaction(transaction, this.connection, [this.privateKey]);
94
100
  return { success: true, hash }; // Placeholder
95
101
  }
102
+ async getTransactionHistory() {
103
+ const history = await (0, transactionParsing_1.getSVMTransactionHistory)(this.connection, this.address);
104
+ return history;
105
+ }
96
106
  async swap(fromToken, toToken, amount, slippage = 50) {
97
107
  try {
98
108
  if (amount <= 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"svm.js","sourceRoot":"","sources":["../../utils/svm/svm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"svm.js","sourceRoot":"","sources":["../../utils/svm/svm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { Connection, PublicKey } from '@solana/web3.js';
2
+ import { TransactionType } from '../constant';
3
+ export interface SVMTransactionHistoryItem {
4
+ hash: string;
5
+ timestamp: number | null | undefined;
6
+ status: 'success' | 'failed' | 'pending';
7
+ fee: number;
8
+ type: TransactionType;
9
+ from: string;
10
+ to?: string;
11
+ slot: number;
12
+ amount?: number;
13
+ token?: string;
14
+ memo?: string;
15
+ }
16
+ export interface TransactionHistoryOptions {
17
+ limit?: number;
18
+ before?: string;
19
+ until?: string;
20
+ }
21
+ /**
22
+ * Fetches and parses transaction history for a Solana wallet address
23
+ * @param connection - Solana RPC connection
24
+ * @param walletAddress - Public key of the wallet (string or PublicKey)
25
+ * @param options - Optional parameters for pagination and filtering
26
+ * @returns Array of parsed transaction history items
27
+ */
28
+ export declare function getSVMTransactionHistory(connection: Connection, walletAddress: PublicKey, options?: TransactionHistoryOptions): Promise<SVMTransactionHistoryItem[]>;
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSVMTransactionHistory = getSVMTransactionHistory;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const constant_1 = require("../constant");
6
+ /**
7
+ * Fetches and parses transaction history for a Solana wallet address
8
+ * @param connection - Solana RPC connection
9
+ * @param walletAddress - Public key of the wallet (string or PublicKey)
10
+ * @param options - Optional parameters for pagination and filtering
11
+ * @returns Array of parsed transaction history items
12
+ */
13
+ async function getSVMTransactionHistory(connection, walletAddress, options = {}) {
14
+ const { limit = 50, before, until } = options;
15
+ const publicKey = typeof walletAddress === 'string'
16
+ ? new web3_js_1.PublicKey(walletAddress)
17
+ : walletAddress;
18
+ try {
19
+ // Fetch signature info
20
+ const signatures = await connection.getSignaturesForAddress(publicKey, {
21
+ limit,
22
+ before,
23
+ until,
24
+ });
25
+ console.log(`Found ${signatures.length} transactions`);
26
+ // Fetch and parse transactions in batches to avoid rate limits
27
+ const transactions = await fetchTransactionsInBatches(connection, signatures, 5 // batch size
28
+ );
29
+ // Parse transactions into a user-friendly format
30
+ const history = [];
31
+ for (let i = 0; i < transactions.length; i++) {
32
+ const tx = transactions[i];
33
+ const sigInfo = signatures[i];
34
+ if (!tx) {
35
+ // Transaction might be null if it's not available
36
+ history.push({
37
+ hash: sigInfo.signature,
38
+ timestamp: sigInfo.blockTime,
39
+ slot: sigInfo.slot,
40
+ status: sigInfo.err ? 'failed' : 'success',
41
+ fee: 0,
42
+ type: constant_1.TRANSACTION_TYPE.UNKNOWN,
43
+ from: walletAddress.toBase58()
44
+ });
45
+ continue;
46
+ }
47
+ const parsed = parseTransaction(tx, publicKey.toBase58());
48
+ history.push({
49
+ hash: sigInfo.signature,
50
+ timestamp: sigInfo.blockTime,
51
+ slot: sigInfo.slot,
52
+ status: tx.meta?.err ? 'failed' : 'success',
53
+ fee: parsed.fee ?? 0,
54
+ type: parsed.type ?? constant_1.TRANSACTION_TYPE.UNKNOWN,
55
+ from: parsed.from ?? walletAddress.toBase58(),
56
+ ...parsed,
57
+ });
58
+ }
59
+ return history;
60
+ }
61
+ catch (error) {
62
+ console.error('Error fetching transaction history:', error);
63
+ throw error;
64
+ }
65
+ }
66
+ /**
67
+ * Fetches transactions in batches to avoid overwhelming the RPC
68
+ */
69
+ async function fetchTransactionsInBatches(connection, signatures, batchSize) {
70
+ const transactions = [];
71
+ for (let i = 0; i < signatures.length; i += batchSize) {
72
+ const batch = signatures.slice(i, i + batchSize);
73
+ const batchPromises = batch.map(sig => connection.getParsedTransaction(sig.signature, {
74
+ maxSupportedTransactionVersion: 0,
75
+ }));
76
+ const batchResults = await Promise.all(batchPromises);
77
+ transactions.push(...batchResults);
78
+ // Small delay to avoid rate limiting
79
+ if (i + batchSize < signatures.length) {
80
+ await new Promise(resolve => setTimeout(resolve, 100));
81
+ }
82
+ }
83
+ return transactions;
84
+ }
85
+ /**
86
+ * Parses a transaction into a simplified format
87
+ */
88
+ function parseTransaction(tx, walletAddress) {
89
+ const fee = tx.meta?.fee || 0;
90
+ // Try to determine transaction type and extract relevant info
91
+ const instructions = tx.transaction.message.instructions;
92
+ // Check for token transfers
93
+ if (tx.meta?.preTokenBalances && tx.meta?.postTokenBalances) {
94
+ // console.log('tx.meta: ', tx.meta);
95
+ const tokenTransfer = findTokenTransfer(tx.meta.preTokenBalances, tx.meta.postTokenBalances, walletAddress);
96
+ if (tokenTransfer) {
97
+ return {
98
+ fee,
99
+ type: constant_1.TRANSACTION_TYPE.TOKEN_TRANSFER,
100
+ from: tokenTransfer.from,
101
+ to: tokenTransfer.to,
102
+ amount: tokenTransfer.amount,
103
+ token: tokenTransfer.mint,
104
+ };
105
+ }
106
+ }
107
+ // Check for SOL transfers
108
+ if (tx.meta?.preBalances && tx.meta?.postBalances) {
109
+ const solTransfer = findSolTransfer(tx.meta.preBalances, tx.meta.postBalances, tx.transaction.message.accountKeys, walletAddress);
110
+ if (solTransfer) {
111
+ return {
112
+ fee,
113
+ type: constant_1.TRANSACTION_TYPE.NATIVE_TRANSFER,
114
+ from: solTransfer.from,
115
+ to: solTransfer.to,
116
+ amount: solTransfer.amount,
117
+ token: 'SOL',
118
+ };
119
+ }
120
+ }
121
+ // Check for memo
122
+ const memo = extractMemo(instructions);
123
+ // Determine general type based on instructions
124
+ const type = determineTransactionType(instructions);
125
+ return {
126
+ fee,
127
+ type,
128
+ memo,
129
+ };
130
+ }
131
+ /**
132
+ * Finds token transfers in the transaction
133
+ */
134
+ function findTokenTransfer(preBalances, postBalances, walletAddress) {
135
+ for (let i = 0; i < postBalances.length; i++) {
136
+ const post = postBalances[i];
137
+ const pre = preBalances.find(p => p.accountIndex === post.accountIndex);
138
+ if (!pre)
139
+ continue;
140
+ const preAmount = parseFloat(pre.uiTokenAmount.uiAmountString || "0");
141
+ const postAmount = parseFloat(post.uiTokenAmount.uiAmountString || "0");
142
+ const diff = postAmount - preAmount;
143
+ const from = diff < 0 ? post.owner ?? "unknown" : postBalances[i + 1]?.owner ?? "unknown";
144
+ let to = diff > 0 ? post.owner ?? "unknown" : postBalances[i + 1]?.owner ?? "unknown";
145
+ if (to === "unknown") {
146
+ to = diff > 0 ? post.owner ?? "unknown" : postBalances[i - 1]?.owner ?? "unknown";
147
+ }
148
+ if (from && to) {
149
+ if (Math.abs(diff) > 0) {
150
+ return {
151
+ from,
152
+ to,
153
+ amount: Math.abs(diff),
154
+ mint: post.mint,
155
+ };
156
+ }
157
+ }
158
+ }
159
+ return null;
160
+ }
161
+ /**
162
+ * Finds SOL transfers in the transaction
163
+ */
164
+ function findSolTransfer(preBalances, postBalances, accountKeys, walletAddress) {
165
+ for (let i = 0; i < preBalances.length; i++) {
166
+ const diff = postBalances[i] - preBalances[i];
167
+ const account = accountKeys[i];
168
+ const accountPubkey = typeof account === 'string' ? account : account.pubkey.toBase58();
169
+ if (Math.abs(diff) > 5000 && accountPubkey === walletAddress) { // Ignore fee-only changes
170
+ return {
171
+ from: diff < 0 ? accountPubkey : 'unknown',
172
+ to: diff > 0 ? accountPubkey : 'unknown',
173
+ amount: Math.abs(diff) / 1e9, // Convert lamports to SOL
174
+ };
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ /**
180
+ * Extracts memo from transaction instructions
181
+ */
182
+ function extractMemo(instructions) {
183
+ for (const instruction of instructions) {
184
+ if (instruction.program === 'spl-memo' || instruction.programId?.toBase58() === 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr') {
185
+ return instruction.parsed || instruction.data;
186
+ }
187
+ }
188
+ return undefined;
189
+ }
190
+ /**
191
+ * Determines the general type of transaction
192
+ */
193
+ function determineTransactionType(instructions) {
194
+ if (instructions.length === 0)
195
+ return constant_1.TRANSACTION_TYPE.UNKNOWN;
196
+ const programs = instructions.map(i => i.program || i.programId?.toBase58());
197
+ if (programs.includes('spl-token'))
198
+ return constant_1.TRANSACTION_TYPE.TOKEN_INTERACTIONS;
199
+ if (programs.includes('system'))
200
+ return constant_1.TRANSACTION_TYPE.SYSTEM;
201
+ if (programs.some(p => p?.includes('Swap')))
202
+ return constant_1.TRANSACTION_TYPE.SWAP;
203
+ if (programs.some(p => p?.includes('Stake')))
204
+ return constant_1.TRANSACTION_TYPE.STAKING;
205
+ return constant_1.TRANSACTION_TYPE.PROGRAM_INTERACTION;
206
+ }
207
+ //# sourceMappingURL=transactionParsing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionParsing.js","sourceRoot":"","sources":["../../utils/svm/transactionParsing.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Account } from "@solana/spl-token";
2
2
  import { Connection, Keypair, PublicKey, TransactionInstruction, VersionedTransaction } from "@solana/web3.js";
3
- import { TokenInfo } from "../types";
3
+ import { UserTokenBalance, TokenInfo } from "../types";
4
4
  export interface JupiterQuoteResponse {
5
5
  inputMint: string;
6
6
  inAmount: string;
@@ -69,12 +69,13 @@ export declare const getTokenBalance: (address: PublicKey, token: PublicKey, con
69
69
  export declare const getTokenAccountAccount: (token: PublicKey, address: PublicKey, connection: Connection) => Promise<Account | null>;
70
70
  export declare const getTransferNativeInx: (from: PublicKey, to: PublicKey, amount: number) => Promise<TransactionInstruction>;
71
71
  export declare const getTransferNativeTransaction: (from: Keypair, to: PublicKey, amount: number, connection: Connection) => Promise<VersionedTransaction>;
72
- export declare const getTokenInfo: (tokenAddress: PublicKey, connection: Connection) => Promise<TokenInfo>;
72
+ export declare const getTokenInfo: (tokenAddress: PublicKey, connection: Connection, programId?: PublicKey) => Promise<TokenInfo>;
73
73
  export declare const getTransferTokenInx: (from: PublicKey, to: PublicKey, token: TokenInfo, amount: number, connection: Connection) => Promise<TransactionInstruction[]>;
74
74
  export declare const getTransferTokenTransaction: (from: Keypair, to: PublicKey, token: TokenInfo, amount: number, connection: Connection) => Promise<VersionedTransaction>;
75
75
  export declare const signAndSendTransaction: (transaction: VersionedTransaction, connection: Connection, signers: Keypair[]) => Promise<string>;
76
+ export declare const discoverTokens: (ownerAddress: PublicKey, connection: Connection) => Promise<UserTokenBalance<PublicKey>[]>;
76
77
  export declare const getJupiterQuote: (inputMint: string, outputMint: string, amount: number, slippageBps?: number) => Promise<JupiterQuoteResponse>;
77
- export declare const buildJupiterSwapTransaction: (quote: JupiterQuoteResponse, userPublicKey: string, prioritizationFeeLamports?: number) => Promise<JupiterSwapResponse>;
78
+ export declare const buildJupiterSwapTransaction: (quote: JupiterQuoteResponse, userPublicKey: string, prioritizationFeeLamports?: number, useSharedAccounts?: boolean) => Promise<JupiterSwapResponse>;
78
79
  export declare const executeJupiterSwap: (swapParams: SwapParams, connection: Connection, payer: Keypair) => Promise<SwapResult>;
79
80
  export declare const uiAmountToBaseUnits: (uiAmount: number, decimals: number) => number;
80
81
  export declare const baseUnitsToUiAmount: (baseAmount: string | number, decimals: number) => number;
package/dist/svm/utils.js CHANGED
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  //we will write all the svm utils function here
3
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.getTokenInfo = exports.getTransferNativeTransaction = exports.getTransferNativeInx = exports.getTokenAccountAccount = exports.getTokenBalance = exports.getSvmNativeBalance = exports.getProgramIdOfToken = exports.getSureAssociatedTokenAddressAndAccount = exports.createAtaAndIx = exports.createV0Transaction = void 0;
4
+ exports.validateJupiterTokens = exports.getJupiterTokenList = exports.baseUnitsToUiAmount = exports.uiAmountToBaseUnits = exports.executeJupiterSwap = exports.buildJupiterSwapTransaction = exports.getJupiterQuote = exports.discoverTokens = exports.signAndSendTransaction = exports.getTransferTokenTransaction = exports.getTransferTokenInx = exports.getTokenInfo = exports.getTransferNativeTransaction = exports.getTransferNativeInx = exports.getTokenAccountAccount = exports.getTokenBalance = exports.getSvmNativeBalance = exports.getProgramIdOfToken = exports.getSureAssociatedTokenAddressAndAccount = exports.createAtaAndIx = exports.createV0Transaction = void 0;
5
5
  const spl_token_1 = require("@solana/spl-token");
6
6
  const web3_js_1 = require("@solana/web3.js");
7
7
  const transactionSender_1 = require("./transactionSender");
8
8
  const bn_js_1 = require("bn.js");
9
+ const js_1 = require("@metaplex-foundation/js");
9
10
  const JUPITER_BASE_URL = 'https://lite-api.jup.ag';
10
11
  const createV0Transaction = async (connection, inX, signers, payerPubKey, blockHash) => {
11
12
  console.log('createV0Transaction: Starting transaction creation');
@@ -163,8 +164,22 @@ const getTransferNativeTransaction = async (from, to, amount, connection) => {
163
164
  return transaction;
164
165
  };
165
166
  exports.getTransferNativeTransaction = getTransferNativeTransaction;
166
- const getTokenInfo = async (tokenAddress, connection) => {
167
+ const getMetaTokenMetaplexData = (mintAddress, connection) => {
168
+ const metaplex = js_1.Metaplex.make(connection);
169
+ return metaplex.nfts().findByMint({ mintAddress: mintAddress });
170
+ };
171
+ const getTokenInfo = async (tokenAddress, connection, programId) => {
167
172
  let mint;
173
+ const metaplexData = await getMetaTokenMetaplexData(tokenAddress, connection).catch(() => null);
174
+ if (programId) {
175
+ const mint = await (0, spl_token_1.getMint)(connection, tokenAddress, "confirmed", programId);
176
+ return {
177
+ address: tokenAddress.toString(),
178
+ decimals: mint.decimals,
179
+ name: metaplexData?.name || "",
180
+ symbol: metaplexData?.symbol || ""
181
+ };
182
+ }
168
183
  try {
169
184
  mint = await (0, spl_token_1.getMint)(connection, tokenAddress, "confirmed", spl_token_1.TOKEN_PROGRAM_ID);
170
185
  }
@@ -175,8 +190,8 @@ const getTokenInfo = async (tokenAddress, connection) => {
175
190
  return {
176
191
  address: tokenAddress.toString(),
177
192
  decimals: mint.decimals,
178
- name: "",
179
- symbol: ""
193
+ name: metaplexData?.name || "",
194
+ symbol: metaplexData?.symbol || ""
180
195
  };
181
196
  };
182
197
  exports.getTokenInfo = getTokenInfo;
@@ -236,6 +251,32 @@ const signAndSendTransaction = async (transaction, connection, signers) => {
236
251
  return signature;
237
252
  };
238
253
  exports.signAndSendTransaction = signAndSendTransaction;
254
+ const discoverTokens = async (ownerAddress, connection) => {
255
+ const owner = new web3_js_1.PublicKey(ownerAddress);
256
+ let response = await connection.getParsedTokenAccountsByOwner(owner, {
257
+ programId: spl_token_1.TOKEN_PROGRAM_ID
258
+ });
259
+ console.log('response: ', response);
260
+ let tokens2022 = await connection.getParsedTokenAccountsByOwner(owner, {
261
+ programId: spl_token_1.TOKEN_2022_PROGRAM_ID
262
+ });
263
+ console.log('tokens2022: ', tokens2022);
264
+ response.value = response.value.concat(tokens2022.value);
265
+ const tokens = await Promise.all(response.value.map(async (accountInfo) => {
266
+ const mintAddress = accountInfo.account.data["parsed"]["info"]["mint"];
267
+ const mint = await (0, exports.getTokenInfo)(new web3_js_1.PublicKey(mintAddress), connection);
268
+ return {
269
+ owner: accountInfo.account.data["parsed"]["info"]["owner"],
270
+ address: accountInfo.account.data["parsed"]["info"]["mint"],
271
+ decimals: accountInfo.account.data["parsed"]["info"]["tokenAmount"]["decimals"],
272
+ symbol: mint.symbol,
273
+ name: mint.name,
274
+ balance: accountInfo.account.data["parsed"]["info"]["tokenAmount"]["amount"]
275
+ };
276
+ }));
277
+ return tokens;
278
+ };
279
+ exports.discoverTokens = discoverTokens;
239
280
  //swap
240
281
  //you will. use jupiter for this
241
282
  const getJupiterQuote = async (inputMint, outputMint, amount, slippageBps = 50) => {
@@ -278,16 +319,17 @@ const getJupiterQuote = async (inputMint, outputMint, amount, slippageBps = 50)
278
319
  return result;
279
320
  };
280
321
  exports.getJupiterQuote = getJupiterQuote;
281
- const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationFeeLamports) => {
322
+ const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationFeeLamports, useSharedAccounts = true) => {
282
323
  console.log('buildJupiterSwapTransaction: Starting');
283
324
  console.log('User public key:', userPublicKey);
325
+ console.log('Use shared accounts:', useSharedAccounts);
284
326
  const priorityFee = prioritizationFeeLamports || 5000;
285
327
  console.log('Prioritization fee:', priorityFee);
286
328
  const body = {
287
329
  quoteResponse: quote,
288
330
  userPublicKey,
289
331
  wrapAndUnwrapSol: true,
290
- useSharedAccounts: true,
332
+ useSharedAccounts: useSharedAccounts,
291
333
  feeAccount: undefined,
292
334
  trackingAccount: undefined,
293
335
  computeUnitPriceMicroLamports: undefined,
@@ -314,10 +356,20 @@ const buildJupiterSwapTransaction = async (quote, userPublicKey, prioritizationF
314
356
  try {
315
357
  const error = await response.json();
316
358
  console.log('Swap build error details:', error);
359
+ // Check if this is the shared accounts error
360
+ if (error.errorCode === 'NOT_SUPPORTED' &&
361
+ error.error?.includes('Simple AMMs are not supported with shared accounts')) {
362
+ console.log('Detected shared accounts incompatibility error');
363
+ throw new Error('SHARED_ACCOUNTS_NOT_SUPPORTED');
364
+ }
317
365
  throw new Error(`Jupiter swap transaction build failed: ${error.message || response.statusText}`);
318
366
  }
319
367
  catch (parseError) {
320
368
  console.log('Failed to parse error response:', parseError);
369
+ // Re-throw if it's our custom error
370
+ if (parseError instanceof Error && parseError.message === 'SHARED_ACCOUNTS_NOT_SUPPORTED') {
371
+ throw parseError;
372
+ }
321
373
  throw new Error(`Jupiter swap transaction build failed: ${response.statusText}`);
322
374
  }
323
375
  }
@@ -343,8 +395,29 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
343
395
  outputAmount: quote.outAmount,
344
396
  priceImpact: quote.priceImpactPct
345
397
  });
346
- console.log('Building swap transaction...');
347
- const swapResponse = await (0, exports.buildJupiterSwapTransaction)(quote, swapParams.userPublicKey.toString());
398
+ let swapResponse;
399
+ let usedSharedAccounts = true;
400
+ try {
401
+ console.log('Building swap transaction with shared accounts enabled...');
402
+ swapResponse = await (0, exports.buildJupiterSwapTransaction)(quote, swapParams.userPublicKey.toString(), undefined, true // Try with shared accounts first
403
+ );
404
+ console.log('Successfully built transaction with shared accounts');
405
+ }
406
+ catch (error) {
407
+ if (error instanceof Error && error.message === 'SHARED_ACCOUNTS_NOT_SUPPORTED') {
408
+ console.log('Shared accounts not supported, retrying without shared accounts...');
409
+ // Retry without shared accounts
410
+ swapResponse = await (0, exports.buildJupiterSwapTransaction)(quote, swapParams.userPublicKey.toString(), undefined, false // Retry with shared accounts disabled
411
+ );
412
+ usedSharedAccounts = false;
413
+ console.log('Successfully built transaction without shared accounts');
414
+ }
415
+ else {
416
+ // Re-throw if it's a different error
417
+ throw error;
418
+ }
419
+ }
420
+ console.log('Transaction build method:', usedSharedAccounts ? 'with shared accounts' : 'without shared accounts');
348
421
  console.log('Deserializing transaction...');
349
422
  const swapTransactionBuf = Buffer.from(swapResponse.swapTransaction, 'base64');
350
423
  console.log('Transaction buffer length:', swapTransactionBuf.length);
@@ -364,7 +437,6 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
364
437
  lastValidBlockHeight: blockhash.lastValidBlockHeight
365
438
  }
366
439
  });
367
- // console.log('signature: ', signature);
368
440
  if (!signature) {
369
441
  console.log('Transaction failed to confirm');
370
442
  return {
@@ -374,6 +446,7 @@ const executeJupiterSwap = async (swapParams, connection, payer) => {
374
446
  }
375
447
  const txSignature = signature.transaction.signatures[0];
376
448
  console.log('Swap successful! Signature:', txSignature);
449
+ console.log('Used shared accounts:', usedSharedAccounts);
377
450
  return {
378
451
  success: true,
379
452
  hash: txSignature,