Every simulate call returns a LegibilityReport. Its JSON shape is stable across patch versions, safe to pipe into jq, render in a UI, or persist in a database for later review.
The first 88-char signature of the tx, or '(unsigned)' if the tx has no signatures. Used as a human-readable identifier in logs and UI.
fee_payer
string
Base58 pubkey of the first static account key in the message, which is always the fee payer by Solana convention.
uses_durable_nonce
boolean
True iff the first instruction is a System Program AdvanceNonceAccount. This is the only way the runtime permits durable-nonce transactions, so the detection is exact.
durable_nonce_warning
string | null
Human-readable warning emitted when uses_durable_nonce is true. Null otherwise.
instructions
DecodedInstruction[]
One entry per top-level instruction in the message, in on-wire order. Never empty for a well-formed transaction.
account_diffs
AccountDiff[]
Per-account state diffs from the simulation pre/post snapshots. Empty in offline mode or when no writable account changed.
token_transfers
TokenTransfer[]
Token transfer events synthesized from SPL Token / Token-2022 account layout in the pre/post diffs. Does not require a top-level Transfer instruction — CPI-only transfers are still captured.
overall_risk
RiskLevel
The merged verdict. One of: Low, Medium, High, Critical. See /docs/risk-model for the exact escalation rules.
human_summary
string[]
Ordered human-readable lines suitable for printing verbatim in a terminal or rendering as a list in a UI. Always non-empty.
simulation_logs
string[]
The logs field from simulateTransaction, or ['(offline mode — simulation skipped)'] in offline mode.
simulation_success
boolean
True if the simulation returned no error. Always true in offline mode.
simulation_error
string | null
The TransactionError formatted as a string, or null if the simulation succeeded.
DecodedInstruction
field
type
description
program_id
string
Base58 pubkey of the program the instruction targets.
program_name
string
Friendly name the decoder assigned: System Program, SPL Token, Token-2022, Squads v4, Jupiter v6, Drift v2, Kamino Lend, MarginFi v2, or Unknown.
instruction_name
string
Specific instruction the decoder matched: Transfer, AdvanceNonceAccount, config_transaction_execute, etc. For Unknown programs, this is also 'Unknown'.
summary
string
A one-sentence description of the instruction's effect, templated with account pubkeys where the decoder can resolve them.
accounts
string[]
The base58 pubkeys of every account referenced by this instruction's accounts index list, in order.
risk
RiskLevel
The per-instruction risk level. The classifier takes the max of every instruction's risk as the starting point for the overall verdict.
risk_reasons
string[]
Human-readable reasons the decoder attached to this risk level. May be empty for LOW-risk instructions.
AccountDiff
field
type
description
address
string
Base58 pubkey of the account that changed.
owner_before
string | null
Owning program of the account before the simulation.
owner_after
string | null
Owning program after the simulation. A change here is escalated to CRITICAL by the classifier.
lamports_before
number
Lamport balance before the simulation.
lamports_after
number
Lamport balance after the simulation.
lamports_delta
number
Signed delta (lamports_after - lamports_before). Large negative deltas escalate the overall verdict.
data_changed
boolean
Whether any byte of the account's data region changed.
data_len_before
number
Length of the data region before the simulation.
data_len_after
number
Length of the data region after the simulation.
TokenTransfer
field
type
description
mint
string
Base58 pubkey of the mint the transfer belongs to.
from
string
Source token account, or '?' if the source could not be determined from the diff alone.
to
string
Destination token account, or '?' if not determinable.
ui_amount
number
Raw amount as a floating-point value. Decimals are not yet applied — multiply client-side.
raw_amount
number
Raw amount in the mint's base units.
decimals
number
Mint decimals. Always zero in v0.1.0 — fetch from the mint account client-side if you need proper UI formatting.
RiskLevel
A four-variant enum serialized as one of the following exact strings: