@vultisig/core-chain 2.24.2 → 2.24.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @vultisig/core-chain
2
2
 
3
+ ## 2.24.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1115](https://github.com/vultisig/vultisig-sdk/pull/1115) [`4483754`](https://github.com/vultisig/vultisig-sdk/commit/4483754748190fe25654de79fc12fba0edb73963) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Expand large scientific-notation numeric amounts before base-unit parsing.
8
+
3
9
  ## 2.24.2
4
10
 
5
11
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"toChainAmount.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/amount/toChainAmount.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA0B;gBAEpC,OAAO,EAAE,MAAM;CAG5B;AA+FD,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,GAAG,MAAM,EAAE,UAAU,MAAM,WAetE,CAAA"}
1
+ {"version":3,"file":"toChainAmount.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/amount/toChainAmount.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA0B;gBAEpC,OAAO,EAAE,MAAM;CAG5B;AAoGD,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,GAAG,MAAM,EAAE,UAAU,MAAM,WAatE,CAAA"}
@@ -75,6 +75,10 @@ const expandScientificNotationToDecimalString = (s) => {
75
75
  }
76
76
  return absResult;
77
77
  };
78
+ const formatNumberAmount = (amount) => {
79
+ const str = amount.toString();
80
+ return /[eE]/.test(str) ? expandScientificNotationToDecimalString(str) : str;
81
+ };
78
82
  /**
79
83
  * Truncate a plain decimal string to at most `decimals` fractional digits so
80
84
  * parseUnits cannot round up. viem's parseUnits rounds half-up at decimals=0
@@ -105,8 +109,6 @@ export const toChainAmount = (amount, decimals) => {
105
109
  }
106
110
  return parseUnits(truncateToDecimals(trimmed, decimals), decimals);
107
111
  }
108
- const str = amount.toString();
109
- const value = /[eE]/.test(str) ? amount.toFixed(decimals) : str;
110
- return parseUnits(truncateToDecimals(value, decimals), decimals);
112
+ return parseUnits(truncateToDecimals(formatNumberAmount(amount), decimals), decimals);
111
113
  };
112
114
  //# sourceMappingURL=toChainAmount.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toChainAmount.js","sourceRoot":"","sources":["../../../../../packages/core/chain/amount/toChainAmount.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toChainAmount.js","sourceRoot":"","sources":["../../../../../packages/core/chain/amount/toChainAmount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { AddressLookupTableAccount, PublicKey, VersionedMessage } from '@solana/web3.js';
2
+ /**
3
+ * Programs a legitimate Jupiter swap is expected to invoke as a TOP-LEVEL
4
+ * instruction. Captured empirically (2026-07-09) by fetching real `/swap`
5
+ * responses from Jupiter's public API (`lite-api.jup.ag`) and decoding the
6
+ * returned `VersionedTransaction` across four scenarios:
7
+ * - a single-hop SOL -> USDC route
8
+ * - a 3-hop SOL -> BONK route (AlphaQ -> Hadron -> Raydium CLMM)
9
+ * - a Token-2022 output mint (SOL -> PYUSD)
10
+ * - a platform-fee-included swap (feeAccount + platformFeeBps set)
11
+ *
12
+ * Every one of them resolved to exactly this program set. `useSharedAccounts`
13
+ * (Jupiter's default) routes the actual AMM legs through the router via CPI,
14
+ * so the individual AMM programs (Raydium, Whirlpool, etc.) never surface as
15
+ * top-level instructions — only the router itself plus the
16
+ * wrapping/bookkeeping instructions (SOL wrap/unwrap, ATA create, compute
17
+ * budget) do. Token-2022 is allow-listed defensively even though it did not
18
+ * surface in any captured fixture (the wSOL leg always uses the legacy Token
19
+ * program): the SDK's own fee-ATA derivation
20
+ * (`packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts`)
21
+ * explicitly supports Token-2022 mints, so a route with no wSOL leg could
22
+ * plausibly need it.
23
+ */
24
+ export declare const JUPITER_SWAP_ALLOWED_PROGRAM_IDS: ReadonlySet<string>;
25
+ /**
26
+ * Thrown when a Solana swap message contains a top-level instruction that
27
+ * targets a program outside {@link JUPITER_SWAP_ALLOWED_PROGRAM_IDS}.
28
+ */
29
+ export declare class UnsafeSolanaSwapInstructionError extends Error {
30
+ readonly instructionIndex: number;
31
+ readonly programId: string;
32
+ constructor(instructionIndex: number, programId: string);
33
+ }
34
+ /**
35
+ * Thrown when a fund-moving instruction (System/Token) in a swap message has
36
+ * a destination or authority that does not belong to the user.
37
+ *
38
+ * Audit finding SOL-01 residual: a program-only allow-list permits injected
39
+ * top-level `SystemProgram.Transfer { from: user, to: attacker }` or
40
+ * `Token.Approve { owner: user, delegate: attacker }` because those programs
41
+ * are allow-listed (needed for SOL wrap/unwrap). This error is thrown when the
42
+ * decoded instruction accounts don't match the user's controlled addresses.
43
+ */
44
+ export declare class UnsafeSolanaSwapFundMovementError extends Error {
45
+ readonly instructionIndex: number;
46
+ readonly reason: string;
47
+ constructor(instructionIndex: number, reason: string);
48
+ }
49
+ /**
50
+ * Fund-safety guard (audit finding SOL-01, vultisig/vultisig-sdk#1056): a
51
+ * compromised Jupiter proxy could inject an arbitrary instruction (e.g. a
52
+ * drain transfer) into the `VersionedTransaction` returned from `/swap`
53
+ * before it reaches MPC signing. Vultisig's signing UI cannot meaningfully
54
+ * render raw Solana instruction bytes for the user to review, so the
55
+ * transaction would be effectively blind-signed.
56
+ *
57
+ * Two-layer defense:
58
+ *
59
+ * 1. **Program allow-list**: every top-level instruction's `programIdIndex`
60
+ * must resolve to a program in {@link JUPITER_SWAP_ALLOWED_PROGRAM_IDS}.
61
+ * Throws {@link UnsafeSolanaSwapInstructionError} on any unrecognized program.
62
+ *
63
+ * 2. **Destination/authority validation for fund-moving programs**: a
64
+ * program-only check is insufficient because `SystemProgram`,
65
+ * `TOKEN_PROGRAM_ID`, and `TOKEN_2022_PROGRAM_ID` are allow-listed (they
66
+ * perform legitimate SOL wrap/unwrap) but also implement drain/seize
67
+ * primitives (`Transfer`, `Approve`, `SetAuthority`). For each instruction
68
+ * targeting those programs, the decoded accounts are validated:
69
+ * - `SystemProgram.Transfer`: destination must be the user's wSOL ATA; any
70
+ * other System discriminant (TransferWithSeed / CreateAccount*) rejected.
71
+ * - `Token.Transfer/TransferChecked`: rejected outright — a top-level token
72
+ * move is never part of a legitimate Jupiter shared-accounts swap (the
73
+ * router moves tokens via CPI), and validating authority==user is
74
+ * meaningless since the authority is definitionally the user for any drain
75
+ * of their own account. The distinguishing account is the destination.
76
+ * - `Token.CloseAccount`: destination must be the user wallet.
77
+ * - `Token.Approve/ApproveChecked/SetAuthority`: rejected outright.
78
+ * Throws {@link UnsafeSolanaSwapFundMovementError} on any violation.
79
+ *
80
+ * Does NOT — and cannot, via static inspection alone — see into CPI (a
81
+ * program invoked from inside another instruction); that's exactly what the
82
+ * allow-listed Jupiter router is trusted to CPI into on the user's behalf.
83
+ */
84
+ export declare const assertSafeSolanaSwapInstructions: (message: VersionedMessage, addressLookupTableAccounts: AddressLookupTableAccount[] | undefined, userWallet: PublicKey) => void;
85
+ /**
86
+ * Resolve every address-lookup-table referenced by a v0 message. Returns an
87
+ * empty array for legacy messages (which cannot reference LUTs).
88
+ */
89
+ export declare const resolveSolanaAddressLookupTables: (message: VersionedMessage) => Promise<AddressLookupTableAccount[]>;
90
+ /**
91
+ * Convenience wrapper: deserialize a base64-encoded `VersionedTransaction`,
92
+ * resolve any referenced LUTs, and assert its top-level instructions are
93
+ * all allow-listed and fund-movement-safe. See {@link assertSafeSolanaSwapInstructions}.
94
+ */
95
+ export declare const assertSafeSolanaSwapTransactionBase64: (txData: string, userWallet: PublicKey) => Promise<void>;
96
+ //# sourceMappingURL=assertSafeSolanaSwapInstructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertSafeSolanaSwapInstructions.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/assertSafeSolanaSwapInstructions.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,yBAAyB,EAEzB,SAAS,EACT,gBAAgB,EAEjB,MAAM,iBAAiB,CAAA;AASxB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gCAAgC,EAAE,WAAW,CAAC,MAAM,CAO/D,CAAA;AAoBF;;;GAGG;AACH,qBAAa,gCAAiC,SAAQ,KAAK;aAEvC,gBAAgB,EAAE,MAAM;aACxB,SAAS,EAAE,MAAM;gBADjB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM;CAOpC;AAED;;;;;;;;;GASG;AACH,qBAAa,iCAAkC,SAAQ,KAAK;aAExC,gBAAgB,EAAE,MAAM;aACxB,MAAM,EAAE,MAAM;gBADd,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM;CAKjC;AAgHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,gCAAgC,GAC3C,SAAS,gBAAgB,EACzB,4BAA4B,yBAAyB,EAAE,YAAK,EAC5D,YAAY,SAAS,KACpB,IAuBF,CAAA;AAyBD;;;GAGG;AACH,eAAO,MAAM,gCAAgC,GAC3C,SAAS,gBAAgB,KACxB,OAAO,CAAC,yBAAyB,EAAE,CAarC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,GAAU,QAAQ,MAAM,EAAE,YAAY,SAAS,KAAG,OAAO,CAAC,IAAI,CAI/G,CAAA"}
@@ -0,0 +1,260 @@
1
+ import { ASSOCIATED_TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync, NATIVE_MINT, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, } from '@solana/spl-token';
2
+ import { VersionedTransaction, } from '@solana/web3.js';
3
+ import { getSolanaClient } from './client.js';
4
+ /** Jupiter v6 aggregator router. Every Jupiter swap routes through this program. */
5
+ const JUPITER_V6_PROGRAM_ID = 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4';
6
+ const COMPUTE_BUDGET_PROGRAM_ID = 'ComputeBudget111111111111111111111111111111';
7
+ const SYSTEM_PROGRAM_ID = '11111111111111111111111111111111';
8
+ /**
9
+ * Programs a legitimate Jupiter swap is expected to invoke as a TOP-LEVEL
10
+ * instruction. Captured empirically (2026-07-09) by fetching real `/swap`
11
+ * responses from Jupiter's public API (`lite-api.jup.ag`) and decoding the
12
+ * returned `VersionedTransaction` across four scenarios:
13
+ * - a single-hop SOL -> USDC route
14
+ * - a 3-hop SOL -> BONK route (AlphaQ -> Hadron -> Raydium CLMM)
15
+ * - a Token-2022 output mint (SOL -> PYUSD)
16
+ * - a platform-fee-included swap (feeAccount + platformFeeBps set)
17
+ *
18
+ * Every one of them resolved to exactly this program set. `useSharedAccounts`
19
+ * (Jupiter's default) routes the actual AMM legs through the router via CPI,
20
+ * so the individual AMM programs (Raydium, Whirlpool, etc.) never surface as
21
+ * top-level instructions — only the router itself plus the
22
+ * wrapping/bookkeeping instructions (SOL wrap/unwrap, ATA create, compute
23
+ * budget) do. Token-2022 is allow-listed defensively even though it did not
24
+ * surface in any captured fixture (the wSOL leg always uses the legacy Token
25
+ * program): the SDK's own fee-ATA derivation
26
+ * (`packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts`)
27
+ * explicitly supports Token-2022 mints, so a route with no wSOL leg could
28
+ * plausibly need it.
29
+ */
30
+ export const JUPITER_SWAP_ALLOWED_PROGRAM_IDS = new Set([
31
+ JUPITER_V6_PROGRAM_ID,
32
+ COMPUTE_BUDGET_PROGRAM_ID,
33
+ SYSTEM_PROGRAM_ID,
34
+ TOKEN_PROGRAM_ID.toBase58(),
35
+ TOKEN_2022_PROGRAM_ID.toBase58(),
36
+ ASSOCIATED_TOKEN_PROGRAM_ID.toBase58(),
37
+ ]);
38
+ /** Programs that can move funds — require destination/authority validation beyond a program-only check. */
39
+ const FUND_MOVING_PROGRAM_IDS = new Set([
40
+ SYSTEM_PROGRAM_ID,
41
+ TOKEN_PROGRAM_ID.toBase58(),
42
+ TOKEN_2022_PROGRAM_ID.toBase58(),
43
+ ]);
44
+ // SystemProgram instruction type discriminants (LE uint32 at data[0..4])
45
+ const SYSTEM_TRANSFER = 2;
46
+ // Token/Token-2022 instruction discriminants (uint8 at data[0])
47
+ const TOKEN_TRANSFER = 3;
48
+ const TOKEN_APPROVE = 4;
49
+ const TOKEN_SET_AUTHORITY = 6;
50
+ const TOKEN_CLOSE_ACCOUNT = 9;
51
+ const TOKEN_TRANSFER_CHECKED = 12;
52
+ const TOKEN_APPROVE_CHECKED = 13;
53
+ /**
54
+ * Thrown when a Solana swap message contains a top-level instruction that
55
+ * targets a program outside {@link JUPITER_SWAP_ALLOWED_PROGRAM_IDS}.
56
+ */
57
+ export class UnsafeSolanaSwapInstructionError extends Error {
58
+ instructionIndex;
59
+ programId;
60
+ constructor(instructionIndex, programId) {
61
+ super(`SOL_SWAP_UNEXPECTED_PROGRAM: instruction ${instructionIndex} targets unrecognized program ${programId}; refusing to sign`);
62
+ this.instructionIndex = instructionIndex;
63
+ this.programId = programId;
64
+ this.name = 'UnsafeSolanaSwapInstructionError';
65
+ }
66
+ }
67
+ /**
68
+ * Thrown when a fund-moving instruction (System/Token) in a swap message has
69
+ * a destination or authority that does not belong to the user.
70
+ *
71
+ * Audit finding SOL-01 residual: a program-only allow-list permits injected
72
+ * top-level `SystemProgram.Transfer { from: user, to: attacker }` or
73
+ * `Token.Approve { owner: user, delegate: attacker }` because those programs
74
+ * are allow-listed (needed for SOL wrap/unwrap). This error is thrown when the
75
+ * decoded instruction accounts don't match the user's controlled addresses.
76
+ */
77
+ export class UnsafeSolanaSwapFundMovementError extends Error {
78
+ instructionIndex;
79
+ reason;
80
+ constructor(instructionIndex, reason) {
81
+ super(`SOL_SWAP_UNSAFE_FUND_MOVEMENT: instruction ${instructionIndex} — ${reason}`);
82
+ this.instructionIndex = instructionIndex;
83
+ this.reason = reason;
84
+ this.name = 'UnsafeSolanaSwapFundMovementError';
85
+ }
86
+ }
87
+ const assertSystemInstruction = (ix, keys, userWallet, index) => {
88
+ if (ix.data.length < 4)
89
+ return;
90
+ const type = new DataView(ix.data.buffer, ix.data.byteOffset, 4).getUint32(0, /* littleEndian */ true);
91
+ // A legitimate top-level Jupiter swap only ever emits SystemProgram.Transfer
92
+ // (the SOL→wSOL wrap). Every OTHER System instruction that moves lamports —
93
+ // TransferWithSeed (11), CreateAccount (0), CreateAccountWithSeed (3) — is
94
+ // rejected outright rather than silently allowed: a program-only allow-list
95
+ // would let a spliced TransferWithSeed to an attacker survive into the signed
96
+ // bytes exactly like the Token.Transfer drain. Mirrors the reject-outright
97
+ // stance the token branch takes for non-wrap fund movers. Non-lamport-moving
98
+ // System instructions don't appear top-level in a swap, so a blanket reject of
99
+ // "not SYSTEM_TRANSFER" is the safe, tight floor (fail-closed on the unknown).
100
+ if (type !== SYSTEM_TRANSFER) {
101
+ throw new UnsafeSolanaSwapFundMovementError(index, `SystemProgram instruction (discriminant ${type}) is not a legitimate top-level Jupiter swap instruction — only SystemProgram.Transfer (SOL wrap) is expected`);
102
+ }
103
+ // Transfer accounts[1] = destination. The only legitimate SOL transfer in
104
+ // a Jupiter swap is wrapping: from: userWallet → to: userWallet's wSOL ATA.
105
+ const destIdx = ix.accountKeyIndexes[1];
106
+ if (destIdx === undefined) {
107
+ throw new UnsafeSolanaSwapFundMovementError(index, 'SystemProgram.Transfer: missing destination account index');
108
+ }
109
+ const dest = keys.get(destIdx);
110
+ if (!dest) {
111
+ throw new UnsafeSolanaSwapFundMovementError(index, `SystemProgram.Transfer: destination index ${destIdx} could not be resolved`);
112
+ }
113
+ const wSolAta = getAssociatedTokenAddressSync(NATIVE_MINT, userWallet);
114
+ if (!dest.equals(wSolAta)) {
115
+ throw new UnsafeSolanaSwapFundMovementError(index, `SystemProgram.Transfer destination ${dest.toBase58()} is not the expected wSOL ATA ${wSolAta.toBase58()} — possible drain injection`);
116
+ }
117
+ };
118
+ const assertTokenInstruction = (ix, keys, userWallet, index) => {
119
+ if (ix.data.length === 0)
120
+ return;
121
+ const type = ix.data[0];
122
+ // Reject instructions that can delegate or transfer authority — these are
123
+ // never present as top-level instructions in legitimate Jupiter shared-accounts swaps.
124
+ if (type === TOKEN_APPROVE || type === TOKEN_APPROVE_CHECKED) {
125
+ throw new UnsafeSolanaSwapFundMovementError(index, `Token.${type === TOKEN_APPROVE ? 'Approve' : 'ApproveChecked'} is not a legitimate top-level Jupiter swap instruction — possible authority delegation to attacker`);
126
+ }
127
+ if (type === TOKEN_SET_AUTHORITY) {
128
+ throw new UnsafeSolanaSwapFundMovementError(index, 'Token.SetAuthority is not a legitimate top-level Jupiter swap instruction — possible account seizure');
129
+ }
130
+ // Transfer (type=3) and TransferChecked (type=12): reject outright as
131
+ // top-level instructions. Jupiter shared-accounts routing performs token
132
+ // moves via CPI inside the router — a top-level Token.Transfer with
133
+ // authority==user and destination==attacker would pass an authority check
134
+ // and silently drain the user's tokens. Same rationale as Approve.
135
+ if (type === TOKEN_TRANSFER) {
136
+ throw new UnsafeSolanaSwapFundMovementError(index, 'Token.Transfer is not a legitimate top-level Jupiter swap instruction — possible token drain to attacker');
137
+ }
138
+ if (type === TOKEN_TRANSFER_CHECKED) {
139
+ throw new UnsafeSolanaSwapFundMovementError(index, 'Token.TransferChecked is not a legitimate top-level Jupiter swap instruction — possible token drain to attacker');
140
+ }
141
+ // CloseAccount (type=9): layout [account, destination, authority].
142
+ // accounts[1]=destination must be the user wallet so unwrapped SOL/rent
143
+ // returns to the user and cannot be swept to an attacker address.
144
+ if (type === TOKEN_CLOSE_ACCOUNT) {
145
+ const destIdx = ix.accountKeyIndexes[1];
146
+ if (destIdx === undefined)
147
+ throw new UnsafeSolanaSwapFundMovementError(index, 'Token.CloseAccount: missing destination account index');
148
+ const dest = keys.get(destIdx);
149
+ if (!dest || !dest.equals(userWallet)) {
150
+ throw new UnsafeSolanaSwapFundMovementError(index, `Token.CloseAccount destination ${dest?.toBase58() ?? '<unresolved>'} is not the user wallet ${userWallet.toBase58()} — possible SOL/rent drain`);
151
+ }
152
+ }
153
+ // SyncNative (17), InitializeAccount (1), and other Token instructions
154
+ // that do not move funds to an arbitrary destination: allowed.
155
+ };
156
+ /**
157
+ * Fund-safety guard (audit finding SOL-01, vultisig/vultisig-sdk#1056): a
158
+ * compromised Jupiter proxy could inject an arbitrary instruction (e.g. a
159
+ * drain transfer) into the `VersionedTransaction` returned from `/swap`
160
+ * before it reaches MPC signing. Vultisig's signing UI cannot meaningfully
161
+ * render raw Solana instruction bytes for the user to review, so the
162
+ * transaction would be effectively blind-signed.
163
+ *
164
+ * Two-layer defense:
165
+ *
166
+ * 1. **Program allow-list**: every top-level instruction's `programIdIndex`
167
+ * must resolve to a program in {@link JUPITER_SWAP_ALLOWED_PROGRAM_IDS}.
168
+ * Throws {@link UnsafeSolanaSwapInstructionError} on any unrecognized program.
169
+ *
170
+ * 2. **Destination/authority validation for fund-moving programs**: a
171
+ * program-only check is insufficient because `SystemProgram`,
172
+ * `TOKEN_PROGRAM_ID`, and `TOKEN_2022_PROGRAM_ID` are allow-listed (they
173
+ * perform legitimate SOL wrap/unwrap) but also implement drain/seize
174
+ * primitives (`Transfer`, `Approve`, `SetAuthority`). For each instruction
175
+ * targeting those programs, the decoded accounts are validated:
176
+ * - `SystemProgram.Transfer`: destination must be the user's wSOL ATA; any
177
+ * other System discriminant (TransferWithSeed / CreateAccount*) rejected.
178
+ * - `Token.Transfer/TransferChecked`: rejected outright — a top-level token
179
+ * move is never part of a legitimate Jupiter shared-accounts swap (the
180
+ * router moves tokens via CPI), and validating authority==user is
181
+ * meaningless since the authority is definitionally the user for any drain
182
+ * of their own account. The distinguishing account is the destination.
183
+ * - `Token.CloseAccount`: destination must be the user wallet.
184
+ * - `Token.Approve/ApproveChecked/SetAuthority`: rejected outright.
185
+ * Throws {@link UnsafeSolanaSwapFundMovementError} on any violation.
186
+ *
187
+ * Does NOT — and cannot, via static inspection alone — see into CPI (a
188
+ * program invoked from inside another instruction); that's exactly what the
189
+ * allow-listed Jupiter router is trusted to CPI into on the user's behalf.
190
+ */
191
+ export const assertSafeSolanaSwapInstructions = (message, addressLookupTableAccounts = [], userWallet) => {
192
+ const accountKeys = message.version === 'legacy' ? message.getAccountKeys() : message.getAccountKeys({ addressLookupTableAccounts });
193
+ message.compiledInstructions.forEach((instruction, index) => {
194
+ const programId = accountKeys.get(instruction.programIdIndex);
195
+ if (!programId) {
196
+ throw new UnsafeSolanaSwapInstructionError(index, `<unresolved account index ${instruction.programIdIndex}>`);
197
+ }
198
+ const programIdBase58 = programId.toBase58();
199
+ if (!JUPITER_SWAP_ALLOWED_PROGRAM_IDS.has(programIdBase58)) {
200
+ throw new UnsafeSolanaSwapInstructionError(index, programIdBase58);
201
+ }
202
+ // Layer 2: for fund-moving programs, validate destination/authority
203
+ if (FUND_MOVING_PROGRAM_IDS.has(programIdBase58)) {
204
+ if (programIdBase58 === SYSTEM_PROGRAM_ID) {
205
+ assertSystemInstruction(instruction, accountKeys, userWallet, index);
206
+ }
207
+ else {
208
+ assertTokenInstruction(instruction, accountKeys, userWallet, index);
209
+ }
210
+ }
211
+ });
212
+ };
213
+ /** Maximum attempts for a LUT fetch before giving up on that table. */
214
+ const MAX_LUT_FETCH_ATTEMPTS = 3;
215
+ const fetchLutWithRetry = async (client, accountKey) => {
216
+ const errors = [];
217
+ for (let attempt = 0; attempt < MAX_LUT_FETCH_ATTEMPTS; attempt++) {
218
+ try {
219
+ const result = await client.getAddressLookupTable(accountKey);
220
+ return result.value ?? null;
221
+ }
222
+ catch (err) {
223
+ errors.push(err);
224
+ if (attempt < MAX_LUT_FETCH_ATTEMPTS - 1) {
225
+ await new Promise(resolve => setTimeout(resolve, 200 * 2 ** attempt));
226
+ }
227
+ }
228
+ }
229
+ console.warn('[assertSafeSolanaSwapInstructions] LUT fetch failed after retries:', errors);
230
+ return null;
231
+ };
232
+ /**
233
+ * Resolve every address-lookup-table referenced by a v0 message. Returns an
234
+ * empty array for legacy messages (which cannot reference LUTs).
235
+ */
236
+ export const resolveSolanaAddressLookupTables = async (message) => {
237
+ if (message.version !== 0) {
238
+ return [];
239
+ }
240
+ const client = getSolanaClient();
241
+ const lutAccounts = [];
242
+ for (const lut of message.addressTableLookups) {
243
+ const lutAccount = await fetchLutWithRetry(client, lut.accountKey);
244
+ if (lutAccount) {
245
+ lutAccounts.push(lutAccount);
246
+ }
247
+ }
248
+ return lutAccounts;
249
+ };
250
+ /**
251
+ * Convenience wrapper: deserialize a base64-encoded `VersionedTransaction`,
252
+ * resolve any referenced LUTs, and assert its top-level instructions are
253
+ * all allow-listed and fund-movement-safe. See {@link assertSafeSolanaSwapInstructions}.
254
+ */
255
+ export const assertSafeSolanaSwapTransactionBase64 = async (txData, userWallet) => {
256
+ const versionedTx = VersionedTransaction.deserialize(Buffer.from(txData, 'base64'));
257
+ const lutAccounts = await resolveSolanaAddressLookupTables(versionedTx.message);
258
+ assertSafeSolanaSwapInstructions(versionedTx.message, lutAccounts, userWallet);
259
+ };
260
+ //# sourceMappingURL=assertSafeSolanaSwapInstructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertSafeSolanaSwapInstructions.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/assertSafeSolanaSwapInstructions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getJupiterSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AACrF,OAAO,EAEL,KAAK,sBAAsB,EAG5B,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAA;AAE5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAUzE,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC,GAAG;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AA2CD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAU,iEAOvC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CA8FlC,CAAA"}
1
+ {"version":3,"file":"getJupiterSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AACrF,OAAO,EAEL,KAAK,sBAAsB,EAG5B,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAA;AAE5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAUzE,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC,GAAG;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AA2CD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAU,iEAOvC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAsGlC,CAAA"}
@@ -1,4 +1,6 @@
1
+ import { PublicKey } from '@solana/web3.js';
1
2
  import { Chain } from '@vultisig/core-chain/Chain';
3
+ import { assertSafeSolanaSwapTransactionBase64 } from '@vultisig/core-chain/chains/solana/assertSafeSolanaSwapInstructions';
2
4
  import { solanaConfig } from '@vultisig/core-chain/chains/solana/solanaConfig';
3
5
  import { getJupiterConfig, jupiterFeeOwnerAddress, normalizeJupiterBaseUrl, } from '@vultisig/core-chain/swap/general/jupiter/config';
4
6
  import { assertJupiterPriceImpactWithinCeiling } from '@vultisig/core-chain/swap/general/priceImpactGuard';
@@ -86,6 +88,12 @@ export const getJupiterSwapQuote = async ({ from, to, amount, affiliateBps = 0,
86
88
  if (!swapResponse.swapTransaction) {
87
89
  throw new Error('Jupiter swap response did not include a serialized transaction.');
88
90
  }
91
+ // Fund-safety guard (audit finding SOL-01): the proxy-supplied transaction
92
+ // is validated BEFORE any local mutation (fee-ATA prepend), and regardless
93
+ // of whether a fee is charged on this swap — an unguarded no-fee response
94
+ // was previously forwarded to signing verbatim.
95
+ const userPubkey = new PublicKey(from.address);
96
+ await assertSafeSolanaSwapTransactionBase64(swapResponse.swapTransaction, userPubkey);
89
97
  const data = feeAccountInfo
90
98
  ? await prependJupiterFeeAta({
91
99
  txData: swapResponse.swapTransaction,
@@ -93,6 +101,7 @@ export const getJupiterSwapQuote = async ({ from, to, amount, affiliateBps = 0,
93
101
  mintPubkey: feeAccountInfo.mintPubkey,
94
102
  ownerPubkey: feeAccountInfo.ownerPubkey,
95
103
  tokenProgramId: feeAccountInfo.tokenProgramId,
104
+ userWallet: userPubkey,
96
105
  })
97
106
  : swapResponse.swapTransaction;
98
107
  // Network fee is an upper-bound estimate: Solana's per-signature base fee plus
@@ -1 +1 @@
1
- {"version":3,"file":"getJupiterSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getJupiterSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"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"}
@@ -38,11 +38,12 @@ export declare const deriveJupiterFeeAccount: ({ outputMint, feeOwner, }: {
38
38
  * keysign path refreshes the blockhash before broadcast (same as every other
39
39
  * Solana general-swap route), so we do not refresh it here.
40
40
  */
41
- export declare const prependJupiterFeeAta: ({ txData, feeAccount, mintPubkey, ownerPubkey, tokenProgramId, }: {
41
+ export declare const prependJupiterFeeAta: ({ txData, feeAccount, mintPubkey, ownerPubkey, tokenProgramId, userWallet, }: {
42
42
  txData: string;
43
43
  feeAccount: string;
44
44
  mintPubkey: PublicKey;
45
45
  ownerPubkey: PublicKey;
46
46
  tokenProgramId: PublicKey;
47
+ userWallet: PublicKey;
47
48
  }) => Promise<string>;
48
49
  //# sourceMappingURL=jupiterFeeAta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jupiterFeeAta.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts"],"names":[],"mappings":"AAMA,OAAO,EAA6B,SAAS,EAA4C,MAAM,iBAAiB,CAAA;AAsDhH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,SAAS,CAAA;IACzB,UAAU,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,SAAS,CAAA;CACvB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAU,2BAG3C;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,OAAO,CAAC,iBAAiB,CAa5B,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAAU,kEAMxC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,SAAS,CAAA;IACtB,cAAc,EAAE,SAAS,CAAA;CAC1B,KAAG,OAAO,CAAC,MAAM,CAgDjB,CAAA"}
1
+ {"version":3,"file":"jupiterFeeAta.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAA4C,MAAM,iBAAiB,CAAA;AA+BrF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,SAAS,CAAA;IACzB,UAAU,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,SAAS,CAAA;CACvB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAU,2BAG3C;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,OAAO,CAAC,iBAAiB,CAa5B,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAAU,8EAOxC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,SAAS,CAAA;IACtB,cAAc,EAAE,SAAS,CAAA;IACzB,UAAU,EAAE,SAAS,CAAA;CACtB,KAAG,OAAO,CAAC,MAAM,CAqCjB,CAAA"}
@@ -1,29 +1,7 @@
1
1
  import { createAssociatedTokenAccountIdempotentInstruction, getAssociatedTokenAddressSync, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, } from '@solana/spl-token';
2
2
  import { PublicKey, TransactionMessage, VersionedTransaction } from '@solana/web3.js';
3
+ import { assertSafeSolanaSwapInstructions, resolveSolanaAddressLookupTables, } from '@vultisig/core-chain/chains/solana/assertSafeSolanaSwapInstructions';
3
4
  import { getSolanaClient } from '@vultisig/core-chain/chains/solana/client';
4
- /** Maximum attempts for LUT fetches before giving up. */
5
- const MAX_LUT_FETCH_ATTEMPTS = 3;
6
- /**
7
- * Fetch a LUT account with simple retry (exponential back-off, up to 3 attempts).
8
- * RPC timeouts are transient; retrying avoids spurious quote failures.
9
- */
10
- const fetchLutWithRetry = async (client, accountKey) => {
11
- const errors = [];
12
- for (let attempt = 0; attempt < MAX_LUT_FETCH_ATTEMPTS; attempt++) {
13
- try {
14
- const result = await client.getAddressLookupTable(accountKey);
15
- return result.value ?? null;
16
- }
17
- catch (err) {
18
- errors.push(err);
19
- if (attempt < MAX_LUT_FETCH_ATTEMPTS - 1) {
20
- await new Promise(resolve => setTimeout(resolve, 200 * 2 ** attempt));
21
- }
22
- }
23
- }
24
- console.warn('[jupiterFeeAta] LUT fetch failed after retries:', errors);
25
- return null;
26
- };
27
5
  /**
28
6
  * Resolve the SPL token program (Token vs Token-2022) that owns a mint.
29
7
  *
@@ -80,19 +58,13 @@ export const deriveJupiterFeeAccount = async ({ outputMint, feeOwner, }) => {
80
58
  * keysign path refreshes the blockhash before broadcast (same as every other
81
59
  * Solana general-swap route), so we do not refresh it here.
82
60
  */
83
- export const prependJupiterFeeAta = async ({ txData, feeAccount, mintPubkey, ownerPubkey, tokenProgramId, }) => {
84
- const client = getSolanaClient();
61
+ export const prependJupiterFeeAta = async ({ txData, feeAccount, mintPubkey, ownerPubkey, tokenProgramId, userWallet, }) => {
85
62
  const versionedTx = VersionedTransaction.deserialize(Buffer.from(txData, 'base64'));
86
- const lutAccounts = [];
87
- if (versionedTx.message.version === 0) {
88
- const lookups = versionedTx.message.addressTableLookups;
89
- for (const lut of lookups) {
90
- const lutAccount = await fetchLutWithRetry(client, lut.accountKey);
91
- if (lutAccount) {
92
- lutAccounts.push(lutAccount);
93
- }
94
- }
95
- }
63
+ const lutAccounts = await resolveSolanaAddressLookupTables(versionedTx.message);
64
+ // Fund-safety guard (audit finding SOL-01): refuse to build a signable
65
+ // transaction out of a proxy-supplied message containing an instruction
66
+ // that targets an unrecognized program or moves funds to an unknown destination.
67
+ assertSafeSolanaSwapInstructions(versionedTx.message, lutAccounts, userWallet);
96
68
  let decompiledMessage;
97
69
  try {
98
70
  decompiledMessage = TransactionMessage.decompile(versionedTx.message, {
@@ -1 +1 @@
1
- {"version":3,"file":"jupiterFeeAta.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jupiterFeeAta.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ {
2
+ "singleHopSolToUsdc": {
3
+ "description": "Real Jupiter /swap response, SOL -> USDC, single-hop route (GoonFi V2), no affiliate fee. Captured 2026-07-09 from lite-api.jup.ag.",
4
+ "swapTransaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAHCkF1wZu9M3iGFk8IKByXc/pvqHgtN0JrxREMhkTk4gAwLtdJLuXn7rwQpTRDeJyvX+7SSUUYoz8GDyRj/e8oxIup1xSSxoBFn4o7mL2SnSCEX4WGaco7ETXE2mDyoUiskwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAEedVb8jHAbu50xW7OaBUH/bGy3qP0jlECsc2iVrwTjwbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCpjJclj04kifG7PRApFI4NgwtaE5na/xCEBI572Nvp+Fm0P/on9df2SnTAmx8pWHneSwmrNt/J3VFLMhqns4zl6PzRPaBBVZATz0rroahO1wI61P8hqEdH/zsFqzD6ggfDS8uoomrC6yt3ekBLwDYKDjFclgjCt2ho4LrkzQY/kB0HBAAFAsBcFQAEAAkDBBcBAAAAAAAHBgABAA0DBgEBAwIAAQwCAAAAAMqaOwAAAAAGAQEBEQUYBgABAgUSBQgFDwAMAQIKCw0SEBEOBgYJJOUXy5d6460qAQAAAJcAZAABAMqaOwAAAAACVKAEAAAAADIAAAYDAQAAAQkBtQ4ft8S/G/nU4iNQ3DOvYX1x0GnpYwrcIoCFMHsZKVED6u/xBhIuhfIxBQ==",
5
+ "lookupTables": [
6
+ {
7
+ "key": "DBmHWCVEGCzZ3zDNr9WzRaMmSqCjcixMh78imXfno9qJ",
8
+ "dataBase64": "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"
9
+ }
10
+ ]
11
+ },
12
+ "multiHopSolToBonk": {
13
+ "description": "Real Jupiter /swap response, SOL -> BONK, 3-hop route (AlphaQ -> Hadron -> Raydium CLMM). Captured 2026-07-09 from lite-api.jup.ag.",
14
+ "swapTransaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAHEUF1wZu9M3iGFk8IKByXc/pvqHgtN0JrxREMhkTk4gAwLtdJLuXn7rwQpTRDeJyvX+7SSUUYoz8GDyRj/e8oxItuQ0VdX43P57XTzkf9ylsPMXqstrwAaDQ4Gmo7wOYd+m/z+xilXGrCdj1ZMMeA+lC8FSa7b+m4JQDZcseB/tbPcsbbBaKqZoGun7nO3Cnxmd5z4LpCbn+Nzn5BZlWjhh53BHo4HDkVOPejukK6/oQdRT8m1S5xpmRD9q8e3XSK/ZOHamzEoB95HHSyhWUPJaRVgOsbbmLUEeLgRlnxn0hfnaQGHkjbVw2C3oJDEqFkddTsoDHHgFbgcCH+jiu7tvi9uCzVnFfmeLLtEncPfV+UlQA3Ng5SzEDJrbiX8epqO+nUSIsH/jmbGpFV5YIbaX1DAWwKPE87vKKvtB0BYzBXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAR51VvyMcBu7nTFbs5oFQf9sbLeo/SOUQKxzaJWvBOPBt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKmMlyWPTiSJ8bs9ECkUjg2DC1oTmdr/EIQEjnvY2+n4Wawa49CH8pI3BiVI9wxMBK7CqZVpSYbny7RnUgYh04YwtD/6J/XX9kp0wJsfKVh53ksJqzbfyd1RSzIap7OM5ehA857mb0JLReVQ2y6Jw0WM6LwBrm/iPtZlJfqA+F2jOQgLAAUCwFwVAAsACQOUxQAAAAAAAA4GAAEAHwoNAQEKAgABDAIAAAAAZc0dAAAAAA0BAQERDgYABAAkCg0BAQw8DQ8AAQUCBB8kDAwQDCIPIRMDBRIREhERDSAMKg0NGygpHBsPAx4aCScZJh0MIw8lFAkCGBcWDQYVBwgMLsEgmzNB1pyBBQMAAABoAGQAAaIBZAECGmQCAwBlzR0AAAAA1mX01eEAAABkAAANAwEAAAEJA+JPPiqWVx6GdrLaLkhUEAxNJ0886MhL4Nziho/JGqntAzs4OgUVAzkCIXG1VVSqukVs1RwAZXbHZmmuSS48/+Wc3tDKOaOL5J0fBX+AeH13Ant8FkMhDkzdg/WyYdmIopAi24itINNC7hzdg8iuCgJd6jsGLzE2ODwyBTowNzUz",
15
+ "lookupTables": [
16
+ {
17
+ "key": "GERDuMq2KXct84sG9JUxuRguqfcPvn71gYXg2p3LLHv4",
18
+ "dataBase64": "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"
19
+ },
20
+ {
21
+ "key": "8esSdkAjjSktt5iHjbmojPxWaL8sTac3vuPP9d8r8n2A",
22
+ "dataBase64": "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"
23
+ },
24
+ {
25
+ "key": "2VuLeMEXPF4RGhw6sDEnYF4JjAfzHqtdPCyRYGjyLp3t",
26
+ "dataBase64": "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"
27
+ }
28
+ ]
29
+ }
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/core-chain",
3
- "version": "2.24.2",
3
+ "version": "2.24.3",
4
4
  "description": "Blockchain chain logic shared across Vultisig clients",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -685,6 +685,11 @@
685
685
  "import": "./dist/chains/ripple/network/info.js",
686
686
  "default": "./dist/chains/ripple/network/info.js"
687
687
  },
688
+ "./chains/solana/assertSafeSolanaSwapInstructions": {
689
+ "types": "./dist/chains/solana/assertSafeSolanaSwapInstructions.d.ts",
690
+ "import": "./dist/chains/solana/assertSafeSolanaSwapInstructions.js",
691
+ "default": "./dist/chains/solana/assertSafeSolanaSwapInstructions.js"
692
+ },
688
693
  "./chains/solana/client": {
689
694
  "types": "./dist/chains/solana/client.d.ts",
690
695
  "import": "./dist/chains/solana/client.js",
@@ -1255,6 +1260,7 @@
1255
1260
  "import": "./dist/coin/utils/sortCoinsByBalance.js",
1256
1261
  "default": "./dist/coin/utils/sortCoinsByBalance.js"
1257
1262
  },
1263
+ "./fixtures/jupiter-swap-transactions.json": "./fixtures/jupiter-swap-transactions.json",
1258
1264
  "./fixtures/limit-swap-memos.json": "./fixtures/limit-swap-memos.json",
1259
1265
  "./package.json": "./package.json",
1260
1266
  "./publicKey/address/bittensor": {