Solana Inner Instructions and Program Calls
Use inner-instruction evidence to understand composed Solana execution, while preserving top-level instruction context and decoder coverage.

Overview
When translating these concepts into an integration, keep the scope described by the wallet history api with the result. The examples in wallet transaction history and smart contract event logs show how the same distinction affects neighbouring data questions.
A top-level Solana instruction can invoke another program. Those inner calls can explain token movements or other effects that are not obvious from the outer instruction label.
Keep the execution hierarchy
Record which outer instruction produced each inner-instruction group. Preserve program identity, account references and raw instruction bytes. A parsed label is useful only within the parser’s supported programs and versions. Missing parsed details should not be silently treated as an operation with no effects.
Worked example: a composed swap
A router instruction invokes programs that transfer two token assets. A view that reads only the outer instruction may show a generic program call. Inner instructions and balance metadata help explain the execution, while the final swap label remains a derived interpretation that should link back to the underlying instruction evidence.
Test parser boundaries
Include unsupported programs, failed execution and versioned transactions. Keep fees and account-lifecycle effects separate from token transfers. A decoder should expose partial interpretation when only some instructions are understood. Preserve undecoded bytes and account mappings so adding a parser later does not require pretending the original record was complete.
A practical acceptance test
Use a known outer program with an unsupported inner program, then reverse that arrangement. The parser should report which portions are understood in both cases. Verify that a generic outer label does not suppress supported inner transfer evidence, and that an unsupported inner instruction is retained rather than translated into an invented no-effect result.
Questions about the topic
Frequently asked questions
Is a parsed outer instruction always enough?
No. Program composition can place important effects in inner calls.
Does an unsupported parser mean no activity occurred?
No. It means interpretation is incomplete.
Standards & technical documentation
