@loyal-labs/solana-instruction-decoder 0.1.1

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.
@@ -0,0 +1,50 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ export type PublicKeyLike = PublicKey | string | {
3
+ toBase58(): string;
4
+ };
5
+ export type SolanaInstructionAccountInput = {
6
+ pubkey: PublicKeyLike;
7
+ isSigner?: boolean;
8
+ isWritable?: boolean;
9
+ label?: string;
10
+ };
11
+ export type SolanaInstructionInput = {
12
+ programId: PublicKeyLike;
13
+ keys?: readonly SolanaInstructionAccountInput[];
14
+ data?: Uint8Array | number[] | string;
15
+ };
16
+ export type DecodedSolanaInstructionDetail = {
17
+ label: string;
18
+ value: string;
19
+ };
20
+ export type DecodedSolanaInstructionAccount = {
21
+ address: string;
22
+ label: string | null;
23
+ isSigner: boolean;
24
+ isWritable: boolean;
25
+ };
26
+ export type DecodedSolanaInstruction = {
27
+ programId: string;
28
+ programName: string;
29
+ instructionName: string;
30
+ title: string;
31
+ description: string;
32
+ accounts: DecodedSolanaInstructionAccount[];
33
+ details: DecodedSolanaInstructionDetail[];
34
+ rawDataBase64: string;
35
+ rawDataHex: string;
36
+ warnings: string[];
37
+ };
38
+ export type DecodedSolanaTransaction = {
39
+ version: "legacy" | "v0" | "unknown";
40
+ instructions: DecodedSolanaInstruction[];
41
+ rawTransactionBase64: string;
42
+ error: string | null;
43
+ };
44
+ export type DecodedMessagePayload = {
45
+ value: string;
46
+ encoding: "utf8" | "hex";
47
+ };
48
+ export declare function decodeSolanaInstruction(input: SolanaInstructionInput): DecodedSolanaInstruction;
49
+ export declare function decodeSolanaTransaction(input: Uint8Array | number[] | string): DecodedSolanaTransaction;
50
+ export declare function decodeMessagePayload(input: Uint8Array | number[] | string): DecodedMessagePayload;
package/dist/index.js ADDED
@@ -0,0 +1,917 @@
1
+ import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, } from "@solana/spl-token";
2
+ import { AddressLookupTableInstruction, AddressLookupTableProgram, ComputeBudgetInstruction, ComputeBudgetProgram, LAMPORTS_PER_SOL, PublicKey, SystemInstruction, SystemProgram, Transaction, TransactionInstruction, VersionedTransaction, } from "@solana/web3.js";
3
+ import { Buffer } from "buffer";
4
+ const SMART_ACCOUNT_PROGRAM_ID = "SMRTzfY6DfH5ik3TKiyLFfXexV8uSG3d2UksSCYdunG";
5
+ const JUPITER_V6_PROGRAM_ID = "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4";
6
+ const ORCA_WHIRLPOOL_PROGRAM_ID = "whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc";
7
+ const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
8
+ const MEMO_LEGACY_PROGRAM_ID = "Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo";
9
+ const ED25519_PROGRAM_ID = "Ed25519SigVerify111111111111111111111111111";
10
+ const SECP256K1_PROGRAM_ID = "KeccakSecp256k11111111111111111111111111111";
11
+ const KNOWN_PROGRAMS = {
12
+ [SystemProgram.programId.toBase58()]: "System Program",
13
+ [TOKEN_PROGRAM_ID.toBase58()]: "Token Program",
14
+ [TOKEN_2022_PROGRAM_ID.toBase58()]: "Token-2022 Program",
15
+ [ASSOCIATED_TOKEN_PROGRAM_ID.toBase58()]: "Associated Token Program",
16
+ [ComputeBudgetProgram.programId.toBase58()]: "Compute Budget Program",
17
+ [AddressLookupTableProgram.programId.toBase58()]: "Address Lookup Table Program",
18
+ [SMART_ACCOUNT_PROGRAM_ID]: "Smart Account Program",
19
+ [JUPITER_V6_PROGRAM_ID]: "Jupiter v6",
20
+ [ORCA_WHIRLPOOL_PROGRAM_ID]: "Orca Whirlpool",
21
+ [MEMO_PROGRAM_ID]: "Memo Program",
22
+ [MEMO_LEGACY_PROGRAM_ID]: "Memo Program",
23
+ [ED25519_PROGRAM_ID]: "Ed25519 Program",
24
+ [SECP256K1_PROGRAM_ID]: "Secp256k1 Program",
25
+ };
26
+ const VOTE_ACCOUNT_LABELS = [
27
+ "Consensus account",
28
+ "Signer",
29
+ "Proposal",
30
+ "System program",
31
+ "Smart account program",
32
+ ];
33
+ const CREATE_TRANSACTION_LABELS = [
34
+ "Consensus account",
35
+ "Transaction",
36
+ "Creator",
37
+ "Rent payer",
38
+ "System program",
39
+ "Smart account program",
40
+ ];
41
+ const CREATE_PROPOSAL_LABELS = [
42
+ "Consensus account",
43
+ "Proposal",
44
+ "Creator",
45
+ "Rent payer",
46
+ "System program",
47
+ "Smart account program",
48
+ ];
49
+ const SMART_ACCOUNT_INSTRUCTIONS = [
50
+ {
51
+ discriminator: [90, 186, 203, 234, 70, 185, 191, 21],
52
+ instructionName: "ActivateProposal",
53
+ title: "Activate smart account proposal",
54
+ accountLabels: ["Consensus account", "Signer", "Proposal", "Program"],
55
+ },
56
+ {
57
+ discriminator: [136, 108, 102, 85, 98, 114, 7, 147],
58
+ instructionName: "ApproveProposal",
59
+ title: "Approve smart account proposal",
60
+ accountLabels: VOTE_ACCOUNT_LABELS,
61
+ },
62
+ {
63
+ discriminator: [114, 162, 164, 82, 191, 11, 102, 25],
64
+ instructionName: "RejectProposal",
65
+ title: "Reject smart account proposal",
66
+ accountLabels: VOTE_ACCOUNT_LABELS,
67
+ },
68
+ {
69
+ discriminator: [106, 74, 128, 146, 19, 65, 39, 23],
70
+ instructionName: "CancelProposal",
71
+ title: "Cancel smart account proposal",
72
+ accountLabels: VOTE_ACCOUNT_LABELS,
73
+ },
74
+ {
75
+ discriminator: [231, 173, 49, 91, 235, 24, 68, 19],
76
+ instructionName: "ExecuteTransaction",
77
+ title: "Execute smart account transaction",
78
+ accountLabels: [
79
+ "Consensus account",
80
+ "Proposal",
81
+ "Transaction",
82
+ "Signer",
83
+ "Smart account program",
84
+ ],
85
+ },
86
+ {
87
+ discriminator: [43, 102, 248, 89, 231, 97, 104, 134],
88
+ instructionName: "ExecuteTransactionSync",
89
+ title: "Execute smart account transaction",
90
+ accountLabels: ["Consensus account", "Smart account program"],
91
+ },
92
+ {
93
+ discriminator: [90, 81, 187, 81, 39, 70, 128, 78],
94
+ instructionName: "ExecuteTransactionSyncV2",
95
+ title: "Execute smart account transaction",
96
+ accountLabels: ["Consensus account", "Smart account program"],
97
+ },
98
+ {
99
+ discriminator: [131, 210, 27, 88, 27, 204, 143, 189],
100
+ instructionName: "ExecuteSettingsTransaction",
101
+ title: "Execute smart account settings change",
102
+ accountLabels: [
103
+ "Settings",
104
+ "Signer",
105
+ "Proposal",
106
+ "Transaction",
107
+ "Rent payer",
108
+ "System program",
109
+ "Smart account program",
110
+ ],
111
+ },
112
+ {
113
+ discriminator: [138, 209, 64, 163, 79, 67, 233, 76],
114
+ instructionName: "ExecuteSettingsTransactionSync",
115
+ title: "Execute smart account settings change",
116
+ accountLabels: ["Settings", "Smart account program"],
117
+ },
118
+ {
119
+ discriminator: [132, 116, 68, 174, 216, 160, 198, 22],
120
+ instructionName: "CreateProposal",
121
+ title: "Create smart account proposal",
122
+ accountLabels: CREATE_PROPOSAL_LABELS,
123
+ },
124
+ {
125
+ discriminator: [227, 193, 53, 239, 55, 126, 112, 105],
126
+ instructionName: "CreateTransaction",
127
+ title: "Create smart account transaction",
128
+ accountLabels: CREATE_TRANSACTION_LABELS,
129
+ },
130
+ {
131
+ discriminator: [101, 168, 254, 203, 222, 102, 95, 192],
132
+ instructionName: "CreateSettingsTransaction",
133
+ title: "Create smart account settings transaction",
134
+ accountLabels: [
135
+ "Settings",
136
+ "Transaction",
137
+ "Creator",
138
+ "Rent payer",
139
+ "System program",
140
+ "Smart account program",
141
+ ],
142
+ },
143
+ {
144
+ discriminator: [41, 179, 70, 5, 194, 147, 239, 158],
145
+ instructionName: "UseSpendingLimit",
146
+ title: "Use spending limit",
147
+ accountLabels: [
148
+ "Settings",
149
+ "Signer",
150
+ "Spending limit",
151
+ "Smart account",
152
+ "Destination",
153
+ "System program",
154
+ "Mint",
155
+ "Smart account token account",
156
+ "Destination token account",
157
+ "Token program",
158
+ "Smart account program",
159
+ ],
160
+ },
161
+ {
162
+ discriminator: [197, 102, 253, 231, 77, 84, 50, 17],
163
+ instructionName: "CreateSmartAccount",
164
+ title: "Create smart account",
165
+ },
166
+ {
167
+ discriminator: [80, 198, 228, 154, 7, 234, 99, 56],
168
+ instructionName: "AddSignerAsAuthority",
169
+ title: "Add smart account signer",
170
+ },
171
+ {
172
+ discriminator: [58, 19, 149, 16, 181, 16, 125, 148],
173
+ instructionName: "RemoveSignerAsAuthority",
174
+ title: "Remove smart account signer",
175
+ },
176
+ {
177
+ discriminator: [169, 189, 84, 54, 30, 244, 223, 212],
178
+ instructionName: "AddSpendingLimitAsAuthority",
179
+ title: "Add spending limit policy",
180
+ },
181
+ {
182
+ discriminator: [94, 32, 68, 127, 251, 44, 145, 7],
183
+ instructionName: "RemoveSpendingLimitAsAuthority",
184
+ title: "Remove spending limit policy",
185
+ },
186
+ {
187
+ discriminator: [51, 141, 78, 133, 70, 47, 95, 124],
188
+ instructionName: "ChangeThresholdAsAuthority",
189
+ title: "Change smart account threshold",
190
+ },
191
+ {
192
+ discriminator: [2, 234, 93, 93, 40, 92, 31, 234],
193
+ instructionName: "SetTimeLockAsAuthority",
194
+ title: "Set smart account time lock",
195
+ },
196
+ {
197
+ discriminator: [159, 198, 248, 43, 248, 31, 235, 86],
198
+ instructionName: "CreateBatch",
199
+ title: "Create smart account batch",
200
+ },
201
+ {
202
+ discriminator: [147, 75, 197, 227, 20, 149, 150, 113],
203
+ instructionName: "AddTransactionToBatch",
204
+ title: "Add transaction to batch",
205
+ },
206
+ {
207
+ discriminator: [237, 67, 201, 173, 33, 130, 88, 134],
208
+ instructionName: "ExecuteBatchTransaction",
209
+ title: "Execute batch transaction",
210
+ },
211
+ {
212
+ discriminator: [57, 97, 250, 156, 59, 211, 32, 208],
213
+ instructionName: "CreateTransactionBuffer",
214
+ title: "Create transaction buffer",
215
+ },
216
+ {
217
+ discriminator: [190, 86, 246, 95, 231, 154, 229, 91],
218
+ instructionName: "ExtendTransactionBuffer",
219
+ title: "Extend transaction buffer",
220
+ },
221
+ {
222
+ discriminator: [53, 192, 39, 239, 124, 84, 43, 249],
223
+ instructionName: "CreateTransactionFromBuffer",
224
+ title: "Create transaction from buffer",
225
+ },
226
+ ];
227
+ const SMART_ACCOUNT_INSTRUCTIONS_BY_DISCRIMINATOR = new Map(SMART_ACCOUNT_INSTRUCTIONS.map((definition) => [
228
+ discriminatorKey(definition.discriminator),
229
+ definition,
230
+ ]));
231
+ function discriminatorKey(bytes) {
232
+ return bytes.slice(0, 8).join(",");
233
+ }
234
+ function normalizeBytes(input) {
235
+ if (typeof input === "string") {
236
+ return Buffer.from(input, "base64");
237
+ }
238
+ return Buffer.from(input);
239
+ }
240
+ function bytesToHex(bytes) {
241
+ return Array.from(bytes)
242
+ .map((byte) => byte.toString(16).padStart(2, "0"))
243
+ .join(" ");
244
+ }
245
+ function toAddress(key) {
246
+ if (typeof key === "string") {
247
+ return key;
248
+ }
249
+ return key.toBase58();
250
+ }
251
+ function toPublicKey(key) {
252
+ return typeof key === "string"
253
+ ? new PublicKey(key)
254
+ : new PublicKey(toAddress(key));
255
+ }
256
+ function truncateAddress(address) {
257
+ if (address.length <= 12) {
258
+ return address;
259
+ }
260
+ return `${address.slice(0, 4)}...${address.slice(-4)}`;
261
+ }
262
+ function programName(programId) {
263
+ return KNOWN_PROGRAMS[programId] ?? truncateAddress(programId);
264
+ }
265
+ function formatSol(lamports) {
266
+ const amount = Number(lamports) / LAMPORTS_PER_SOL;
267
+ return amount.toLocaleString("en-US", {
268
+ maximumFractionDigits: 9,
269
+ });
270
+ }
271
+ function formatTokenAmount(amount, decimals) {
272
+ if (decimals === 0) {
273
+ return amount.toString();
274
+ }
275
+ const scale = BigInt(10) ** BigInt(decimals);
276
+ const whole = amount / scale;
277
+ const fraction = amount % scale;
278
+ if (fraction === BigInt(0)) {
279
+ return whole.toString();
280
+ }
281
+ const padded = fraction.toString().padStart(decimals, "0");
282
+ return `${whole.toString()}.${padded.replace(/0+$/, "")}`;
283
+ }
284
+ function readU64LE(bytes, offset) {
285
+ if (bytes.length < offset + 8) {
286
+ return null;
287
+ }
288
+ let value = BigInt(0);
289
+ for (let i = 0; i < 8; i++) {
290
+ value += BigInt(bytes[offset + i]) << BigInt(i * 8);
291
+ }
292
+ return value;
293
+ }
294
+ function withAccountLabels(accounts, labels) {
295
+ if (!labels) {
296
+ return accounts;
297
+ }
298
+ return accounts.map((account, index) => ({
299
+ ...account,
300
+ label: account.label ?? labels[index] ?? null,
301
+ }));
302
+ }
303
+ function accountAddress(accounts, index) {
304
+ return accounts[index]?.address ?? null;
305
+ }
306
+ function shortAccount(accounts, index) {
307
+ const address = accountAddress(accounts, index);
308
+ return address ? truncateAddress(address) : `account ${index}`;
309
+ }
310
+ function createInstruction(input) {
311
+ const keys = (input.keys ?? []).map((key) => ({
312
+ pubkey: toPublicKey(key.pubkey),
313
+ isSigner: key.isSigner ?? false,
314
+ isWritable: key.isWritable ?? false,
315
+ }));
316
+ return new TransactionInstruction({
317
+ programId: toPublicKey(input.programId),
318
+ keys,
319
+ data: input.data ? normalizeBytes(input.data) : Buffer.alloc(0),
320
+ });
321
+ }
322
+ function normalizeAccounts(keys) {
323
+ return (keys ?? []).map((key) => ({
324
+ address: toAddress(key.pubkey),
325
+ label: key.label ?? null,
326
+ isSigner: key.isSigner ?? false,
327
+ isWritable: key.isWritable ?? false,
328
+ }));
329
+ }
330
+ function baseInstruction(args) {
331
+ const programId = toAddress(args.input.programId);
332
+ const data = args.input.data
333
+ ? normalizeBytes(args.input.data)
334
+ : Buffer.alloc(0);
335
+ const name = args.instructionName ?? "UnknownInstruction";
336
+ const title = args.title ?? `${programName(programId)} instruction`;
337
+ return {
338
+ programId,
339
+ programName: programName(programId),
340
+ instructionName: name,
341
+ title,
342
+ description: args.description ?? `Instruction to ${programName(programId)}`,
343
+ accounts: args.accounts ?? normalizeAccounts(args.input.keys),
344
+ details: args.details ?? [],
345
+ rawDataBase64: data.toString("base64"),
346
+ rawDataHex: bytesToHex(data),
347
+ warnings: args.warnings ?? [],
348
+ };
349
+ }
350
+ function decodeSystemInstruction(input, instruction, accounts) {
351
+ try {
352
+ const type = SystemInstruction.decodeInstructionType(instruction);
353
+ if (type === "Transfer") {
354
+ const decoded = SystemInstruction.decodeTransfer(instruction);
355
+ const lamports = BigInt(decoded.lamports);
356
+ return baseInstruction({
357
+ input,
358
+ instructionName: "Transfer",
359
+ title: "Transfer SOL",
360
+ description: `Transfer ${formatSol(lamports)} SOL from ${truncateAddress(decoded.fromPubkey.toBase58())} to ${truncateAddress(decoded.toPubkey.toBase58())}`,
361
+ accounts: withAccountLabels(accounts, ["From", "To"]),
362
+ details: [
363
+ { label: "Lamports", value: lamports.toString() },
364
+ { label: "SOL", value: formatSol(lamports) },
365
+ { label: "From", value: decoded.fromPubkey.toBase58() },
366
+ { label: "To", value: decoded.toPubkey.toBase58() },
367
+ ],
368
+ });
369
+ }
370
+ if (type === "Create") {
371
+ const decoded = SystemInstruction.decodeCreateAccount(instruction);
372
+ return baseInstruction({
373
+ input,
374
+ instructionName: "CreateAccount",
375
+ title: "Create account",
376
+ description: `Create ${truncateAddress(decoded.newAccountPubkey.toBase58())} with ${formatSol(decoded.lamports)} SOL`,
377
+ accounts: withAccountLabels(accounts, [
378
+ "Funding account",
379
+ "New account",
380
+ ]),
381
+ details: [
382
+ { label: "Funding account", value: decoded.fromPubkey.toBase58() },
383
+ { label: "New account", value: decoded.newAccountPubkey.toBase58() },
384
+ { label: "Lamports", value: decoded.lamports.toString() },
385
+ { label: "Space", value: decoded.space.toString() },
386
+ { label: "Owner", value: decoded.programId.toBase58() },
387
+ ],
388
+ });
389
+ }
390
+ if (type === "TransferWithSeed") {
391
+ const decoded = SystemInstruction.decodeTransferWithSeed(instruction);
392
+ const lamports = BigInt(decoded.lamports);
393
+ return baseInstruction({
394
+ input,
395
+ instructionName: "TransferWithSeed",
396
+ title: "Transfer SOL with seed",
397
+ description: `Transfer ${formatSol(lamports)} SOL to ${truncateAddress(decoded.toPubkey.toBase58())}`,
398
+ accounts: withAccountLabels(accounts, ["From", "Base", "To"]),
399
+ details: [
400
+ { label: "Lamports", value: lamports.toString() },
401
+ { label: "SOL", value: formatSol(lamports) },
402
+ { label: "From", value: decoded.fromPubkey.toBase58() },
403
+ { label: "Base", value: decoded.basePubkey.toBase58() },
404
+ { label: "To", value: decoded.toPubkey.toBase58() },
405
+ { label: "Seed", value: decoded.seed },
406
+ { label: "Owner", value: decoded.programId.toBase58() },
407
+ ],
408
+ });
409
+ }
410
+ return baseInstruction({
411
+ input,
412
+ instructionName: type,
413
+ title: `System: ${type}`,
414
+ description: `System Program ${type} instruction`,
415
+ accounts,
416
+ });
417
+ }
418
+ catch (error) {
419
+ return baseInstruction({
420
+ input,
421
+ instructionName: "SystemInstruction",
422
+ title: "System Program instruction",
423
+ accounts,
424
+ warnings: [
425
+ error instanceof Error
426
+ ? error.message
427
+ : "Failed to decode System instruction",
428
+ ],
429
+ });
430
+ }
431
+ }
432
+ function decodeComputeBudgetInstruction(input, instruction, accounts) {
433
+ try {
434
+ const type = ComputeBudgetInstruction.decodeInstructionType(instruction);
435
+ if (type === "SetComputeUnitLimit") {
436
+ const decoded = ComputeBudgetInstruction.decodeSetComputeUnitLimit(instruction);
437
+ return baseInstruction({
438
+ input,
439
+ instructionName: type,
440
+ title: "Set compute unit limit",
441
+ description: `Limit transaction compute to ${decoded.units.toLocaleString("en-US")} units`,
442
+ accounts,
443
+ details: [{ label: "Units", value: decoded.units.toString() }],
444
+ });
445
+ }
446
+ if (type === "SetComputeUnitPrice") {
447
+ const decoded = ComputeBudgetInstruction.decodeSetComputeUnitPrice(instruction);
448
+ return baseInstruction({
449
+ input,
450
+ instructionName: type,
451
+ title: "Set compute unit price",
452
+ description: `Set priority fee to ${decoded.microLamports.toString()} micro-lamports per compute unit`,
453
+ accounts,
454
+ details: [
455
+ {
456
+ label: "Micro-lamports per compute unit",
457
+ value: decoded.microLamports.toString(),
458
+ },
459
+ ],
460
+ });
461
+ }
462
+ if (type === "RequestHeapFrame") {
463
+ const decoded = ComputeBudgetInstruction.decodeRequestHeapFrame(instruction);
464
+ return baseInstruction({
465
+ input,
466
+ instructionName: type,
467
+ title: "Request heap frame",
468
+ description: `Request ${decoded.bytes.toLocaleString("en-US")} bytes of heap`,
469
+ accounts,
470
+ details: [{ label: "Bytes", value: decoded.bytes.toString() }],
471
+ });
472
+ }
473
+ return baseInstruction({
474
+ input,
475
+ instructionName: type,
476
+ title: `Compute Budget: ${type}`,
477
+ description: `Compute Budget ${type} instruction`,
478
+ accounts,
479
+ });
480
+ }
481
+ catch (error) {
482
+ return baseInstruction({
483
+ input,
484
+ instructionName: "ComputeBudgetInstruction",
485
+ title: "Compute Budget instruction",
486
+ accounts,
487
+ warnings: [
488
+ error instanceof Error
489
+ ? error.message
490
+ : "Failed to decode Compute Budget instruction",
491
+ ],
492
+ });
493
+ }
494
+ }
495
+ function decodeAddressLookupTableInstruction(input, instruction, accounts) {
496
+ try {
497
+ const type = AddressLookupTableInstruction.decodeInstructionType(instruction);
498
+ return baseInstruction({
499
+ input,
500
+ instructionName: type,
501
+ title: `Address lookup table: ${type}`,
502
+ description: `Address lookup table ${type} instruction`,
503
+ accounts,
504
+ });
505
+ }
506
+ catch (error) {
507
+ return baseInstruction({
508
+ input,
509
+ instructionName: "AddressLookupTableInstruction",
510
+ title: "Address lookup table instruction",
511
+ accounts,
512
+ warnings: [
513
+ error instanceof Error
514
+ ? error.message
515
+ : "Failed to decode address lookup table instruction",
516
+ ],
517
+ });
518
+ }
519
+ }
520
+ function decodeAssociatedTokenInstruction(input, accounts) {
521
+ const data = input.data ? normalizeBytes(input.data) : Buffer.alloc(0);
522
+ const tag = data[0] ?? 0;
523
+ const title = data.length === 0 || tag === 0
524
+ ? "Create associated token account"
525
+ : tag === 1
526
+ ? "Create associated token account if needed"
527
+ : tag === 2
528
+ ? "Recover nested associated token account"
529
+ : "Associated token account instruction";
530
+ const labels = tag === 2
531
+ ? [
532
+ "Nested token account",
533
+ "Nested mint",
534
+ "Destination token account",
535
+ "Owner token account",
536
+ "Owner mint",
537
+ "Owner",
538
+ "Token program",
539
+ ]
540
+ : [
541
+ "Payer",
542
+ "Associated token account",
543
+ "Owner",
544
+ "Mint",
545
+ "System program",
546
+ "Token program",
547
+ ];
548
+ return baseInstruction({
549
+ input,
550
+ instructionName: tag === 1 ? "CreateIdempotent" : tag === 2 ? "RecoverNested" : "Create",
551
+ title,
552
+ description: tag === 1
553
+ ? `Create ${shortAccount(accounts, 1)} for owner ${shortAccount(accounts, 2)} if it does not exist`
554
+ : `Create ${shortAccount(accounts, 1)} for owner ${shortAccount(accounts, 2)}`,
555
+ accounts: withAccountLabels(accounts, labels),
556
+ });
557
+ }
558
+ function decodeSplTokenInstruction(input, accounts) {
559
+ const data = input.data ? normalizeBytes(input.data) : Buffer.alloc(0);
560
+ const tag = data[0];
561
+ if (tag === 3) {
562
+ const amount = readU64LE(data, 1);
563
+ return baseInstruction({
564
+ input,
565
+ instructionName: "Transfer",
566
+ title: "Transfer tokens",
567
+ description: `Transfer ${amount?.toString() ?? "unknown"} raw tokens from ${shortAccount(accounts, 0)} to ${shortAccount(accounts, 1)}`,
568
+ accounts: withAccountLabels(accounts, ["Source", "Destination", "Owner"]),
569
+ details: amount
570
+ ? [{ label: "Raw amount", value: amount.toString() }]
571
+ : [],
572
+ });
573
+ }
574
+ if (tag === 12) {
575
+ const amount = readU64LE(data, 1);
576
+ const decimals = data[9];
577
+ return baseInstruction({
578
+ input,
579
+ instructionName: "TransferChecked",
580
+ title: "Transfer tokens",
581
+ description: amount === null || decimals === undefined
582
+ ? `Transfer checked tokens from ${shortAccount(accounts, 0)} to ${shortAccount(accounts, 2)}`
583
+ : `Transfer ${formatTokenAmount(amount, decimals)} tokens from ${shortAccount(accounts, 0)} to ${shortAccount(accounts, 2)}`,
584
+ accounts: withAccountLabels(accounts, [
585
+ "Source",
586
+ "Mint",
587
+ "Destination",
588
+ "Owner",
589
+ ]),
590
+ details: amount === null || decimals === undefined
591
+ ? []
592
+ : [
593
+ { label: "Amount", value: formatTokenAmount(amount, decimals) },
594
+ { label: "Raw amount", value: amount.toString() },
595
+ { label: "Decimals", value: decimals.toString() },
596
+ { label: "Mint", value: accountAddress(accounts, 1) ?? "" },
597
+ ],
598
+ });
599
+ }
600
+ if (tag === 4 || tag === 13) {
601
+ const amount = readU64LE(data, 1);
602
+ const decimals = tag === 13 ? data[9] : null;
603
+ const description = amount === null
604
+ ? `Approve token delegate ${shortAccount(accounts, 1)}`
605
+ : decimals === null || decimals === undefined
606
+ ? `Approve ${shortAccount(accounts, 1)} to spend ${amount.toString()} raw tokens`
607
+ : `Approve ${shortAccount(accounts, 2)} to spend ${formatTokenAmount(amount, decimals)} tokens`;
608
+ return baseInstruction({
609
+ input,
610
+ instructionName: tag === 13 ? "ApproveChecked" : "Approve",
611
+ title: "Approve token delegate",
612
+ description,
613
+ accounts: withAccountLabels(accounts, tag === 13
614
+ ? ["Account", "Mint", "Delegate", "Owner"]
615
+ : ["Account", "Delegate", "Owner"]),
616
+ details: amount
617
+ ? [{ label: "Raw amount", value: amount.toString() }]
618
+ : [],
619
+ });
620
+ }
621
+ if (tag === 7 || tag === 14) {
622
+ const amount = readU64LE(data, 1);
623
+ const decimals = tag === 14 ? data[9] : null;
624
+ return baseInstruction({
625
+ input,
626
+ instructionName: tag === 14 ? "MintToChecked" : "MintTo",
627
+ title: "Mint tokens",
628
+ description: amount === null
629
+ ? `Mint tokens to ${shortAccount(accounts, tag === 14 ? 2 : 1)}`
630
+ : `Mint ${decimals === null || decimals === undefined
631
+ ? `${amount.toString()} raw`
632
+ : formatTokenAmount(amount, decimals)} tokens to ${shortAccount(accounts, tag === 14 ? 2 : 1)}`,
633
+ accounts: withAccountLabels(accounts, tag === 14
634
+ ? ["Mint", "Destination", "Authority"]
635
+ : ["Mint", "Destination", "Authority"]),
636
+ details: amount
637
+ ? [{ label: "Raw amount", value: amount.toString() }]
638
+ : [],
639
+ });
640
+ }
641
+ if (tag === 8 || tag === 15) {
642
+ const amount = readU64LE(data, 1);
643
+ const decimals = tag === 15 ? data[9] : null;
644
+ return baseInstruction({
645
+ input,
646
+ instructionName: tag === 15 ? "BurnChecked" : "Burn",
647
+ title: "Burn tokens",
648
+ description: amount === null
649
+ ? `Burn tokens from ${shortAccount(accounts, 0)}`
650
+ : `Burn ${decimals === null || decimals === undefined
651
+ ? `${amount.toString()} raw`
652
+ : formatTokenAmount(amount, decimals)} tokens from ${shortAccount(accounts, 0)}`,
653
+ accounts: withAccountLabels(accounts, ["Account", "Mint", "Owner"]),
654
+ details: amount
655
+ ? [{ label: "Raw amount", value: amount.toString() }]
656
+ : [],
657
+ });
658
+ }
659
+ if (tag === 9) {
660
+ return baseInstruction({
661
+ input,
662
+ instructionName: "CloseAccount",
663
+ title: "Close token account",
664
+ description: `Close ${shortAccount(accounts, 0)} and send rent to ${shortAccount(accounts, 1)}`,
665
+ accounts: withAccountLabels(accounts, [
666
+ "Account",
667
+ "Destination",
668
+ "Authority",
669
+ ]),
670
+ });
671
+ }
672
+ if (tag === 17) {
673
+ return baseInstruction({
674
+ input,
675
+ instructionName: "SyncNative",
676
+ title: "Sync wrapped SOL",
677
+ description: `Sync wrapped SOL token account ${shortAccount(accounts, 0)}`,
678
+ accounts: withAccountLabels(accounts, ["Wrapped SOL account"]),
679
+ });
680
+ }
681
+ return baseInstruction({
682
+ input,
683
+ instructionName: "TokenInstruction",
684
+ title: "Token instruction",
685
+ description: `${programName(toAddress(input.programId))} instruction ${tag ?? "unknown"}`,
686
+ accounts,
687
+ });
688
+ }
689
+ function decodeMemoInstruction(input, accounts) {
690
+ const decoded = decodeMessagePayload(input.data ? normalizeBytes(input.data) : Buffer.alloc(0));
691
+ return baseInstruction({
692
+ input,
693
+ instructionName: "Memo",
694
+ title: "Memo",
695
+ description: decoded.value,
696
+ accounts,
697
+ details: [{ label: "Memo", value: decoded.value }],
698
+ });
699
+ }
700
+ function decodeSmartAccountInstruction(input, accounts) {
701
+ const data = input.data ? normalizeBytes(input.data) : Buffer.alloc(0);
702
+ const definition = SMART_ACCOUNT_INSTRUCTIONS_BY_DISCRIMINATOR.get(discriminatorKey(Array.from(data.slice(0, 8))));
703
+ if (!definition) {
704
+ return null;
705
+ }
706
+ const labeledAccounts = withAccountLabels(accounts, definition.accountLabels);
707
+ const details = [
708
+ { label: "Instruction", value: definition.instructionName },
709
+ ];
710
+ if (definition.instructionName === "UseSpendingLimit") {
711
+ const amount = readU64LE(data, 8);
712
+ const decimals = data[16];
713
+ if (amount !== null && decimals !== undefined) {
714
+ details.push({ label: "Amount", value: formatTokenAmount(amount, decimals) }, { label: "Raw amount", value: amount.toString() }, { label: "Decimals", value: decimals.toString() });
715
+ }
716
+ }
717
+ if (definition.instructionName === "ExecuteTransactionSync" ||
718
+ definition.instructionName === "ExecuteTransactionSyncV2") {
719
+ const accountIndex = data[8];
720
+ const signerCount = data[9];
721
+ if (accountIndex !== undefined) {
722
+ details.push({ label: "Vault index", value: accountIndex.toString() });
723
+ }
724
+ if (signerCount !== undefined) {
725
+ details.push({ label: "Signer count", value: signerCount.toString() });
726
+ }
727
+ }
728
+ return baseInstruction({
729
+ input,
730
+ instructionName: definition.instructionName,
731
+ title: definition.title,
732
+ description: smartAccountDescription(definition, labeledAccounts, data),
733
+ accounts: labeledAccounts,
734
+ details,
735
+ });
736
+ }
737
+ function smartAccountDescription(definition, accounts, data) {
738
+ if (definition.instructionName === "ApproveProposal") {
739
+ return `Approve proposal ${shortAccount(accounts, 2)} as signer ${shortAccount(accounts, 1)}`;
740
+ }
741
+ if (definition.instructionName === "RejectProposal") {
742
+ return `Reject proposal ${shortAccount(accounts, 2)} as signer ${shortAccount(accounts, 1)}`;
743
+ }
744
+ if (definition.instructionName === "CancelProposal") {
745
+ return `Cancel proposal ${shortAccount(accounts, 2)} as signer ${shortAccount(accounts, 1)}`;
746
+ }
747
+ if (definition.instructionName === "ExecuteTransaction") {
748
+ return `Execute transaction ${shortAccount(accounts, 2)} for proposal ${shortAccount(accounts, 1)}`;
749
+ }
750
+ if (definition.instructionName === "ExecuteSettingsTransaction") {
751
+ return `Execute settings transaction ${shortAccount(accounts, 3)} for proposal ${shortAccount(accounts, 2)}`;
752
+ }
753
+ if (definition.instructionName === "UseSpendingLimit") {
754
+ const amount = readU64LE(data, 8);
755
+ const decimals = data[16];
756
+ const formattedAmount = amount !== null && decimals !== undefined
757
+ ? formatTokenAmount(amount, decimals)
758
+ : "tokens";
759
+ return `Use spending limit to send ${formattedAmount} to ${shortAccount(accounts, 4)}`;
760
+ }
761
+ return definition.title;
762
+ }
763
+ function decodeFallbackInstruction(input, accounts) {
764
+ const programId = toAddress(input.programId);
765
+ const knownProgramName = programName(programId);
766
+ const title = KNOWN_PROGRAMS[programId]
767
+ ? `${knownProgramName} instruction`
768
+ : "Unknown program instruction";
769
+ return baseInstruction({
770
+ input,
771
+ instructionName: "UnknownInstruction",
772
+ title,
773
+ description: KNOWN_PROGRAMS[programId]
774
+ ? `${knownProgramName} instruction`
775
+ : `Instruction to ${truncateAddress(programId)}`,
776
+ accounts,
777
+ });
778
+ }
779
+ export function decodeSolanaInstruction(input) {
780
+ const programId = toAddress(input.programId);
781
+ const accounts = normalizeAccounts(input.keys);
782
+ const instruction = createInstruction(input);
783
+ if (programId === SystemProgram.programId.toBase58()) {
784
+ return (decodeSystemInstruction(input, instruction, accounts) ??
785
+ decodeFallbackInstruction(input, accounts));
786
+ }
787
+ if (programId === ComputeBudgetProgram.programId.toBase58()) {
788
+ return (decodeComputeBudgetInstruction(input, instruction, accounts) ??
789
+ decodeFallbackInstruction(input, accounts));
790
+ }
791
+ if (programId === AddressLookupTableProgram.programId.toBase58()) {
792
+ return (decodeAddressLookupTableInstruction(input, instruction, accounts) ??
793
+ decodeFallbackInstruction(input, accounts));
794
+ }
795
+ if (programId === ASSOCIATED_TOKEN_PROGRAM_ID.toBase58()) {
796
+ return decodeAssociatedTokenInstruction(input, accounts);
797
+ }
798
+ if (programId === TOKEN_PROGRAM_ID.toBase58() ||
799
+ programId === TOKEN_2022_PROGRAM_ID.toBase58()) {
800
+ return (decodeSplTokenInstruction(input, accounts) ??
801
+ decodeFallbackInstruction(input, accounts));
802
+ }
803
+ if (programId === MEMO_PROGRAM_ID || programId === MEMO_LEGACY_PROGRAM_ID) {
804
+ return decodeMemoInstruction(input, accounts);
805
+ }
806
+ if (programId === SMART_ACCOUNT_PROGRAM_ID) {
807
+ return (decodeSmartAccountInstruction(input, accounts) ??
808
+ decodeFallbackInstruction(input, accounts));
809
+ }
810
+ return decodeFallbackInstruction(input, accounts);
811
+ }
812
+ function decodeCompiledInstruction(args) {
813
+ const accountKeys = args.message.getAccountKeys();
814
+ const programId = accountKeys.get(args.instruction.programIdIndex);
815
+ if (!programId) {
816
+ return baseInstruction({
817
+ input: {
818
+ programId: `Unknown account #${args.instruction.programIdIndex}`,
819
+ data: args.instruction.data,
820
+ },
821
+ instructionName: "UnresolvedInstruction",
822
+ title: "Unresolved instruction",
823
+ description: "Instruction program is loaded from an address lookup table that was not included with the transaction.",
824
+ warnings: [
825
+ "Address lookup table accounts are required for full decoding.",
826
+ ],
827
+ });
828
+ }
829
+ const keys = args.instruction.accountKeyIndexes.flatMap((accountIndex) => {
830
+ const pubkey = accountKeys.get(accountIndex);
831
+ if (!pubkey) {
832
+ return [];
833
+ }
834
+ return [
835
+ {
836
+ pubkey,
837
+ isSigner: args.message.isAccountSigner(accountIndex),
838
+ isWritable: args.message.isAccountWritable(accountIndex),
839
+ },
840
+ ];
841
+ });
842
+ const decoded = decodeSolanaInstruction({
843
+ programId,
844
+ keys,
845
+ data: args.instruction.data,
846
+ });
847
+ if (keys.length !== args.instruction.accountKeyIndexes.length) {
848
+ return {
849
+ ...decoded,
850
+ warnings: [
851
+ ...decoded.warnings,
852
+ "Some accounts are loaded from address lookup tables and could not be resolved.",
853
+ ],
854
+ };
855
+ }
856
+ return decoded;
857
+ }
858
+ export function decodeSolanaTransaction(input) {
859
+ const bytes = normalizeBytes(input);
860
+ const rawTransactionBase64 = bytes.toString("base64");
861
+ try {
862
+ const transaction = VersionedTransaction.deserialize(bytes);
863
+ if (transaction.version !== 0) {
864
+ throw new Error("Only v0 versioned transactions are decoded here.");
865
+ }
866
+ const message = transaction.message;
867
+ return {
868
+ version: "v0",
869
+ rawTransactionBase64,
870
+ error: null,
871
+ instructions: message.compiledInstructions.map((instruction) => decodeCompiledInstruction({
872
+ message,
873
+ instruction,
874
+ })),
875
+ };
876
+ }
877
+ catch {
878
+ // Fall through to legacy transaction decoding.
879
+ }
880
+ try {
881
+ const transaction = Transaction.from(bytes);
882
+ return {
883
+ version: "legacy",
884
+ rawTransactionBase64,
885
+ error: null,
886
+ instructions: transaction.instructions.map((instruction) => decodeSolanaInstruction({
887
+ programId: instruction.programId,
888
+ keys: instruction.keys,
889
+ data: instruction.data,
890
+ })),
891
+ };
892
+ }
893
+ catch (error) {
894
+ return {
895
+ version: "unknown",
896
+ rawTransactionBase64,
897
+ instructions: [],
898
+ error: error instanceof Error
899
+ ? error.message
900
+ : "Failed to decode Solana transaction",
901
+ };
902
+ }
903
+ }
904
+ export function decodeMessagePayload(input) {
905
+ const bytes = normalizeBytes(input);
906
+ try {
907
+ const text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
908
+ if (/^[\x20-\x7E\n\r\t]+$/.test(text)) {
909
+ return { value: text, encoding: "utf8" };
910
+ }
911
+ }
912
+ catch {
913
+ // Fall back to hex below.
914
+ }
915
+ return { value: bytesToHex(bytes), encoding: "hex" };
916
+ }
917
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@loyal-labs/solana-instruction-decoder",
3
+ "version": "0.1.1",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "default": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "typecheck": "tsc --noEmit",
20
+ "build": "tsc -p tsconfig.build.json",
21
+ "clean": "rm -rf dist",
22
+ "test": "bun test src"
23
+ },
24
+ "dependencies": {
25
+ "@solana/spl-token": "^0.4.13",
26
+ "@solana/web3.js": "^1.98.0",
27
+ "buffer": "^6.0.3"
28
+ },
29
+ "devDependencies": {
30
+ "@types/bun": "latest",
31
+ "typescript": "^5"
32
+ },
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/loyal-labs/loyal-app.git",
37
+ "directory": "packages/solana-instruction-decoder"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ }
42
+ }