TokenToolHub Solana Transaction Intelligence Guide

Solana Transaction Decoder: Read Instructions, Fees, and Token Moves

A Solana transaction decoder turns a transaction signature into a readable account of the signers, message accounts, program instructions, inner cross-program calls, SOL and SPL token movements, compute usage, fees, authority changes, failures, and final wallet outcome. Solana transactions often involve many accounts and several programs in one atomic execution, so a simple explorer summary can hide the route that produced the result. A reliable decode begins with the exact signature and cluster, reconstructs every account index, identifies each program, follows inner instructions in execution order, and reconciles pre-transaction state with the final balances and status.

TL;DR

  • The value commonly called a Solana transaction ID is the first transaction signature used to locate the signed message and its execution metadata.
  • Always verify the cluster or network context. Mainnet, devnet, testnet, and local environments maintain separate transaction histories.
  • The message lists account keys and compact instructions. Versioned transactions can load additional writable and read-only addresses from Address Lookup Tables.
  • Each instruction identifies a program, references accounts by index, and carries program-specific data. Human-readable decoding requires the correct program interface, IDL, or verified instruction layout.
  • Inner instructions are produced when one program invokes another. They are essential for understanding swaps, token-account creation, wrapped SOL, routers, aggregators, staking systems, and authority changes.
  • Pre- and post-balance arrays reveal SOL changes, while token-balance metadata and token instructions reveal SPL movements. The fee payer's SOL change also includes network fees and possible account-rent effects.
  • Associated token accounts, temporary token accounts, and wrapped SOL can create several movements that belong to one user action.
  • Solana fees include a signature-based base fee and an optional prioritization fee. Compute Budget instructions can set the requested compute-unit limit and unit price.
  • A successful status means the transaction completed without an uncaught runtime error. It does not prove that the route, token, authority change, or economic result was safe.
  • After decoding, scan material wallets and token mints, verify any authority or delegate change, and preserve the signature, logs, account roles, and balance evidence.
Critical distinction A Solana signature identifies one transaction, but the visible top-level instruction may describe only the entry point.

A wallet can call an aggregator that invokes several swap programs, creates token accounts, wraps SOL, transfers tokens, closes temporary accounts, and pays a priority fee in one atomic transaction. Decode the message, account list, top-level instructions, inner instructions, logs, and balance changes together before deciding what happened.

What a Solana transaction signature is

A Solana transaction contains one or more Ed25519 signatures followed by a message. The message defines the account addresses, recent blockhash, instruction list, and, for versioned messages, references to Address Lookup Tables. The signature commonly pasted into an explorer is the first signature in the transaction's signatures array and acts as the transaction identifier used for lookup.

The signature proves that the required signer associated with that position approved the exact serialized message. If any signed field changes, including an account, instruction, recent blockhash, amount, or program data, the signature is no longer valid for the modified message.

Where to find the signature

Wallet activity screens usually provide a view-on-explorer or copy-signature action after submission. Exchanges, bridges, payment services, launchpads, staking interfaces, and decentralized applications may also expose the signature in their transaction history. Copy the complete base58 value rather than a shortened display.

Some applications show several identifiers. A bridge may show a source signature, destination signature, message ID, or claim ID. A swap aggregator may show an order reference alongside the blockchain signature. Confirm which value is the actual Solana transaction signature before decoding.

Pending, confirmed, and finalized context

A submitted transaction can first appear at a low commitment level and later reach stronger confirmation. Explorer interfaces may use processed, confirmed, or finalized terminology. These labels describe how much cluster agreement exists around the block, not whether the user benefited from the transaction.

The runtime status is separate. A transaction can be finalized and failed, or finalized and successful. Always read both confirmation context and the execution error field.

Cluster context is part of the lookup

Solana mainnet, devnet, testnet, and private or local clusters maintain separate ledgers. The signature itself does not provide a convenient human-readable network label. Determine the cluster from the wallet, application, RPC endpoint, or explorer URL that originated the transaction.

A signature that returns no result on mainnet may belong to devnet, may be too old for the chosen RPC provider, may have been dropped before confirmation, or may have been copied incorrectly.

One transaction can require several signers

The message header states how many account keys must sign. Common transactions require only the fee payer, but multisig, nonce, authority, or program workflows can require additional signatures. The signature array corresponds to the required signer keys in message order.

A decoder should identify every required signer and avoid assuming that the first signer is the only authority involved. The first account is normally the fee payer, but another signer may authorize a token-account owner change, stake action, program deployment, or multisig-controlled instruction.

Why Solana transactions are harder to read than simple transfers

A basic SOL transfer can be straightforward: one signer, one System Program transfer instruction, one recipient, and a predictable balance change. Real applications are more complex because Solana composes programs and accounts explicitly inside the transaction message.

Accounts are passed explicitly

Solana programs do not freely read arbitrary global state by default. Each instruction receives the accounts it is allowed to access, including whether each account is writable and whether it signed. This produces long account lists that can include wallets, program-derived addresses, token accounts, mints, pools, vaults, authorities, system programs, sysvars, and program IDs.

Instructions use compact indexes

Compiled instructions usually reference account positions rather than repeating full addresses. The program ID is also referenced by index. A decoder must reconstruct the complete account-key list before it can map the instruction to actual addresses.

One program can invoke another

Cross-program invocations let one program call another during execution. A swap aggregator may invoke a market program, which invokes the Token Program for transfers. An NFT marketplace may invoke a royalty program, token program, system program, and metadata program. These calls appear as inner instructions and log entries rather than separate signed transactions.

Versioned messages can use Address Lookup Tables

Versioned transactions can reduce message size by referencing addresses stored in Address Lookup Tables. The static account-key list alone is therefore incomplete. Loaded writable addresses and loaded read-only addresses must be appended in the correct order before resolving instruction indexes.

Program data is not self-describing

Instruction data is a byte sequence defined by the target program. Anchor programs often use an eight-byte discriminator followed by serialized arguments, while native Rust and custom programs can use different layouts. Without an IDL, verified interface, source, or known parser, the data may remain partially decoded.

Balance changes include operational accounts

A transaction can create an associated token account, fund rent-exempt storage, wrap SOL, close a temporary account, return lamports, mint a receipt token, and pay network fees. The wallet's apparent SOL decrease may therefore include several causes beyond the user-facing amount.

Atomic success can conceal a harmful result

Solana transactions are atomic at the outer transaction level. If an uncaught instruction error occurs, normal state changes are rolled back. A successful transaction, however, can still execute an unwanted authority change, transfer tokens to the wrong address, accept a poor swap, delegate account control, or interact with a malicious program exactly as signed.

Step by step: paste the signature and verify cluster context

A transaction decoder is only as reliable as its input and network context. Follow a repeatable workflow that begins with the exact signature and ends with a documented practical consequence.

1

Copy the full signature

Use the value supplied by the originating wallet, exchange, bridge, dapp, or trusted explorer.

2

Select the cluster

Confirm mainnet, devnet, testnet, or the private environment where the message was submitted.

3

Confirm identity

Match signers, approximate time, wallet activity, program, and expected assets before interpreting the result.

4

Resolve the message

Expand static account keys and Address Lookup Table entries, then classify signer and writable roles.

5

Decode execution

Parse top-level instructions, inner CPIs, program logs, compute usage, errors, and execution order.

6

Reconcile outcomes

Compare pre- and post-SOL balances, SPL token balances, account creation, closure, and authority state.

7

Follow the evidence

Scan involved wallets and mints, save the record, monitor unresolved actions, or stop further interaction.

Confirm the transaction belongs to the expected wallet

Compare the required signers and fee payer with the wallet that claims to have sent the transaction. In relayed or third-party fee-paid workflows, the outer fee payer may differ from the logical user, so inspect program-specific signer evidence and instruction accounts before concluding that the wrong wallet acted.

Confirm the expected application or program

Wallet interfaces can display an application name while the transaction calls a router, Action endpoint, smart-wallet program, launchpad, or aggregator. The user-facing brand and the top-level program address are not always identical. Verify known program IDs and trace any router or proxy-like indirection.

Preserve the original signing prompt

Screenshots or wallet simulation details can provide the intended action, amounts, recipient, network, and warnings that appeared before signing. Comparing the prompt with the confirmed message helps identify address substitution, hidden account authority, changed route data, or an action the user misunderstood.

Do not connect a wallet to decode public data

A confirmed signature is public ledger data. A read-only decoder does not need a seed phrase, private key, recovery code, wallet password, or new signature. Avoid any site that demands secret material before displaying public transaction details.

Signers, account keys, writable accounts, and Address Lookup Tables

The account list is the foundation of Solana transaction interpretation. Every compiled instruction points into this list. If account indexes are mapped incorrectly, program IDs, token accounts, authorities, vaults, and recipients can all be misidentified.

Message header roles

The message header records how many account keys must sign and how many signed and unsigned accounts are read-only. From those counts, a decoder can classify the static keys into four broad groups: writable signers, read-only signers, writable non-signers, and read-only non-signers.

The fee payer is generally the first writable signer. It pays the transaction fee and may also fund account creation or temporary balances. Another signer can authorize a stake operation, token authority change, nonce use, or multisig action.

Writable does not mean owner

A writable account can have its lamports or data modified during execution. That flag does not prove that the signer owns the account, controls the program, or receives assets. Program-derived addresses and vaults are often writable without possessing a private key.

Read-only accounts still matter

Read-only accounts can supply program code, mint information, price data, sysvar state, configuration, or reference data. A read-only program ID can control the instruction's execution even though its account data is not modified by that call.

Program-derived addresses

Program-derived addresses, commonly called PDAs, are deterministic addresses controlled through program logic rather than ordinary private keys. A program can sign for its PDA during a cross-program invocation when the correct seeds and bump are supplied.

A decoder should distinguish a PDA from an externally controlled wallet. Treating every non-signer account as a passive wallet can produce incorrect ownership and counterparty claims.

Address Lookup Tables

A version 0 message can reference an Address Lookup Table account and arrays of one-byte indexes. At runtime, those indexes load full addresses into writable and read-only groups. RPC transaction metadata can expose the resolved loaded addresses.

The effective account list for instruction resolution is built from the message's static account keys followed by loaded writable addresses and then loaded read-only addresses. A decoder that ignores this expansion will map account indexes incorrectly in complex versioned transactions.

Lookup tables improve capacity, not trust

Address Lookup Tables let transactions reference more accounts within Solana's transaction-size constraints. The table does not verify that an address is safe or belongs to the protocol shown by an interface. Resolve every loaded address and classify it like any other account.

Account labels require confidence

Explorers and analytics providers may label accounts as exchange wallets, program vaults, routers, pools, treasuries, or known authorities. Labels can be verified, inferred, stale, or absent. Preserve the full address and separate provider attribution from direct on-chain role evidence.

Account role What the message establishes What still requires interpretation Decoder action
Writable signer The account signed and can be modified during execution. Whether it is the fee payer, user, authority, multisig member, or temporary signer. Match it to instruction roles, fees, and state changes.
Read-only signer The account signed but is not writable in the message. Which instruction required its authority. Trace signer use across top-level and inner instructions.
Writable non-signer The account can change but did not provide a normal transaction signature. Whether it is a PDA, token account, vault, recipient, pool, or state account. Identify owner program, instruction role, and balance delta.
Read-only non-signer The account is available for reading or program invocation. Whether it is code, configuration, mint data, a sysvar, or reference account. Resolve the program and semantic role.
Loaded address The address was supplied through a versioned message lookup table. Its complete role and trust relationship. Append in correct order before resolving instruction indexes.

Decode the complete account graph

Paste a Solana signature to resolve static and lookup-table addresses, signer and writable roles, program instructions, inner calls, token movements, fees, and final outcomes.

Program instructions and program IDs

A Solana transaction message contains compiled instructions. Each instruction points to one program ID, lists the account indexes supplied to that program, and carries an opaque data payload. Human-readable decoding requires all three components.

Program ID identifies executable code

The program ID is the address of the executable program receiving the instruction. Core programs include the System Program, Token Program, Token-2022 Program, Associated Token Account Program, Stake Program, Compute Budget Program, Address Lookup Table Program, and several loader or verification programs.

Application programs include exchanges, aggregators, lending markets, bridges, NFT systems, staking protocols, launchpads, games, governance systems, and custom smart contracts. Confirm the full program ID instead of relying only on a label or application logo.

Account order is program-specific

Programs interpret each supplied account according to the instruction layout. The first account might be a user authority in one program and a market state account in another. A decoder needs the program interface or known instruction definition to assign names such as payer, owner, source token account, destination token account, mint, pool vault, authority, or system program.

Instruction data formats vary

Native programs and SPL programs often use documented enum variants and binary layouts. Anchor programs commonly prefix instructions with an eight-byte discriminator derived from the instruction name, followed by Borsh-serialized arguments. Other programs may use custom discriminators, compact formats, or manually packed byte structures.

IDLs improve semantic decoding

An Interface Definition Language file can describe instruction names, arguments, account roles, custom types, events, and errors. An IDL matched to the correct program version can turn raw bytes into a readable method and parameter set.

An IDL is not automatically trustworthy merely because it is available. Confirm that it belongs to the exact deployed program and relevant upgrade version. Outdated or unofficial IDLs can decode bytes into plausible but incorrect values.

Parsed RPC instructions are selective

RPC providers can return human-readable parsed structures for supported core and SPL instructions. Custom programs usually remain partially decoded unless the explorer or decoder has a dedicated parser or IDL.

A reliable report distinguishes native RPC parsing, verified program-interface decoding, known signature decoding, and unresolved raw data.

Program ownership and upgrade authority

Program identity is not the same as immutability. Upgradeable Solana programs can have an upgrade authority capable of deploying new code. A transaction decoder explains the program that executed the transaction, while a separate program-risk review determines whether its code could later change.

Actions and Blinks still produce ordinary transactions

Solana Actions and Blinks can convert a link or interface action into a transaction for a wallet to inspect and sign. After submission, the signature should be decoded like any other Solana transaction. Verify the resulting message accounts and instructions rather than trusting the link text alone. The Solana Actions and Blinks guide explains this signing path and its security implications.

Inner instructions, cross-program invocations, and execution order

Inner instructions are generated when a program invokes another program during the execution of a top-level instruction. They are the practical key to understanding how routers, swap aggregators, staking systems, launchpads, wallets, bridges, and token utilities compose several programs into one atomic result.

Cross-program invocation

A program can invoke another program with a set of account references and instruction data. The called program can perform its own logic and may invoke further programs within the runtime's allowed call-depth limits. Signer and writable privileges flow into the invoked context but cannot be arbitrarily escalated beyond the outer transaction's authorization.

Inner instructions are grouped under top-level instructions

RPC transaction metadata commonly groups recorded inner instructions by the index of the top-level instruction that caused them. This makes it possible to say that top-level instruction two triggered a token-account creation, two token transfers, and a pool invocation.

The grouping is not always a full tree by itself. Program logs, invoke-depth markers, instruction order, account roles, and program-specific parsers help reconstruct which call invoked which child.

Execution order matters

Top-level instructions execute sequentially in message order. Inner instructions occur during their parent instruction. A transaction may first create a token account, then perform a swap, then close a temporary account. Reading the same instructions without order can produce the wrong explanation.

Program logs expose call depth and errors

Runtime logs commonly show when a program is invoked, which depth it entered, whether it succeeded, how many compute units remained, and where an error occurred. Programs can also emit custom log messages and structured events.

Logs are valuable but not infallible. They can be truncated, unavailable from a provider, intentionally vague, or difficult to attribute without the correct execution depth. Use them with instruction and balance evidence.

Program return data

A program can return a byte sequence during execution. RPC metadata may expose the program ID and base64-encoded return data from the last program that set it. Correct interpretation requires the program's return-data layout.

Atomicity and caught failures

An uncaught instruction error causes the entire transaction to fail and normal state changes to revert. A program can sometimes call another program, inspect a returned error, and continue according to its own logic. A successful outer transaction can therefore contain a handled internal failure or a route that skipped one optional branch.

Inner instructions are not separate transactions

Inner instructions do not have independent transaction signatures, block positions, or fee payers. They are execution steps produced by the signed transaction. Explorer language such as inner transaction should not be interpreted as a second independently authorized blockchain transaction.

Swap routing and MEV context

A decoded swap can reveal the actual pools, token accounts, route sequence, minimum output, and final asset changes. It cannot by itself reveal every off-chain routing decision, private bundle relationship, or competing transaction that influenced execution. The MEV on Solana guide explains priority competition, transaction ordering, slippage exposure, sandwich-style behavior, arbitrage, and other execution-context risks.

Solana transaction execution tree

The execution tree connects the signature and message to program activity and final state. On mobile devices, the same concept is presented as stacked cards so labels remain readable without horizontal scrolling.

Solana Transaction Execution Tree A transaction signature resolves to a message and account list, top-level instructions, inner cross-program invocations, balance changes, and final status. Solana Transaction Execution Tree Decode authorization, account resolution, program execution, asset effects, and final status as one evidence chain. 1. Transaction signature Signed message lookup, cluster context, required signers and fee payer 2. Message and accounts Header, static keys, recent blockhash, lookup-table addresses, writable roles Who can sign, read, and change state? 3. Top-level instructions Program indexes, account indexes, data, Compute Budget settings and action order What did the wallet directly request? 4. Inner CPIs Token transfers, ATA creation, pools, vaults, wrapped SOL and nested programs How was the request executed? 5. Balance and authority changes SOL deltas, SPL movements, mints, burns, delegates, owners, closes and rent returns What changed economically or operationally? 6. Final status and consequence Success or error, fees, compute consumed, assets received, authority left, next action Was the outcome expected and acceptable?
1

Signature and cluster

Locate the signed message, confirm network context, required signers, and fee payer.

2

Message and account graph

Resolve static keys, lookup-table addresses, signer roles, writable state, and owner programs.

3

Top-level instructions

Identify program IDs, account indexes, data, Compute Budget settings, and action order.

4

Inner cross-program calls

Follow token transfers, associated accounts, pools, vaults, wrapped SOL, and nested programs.

5

Balance and authority changes

Reconcile SOL, SPL tokens, mints, burns, delegates, ownership, closes, and rent returns.

6

Final status and next action

Explain success or error, fees, compute use, wallet consequence, unresolved evidence, and follow-up.

SOL balance changes and fee-adjusted interpretation

Solana transaction metadata commonly includes preBalances and postBalances arrays measured in lamports. Each position corresponds to the resolved account-key list. Subtracting the pre-balance from the post-balance produces the raw SOL change for that account.

Raw balance delta

A negative delta means the account ended with fewer lamports. A positive delta means it ended with more. The cause can be a direct System Program transfer, a network fee, account creation, rent-exempt funding, account closure, a wrapped-SOL operation, a program payment, or several effects combined.

The fee payer requires adjustment

The fee payer's post-balance is reduced by the transaction fee even when the user-facing action sends no SOL. To estimate the fee payer's economic transfer separately, add the network fee back to its raw delta and then account for any rent or temporary-account funding.

A decoder should avoid labeling the entire decrease as a transfer to another wallet. The fee field, System Program instructions, account creation, and account closure must be reconciled.

Account creation can move SOL without a payment

Creating a token account, program account, stake account, nonce account, or other state account normally requires lamports. Those lamports fund the new account and may satisfy rent-exemption requirements. The created account remains controlled according to its owner program and authority structure.

Closing an account returns lamports

When a closable account is closed, its remaining lamports are transferred to a designated destination. A wallet can therefore receive SOL at the end of a token-account cleanup or wrapped-SOL workflow even though the primary action was a swap or token transfer.

Direct transfers versus program-mediated transfers

A top-level System Program transfer is easy to identify. A program can also invoke the System Program internally. Trace both top-level and inner instructions before assigning the transfer to the user's direct intent.

Balance arrays do not explain ownership

A positive SOL delta at a program-derived address or vault does not mean a human received the funds. Identify the account owner program and role. A pool vault, bridge custody account, treasury PDA, or temporary account can receive SOL as part of protocol execution.

Fee-payer action delta = post balance − pre balance + network fee ± account-funding and closure effects

SPL token movements and token-balance reconciliation

SPL token balances live in token accounts rather than directly in the wallet's system account. A token movement therefore involves a mint, source token account, destination token account, owner authorities, and the Token Program or Token-2022 Program.

Pre- and post-token balances

RPC transaction metadata can provide preTokenBalances and postTokenBalances. Entries commonly include the account index, mint, owner where available, token program ID, decimals, raw amount, and a user-interface amount representation.

Match entries by account index and mint. An account can appear only in the pre-state if it was closed, only in the post-state if it was created, or in both if its balance changed. Missing metadata should be treated as a coverage limitation rather than proof that no token moved.

Token instruction evidence

Standard Token Program instructions such as Transfer, TransferChecked, MintTo, Burn, Approve, Revoke, SetAuthority, CloseAccount, FreezeAccount, and ThawAccount provide direct semantic evidence when parsed correctly.

TransferChecked includes the mint and decimals context, while a basic Transfer relies on the token-account state. A decoder should identify whether the original Token Program or Token-2022 processed the instruction.

Owner-level movement differs from account-level movement

One wallet can control several token accounts for the same mint. A transaction can move tokens between two accounts owned by the same wallet, consolidate balances, or create a new associated token account without changing beneficial ownership.

Report both token-account addresses and owner authorities. Otherwise an internal wallet reorganization may be mistaken for a payment to another person.

Mints and burns

MintTo increases token supply and credits a destination token account when authorized by the mint authority. Burn decreases a token account balance and the mint's supply when authorized by the account owner or delegate.

Decode the mint, amount, destination or source account, authority, and token-program version. For Token-2022 assets, extensions can add controls that affect authority and transfer interpretation.

Token fees and withheld amounts

Token-2022 transfer-fee extensions can withhold part of a transfer. The source debit and destination credit may therefore differ. A safety report should identify the configured fee behavior and any withheld amount instead of calling the difference unexplained loss.

Decimals are display rules, not value guarantees

Token instructions store integer amounts. Decimals determine how wallets and explorers display those integers. Always tie the decimal value to the exact mint. A copied ticker or wrong mint can produce a believable symbol with entirely different economics.

Transfers can be intermediate rather than final

Swap routes move tokens among user accounts, pool vaults, intermediate vaults, fee accounts, and recipients. Group movements according to execution purpose before presenting a net wallet outcome.

Observed pattern Possible explanation Evidence required Common mistake
Source decreases and destination increases by the same amount Standard transfer or routed transfer step. Token instruction, mint, owners, program ID, and account roles. Assuming every intermediate vault is the final recipient.
Source decreases more than destination increases Transfer fee, protocol fee, burn, or multiple destinations. Inner instructions, Token-2022 extensions, fee accounts, and net balances. Calling the difference slippage without tracing it.
New account appears with a token balance Associated account creation, receipt-token mint, or new custody account. Account-creation instruction, owner authority, mint, and funding source. Treating account creation as a separate unknown wallet.
Account disappears after reaching zero Token account closed and lamports returned. CloseAccount instruction and SOL destination. Missing the rent return in the wallet outcome.
Supply increases and recipient balance rises Authorized minting or receipt-token creation. MintTo instruction, mint authority, amount, and stated protocol purpose. Calling every mint malicious without context.

Associated token accounts, wrapped SOL, and temporary accounts

Many confusing Solana transaction patterns come from token-account management rather than hidden payments. Associated token accounts and wrapped SOL are especially common in swaps, staking, bridging, and first-time token receipts.

Associated token accounts

An associated token account is a deterministic token account derived from an owner address, mint address, and token-program ID through the Associated Token Account Program. It provides a standard location where wallets and applications can expect to find a balance for that owner and mint.

The owner can still have additional non-associated token accounts for the same mint. A decoder should label an account as associated only after confirming the derivation and relevant token program.

Creation can be idempotent

Applications often use an idempotent associated-account creation instruction. If the correct account already exists, the instruction can proceed without creating a duplicate. If it does not exist, the payer funds its creation.

This explains why a swap or transfer transaction may include an Associated Token Account Program instruction before the actual token movement.

Wrapped SOL

Native SOL is represented as lamports in system accounts. The SPL token ecosystem uses a native mint representation commonly called wrapped SOL. To use SOL in token-program routes, an application can create or fund a token account for the native mint and synchronize its token amount with the lamports held by that account.

Closing the wrapped-SOL token account returns its lamports to the chosen destination, effectively unwrapping the balance. A single swap can therefore show SOL funding, SyncNative, token transfers, and CloseAccount.

Temporary wrapped-SOL accounts

Routers often create a temporary account, fund it with SOL, synchronize it, use it in a swap, and close it before the transaction ends. The temporary account may have a newly generated signer or a deterministic address controlled by the workflow.

A decoder should group these steps as one wrapping lifecycle rather than presenting the account as an unknown recipient that briefly received SOL.

Temporary token accounts

A protocol can create intermediate token accounts for settlement, escrow, route execution, or account isolation. Determine the owner authority, program, creation funding, token movement, and closure destination before assigning risk.

Rent and account cleanup

Account creation can reduce the payer's SOL balance, while closure can return lamports later in the transaction. Netting those effects is necessary for an accurate fee and transfer summary.

Temporary-account interpretation checklist

  • Identify which instruction created the account and who funded it.
  • Confirm the account owner program, token mint, and authority.
  • Track every token and SOL movement into and out of the account.
  • Check SyncNative when the account represents wrapped SOL.
  • Identify the closure instruction and lamport recipient.
  • Group creation, use, and closure into the user-facing action.
  • Do not label a short-lived account as a malicious counterparty without role evidence.

Fees, priority fees, compute units, and transaction status

Solana transaction costs combine signature verification fees with optional priority pricing. Compute usage describes runtime work, while priority pricing influences scheduling incentives. These concepts should be reported separately from swap fees, token fees, bridge charges, account funding, and economic slippage.

Base transaction fee

Solana charges a base fee according to the number of required signatures. The fee payer supplies the lamports. A transaction with several required signatures can therefore have a higher base fee than a single-signer transaction even when both execute similar instructions.

Compute units

Compute units measure the computational resources consumed by program execution. Different instructions require different amounts depending on program logic, account state, cryptographic work, logging, cross-program calls, and execution branches.

RPC metadata may expose the total compute units consumed. Program logs can also show consumption at particular call frames. Compute usage is useful for debugging and optimization, but high compute use does not automatically imply malicious behavior.

Compute Budget instructions

The Compute Budget Program can set a transaction's compute-unit limit and compute-unit price. These instructions normally appear near the beginning of the top-level instruction list so the runtime applies the requested budget before application execution.

A decoder should identify the requested limit, requested micro-lamport price per compute unit, and whether those instructions were present. Applications can over-request compute to improve reliability, but the priority-fee calculation depends on the requested limit rather than only the units ultimately consumed.

Prioritization fee

The optional prioritization fee provides an incentive for the current leader to schedule the transaction ahead of competing transactions. It is determined from the requested compute-unit limit and the selected compute-unit price under Solana's documented fee model.

A high priority fee can reflect congestion, a time-sensitive swap, a trading bot, an urgent liquidation, or an application using an aggressive fee estimate. It is context, not proof of MEV abuse or malicious intent.

Fee versus account funding

The fee field records network cost. A payer may lose additional SOL by funding associated token accounts, temporary accounts, stake accounts, or protocol deposits. A decoder should itemize those flows instead of calling the entire SOL decrease a fee.

Success and error state

Transaction metadata exposes an error value. A null error indicates successful outer execution. A non-null error identifies the instruction or runtime category that caused failure. The transaction remains on-chain as a failed attempt and the fee is still charged.

Instruction error indexes

An InstructionError can identify the top-level instruction index that failed and provide a built-in or custom error value. Connect that index to the decoded instruction, then use program logs and program-specific error definitions to explain the failure.

Custom program errors

Programs can return numeric custom errors. Anchor IDLs and source code often map those codes to names and messages. Without a verified mapping, report the numeric code and failing program rather than inventing a description.

Finality is not safety

A finalized successful transaction can still have transferred assets to an attacker, accepted severe price impact, delegated token authority, changed account ownership, or interacted with a dangerous program. Status and confirmation answer execution questions, not safety questions.

Field What it explains Common misreading Required context
Fee Network fee charged to the fee payer. Treating every SOL decrease as network fee. Account creation, deposits, transfers, closures, and refunds.
Compute units consumed Runtime work used by the transaction. Assuming high compute use means malicious code. Program type, CPI depth, cryptography, and expected workflow.
Compute-unit limit Maximum compute requested through the budget. Assuming the full limit was consumed. Compare with consumed units and application requirements.
Compute-unit price Priority price selected per requested compute unit. Treating it as the complete transaction fee. Requested limit, base fee, and current scheduling conditions.
Error Whether execution failed and the broad failure category. Assuming a null error means the action was beneficial. Instructions, balances, authorities, and user intent.

Authority changes, delegates, closes, mints, burns, swaps, staking, and failed actions

The most useful decoder output explains the practical action rather than listing instructions without context. The following patterns show how account roles, inner calls, and balance changes combine into a human-readable result.

Token-account delegate approval

The Token Program can approve a delegate to transfer or burn up to a specified amount from a token account. Decode the source token account, mint, owner authority, delegate address, allowance amount, and token-program version.

A delegate approval may create continuing authority without moving tokens immediately. Check whether a later Revoke instruction removed it and whether the delegate used any allowance.

Account-owner or close-authority change

SetAuthority can change several authority types, including token-account ownership, close authority, mint authority, or freeze authority depending on the target account. The decoded result must name the authority type, current authority, new authority, affected account, mint, and signer.

Changing the owner of a token account can transfer control over its balance even if no Transfer instruction appears. Changing close authority can let another party close a zero-balance or eligible account and collect its lamports.

Mint-authority and freeze-authority changes

A transaction can assign or revoke a mint's mint authority or freeze authority. These changes affect future supply or account control rather than an immediate user balance. Confirm the mint, authority type, previous authority, new authority, token program, and transaction signer.

Minting and burning

A MintTo instruction increases supply and credits a token account. A Burn instruction decreases a token-account balance and the mint supply. Protocols can use these instructions for receipt tokens, rewards, stable assets, bridged representations, or redemptions.

Explain the economic purpose and authority rather than labeling every mint or burn as suspicious. Unexpected issuance by an opaque authority requires separate token-risk analysis.

Closing token accounts

CloseAccount transfers remaining lamports to a destination and deallocates the token account when program conditions are satisfied. It is common after unwrapping SOL or cleaning up zero-balance accounts.

Report the closed account, token mint, owner or close authority, lamport destination, and whether the closure was part of a larger swap or withdrawal.

Simple SOL transfer

A straightforward transfer typically includes the System Program, source signer, destination, and lamport amount. Confirm fee-adjusted balance changes and whether any additional instructions changed the meaning.

SPL token transfer

Identify source token account, destination token account, mint, amount, decimals, owner authorities, delegate use, and Token Program version. Determine whether the destination was newly created and whether both token accounts belong to the same wallet.

Swap

A swap may include Compute Budget instructions, associated-account creation, wrapped-SOL lifecycle steps, an aggregator or router, one or more pool programs, token transfers, protocol fees, and account closure.

Report input asset and amount, output asset and amount, route, pools, minimum output where available, price impact evidence, fees, priority fee, recipient, and any remaining delegate or temporary authority.

Staking and liquid staking

Native stake workflows can create or fund a stake account, initialize its authorities, delegate it to a vote account, split or merge stake, deactivate it, and withdraw later. Liquid-staking protocols may instead deposit SOL into program vaults and mint a receipt token.

Distinguish the Stake Program from protocol-specific liquid staking. Identify stake authority, withdraw authority, validator vote account, lockup where present, receipt token, and withdrawal conditions.

NFT and compressed-asset actions

NFT transactions can create metadata, verify creators, transfer token accounts, invoke marketplace programs, or modify collection relationships. Compressed assets may rely on Merkle-tree state and program events rather than conventional token-account balances.

Coverage depends on support for the asset standard and program interface. Do not conclude that no asset moved solely because standard SPL token-balance metadata is empty.

Failed action

A failed transaction can still reveal the intended programs, accounts, amounts, route, authorities, and error. Normal state changes are rolled back, but the fee is charged and the signature remains public.

Decode the failing top-level instruction, relevant inner call, custom error, and logs before retrying. Increasing slippage or priority fee cannot fix an invalid authority, frozen account, wrong program account, missing signer, or unsupported token extension.

How to connect the decoded result to wallet and token risk analysis

A transaction decode explains what occurred. It does not automatically determine whether every involved wallet, token, program, or market is safe. Use the result to identify the specific entities that require a second layer of analysis.

Scan the signer when intent is disputed

Review the signing wallet's age, funding source, prior interactions, token holdings, delegates, exchange exposure, and related counterparties when a transaction appears unfamiliar. The wallet may be an ordinary user, bot, treasury, program authority, compromised account, or temporary operational signer.

Scan recipients and authority destinations

A token-account owner change, delegate approval, SOL transfer, fee payment, or account closure can direct value or control to an address that was not prominent in the interface. Scan that address when the relationship is material or unclear.

Scan the mint after unexpected token behavior

Use mint-level analysis when a transaction mints or burns supply, changes mint or freeze authority, interacts with Token-2022 extensions, transfers a copied ticker, or produces unexpected transfer fees. Confirm the exact mint rather than relying on its displayed symbol.

Review the program behind the action

Confirm whether the program is verified, upgradeable, widely used, recently deployed, or controlled by an opaque upgrade authority. A correctly decoded malicious instruction is still malicious. Execution transparency does not replace program-risk review.

Compare economic result with the signing prompt

A wallet may have shown an estimated output, recipient, program label, or warning. Compare those claims with the confirmed input and output assets, fee-adjusted SOL changes, token movements, account authorities, and route.

Watch for continuing authority

Delegates, close authorities, token-account ownership changes, smart-wallet permissions, stake authorities, metadata authorities, and program upgrade authorities can outlive the transaction. Record the new authority and determine whether it remains appropriate.

Investigate the wallets and mints exposed by the decode

Use the transaction result to identify the signer, recipient, authority, token mint, and counterparties that materially affect the wallet's continuing risk.

Coverage limits when IDLs or program labels are unavailable

A transaction signature is exact, but a human-readable explanation depends on data availability and program knowledge. A professional decoder should expose those limits rather than producing a confident label from incomplete evidence.

Unknown instruction layouts

A custom program can define any byte layout it accepts. Without source, an IDL, a documented interface, a verified parser, or reliable reverse engineering, the instruction name and arguments may remain unresolved.

The decoder can still report the program ID, account roles, raw data, execution logs, inner instructions, balance changes, and final status. Those facts may reveal the economic result even when the original method name is unknown.

Outdated IDLs

Upgradeable programs can change instructions, account structures, discriminators, and errors. An IDL from an earlier release can decode current data incorrectly. Historical transactions may also require the program interface active at the transaction's slot rather than the latest interface.

Program labels and wallet labels

Labels supplied by explorers and analytics services can improve interpretation, but they may be incomplete, community-maintained, inferred, or stale. Preserve full addresses and explain label confidence.

RPC history and archival limitations

Some RPC providers retain only a limited transaction history or require archival access for older signatures. Providers can differ in supported transaction versions, parsed instruction coverage, loaded-address reporting, log availability, and response limits.

The How RPC Nodes Work in Crypto guide explains why two interfaces can return different levels of data for the same public transaction.

Inner-instruction and log coverage

Inner-instruction recording or logs can be unavailable, null, truncated, or insufficient to reconstruct a complete tree. A summary based only on token balances may identify net movements while missing the precise route.

Current state versus historical state

A wallet, mint, program, lookup table, metadata account, or token account can change after the transaction. Current state should not be silently substituted for the state that existed at the transaction's slot.

Authority changes, program upgrades, closed accounts, and modified metadata are especially important. Historical interpretation should use slot-specific data where available.

Compressed assets and specialized standards

Compressed NFTs, state-compression systems, confidential token features, custom vault shares, and application-specific accounting may not produce ordinary token-balance records. Dedicated parsers and proof data can be required.

Off-chain intent and routing

The chain records the signed message and execution. It may not record every off-chain quote, Action response, order-flow agreement, user-interface promise, private bundle, API request, or social-engineering step that caused the user to sign.

Failure descriptions can remain numeric

Custom errors may be represented by a numeric code when no verified source or IDL maps the value. Report the failing program, instruction index, logs, and raw code without inventing a message.

Minimum evidence when full semantic decoding is unavailable

  • Transaction signature, cluster, slot, block time, and confirmation context.
  • Required signers, fee payer, static accounts, and loaded addresses.
  • Program IDs, instruction indexes, account indexes, and raw data.
  • Inner instructions and logs where available.
  • Pre- and post-SOL balances with network-fee adjustment.
  • Pre- and post-token balances with mint and owner context.
  • Error value, failed instruction index, and compute usage.
  • Clear unresolved labels for unknown methods, accounts, and intent.

How to read confirmed, observed, inferred, and unresolved findings

Decoding quality improves when direct transaction facts are kept separate from semantic interpretation. The signature is not uncertain, but the meaning assigned to an unfamiliar program can be.

Confirmed

Direct ledger and runtime evidence

Signatures, message accounts, program indexes, instruction bytes, fee, balances, error state, and recorded logs can be established directly.

Observed

Parsed execution and state changes

Token transfers, account creation, closure, minting, burning, CPI paths, and compute use can be observed when coverage supports them.

Inferred

Human intent and entity interpretation

Swap, bridge, phishing, developer, market-maker, or beneficial-owner classifications depend on program and wallet context.

Unresolved

Missing interface or historical evidence

Unknown IDLs, unsupported programs, unavailable logs, ambiguous labels, and incomplete historical state remain uncertain.

Confirmed success is not confirmed safety

A null execution error confirms successful outer execution. It does not prove the transaction matched the user's intention or that the involved program, token, delegate, or recipient is safe.

Observed movement is not complete intent

Tokens can move because of an owner signature, delegate, program authority, liquidation, vault redemption, bridge settlement, or protocol rule. Identify the authorization and instruction path before describing the action as a voluntary payment.

Inferred labels need supporting signals

A swap interpretation should include pools, input and output mints, token-account changes, and route instructions. A staking interpretation should include the Stake Program or protocol-specific receipt-token evidence. A phishing interpretation requires more than an unfamiliar address.

Unresolved evidence is a valid result

Unknown program data, missing logs, or an unsupported compressed-asset standard should remain visible. The absence of a parser is not evidence that the transaction was harmless.

Transaction meaning = signature + resolved message + program execution + balance outcome + continuing authority + evidence coverage

Five-minute Solana signature due-diligence workflow

This workflow is designed for a user who has a specific signature and needs to determine what happened before taking another action.

Minute one: verify the signature and cluster

  • Copy the complete signature from the originating wallet or service.
  • Confirm mainnet, devnet, testnet, or another cluster.
  • Match signers, time, application, and expected assets.
  • Record confirmation and execution status separately.

Minute two: reconstruct accounts and programs

  • Identify the fee payer and every required signer.
  • Expand Address Lookup Table entries for versioned transactions.
  • Classify writable, read-only, program, PDA, token-account, mint, and vault roles.
  • Verify program IDs rather than relying only on interface labels.

Minute three: follow instructions and CPIs

  • Decode top-level instructions in message order.
  • Group inner instructions beneath the correct parent instruction.
  • Use logs and invoke depth to reconstruct nested execution.
  • Mark unsupported instruction data as unresolved.

Minute four: reconcile balances and authority

  • Calculate fee-adjusted SOL changes.
  • Compare pre- and post-token balances by account and mint.
  • Identify associated-account creation, wrapped SOL, temporary accounts, and closure returns.
  • Review delegates, owner changes, minting, burning, freezing, and authority changes.

Minute five: determine consequence and follow-up

  • Explain what the signer requested and what the transaction actually changed.
  • Compare output with the original signing prompt or application quote.
  • Scan material wallets and token mints.
  • Save the signature, account graph, instruction decode, logs, fees, and unresolved evidence.

Worked examples: decoding specific Solana signatures

Example one: routed swap with wrapped SOL

A wallet signs one versioned transaction. The static message keys do not contain every pool and vault, so the decoder first appends addresses loaded from an Address Lookup Table. Two Compute Budget instructions set the compute-unit limit and price. The main aggregator instruction then triggers several inner calls.

The payer funds a temporary wrapped-SOL account, SyncNative updates its token amount, the route invokes two liquidity programs, the input moves through pool vaults, the output token reaches the wallet's associated token account, and the temporary wrapped-SOL account closes. The close returns remaining lamports to the payer.

A basic explorer view can show many transfers and a larger SOL decrease than the swap input. The complete decode separates the swap input, network fee, account funding, pool movements, output amount, and closure refund.

Example two: token delegate approval without a transfer

The transaction calls the Token Program and succeeds. No token balance changes. The parsed instruction is Approve, the source is the user's token account, and an unfamiliar address receives authority over a specified token amount.

The practical consequence is not no action. The token-account delegate can transfer or burn within the delegated allowance while the approval remains active. The next step is to identify the delegate, inspect later use, and revoke authority when it was not intended.

Example three: associated token account created before a transfer

The recipient has never held the mint. The transaction includes an idempotent associated-account creation instruction funded by the sender, followed by a TransferChecked instruction. The recipient's system account does not receive the SPL balance directly; the newly created associated token account does.

The sender's SOL decrease includes the transaction fee and account funding in addition to any other SOL movement. The token movement is a transfer to an account controlled by the recipient wallet, not a payment to the Associated Token Account Program.

Example four: failed swap caused by slippage protection

The message includes Compute Budget instructions, associated token accounts, and an aggregator call. The logs show pool execution beginning, followed by a custom program error corresponding to an output-threshold failure. The transaction status is failed.

Normal token and pool state changes are rolled back, but the fee remains charged. Raising the priority fee would not necessarily solve the output-threshold issue. The user should obtain a fresh route and examine price movement, liquidity, minimum output, and MEV exposure before retrying.

Example five: mint authority revoked

A Token Program SetAuthority instruction targets a mint and changes the MintTokens authority to none. The current mint state after the transaction confirms no mint authority. No holder balance changes occur.

The transaction materially changes future supply control even though a transfer-only summary would appear empty. A complete report identifies the mint, previous authority signer, authority type, new null authority, token program, and confirmation status.

Example six: stake delegation

The transaction creates and funds a stake account, initializes stake and withdraw authorities, and delegates the account to a validator vote address. Several accounts and sysvars appear in the message, but the key outcome is a new stake position controlled by the specified authorities.

The wallet's SOL decrease includes the stake principal, fee, and account funding. It should not be summarized as a direct payment to the vote account. The vote account identifies the validator delegation target, while the stake account holds the delegated stake state.

Example seven: liquid-staking deposit

A protocol-specific program receives SOL through inner System Program instructions and mints a liquid-staking receipt token through the Token Program. The wallet's SOL decreases and its receipt-token balance increases.

The decode should distinguish native Stake Program delegation from a liquid-staking protocol deposit. It should identify the protocol program, reserve or vault accounts, receipt mint, output amount, fee, and any temporary wrapped-SOL path.

Example eight: token account owner changed

A SetAuthority instruction changes AccountOwner for a token account. The token balance remains unchanged, so a movement-only analysis sees no loss. The new owner authority can now control the account's tokens.

This is a critical authority outcome. The decoder should highlight the affected account, mint, previous owner, new owner, signing authority, and whether the change matched the user's original intention.

Example nine: successful transaction with a handled inner failure

A custom router attempts an optional reward claim before completing a swap. The reward-program CPI returns an error that the router handles, and execution continues. The outer transaction succeeds and the swap balances settle correctly.

A status-only explanation says success. A full decoder reports that the primary swap succeeded while the optional reward claim failed. This distinction matters when the user expects both actions.

Example ten: Blink-generated transaction sends to an unexpected account

A user opens a link that describes a donation. The wallet signs a transaction built by an Action endpoint. The confirmed message transfers SOL to an address different from the public recipient shown on the page and also creates an unrelated token account.

The signature proves what the wallet authorized, not the accuracy of the page description. The user should preserve the signing screen, decode the recipient and account creation, and scan the destination wallet before further interaction.

Common mistakes when reading a Solana transaction

Using the wrong cluster

The signature lookup is cluster-specific. Confirm the environment from the originating wallet, dapp, or RPC endpoint before concluding that a transaction does not exist.

Reading only the first signer

The first signature commonly identifies the fee payer, but additional required signers can authorize authorities, nonce use, stake operations, or multisig-controlled actions.

Ignoring Address Lookup Tables

Versioned transactions can load many addresses outside the static key list. Instruction indexes are wrong until loaded writable and read-only addresses are resolved and appended correctly.

Assuming every listed account received funds

Accounts are listed because programs need them for reading, writing, verification, code execution, or authority. Many receive no assets at all.

Treating writable as signer or owner

Writable indicates that transaction execution can modify the account. It does not prove private-key control, beneficial ownership, or recipient status.

Stopping at top-level instructions

Swaps, bridges, staking, token transfers, and account operations frequently occur through inner CPIs. The entry instruction alone can conceal most of the asset path.

Calling every inner instruction a separate transaction

Inner instructions are nested execution steps inside one signed transaction. They do not have independent transaction signatures or fee payers.

Ignoring account creation and closure

Associated token accounts and temporary accounts can explain SOL funding, rent effects, wrapped SOL, and closure refunds. Without them, the fee and asset summary can be wrong.

Using token symbols instead of mint addresses

Symbols can be copied. Tie every SPL movement to the complete mint and token program.

Assuming success means safe

A successful transaction can transfer assets to an attacker, create a delegate, change account ownership, accept poor execution, or invoke a dangerous program exactly as signed.

Assuming failure means nothing happened

The fee is charged, the attempted instruction remains public, and the failure can reveal a compromised signing request or unsafe program relationship. Separate signatures or earlier authority changes can also remain relevant.

Calling the entire SOL decrease a fee

The decrease can include transfers, stake principal, protocol deposits, account funding, wrapped SOL, and fees. Reconcile each instruction and balance delta.

Trusting an IDL without matching the program version

An outdated or unofficial IDL can produce plausible but incorrect method and parameter names. Confirm the deployed program and historical version.

Replacing missing evidence with a guess

Unknown instruction data, missing logs, and unlabeled accounts should remain unresolved until better evidence is available.

Safer signing after transaction analysis

Transaction decoding is retrospective, but the lessons should improve future signing. Separate the wallet used for unfamiliar programs from long-term custody, read wallet simulation carefully, and reject requests whose accounts or authority changes do not match the intended action.

Use a limited-balance interaction wallet

Keep only the SOL and tokens needed for active interactions. A separate wallet limits the consequences of a malicious transaction, compromised application, dangerous delegate, or misunderstood authority instruction.

Verify the transaction before approving

Confirm the cluster, primary program, recipient, token mint, amount, and any authority or delegate change shown by the wallet. Be cautious when a simple action requests many unrelated writable accounts or unfamiliar programs.

Use hardware signing for higher-value wallets

A hardware wallet such as Ledger can isolate signing keys from the browser or phone used to access applications. It cannot determine whether the instruction data is economically safe, so review wallet simulation and verify critical addresses before approving on the device.

Never provide recovery secrets

A public transaction decoder, explorer, support agent, or analytics service does not need your seed phrase, private key, recovery words, or wallet password to inspect a confirmed signature.

Post-decode wallet checklist

  • Confirm every continuing delegate, owner, close authority, mint authority, and stake authority created or changed.
  • Scan unfamiliar recipient, authority, and fee wallets.
  • Analyze token mints involved in unexpected transfers, minting, freezing, or transfer fees.
  • Monitor bridge, stake, withdrawal, or claim workflows that continue after the decoded transaction.
  • Save screenshots of the signing prompt and the final decoded record.
  • Move long-term assets if the wallet signed an unexplained authority change or suspicious program interaction.
  • Use a fresh limited-balance wallet for future high-risk testing.

Conclusion: decode the signature as a complete state transition

A Solana transaction decoder should do more than attach a label to a signature. It should reconstruct the message, resolve static and lookup-table addresses, identify every signer and writable account, decode program instructions, follow inner cross-program invocations, and reconcile SOL, SPL tokens, account state, authorities, fees, compute use, and errors.

The signature identifies the signed message, but the message does not explain itself. Program IDs define which code received each instruction. Account indexes define the state and authority supplied to that code. IDLs and parsers translate instruction bytes when reliable interfaces are available. Logs and inner instructions reveal the execution route.

Balance evidence completes the economic picture. SOL deltas must be adjusted for the network fee, account funding, wrapped SOL, and closure returns. SPL movements must be tied to token accounts, owner authorities, exact mints, and the correct Token Program. A newly created account, temporary vault, or associated token account should not be mistaken for an unrelated recipient.

Authority instructions can matter more than transfers. Delegate approvals, account-owner changes, close authorities, mint authority, freeze authority, stake authority, and program permissions can create continuing control without an immediate asset movement. A successful status confirms execution, not safety.

Use the Solana Transaction Decoder for the specific signature, the Solana Wallet Risk Scanner for involved authorities and counterparties, and the Solana Token Scanner for mints exposed by the transaction. Use the RPC and MEV guides when data coverage or execution context requires deeper analysis.

No decoder can recover unavailable history, guarantee every provider label, or infer human intent from unknown program bytes with certainty. The correct approach is to preserve raw evidence, state decoding confidence, expose unresolved coverage, and explain the practical wallet consequence without overstating what the signature proves.

Turn a Solana signature into actionable evidence

Decode the account graph and execution tree, save the result, inspect involved wallets and mints, and monitor continuing authority or unresolved protocol outcomes.

FAQs

What is a Solana transaction signature?

A Solana transaction signature is an Ed25519 signature over the serialized transaction message. The first signature is commonly used as the transaction identifier for explorer and RPC lookup. The message contains account addresses, a recent blockhash, and compiled instructions.

What are inner instructions?

Inner instructions are instructions executed when one Solana program invokes another through a cross-program invocation. They occur inside the signed transaction and do not have independent transaction signatures or separate fee payers.

Why are so many accounts listed in one Solana transaction?

Solana instructions explicitly receive the accounts they may read, modify, invoke, or use as authorities. Complex transactions can include wallets, token accounts, mints, pools, vaults, PDAs, sysvars, programs, and lookup-table addresses.

What are compute units and priority fees?

Compute units measure execution resources. Compute Budget instructions can request a compute-unit limit and set a price per compute unit. The optional prioritization fee uses those requested settings to increase scheduling incentive during competition for block space.

Can a successful Solana transaction still be harmful?

Yes. Success means the transaction completed without an uncaught runtime error. It can still transfer assets to an attacker, create a delegate, change an authority, accept a poor swap, or interact with a malicious program exactly as signed.

How do I decode a Solana transaction?

Copy the full signature, select the correct cluster, resolve all static and lookup-table account addresses, decode top-level and inner instructions, review logs and errors, and reconcile pre- and post-SOL and token balances.

What is the difference between a signature and an instruction?

The signature authorizes the serialized transaction message. An instruction is one program call contained inside that message. One transaction can contain several top-level instructions and many inner cross-program invocations.

What is an Address Lookup Table?

An Address Lookup Table stores account addresses that versioned transactions can reference through compact indexes. A decoder must append the loaded writable and read-only addresses before resolving instruction account indexes.

Why does a Solana swap show many token transfers?

A router or aggregator can move assets through several pool vaults, temporary accounts, fee accounts, and intermediate mints. Group the transfers by route and compare the wallet's net input and output rather than treating each movement as a separate payment.

Why does my SOL balance decrease by more than the network fee?

The transaction may also transfer SOL, fund an associated token account, create a temporary account, wrap SOL, deposit into a protocol, or fund rent-exempt state. Account closure can later return some lamports.

What is an associated token account?

An associated token account is a deterministic token account derived for an owner, mint, and token program through the Associated Token Account Program. It is a standard balance location, although owners can also control other token accounts.

How is wrapped SOL shown in a transaction?

Wrapped SOL commonly appears as funding a token account for the native mint, a SyncNative instruction, token-program use during the action, and a CloseAccount instruction that returns remaining lamports to a destination.

Can a failed Solana transaction still charge a fee?

Yes. The cluster processed the signed message and executed it until the error occurred. Normal state changes are rolled back, but the network fee remains charged and the failed signature remains public.

How do I identify the instruction that failed?

Use the transaction error to identify the top-level instruction index, then match that index to the decoded instruction. Program logs, inner instructions, and a verified IDL or error table can explain the specific failure.

What does writable mean in a Solana transaction?

Writable means transaction execution may modify the account's lamports or data. It does not mean the account signed, belongs to the user, or received assets.

What is a program-derived address?

A program-derived address is a deterministic address controlled through program logic rather than a normal private key. Programs can sign for their PDAs during cross-program invocations using the correct derivation seeds.

Can a transaction decoder identify every custom program instruction?

No. Complete semantic decoding may require a verified IDL, documented interface, source code, or dedicated parser. Unknown instruction bytes should remain unresolved while the decoder still reports accounts, logs, balances, and status.

How do I know whether a token authority changed?

Look for Token Program or Token-2022 authority instructions such as SetAuthority, then identify the target account or mint, authority type, current authority signer, and new authority. Confirm the post-transaction state.

Does a token delegate approval move tokens immediately?

Not necessarily. An Approve instruction can grant another address limited transfer or burn authority without changing the current token balance. Review whether the delegate remains active or later uses the allowance.

Why might two explorers decode the same signature differently?

They may use different RPC providers, labels, IDLs, historical state, transaction-version support, parsers, or inner-instruction coverage. Compare raw addresses, instruction data, balances, logs, and stated confidence.

References and further learning

The following official documentation and diagnostic resources provide additional context on Solana messages, signatures, account keys, Address Lookup Tables, inner instructions, RPC transaction metadata, token accounts, fees, compute budgeting, and transaction introspection.


This TokenToolHub guide is educational research only. It is not investment advice, legal advice, compliance advice, cybersecurity assurance, or a forensic identity determination. Verify the cluster, signature, signers, account graph, program IDs, instruction interfaces, inner calls, balance changes, authorities, fees, status, and evidence coverage before acting on any transaction interpretation.

TH

Add TokenToolHub shortcut

Keep scanners, research tools, guides, and the community one tap away on this device.

On iPhone, open TokenToolHub in Safari, tap the Share icon, then choose Add to Home Screen.