Basic · practical evidence lab · ungraded
Read the transaction record
Practice moving from a transaction response to a narrow, evidence-backed conclusion. These three records are fictional teaching data, not real signatures or addresses. Work from the fields shown; no wallet, RPC request, signing, SOL, account, or internet connection is needed.
Safety: Never paste a recovery phrase or private key into a learning exercise. This page does not send or save your answers. The exercise does not identify a real person or prove why anyone signed.
Follow the evidence workflow
- 1 · Identify scopeCluster, commitment, signature
- 2 · Read executionCheck
meta.errand fee - 3 · Match accountsUse account keys and indices
- 4 · Bound the claimSeparate observation from identity
Case 1 · successful native SOL transfer
What amount reached the destination?
This fictional legacy transaction was read at finalized commitment. Its parsed instruction summary shows one System Program transfer from account 0 to account 1. All balance values are lamports. The transaction fee is paid by the fee payer in SOL.
{
"cluster": "Fictional Mainnet",
"commitment": "finalized",
"transaction": {
"message": {
"accountKeys": ["SENDER_AND_FEE_PAYER", "DESTINATION", "SYSTEM_PROGRAM", "COMPUTE_BUDGET_PROGRAM"],
"instructions": [
{"program": "computeBudget", "programId": "COMPUTE_BUDGET_PROGRAM", "parsed": {"type": "setComputeUnitLimit", "info": {"units": 200000}}, "stackHeight": 1},
{"program": "system", "programId": "SYSTEM_PROGRAM", "parsed": {"type": "transfer", "info": {
"source": "SENDER_AND_FEE_PAYER", "destination": "DESTINATION", "lamports": 200000000
}}, "stackHeight": 1}
]
}
},
"meta": {
"err": null,
"fee": 5000,
"preBalances": [1000000000, 50000000, 0, 0],
"postBalances": [799995000, 250000000, 0, 0]
}
}Your answers stay in this page and are not saved.
Reveal the worked example and limits
The sender decreases by 200,005,000 lamports. The 5,000-lamport fee is separate, leaving 200,000,000 lamports for the transfer. The destination increases by that same 200,000,000 lamports, or 0.2 SOL. This fictional response supports the stated account changes at the displayed cluster and commitment. It does not establish a person's real-world identity or intent.
Case 2 · failed instruction
Did the requested state change commit?
The second synthetic response contains a System Program transfer followed by a fictional program instruction. Instruction 1 fails, so the entire transaction's requested state changes roll back. The fee payer's balance falls by the reported network fee; the destination's balance does not change.
{
"cluster": "Fictional Devnet",
"commitment": "confirmed",
"transaction": {
"message": {
"accountKeys": ["SENDER_AND_FEE_PAYER", "DESTINATION", "SYSTEM_PROGRAM", "FICTIONAL_TEST_PROGRAM"],
"instructions": [
{"program": "system", "programId": "SYSTEM_PROGRAM", "parsed": {"type": "transfer", "info": {
"source": "SENDER_AND_FEE_PAYER", "destination": "DESTINATION", "lamports": 200000000
}}, "stackHeight": 1},
{"program": "fictionalTestProgram", "programId": "FICTIONAL_TEST_PROGRAM", "accounts": [], "data": "SYNTHETIC_FAILING_INSTRUCTION"}
]
}
},
"meta": {
"err": {"InstructionError": [1, {"Custom": 1}]},
"fee": 5000,
"preBalances": [1000000000, 50000000, 0, 1],
"postBalances": [999995000, 50000000, 0, 1]
}
}Your answers stay in this page and are not saved.
Reveal the worked example and limits
meta.err is not null, so the transaction's instruction execution failed. The destination remains at 50,000,000 lamports; the earlier requested transfer did not commit because the full transaction is atomic. The sender decreases by exactly the reported 5,000-lamport fee. Solana transaction fees can still be charged when execution fails. See the linked current fee documentation rather than assuming a fixed fee for a real transaction.
Case 3 · token-account evidence
Match the token balances to the right accounts.
This synthetic response uses a legacy message so every account key appears in one short list. accountIndex points into that transaction account list. Match the same mint and index across pre- and post-token balances; the token account's authority is not the same thing as its runtime program owner.
{
"cluster": "Fictional Devnet",
"commitment": "confirmed",
"transaction": {"message": {"accountKeys": [
"FEE_PAYER", "SOURCE_TOKEN_ACCOUNT", "SOURCE_AUTHORITY", "DESTINATION_TOKEN_ACCOUNT",
"DESTINATION_AUTHORITY", "EXAMPLE_MINT", "TOKEN_PROGRAM"
]}},
"meta": {
"err": null,
"fee": 5000,
"preBalances": [1000000000, 2039280, 50000000, 2039280, 50000000, 1461600, 1],
"postBalances": [999995000, 2039280, 50000000, 2039280, 50000000, 1461600, 1],
"preTokenBalances": [
{"accountIndex": 1, "mint": "EXAMPLE_MINT", "owner": "SOURCE_AUTHORITY", "programId": "TOKEN_PROGRAM", "amount": "10000000", "decimals": 6},
{"accountIndex": 3, "mint": "EXAMPLE_MINT", "owner": "DESTINATION_AUTHORITY", "programId": "TOKEN_PROGRAM", "amount": "1250000", "decimals": 6}
],
"postTokenBalances": [
{"accountIndex": 1, "mint": "EXAMPLE_MINT", "owner": "SOURCE_AUTHORITY", "programId": "TOKEN_PROGRAM", "amount": "7500000", "decimals": 6},
{"accountIndex": 3, "mint": "EXAMPLE_MINT", "owner": "DESTINATION_AUTHORITY", "programId": "TOKEN_PROGRAM", "amount": "3750000", "decimals": 6}
]
}
}Your answers stay in this page and are not saved.
Reveal the worked example and limits
Index 1 maps to the source token account and index 3 to the destination token account. Both entries use the same example mint. The source falls by 2,500,000 raw units and the destination rises by the same amount. Six decimals give 2.5 tokens. The fee is 5,000 lamports paid in SOL. The programId names the Token Program; the token-balance owner names each token authority. For versioned transactions, account-key resolution and loaded addresses add care; check the current RPC structures and supported transaction version.
Primary references · reviewed 2026-10-01
Verify the field definitions
- Solana RPC: getTransaction — response fields, commitment, and supported transaction version.
- Solana RPC JSON Structures — transaction metadata, balance arrays, token balance fields, and account indices.
- Solana Fee Structure — fee calculation and fees on failed transactions.
- Solana Tokens: Basics — token accounts, mint, and authority concepts.
The examples deliberately omit unrelated response fields. A real report should record the exact cluster, source, query time, signature, commitment, version support, and any missing fields. Do not treat an RPC response as proof of a person's identity, intent, or off-chain claim.