---
title: JSON Reference
h1: Solana RPC JSON Structures
---

## Overview

Various Solana RPC methods return structured JSON objects with well-defined
fields and nested data.

This page documents the shared JSON data structures reused across Solana RPC
responses.

Start with the top-level structure returned by the RPC method you are using,
then follow the linked sections for any nested objects it contains.

| Reference              | Details                                                                                                                                                                                                                                                                                                                                                      |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Type definitions       | [`transaction-status-client-types`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs); [`rpc-client-types`](https://github.com/anza-xyz/agave/blob/v3.1.8/rpc-client-types/src/response.rs); [`account-decoder-client-types`](https://github.com/anza-xyz/agave/blob/v3.1.8/account-decoder-client-types/src/lib.rs) |
| Serialization behavior | [`transaction-status`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status/src/lib.rs); [`rpc`](https://github.com/anza-xyz/agave/blob/v3.1.8/rpc/src/rpc.rs)                                                                                                                                                                                   |

The sections below are grouped into top-level response objects and shared
structures. Each section begins with a reference table that links the structure
to the RPC method or parent structure, response path, and type definition.

## Top-Level Response Objects

### Confirmed Blocks

Block-oriented RPC methods such as `getBlock` return confirmed blocks in this
structure:

| Reference       | Details                                                                                                                          |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Returned by     | [`getBlock`](/docs/rpc/http/getblock); the `block` field in [`blockSubscribe`](/docs/rpc/websocket/blocksubscribe) notifications |
| Response path   | `result` in `getBlock`; `params.result.value.block` in `blockSubscribe`                                                          |
| Type Definition | [`UiConfirmedBlock`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L107-L123)         |

<CodeReference>

```jsonc !!
{
  // !hover previousBlockhash
  "previousBlockhash": "9gAzd1Mv43CptYG8cjy5bE7uNq6P9SFNZFTKToHcQHGD",
  // !hover blockhash
  "blockhash": "J8mfvgG5xJ1hfGVxcrJ9f3BwdYPuXNfY3cJzKMwHyFTe",
  // !hover parentSlot
  "parentSlot": 408671999,
  // !hover(1:54) transactions
  "transactions": [
    {
      // !hover(1:26) transactions.transaction
      "transaction": {
        "signatures": [
          "2sZrnsqbiPqTznPsnU33CBb1LVeqaMCxE1vsn4YGVnvFzkS684YAMFYFVZAQuQqhiEQNoNSpdMe54v1ppsBG7HCj"
        ],
        "message": {
          "accountKeys": [
            "9GHvMeJ4ZWuAX6sDGscFL1TBMszx2EehnrcTVUy4MZJQ",
            "GVYt3tbokX7mH4i86AA6Nh5hPiHEekercNZyNevviotL",
            "Vote111111111111111111111111111111111111111"
          ],
          "header": {
            "numReadonlySignedAccounts": 0,
            "numReadonlyUnsignedAccounts": 1,
            "numRequiredSignatures": 1
          },
          "instructions": [
            {
              "accounts": [1, 0],
              "data": "67MGnCUMzh8M6jYY5veq8MTkdaEKoxtaNUYE5m2uWtdMh4r9TSV22JarEohoXJtLZUCLR2bsuWxZcPstBTaf5fc72ceL3RAhWXLmMJeGgqdkUosgbpKw6yRWipuMWmsW34dm8vm868Fz3R3LXnQVJoVkUGxjQ5JsFSyRQQsK2woykd5dHoeCd38cniefmTjWgbhgt88UBm",
              "programIdIndex": 2,
              "stackHeight": 1
            }
          ],
          "recentBlockhash": "B7YsL7tnAhMLCZsThdgK2iVEH6gajo6fueSrwtGTGd9K"
        }
      },
      // !hover(1:23) transactions.meta
      "meta": {
        "err": null,
        "fee": 5000,
        "innerInstructions": [],
        "logMessages": [
          "Program Vote111111111111111111111111111111111111111 invoke [1]",
          "Program Vote111111111111111111111111111111111111111 success"
        ],
        "postBalances": [83925018422, 321677325, 1],
        "postTokenBalances": [],
        "preBalances": [83925023422, 321677325, 1],
        "preTokenBalances": [],
        "rewards": [],
        "loadedAddresses": {
          "readonly": [],
          "writable": []
        },
        "computeUnitsConsumed": 2100,
        "costUnits": 3428,
        "status": {
          "Ok": null
        }
      },
      // !hover transactions.version
      "version": "legacy"
    }
  ],
  // !hover(1:9) rewards
  "rewards": [
    {
      "commission": 0,
      "lamports": 0,
      "postBalance": 637848765,
      "pubkey": "7PmWxxiTneGteGxEYvzj5pGDVMQ4nuN9DfUypEXmaA8o",
      "rewardType": "Voting"
    }
  ],
  // !hover numRewardPartitions
  "numRewardPartitions": 312,
  // !hover blockTime
  "blockTime": 1774404960,
  // !hover blockHeight
  "blockHeight": 386774297
}
```

## !reference

### !! previousBlockhash

!type string

The previous block's blockhash, as a base-58 encoded string.

### !! blockhash

!type string

This block's blockhash, as a base-58 encoded string.

### !! parentSlot

!type u64

Slot index of this block's parent.

### !! transactions

!type array[object] | undefined

Transactions included in the block. Each entry uses the structure documented in
[Encoded Transaction Responses](#encoded-transaction-responses). Present when
`transactionDetails` is `"full"` or `"accounts"`.

#### !! transaction

!type object | string | [string, "base58" | "base64"]

Encoded transaction payload. Uses the structure documented in
[Encoded Transaction Responses](#encoded-transaction-responses).

#### !! meta

!type object | null

Transaction metadata using the same structure documented in
[Transaction Status Metadata](#transaction-status-metadata), or `null` if
metadata is unavailable.

#### !! version

!type "legacy" | number | undefined

Transaction version for this entry. Omitted when version information is not
available, including legacy transactions without
`maxSupportedTransactionVersion`.

### !! rewards

!type array[object] | undefined

Rewards recorded for the block. Present when block rewards are requested;
omitted otherwise. Uses the structure documented in [Rewards](#rewards).

### !! numRewardPartitions

!type u64 | undefined

Number of reward partitions in the block, when available.

### !! blockTime

!type i64 | null

Estimated production time of the block as a Unix timestamp.

### !! blockHeight

!type u64 | null

Block height of this block, if available.

### !! signatures

!type array[string] | undefined

Transaction signatures only. Present when `transactionDetails` is
`"signatures"`.

</CodeReference>

### Confirmed Transaction Responses

`getTransaction` returns a confirmed transaction in this structure:

| Reference       | Details                                                                                                                                           |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Returned by     | [`getTransaction`](/docs/rpc/http/gettransaction)                                                                                                 |
| Response path   | `result`                                                                                                                                          |
| Type Definition | [`EncodedConfirmedTransactionWithStatusMeta`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L709-L714) |

<CodeReference>

```jsonc !!
{
  // !hover slot
  "slot": 408830360,
  // !hover(1:51) transaction
  "transaction": {
    "signatures": [
      "4fqGV381e6h87Hn5vGm7W5MGivHFtTisS9G2UpbsuritcTmXPsPtU32BWF2Bw4yMxH1NAFgGtpWbuVfXbZt8xTBw",
      "3KYwzbzs2oupAv2A4qMCLpPQusXazJRSxzT99UE3rfoejStBbDnBFeZRUt8et3LTSVBXncCqTXzBVWqxNSrK4J41"
    ],
    "message": {
      "accountKeys": [
        "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
        "BhRYqZJfASkDVaKPtU8NLoPyXAbJFAWSsMujzRn1wFRV",
        "D3XSB6m2ZjNjTspKVd8hXdmi19CbjmtKabBLLzgf9x6B",
        "5eHy2DQ7cQjEw2PoEfxvUd5rttzr2NydmGhKpQHk2TdM",
        "8YFbpsQqUkzmcLHrSDR44LN9DeGrV47rtwETN4sM6V4i",
        "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "DocSpnPnyffShXENq9xKSuL68GeScV7HsQnZw5X65LSb",
        "mKLWCKDeHeym4egVLMTLNV661E1FsHarXvYr6pwAFPz"
      ],
      "addressTableLookups": [
        {
          "accountKey": "buDnget76BvfyDQQgUKN6npRixeir9K59jBVP9QMqZq",
          "readonlyIndexes": [140, 144, 141, 33, 26, 20, 3, 34, 143, 142],
          "writableIndexes": [4]
        }
      ],
      "header": {
        "numReadonlySignedAccounts": 1,
        "numReadonlyUnsignedAccounts": 5,
        "numRequiredSignatures": 2
      },
      "instructions": [
        {
          "accounts": [2, 20, 1],
          "data": "6vx8P",
          "programIdIndex": 15,
          "stackHeight": 1
        },
        {
          "accounts": [21],
          "data": "2fX7imjEaEwy",
          "programIdIndex": 18,
          "stackHeight": 1
        },
        {
          "accounts": [],
          "data": "3Sby4Ya7yebR",
          "programIdIndex": 18,
          "stackHeight": 1
        }
      ],
      "recentBlockhash": "5D7W1x5zbqBn67kPDz62L5ZF1McxnhajiRGrhh3Y3wKb"
    }
  },
  // !hover(1:99) meta
  "meta": {
    "err": null,
    "fee": 2010000,
    "innerInstructions": [
      {
        "index": 5,
        "instructions": [
          {
            "accounts": [28, 16],
            "data": "2BfZXS1GQrCLZ1vzWVcaYz6Kpzd9QSStQWUgg9fK2UEsEo",
            "programIdIndex": 29,
            "stackHeight": 2
          }
        ]
      }
    ],
    "logMessages": [
      "Program 11111111111111111111111111111111 invoke [1]",
      "Program 11111111111111111111111111111111 success",
      "Program ComputeBudget111111111111111111111111111111 invoke [1]",
      "Program ComputeBudget111111111111111111111111111111 success",
      "Program ComputeBudget111111111111111111111111111111 invoke [1]",
      "Program ComputeBudget111111111111111111111111111111 success"
    ],
    "postBalances": [
      232434298, 100440447, 1447680, 0, 2985840, 3821040, 2074080, 2074080
    ],
    "postTokenBalances": [
      {
        "accountIndex": 6,
        "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "owner": "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        "uiTokenAmount": {
          "amount": "0",
          "decimals": 6,
          "uiAmount": null,
          "uiAmountString": "0"
        }
      },
      {
        "accountIndex": 7,
        "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "owner": "8YFbpsQqUkzmcLHrSDR44LN9DeGrV47rtwETN4sM6V4i",
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        "uiTokenAmount": {
          "amount": "170620656370954",
          "decimals": 6,
          "uiAmount": 170620656.370954,
          "uiAmountString": "170620656.370954"
        }
      }
    ],
    "preBalances": [
      131202493, 100440447, 1447680, 0, 2985840, 3821040, 2074080, 2074080
    ],
    "preTokenBalances": [
      {
        "accountIndex": 6,
        "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "owner": "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        "uiTokenAmount": {
          "amount": "175173728464",
          "decimals": 6,
          "uiAmount": 175173.728464,
          "uiAmountString": "175173.728464"
        }
      },
      {
        "accountIndex": 7,
        "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "owner": "8YFbpsQqUkzmcLHrSDR44LN9DeGrV47rtwETN4sM6V4i",
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        "uiTokenAmount": {
          "amount": "170445482642490",
          "decimals": 6,
          "uiAmount": 170445482.64249,
          "uiAmountString": "170445482.64249"
        }
      }
    ],
    "rewards": [],
    "loadedAddresses": {
      "readonly": [
        "SysvarRecentB1ockHashes11111111111111111111",
        "jitodontfront1111111111111111111111tradewiz",
        "SysvarRent111111111111111111111111111111111",
        "ADyA8hdefvWN2dbGGWFotbzWxrAvLW83WG6QCVXvJKqw"
      ],
      "writable": ["So11111111111111111111111111111111111111112"]
    },
    "returnData": null,
    "computeUnitsConsumed": 98924,
    "costUnits": 107709,
    "status": {
      "Ok": null
    }
  },
  // !hover version
  "version": 0,
  // !hover blockTime
  "blockTime": 1774467439
}
```

## !reference

### !! slot

!type u64

Slot that contains this transaction.

### !! transaction

!type object | string | [string, "base58" | "base64"]

Encoded transaction payload. Uses the structure documented in
[Encoded Transaction Responses](#encoded-transaction-responses).

### !! meta

!type object | null

Transaction metadata, or `null` if metadata is unavailable. Uses the structure
documented in [Transaction Status Metadata](#transaction-status-metadata).

### !! version

!type "legacy" | number | undefined

Transaction version. Omitted when version information is not available,
including legacy transactions when `maxSupportedTransactionVersion` is not set.
Versioned transactions serialize as a numeric version.

### !! blockTime

!type i64 | null

Estimated production time of the block that contains this transaction, as a Unix
timestamp.

</CodeReference>

### Simulation Results

`simulateTransaction` returns this object inside `result.value`.
`sendTransaction` preflight failures use the same structure inside `error.data`.
Preflight failures return a sparser subset of fields, with several fields set to
`null`:

| Reference        | Details                                                                                                                                                                                                                                                                                                                                              |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Returned by      | [`simulateTransaction`](/docs/rpc/http/simulatetransaction); `sendTransaction` preflight failures in `error.data`                                                                                                                                                                                                                                    |
| Response path    | `result.value` in `simulateTransaction`; `error.data` in `sendTransaction` preflight failures                                                                                                                                                                                                                                                        |
| Type Definitions | [`RpcSimulateTransactionResult`](https://github.com/anza-xyz/agave/blob/v3.1.8/rpc-client-types/src/response.rs#L433-L448), [`RpcBlockhash`](https://github.com/anza-xyz/agave/blob/v3.1.8/rpc-client-types/src/response.rs#L145-L148), [`UiAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/account-decoder-client-types/src/lib.rs#L24-L34) |

<CodeReference>

```jsonc !!
{
  // !hover accounts
  "accounts": null,
  // !hover err
  "err": null,
  // !hover innerInstructions
  "innerInstructions": null,
  // !hover loadedAccountsDataSize
  "loadedAccountsDataSize": 711749,
  // !hover(1:6) logs
  "logs": [
    "Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb invoke [1]",
    "Program log: Instruction: Transfer",
    "Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb consumed 1824 of 200000 compute units",
    "Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb success"
  ],
  // !hover(1:4) replacementBlockhash
  "replacementBlockhash": {
    // !hover replacementBlockhash.blockhash
    "blockhash": "CDK7TP7iVFdqwMhdrG3kZUhLcNUS9KQ3d7MsGQyUyfKx",
    // !hover replacementBlockhash.lastValidBlockHeight
    "lastValidBlockHeight": 438875965
  },
  // !hover returnData
  "returnData": null,
  // !hover unitsConsumed
  "unitsConsumed": 1824,
  // !hover fee
  "fee": 5000,
  // !hover preBalances
  "preBalances": [994375240, 2074080, 2074080, 1159846],
  // !hover postBalances
  "postBalances": [994370240, 2074080, 2074080, 1159846],
  // !hover(1:26) postTokenBalances
  "postTokenBalances": [
    {
      "accountIndex": 1,
      "mint": "72p1XsRo7KRptf8ZhPoHvVFneLPpUT4rpTYRu5EnKB8A",
      "owner": "GzKdGsAgBBz7ekBnVmiaoq1QV43J9fu6tTexJMmygQUS",
      "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
      "uiTokenAmount": {
        "amount": "200",
        "decimals": 2,
        "uiAmount": 2.0,
        "uiAmountString": "2"
      }
    },
    {
      "accountIndex": 2,
      "mint": "72p1XsRo7KRptf8ZhPoHvVFneLPpUT4rpTYRu5EnKB8A",
      "owner": "AUpUPTU4dUGJmGSk6TbWDua2EzLr4oV8VtQ9vd6t6mqc",
      "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
      "uiTokenAmount": {
        "amount": "999999999999800",
        "decimals": 2,
        "uiAmount": 9999999999998.0,
        "uiAmountString": "9999999999998"
      }
    }
  ],
  // !hover(1:26) preTokenBalances
  "preTokenBalances": [
    {
      "accountIndex": 1,
      "mint": "72p1XsRo7KRptf8ZhPoHvVFneLPpUT4rpTYRu5EnKB8A",
      "owner": "GzKdGsAgBBz7ekBnVmiaoq1QV43J9fu6tTexJMmygQUS",
      "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
      "uiTokenAmount": {
        "amount": "100",
        "decimals": 2,
        "uiAmount": 1.0,
        "uiAmountString": "1"
      }
    },
    {
      "accountIndex": 2,
      "mint": "72p1XsRo7KRptf8ZhPoHvVFneLPpUT4rpTYRu5EnKB8A",
      "owner": "AUpUPTU4dUGJmGSk6TbWDua2EzLr4oV8VtQ9vd6t6mqc",
      "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
      "uiTokenAmount": {
        "amount": "999999999999900",
        "decimals": 2,
        "uiAmount": 9999999999999.0,
        "uiAmountString": "9999999999999"
      }
    }
  ],
  // !hover(1:4) loadedAddresses
  "loadedAddresses": {
    // !hover loadedAddresses.readonly
    "readonly": [],
    // !hover loadedAddresses.writable
    "writable": []
  }
}
```

## !reference

### !! accounts

!type array[object | null] | null

Post-simulation snapshots for the addresses requested in
`simulateTransaction.accounts.addresses`. Each element corresponds to the same
index in the request and is either `null` or an account object using the same
schema documented in [Account Data](#account-data). The `data` field depends on
the requested account encoding.

### !! err

!type string | object | null

Simulation error. Uses the structure documented in
[Transaction Errors](#transaction-errors). `null` indicates success.

### !! innerInstructions

!type array[object] | null

Inner instructions captured during simulation. `null` unless CPI recording was
requested. Uses the structure documented in
[Inner Instructions](#inner-instructions), always in the JSON Parsed form: each
instruction is either fully parsed or partially decoded, never a compiled
instruction with account indexes.

### !! loadedAccountsDataSize

!type u32

Total number of account-data bytes loaded while simulating the transaction.

### !! logs

!type array[string]

Program log output captured during simulation. This field is always serialized
as an array and may be empty.

### !! replacementBlockhash

!type object | null

Replacement blockhash the RPC node used when `replaceRecentBlockhash` was
enabled.

#### !! blockhash

!type string

Replacement recent blockhash, as a base-58 encoded string.

#### !! lastValidBlockHeight

!type u64

Last block height at which the replacement blockhash remains valid.

### !! returnData

!type object | null

Most recent instruction return data captured during simulation. Uses the
structure documented in [Return Data](#return-data).

### !! unitsConsumed

!type u64

Compute units consumed during simulation.

### !! fee

!type u64 | null

Fee charged for the simulated transaction. `null` if simulation failed before
fee calculation completed.

### !! preBalances

!type array[u64] | null

Lamport balances before simulation, indexed to the transaction account list.

### !! postBalances

!type array[u64] | null

Lamport balances after simulation, indexed to the transaction account list.

### !! postTokenBalances

!type array[object] | null

Token balances after simulation. Uses the structure documented in
[Token Balances](#token-balances).

### !! preTokenBalances

!type array[object] | null

Token balances before simulation. Uses the structure documented in
[Token Balances](#token-balances).

### !! loadedAddresses

!type object | null

Loaded account addresses resolved from lookup tables. `simulateTransaction`
currently serializes this field as an object, using empty arrays when no
addresses were loaded. `sendTransaction` preflight failures may return `null`
for this field in `error.data`. Uses the structure documented in
[Loaded Addresses](#loaded-addresses).

</CodeReference>

## Shared Structures

### Encoded Transaction Responses

Transaction-oriented RPC methods embed transactions in an encoded wrapper using
this structure:

| Reference       | Details                                                                                                                                                                                  |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Included in     | `transactions[]` in [Confirmed Blocks](#confirmed-blocks); the shared `transaction`, `meta`, and `version` fields in [Confirmed Transaction Responses](#confirmed-transaction-responses) |
| Response path   | `transactions[]` in confirmed blocks; `result.transaction`, `result.meta`, and `result.version` in confirmed transaction responses                                                       |
| Type Definition | [`EncodedTransactionWithStatusMeta`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L199-L205)                                                 |

<CodeReference>

```jsonc !!
{
  // !hover(1:51) transaction
  "transaction": {
    "signatures": [
      "4fqGV381e6h87Hn5vGm7W5MGivHFtTisS9G2UpbsuritcTmXPsPtU32BWF2Bw4yMxH1NAFgGtpWbuVfXbZt8xTBw",
      "3KYwzbzs2oupAv2A4qMCLpPQusXazJRSxzT99UE3rfoejStBbDnBFeZRUt8et3LTSVBXncCqTXzBVWqxNSrK4J41"
    ],
    "message": {
      "accountKeys": [
        "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
        "BhRYqZJfASkDVaKPtU8NLoPyXAbJFAWSsMujzRn1wFRV",
        "D3XSB6m2ZjNjTspKVd8hXdmi19CbjmtKabBLLzgf9x6B",
        "5eHy2DQ7cQjEw2PoEfxvUd5rttzr2NydmGhKpQHk2TdM",
        "8YFbpsQqUkzmcLHrSDR44LN9DeGrV47rtwETN4sM6V4i",
        "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "DocSpnPnyffShXENq9xKSuL68GeScV7HsQnZw5X65LSb",
        "mKLWCKDeHeym4egVLMTLNV661E1FsHarXvYr6pwAFPz"
      ],
      "addressTableLookups": [
        {
          "accountKey": "buDnget76BvfyDQQgUKN6npRixeir9K59jBVP9QMqZq",
          "readonlyIndexes": [140, 144, 141, 33, 26, 20, 3, 34, 143, 142],
          "writableIndexes": [4]
        }
      ],
      "header": {
        "numReadonlySignedAccounts": 1,
        "numReadonlyUnsignedAccounts": 5,
        "numRequiredSignatures": 2
      },
      "instructions": [
        {
          "accounts": [2, 20, 1],
          "data": "6vx8P",
          "programIdIndex": 15,
          "stackHeight": 1
        },
        {
          "accounts": [21],
          "data": "2fX7imjEaEwy",
          "programIdIndex": 18,
          "stackHeight": 1
        },
        {
          "accounts": [],
          "data": "3Sby4Ya7yebR",
          "programIdIndex": 18,
          "stackHeight": 1
        }
      ],
      "recentBlockhash": "5D7W1x5zbqBn67kPDz62L5ZF1McxnhajiRGrhh3Y3wKb"
    }
  },
  // !hover(1:99) meta
  "meta": {
    "err": null,
    "fee": 2010000,
    "innerInstructions": [
      {
        "index": 5,
        "instructions": [
          {
            "accounts": [28, 16],
            "data": "2BfZXS1GQrCLZ1vzWVcaYz6Kpzd9QSStQWUgg9fK2UEsEo",
            "programIdIndex": 29,
            "stackHeight": 2
          }
        ]
      }
    ],
    "logMessages": [
      "Program 11111111111111111111111111111111 invoke [1]",
      "Program 11111111111111111111111111111111 success",
      "Program ComputeBudget111111111111111111111111111111 invoke [1]",
      "Program ComputeBudget111111111111111111111111111111 success",
      "Program ComputeBudget111111111111111111111111111111 invoke [1]",
      "Program ComputeBudget111111111111111111111111111111 success"
    ],
    "postBalances": [
      232434298, 100440447, 1447680, 0, 2985840, 3821040, 2074080, 2074080
    ],
    "postTokenBalances": [
      {
        "accountIndex": 6,
        "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "owner": "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        "uiTokenAmount": {
          "amount": "0",
          "decimals": 6,
          "uiAmount": null,
          "uiAmountString": "0"
        }
      },
      {
        "accountIndex": 7,
        "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "owner": "8YFbpsQqUkzmcLHrSDR44LN9DeGrV47rtwETN4sM6V4i",
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        "uiTokenAmount": {
          "amount": "170620656370954",
          "decimals": 6,
          "uiAmount": 170620656.370954,
          "uiAmountString": "170620656.370954"
        }
      }
    ],
    "preBalances": [
      131202493, 100440447, 1447680, 0, 2985840, 3821040, 2074080, 2074080
    ],
    "preTokenBalances": [
      {
        "accountIndex": 6,
        "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "owner": "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        "uiTokenAmount": {
          "amount": "175173728464",
          "decimals": 6,
          "uiAmount": 175173.728464,
          "uiAmountString": "175173.728464"
        }
      },
      {
        "accountIndex": 7,
        "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
        "owner": "8YFbpsQqUkzmcLHrSDR44LN9DeGrV47rtwETN4sM6V4i",
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        "uiTokenAmount": {
          "amount": "170445482642490",
          "decimals": 6,
          "uiAmount": 170445482.64249,
          "uiAmountString": "170445482.64249"
        }
      }
    ],
    "rewards": [],
    "loadedAddresses": {
      "readonly": [
        "SysvarRecentB1ockHashes11111111111111111111",
        "jitodontfront1111111111111111111111tradewiz",
        "SysvarRent111111111111111111111111111111111",
        "ADyA8hdefvWN2dbGGWFotbzWxrAvLW83WG6QCVXvJKqw"
      ],
      "writable": ["So11111111111111111111111111111111111111112"]
    },
    "returnData": null,
    "computeUnitsConsumed": 98924,
    "costUnits": 107709,
    "status": {
      "Ok": null
    }
  },
  // !hover version
  "version": 0
}
```

## !reference

### !! transaction

!type object | string | [string, "base58" | "base64"]

Encoded transaction payload. For JSON encodings, this uses the structures
documented in [Transactions](#transactions) or
[Accounts Only Transaction Responses](#accounts-only-transaction-responses). For
binary encodings, this is a base-58/base-64 string or a `[string, encoding]`
tuple.

### !! meta

!type object | null

Transaction metadata, or `null` if metadata is unavailable. Uses the structure
documented in [Transaction Status Metadata](#transaction-status-metadata). In
`accounts` mode block responses, some metadata fields are intentionally omitted,
including `innerInstructions`, `logMessages`, `loadedAddresses`, `returnData`,
`computeUnitsConsumed`, and `costUnits`.

### !! version

!type "legacy" | number | undefined

Transaction version. Omitted when version information is not available,
including legacy transactions when `maxSupportedTransactionVersion` is not set.
Versioned transactions serialize as a numeric version.

</CodeReference>

### Transactions

Transactions are quite different from those on other blockchains. Be sure to
review [Anatomy of a Transaction](/docs/core/transactions) to learn about
transactions on Solana.

| Reference        | Details                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Included in      | [Encoded Transaction Responses](#encoded-transaction-responses); the `transaction` field in [Confirmed Transaction Responses](#confirmed-transaction-responses)                                                                                                                                                                                                                                                                                                                         |
| Response path    | `transaction`                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Type Definitions | [`UiTransaction`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L128-L131), [`UiMessage`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L160-L165), [`UiRawMessage`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L531-L540), [`UiParsedMessage`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L136-L142) |

| Encoding     | Message shape     | Instruction shape                        | Notes                                                                                                                                                                  |
| ------------ | ----------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `json`       | `UiRawMessage`    | Compiled instructions                    | `accountKeys` are base-58 strings. Versioned messages describe lookup tables in `addressTableLookups`, with resolved loaded addresses reported separately in metadata. |
| `jsonParsed` | `UiParsedMessage` | Parsed or partially decoded instructions | `accountKeys` are objects, and parsed versioned responses include lookup-table accounts.                                                                               |

#### JSON

The JSON structure of a transaction is defined as follows:

<CodeReference>

```jsonc !!
{
  // !hover(1:45) message
  "message": {
    // !hover(1:10) message.accountKeys
    "accountKeys": [
      "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
      "BhRYqZJfASkDVaKPtU8NLoPyXAbJFAWSsMujzRn1wFRV",
      "D3XSB6m2ZjNjTspKVd8hXdmi19CbjmtKabBLLzgf9x6B",
      "5eHy2DQ7cQjEw2PoEfxvUd5rttzr2NydmGhKpQHk2TdM",
      "8YFbpsQqUkzmcLHrSDR44LN9DeGrV47rtwETN4sM6V4i",
      "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
      "DocSpnPnyffShXENq9xKSuL68GeScV7HsQnZw5X65LSb",
      "mKLWCKDeHeym4egVLMTLNV661E1FsHarXvYr6pwAFPz"
    ],
    // !hover(1:7) message.addressTableLookups
    "addressTableLookups": [
      {
        "accountKey": "buDnget76BvfyDQQgUKN6npRixeir9K59jBVP9QMqZq",
        "readonlyIndexes": [140, 144, 141, 33, 26, 20, 3, 34, 143, 142],
        "writableIndexes": [4]
      }
    ],
    // !hover(1:5) message.header
    "header": {
      // !hover message.header.numReadonlySignedAccounts
      "numReadonlySignedAccounts": 1,
      // !hover message.header.numReadonlyUnsignedAccounts
      "numReadonlyUnsignedAccounts": 5,
      // !hover message.header.numRequiredSignatures
      "numRequiredSignatures": 2
    },
    // !hover(1:20) message.instructions
    "instructions": [
      {
        // !hover message.instructions.accounts
        "accounts": [2, 20, 1],
        // !hover message.instructions.data
        "data": "6vx8P",
        // !hover message.instructions.programIdIndex
        "programIdIndex": 15,
        // !hover message.instructions.stackHeight
        "stackHeight": 1
      },
      {
        "accounts": [21],
        "data": "2fX7imjEaEwy",
        "programIdIndex": 18,
        "stackHeight": 1
      },
      {
        "accounts": [],
        "data": "3Sby4Ya7yebR",
        "programIdIndex": 18,
        "stackHeight": 1
      }
    ],
    // !hover message.recentBlockhash
    "recentBlockhash": "5D7W1x5zbqBn67kPDz62L5ZF1McxnhajiRGrhh3Y3wKb"
  },
  // !hover(1:4) signatures
  "signatures": [
    "4fqGV381e6h87Hn5vGm7W5MGivHFtTisS9G2UpbsuritcTmXPsPtU32BWF2Bw4yMxH1NAFgGtpWbuVfXbZt8xTBw",
    "3KYwzbzs2oupAv2A4qMCLpPQusXazJRSxzT99UE3rfoejStBbDnBFeZRUt8et3LTSVBXncCqTXzBVWqxNSrK4J41"
  ]
}
```

## !reference

### !! message

!type object

Defines the content of the transaction.

#### !! accountKeys

!type array[string]

List of base-58 encoded static account keys stored in the message. For legacy
transactions this is the full account list. For versioned transactions,
additional loaded addresses are described separately via
`message.addressTableLookups` and metadata `loadedAddresses`. The first
`message.header.numRequiredSignatures` public keys must sign the transaction.

#### !! addressTableLookups

!type array[object] | undefined

Address lookup table references for versioned transactions. Present when the
transaction is versioned and `maxSupportedTransactionVersion` is set. This field
is currently emitted for v0 messages even when the array is empty. Uses the
structure documented in [Address Table Lookups](#address-table-lookups).

#### !! header

!type object

Details the account types and signatures required by the transaction.

##### !! numReadonlySignedAccounts

!type u8

The last `numReadonlySignedAccounts` of the signed keys are read-only accounts.
Programs may process multiple transactions that load read-only accounts within a
single PoH entry, but are not permitted to credit or debit lamports or modify
account data. Transactions targeting the same read-write account are evaluated
sequentially.

##### !! numReadonlyUnsignedAccounts

!type u8

The last `numReadonlyUnsignedAccounts` of the unsigned keys are read-only
accounts.

##### !! numRequiredSignatures

!type u8

The total number of signatures required to make the transaction valid. The
signatures must match the first `numRequiredSignatures` of
`message.accountKeys`.

#### !! instructions

!type array[object]

List of program instructions that will be executed in sequence and committed in
one atomic transaction if all succeed.

##### !! accounts

!type array[u8]

List of ordered indices into the transaction's account key space indicating
which accounts to pass to the program. For versioned messages, lookup-loaded
addresses are appended after the static `message.accountKeys`.

##### !! data

!type string

The program input data encoded in a base-58 string.

##### !! programIdIndex

!type u8

Index into the transaction's account key space indicating the program account
that executes this instruction. For legacy messages this indexes directly into
`message.accountKeys`; for versioned messages, lookup-loaded addresses are
appended after the static keys.

##### !! stackHeight

!type u32

Transaction-level instruction stack height. This is currently `1` for top-level
instructions.

#### !! recentBlockhash

!type string

A base-58 encoded hash of a recent block in the ledger used to prevent
transaction duplication and to give transactions lifetimes.

### !! signatures

!type array[string]

A list of base-58 encoded signatures applied to the transaction. The list is
always of length `message.header.numRequiredSignatures` and not empty. The
signature at index `i` corresponds to the public key at index `i` in
`message.accountKeys`. The first one is used as the
[transaction id](/docs/references/terminology#transaction-id).

</CodeReference>

#### JSON Parsed

The JSON parsed structure of a transaction follows a similar structure to the
regular JSON format, with additional parsing of account and instruction
information:

<CodeReference>

```jsonc !!
{
  // !hover(1:69) message
  "message": {
    // !hover(1:32) message.accountKeys
    "accountKeys": [
      {
        // !hover message.accountKeys.pubkey
        "pubkey": "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
        // !hover message.accountKeys.signer
        "signer": true,
        // !hover message.accountKeys.source
        "source": "transaction",
        // !hover message.accountKeys.writable
        "writable": true
      },
      {
        // !hover message.accountKeys.pubkey
        "pubkey": "BhRYqZJfASkDVaKPtU8NLoPyXAbJFAWSsMujzRn1wFRV",
        // !hover message.accountKeys.signer
        "signer": true,
        // !hover message.accountKeys.source
        "source": "transaction",
        // !hover message.accountKeys.writable
        "writable": false
      },
      {
        // !hover message.accountKeys.pubkey
        "pubkey": "D3XSB6m2ZjNjTspKVd8hXdmi19CbjmtKabBLLzgf9x6B",
        // !hover message.accountKeys.signer
        "signer": false,
        // !hover message.accountKeys.source
        "source": "transaction",
        // !hover message.accountKeys.writable
        "writable": true
      },
      {
        // !hover message.accountKeys.pubkey
        "pubkey": "5eHy2DQ7cQjEw2PoEfxvUd5rttzr2NydmGhKpQHk2TdM",
        // !hover message.accountKeys.signer
        "signer": false,
        // !hover message.accountKeys.source
        "source": "transaction",
        // !hover message.accountKeys.writable
        "writable": true
      },
      {
        // !hover message.accountKeys.pubkey
        "pubkey": "8sjV1AqBFvFuADBCQHhotaRq5DFFYSjjg1jMyVWMqXvZ",
        // !hover message.accountKeys.signer
        "signer": false,
        // !hover message.accountKeys.source
        "source": "lookupTable",
        // !hover message.accountKeys.writable
        "writable": true
      }
    ],
    // !hover(1:7) message.addressTableLookups
    "addressTableLookups": [
      {
        "accountKey": "buDnget76BvfyDQQgUKN6npRixeir9K59jBVP9QMqZq",
        "readonlyIndexes": [140, 144, 141, 33, 26, 20, 3, 34, 143, 142],
        "writableIndexes": [4]
      }
    ],
    // !hover(1:27) message.instructions
    "instructions": [
      {
        // !hover(1:8) message.instructions.parsed
        "parsed": {
          // !hover(1:5) message.instructions.parsed.info
          "info": {
            "nonceAccount": "D3XSB6m2ZjNjTspKVd8hXdmi19CbjmtKabBLLzgf9x6B",
            "nonceAuthority": "BhRYqZJfASkDVaKPtU8NLoPyXAbJFAWSsMujzRn1wFRV",
            "recentBlockhashesSysvar": "SysvarRecentB1ockHashes11111111111111111111"
          },
          // !hover message.instructions.parsed.type
          "type": "advanceNonce"
        },
        // !hover message.instructions.program
        "program": "system",
        // !hover message.instructions.programId
        "programId": "11111111111111111111111111111111",
        // !hover message.instructions.stackHeight
        "stackHeight": 1
      },
      {
        "accounts": ["jitodontfront1111111111111111111111tradewiz"],
        "data": "2fX7imjEaEwy",
        "programId": "ComputeBudget111111111111111111111111111111",
        "stackHeight": 1
      },
      {
        "accounts": [],
        "data": "3Sby4Ya7yebR",
        "programId": "ComputeBudget111111111111111111111111111111",
        "stackHeight": 1
      }
    ],
    // !hover message.recentBlockhash
    "recentBlockhash": "5D7W1x5zbqBn67kPDz62L5ZF1McxnhajiRGrhh3Y3wKb"
  },
  // !hover(1:4) signatures
  "signatures": [
    "4fqGV381e6h87Hn5vGm7W5MGivHFtTisS9G2UpbsuritcTmXPsPtU32BWF2Bw4yMxH1NAFgGtpWbuVfXbZt8xTBw",
    "3KYwzbzs2oupAv2A4qMCLpPQusXazJRSxzT99UE3rfoejStBbDnBFeZRUt8et3LTSVBXncCqTXzBVWqxNSrK4J41"
  ]
}
```

## !reference

### !! message

!type object

Defines the content of the transaction.

#### !! accountKeys

!type array[object]

List of account information used by the transaction. Uses the shared
[Parsed Accounts](#parsed-accounts) structure. In current full `jsonParsed`
versioned transaction responses, this includes loaded lookup-table accounts.

##### !! pubkey

!type string

The base-58 encoded public key of the account.

##### !! signer

!type boolean

Indicates if the account is a required transaction signer.

##### !! source

!type "transaction" | "lookupTable"

Source of the account metadata. This field is `transaction` for static message
accounts and `lookupTable` for loaded lookup-table accounts in
transaction/accounts responses.

##### !! writable

!type boolean

Indicates if the account is writable.

#### !! addressTableLookups

!type array[object] | undefined

Address lookup table references for versioned transactions. Present when the
transaction is versioned and `maxSupportedTransactionVersion` is set. This field
is currently emitted for v0 messages even when the array is empty. Uses the
structure documented in [Address Table Lookups](#address-table-lookups).

#### !! instructions

!type array[object]

List of parsed or partially decoded program instructions.

##### !! parsed

!type object | undefined

Program-specific parsed data. Present when the instruction was fully parsed.

###### !! info

!type object

Parsed instruction information specific to the program and instruction type.

###### !! type

!type string

The type of instruction (e.g., "transfer").

##### !! program

!type string | undefined

The name of the program being called. Present when the instruction was fully
parsed.

##### !! programId

!type string

The base-58 encoded public key of the program.

##### !! stackHeight

!type u32

Transaction-level instruction stack height. This is currently `1` for top-level
instructions.

##### !! accounts

!type array[string] | undefined

Account addresses referenced by the instruction, in order. Present when the
instruction was partially decoded because the RPC node did not have a parser for
the program.

##### !! data

!type string | undefined

Instruction data, base-58 encoded. Present when the instruction was partially
decoded because the RPC node did not have a parser for the program.

#### !! recentBlockhash

!type string

A base-58 encoded hash of a recent block in the ledger used to prevent
transaction duplication and to give transactions lifetimes.

### !! signatures

!type array[string]

A list of base-58 encoded signatures applied to the transaction.

</CodeReference>

### Accounts Only Transaction Responses

When a block is requested with `transactionDetails: "accounts"`, the response
returns transaction account metadata in this structure:

| Reference       | Details                                                                                                                |
| --------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Included in     | [Encoded Transaction Responses](#encoded-transaction-responses) when `transactionDetails: "accounts"`                  |
| Response path   | `transaction`                                                                                                          |
| Type Definition | [`UiAccountsList`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L523-L528) |

<CodeReference>

```jsonc !!
{
  // !hover(1:3) signatures
  "signatures": [
    "bciv6kPHkXFqBWGnWoHvQ4Tcv6gFZXajipE8x7Aty5VSCz4U7F3jK2yaFZvFUDDRWxf2i38r2WRoM8oGHqwUJaK"
  ],
  // !hover(1:50) accountKeys
  "accountKeys": [
    {
      // !hover accountKeys.pubkey
      "pubkey": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
      // !hover accountKeys.signer
      "signer": true,
      // !hover accountKeys.source
      "source": "transaction",
      // !hover accountKeys.writable
      "writable": true
    },
    {
      // !hover accountKeys.pubkey
      "pubkey": "AT9SNJB3RmrJ5MERohWQHc6HGbtCJHWkFCUVb1rUUyb6",
      "signer": false,
      "source": "transaction",
      "writable": true
    },
    {
      "pubkey": "BFAXnehgs9BPSH8GVAzUvjXLCqUrxm3RqK6YBzTdoxuX",
      "signer": false,
      "source": "transaction",
      "writable": true
    },
    {
      "pubkey": "Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY",
      "signer": false,
      "source": "transaction",
      "writable": true
    },
    {
      "pubkey": "11111111111111111111111111111111",
      "signer": false,
      "source": "transaction",
      "writable": false
    },
    {
      "pubkey": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "signer": false,
      "source": "transaction",
      "writable": false
    },
    {
      "pubkey": "8sjV1AqBFvFuADBCQHhotaRq5DFFYSjjg1jMyVWMqXvZ",
      // !hover accountKeys.signer
      "signer": false,
      // !hover accountKeys.source
      "source": "lookupTable",
      // !hover accountKeys.writable
      "writable": true
    },
    {
      "pubkey": "MNFSTqtC93rEfYHB6hF82sKdZpUDFWkViLByLd1k1Ms",
      "signer": false,
      "source": "lookupTable",
      "writable": false
    }
  ]
}
```

## !reference

### !! signatures

!type array[string]

Transaction signatures in wire order.

### !! accountKeys

!type array[object]

Parsed account metadata for each transaction account. Uses the structure
documented in [Parsed Accounts](#parsed-accounts).

</CodeReference>

### Account Data

RPC methods and subscriptions that return account data use this structure:

| Reference        | Details                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Returned by      | [`getAccountInfo`](/docs/rpc/http/getaccountinfo); [`getMultipleAccounts`](/docs/rpc/http/getmultipleaccounts); the `value` field in [`accountSubscribe`](/docs/rpc/websocket/accountsubscribe) notifications                                                                                                                                                                                                                                                           |
| Response path    | `result.value`; `result.value[]`; `params.result.value`                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Type Definitions | [`UiAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/account-decoder-client-types/src/lib.rs#L24-L34), [`UiAccountData`](https://github.com/anza-xyz/agave/blob/v3.1.8/account-decoder-client-types/src/lib.rs#L36-L42), [`UiAccountEncoding`](https://github.com/anza-xyz/agave/blob/v3.1.8/account-decoder-client-types/src/lib.rs#L71-L80), [`ParsedAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/account-decoder-client-types/src/lib.rs#L95-L101) |

Account data also appears in these nested response objects:

| Reference     | Details                                                                                                                                                                                                                                                                                                                                                                  |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Included in   | [Simulation Results](#simulation-results); the `account` field in response objects returned by [`getProgramAccounts`](/docs/rpc/http/getprogramaccounts), [`getTokenAccountsByOwner`](/docs/rpc/http/gettokenaccountsbyowner), [`getTokenAccountsByDelegate`](/docs/rpc/http/gettokenaccountsbydelegate), and [`programSubscribe`](/docs/rpc/websocket/programsubscribe) |
| Response path | `result.value.accounts[]`; `result[].account`; `result.value[].account`; `params.result.value.account`                                                                                                                                                                                                                                                                   |

#### JSON

<CodeReference>

```jsonc !!
{
  // !hover data
  "data": ["", "base64"],
  // !hover executable
  "executable": false,
  // !hover lamports
  "lamports": 88867121550052,
  // !hover owner
  "owner": "11111111111111111111111111111111",
  // !hover rentEpoch
  "rentEpoch": 18446744073709551615,
  // !hover space
  "space": 0
}
```

## !reference

### !! data

!type string | [string, "base58" | "base64" | "base64+zstd"]

Account data. If the requested encoding is `binary`, this is a plain base-58
string. If the encoding is `base58`, `base64`, or `base64+zstd`, this is
`[data, encoding]`.

### !! executable

!type boolean

Whether the account contains a program and is therefore read-only.

### !! lamports

!type u64

Lamports assigned to this account.

### !! owner

!type string

Program owner pubkey, as a base-58 encoded string.

### !! rentEpoch

!type u64

Epoch at which this account next owes rent.

### !! space

!type u64 | null

Account data size in bytes. Current Solana RPC responses populate this field for
encoded account responses.

</CodeReference>

#### JSON Parsed

When `jsonParsed` encoding is requested, the `data` field uses this parsed
wrapper when a parser is available:

<CodeReference>

```jsonc !!
{
  // !hover(1:19) data
  "data": {
    // !hover(1:15) data.parsed
    "parsed": {
      "info": {
        "isNative": false,
        "mint": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
        "owner": "DBD8hAwLDRQkTsu6EqviaYNGKPnsAMmQonxf7AH8ZcFY",
        "state": "initialized",
        "tokenAmount": {
          "amount": "3482803892164901945",
          "decimals": 6,
          "uiAmount": 3482803892164.902,
          "uiAmountString": "3482803892164.901945"
        }
      },
      "type": "account"
    },
    // !hover data.program
    "program": "spl-token",
    // !hover data.space
    "space": 165
  },
  // !hover executable
  "executable": false,
  // !hover lamports
  "lamports": 2039280,
  // !hover owner
  "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
  // !hover rentEpoch
  "rentEpoch": 18446744073709551615,
  // !hover space
  "space": 165
}
```

## !reference

### !! data

!type object | [string, "base64"]

Parsed account data wrapper. When a parser is available, this is
`{program, parsed, space}`. If `jsonParsed` is requested but no parser is
available, the RPC node falls back to `[data, "base64"]`.

#### !! parsed

!type object

Parser-specific JSON payload. Its structure depends on the owning program and
account type.

#### !! program

!type string

Name of the parser that produced the decoded account data.

#### !! space

!type u64

Account data size in bytes inside the parsed `data` object.

### !! executable

!type boolean

Whether the account contains a program and is therefore read-only.

### !! lamports

!type u64

Lamports assigned to this account.

### !! owner

!type string

Program owner pubkey, as a base-58 encoded string.

### !! rentEpoch

!type u64

Epoch at which this account next owes rent.

### !! space

!type u64 | null

Account data size in bytes. Current Solana RPC responses populate this field for
encoded account responses.

</CodeReference>

### Parsed Accounts

Parsed transaction and accounts only responses represent account keys in this
structure:

| Reference        | Details                                                                                                                                                                                                                                            |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Included in      | [Transactions](#transactions); [Accounts Only Transaction Responses](#accounts-only-transaction-responses)                                                                                                                                         |
| Response path    | `message.accountKeys[]` in parsed transactions; `accountKeys[]` in accounts only responses                                                                                                                                                         |
| Type Definitions | [`ParsedAccount`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L144-L151), [`ParsedAccountSource`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L153-L158) |

<CodeReference>

```jsonc !!
{
  // !hover pubkey
  "pubkey": "8sjV1AqBFvFuADBCQHhotaRq5DFFYSjjg1jMyVWMqXvZ",
  // !hover signer
  "signer": false,
  // !hover source
  "source": "lookupTable",
  // !hover writable
  "writable": true
}
```

## !reference

### !! pubkey

!type string

Account address, as a base-58 encoded string.

### !! signer

!type boolean

Whether this account signed the transaction.

### !! source

!type "transaction" | "lookupTable"

Source of the account metadata. This field is `transaction` for static message
accounts and `lookupTable` for loaded lookup-table accounts in
transaction/accounts responses.

### !! writable

!type boolean

Whether the transaction marks this account writable.

</CodeReference>

### Address Table Lookups

Versioned transaction messages may include address table lookups:

| Reference       | Details                                                                                                                      |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Included in     | [Transactions](#transactions)                                                                                                |
| Response path   | `message.addressTableLookups[]`                                                                                              |
| Type Definition | [`UiAddressTableLookup`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L220-L237) |

<CodeReference>

```jsonc !!
// !hover(1:7) addressTableLookups
"addressTableLookups": [
  {
    // !hover addressTableLookups.accountKey
    "accountKey": "4m25Bu6JhCFLzbPKJm8usuxr1yjJBnWNEe4u8PUgcpaU",
    // !hover addressTableLookups.writableIndexes
    "writableIndexes": [143, 141, 134, 139, 137],
    // !hover addressTableLookups.readonlyIndexes
    "readonlyIndexes": [57, 13, 60, 31]
  }
]
```

## !reference

### !! addressTableLookups

!type array[object]

List of address table lookups used by a versioned transaction to dynamically
load account addresses.

#### !! accountKey

!type string

Address lookup table account pubkey, as a base-58 encoded string.

#### !! writableIndexes

!type array[u8]

Lookup-table indexes loaded as writable accounts.

#### !! readonlyIndexes

!type array[u8]

Lookup-table indexes loaded as readonly accounts.

</CodeReference>

### Transaction Status Metadata

Transaction execution metadata is returned in this structure:

| Reference       | Details                                                                                                                              |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Included in     | [Encoded Transaction Responses](#encoded-transaction-responses); [Confirmed Transaction Responses](#confirmed-transaction-responses) |
| Response path   | `meta`                                                                                                                               |
| Type Definition | [`UiTransactionStatusMeta`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L332-L415)      |

The table below highlights fields whose presence changes across transaction
response modes. Fields not listed here serialize the same way whenever metadata
is available.

`json / full` covers full metadata responses in raw JSON form, including
`getTransaction` responses with `encoding: "json"` and block responses with
`transactionDetails: "full"`. `jsonParsed` covers parsed transaction responses,
and `accounts` covers block responses with `transactionDetails: "accounts"`.

| Field                  | `json / full`         | `jsonParsed`          | `accounts`                 |
| ---------------------- | --------------------- | --------------------- | -------------------------- |
| `innerInstructions`    | `array \| null`       | `array \| null`       | omitted                    |
| `logMessages`          | `array \| null`       | `array \| null`       | omitted                    |
| `loadedAddresses`      | `object`              | omitted               | omitted                    |
| `returnData`           | `object \| undefined` | `object \| undefined` | omitted                    |
| `computeUnitsConsumed` | `u64 \| undefined`    | `u64 \| undefined`    | omitted                    |
| `costUnits`            | `u64 \| undefined`    | `u64 \| undefined`    | omitted                    |
| `rewards`              | `array \| null`       | `array \| null`       | `array \| null \| omitted` |

In `accounts` responses, `rewards` is omitted when `showRewards` is `false`.
Otherwise it serializes as an array or `null`.

<CodeReference>

```jsonc !!
{
  // !hover(1:102) meta
  "meta": {
    // !hover meta.err
    "err": null,
    // !hover meta.fee
    "fee": 8772,
    // !hover(1:13) meta.innerInstructions
    "innerInstructions": [
      {
        "index": 2,
        "instructions": [
          {
            "accounts": [0, 0, 10, 4, 2, 1, 12, 13, 16, 18, 16, 17, 14, 11],
            "data": "3UnF8KPv9rbpD1e4dSEq3QqVZa",
            "programIdIndex": 15,
            "stackHeight": 2
          }
        ]
      }
    ],
    // !hover(1:8) meta.logMessages
    "logMessages": [
      "Program ComputeBudget111111111111111111111111111111 invoke [1]",
      "Program ComputeBudget111111111111111111111111111111 success",
      "Program ComputeBudget111111111111111111111111111111 invoke [1]",
      "Program ComputeBudget111111111111111111111111111111 success",
      "Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]",
      "Program log: Instruction: Route"
    ],
    // !hover meta.postBalances
    "postBalances": [435302465, 2039280, 2039280, 946560, 1, 1, 6184956904, 0],
    // !hover(1:26) meta.postTokenBalances
    "postTokenBalances": [
      {
        "accountIndex": 1,
        "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "owner": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
        "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        "uiTokenAmount": {
          "amount": "0",
          "decimals": 6,
          "uiAmount": null,
          "uiAmountString": "0"
        }
      },
      {
        "accountIndex": 2,
        "mint": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
        "owner": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
        "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        "uiTokenAmount": {
          "amount": "466231747",
          "decimals": 6,
          "uiAmount": 466.231747,
          "uiAmountString": "466.231747"
        }
      }
    ],
    // !hover meta.preBalances
    "preBalances": [435311237, 2039280, 2039280, 946560, 1, 1, 6184956904, 0],
    // !hover(1:26) meta.preTokenBalances
    "preTokenBalances": [
      {
        "accountIndex": 1,
        "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "owner": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
        "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        "uiTokenAmount": {
          "amount": "466190218",
          "decimals": 6,
          "uiAmount": 466.190218,
          "uiAmountString": "466.190218"
        }
      },
      {
        "accountIndex": 2,
        "mint": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
        "owner": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
        "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        "uiTokenAmount": {
          "amount": "0",
          "decimals": 6,
          "uiAmount": null,
          "uiAmountString": "0"
        }
      }
    ],
    // !hover meta.rewards
    "rewards": null,
    // !hover(1:13) meta.loadedAddresses
    "loadedAddresses": {
      // !hover(1:6) meta.loadedAddresses.readonly
      "readonly": [
        "MNFSTqtC93rEfYHB6hF82sKdZpUDFWkViLByLd1k1Ms",
        "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"
      ],
      // !hover(1:5) meta.loadedAddresses.writable
      "writable": [
        "8sjV1AqBFvFuADBCQHhotaRq5DFFYSjjg1jMyVWMqXvZ",
        "9x85APtURYxxxosTmJhvZWBmPSoTMqhYHz4tBnJ7N4T8",
        "CNRQ2Q5YURFcQrATzYeKUWgKUoBDfqzkDrRWf21UXCVo"
      ]
    },
    // !hover(1:4) meta.returnData
    "returnData": {
      // !hover meta.returnData.programId
      "programId": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      // !hover meta.returnData.data
      "data": ["wyHKGwAAAAA=", "base64"]
    },
    // !hover meta.computeUnitsConsumed
    "computeUnitsConsumed": 35804,
    // !hover meta.costUnits
    "costUnits": 40132,
    // !hover(1:3) meta.status
    "status": {
      // !hover meta.status.Ok
      "Ok": null
    }
  }
}
```

## !reference

### !! meta

!type object

#### !! err

!type string | object | null

Transaction error. `null` means the transaction succeeded. Simple error variants
serialize as strings, while variants with extra data serialize as objects keyed
by the variant name. For example, `InstructionError` serializes as
`{"InstructionError": [instructionIndex, instructionError]}`. Uses the structure
documented in [Transaction Errors](#transaction-errors).

#### !! fee

!type u64

Fee charged for the transaction, in lamports.

#### !! innerInstructions

!type array[object] | null | undefined

List of [inner instructions](/docs/rpc/json-structures#inner-instructions).
Present in full and `jsonParsed` transaction metadata responses. `null` if inner
instruction recording was not enabled during this transaction. Omitted in
`accounts` mode responses.

#### !! logMessages

!type array[string] | null | undefined

Program log output captured during execution. Present in full and `jsonParsed`
transaction metadata responses. `null` if log recording was not enabled during
this transaction. Omitted in `accounts` mode responses.

#### !! postBalances

!type array[u64]

Lamport balances from after the transaction was processed, indexed to the
transaction's full account key list. For versioned transactions, this includes
lookup-loaded addresses in addition to the static message keys.

#### !! postTokenBalances

!type array[object] | null

List of [token balances](/docs/rpc/json-structures#token-balances) from after
the transaction was processed. `null` if token balance recording was not
available during this transaction.

#### !! preBalances

!type array[u64]

Lamport balances from before the transaction was processed, indexed to the
transaction's full account key list. For versioned transactions, this includes
lookup-loaded addresses in addition to the static message keys.

#### !! preTokenBalances

!type array[object] | null

List of [token balances](/docs/rpc/json-structures#token-balances) from before
the transaction was processed. `null` if token balance recording was not
available during this transaction.

#### !! rewards

!type array[object] | null | undefined

Rewards applied while processing the transaction. `null` if rewards were not
recorded or were disabled in full/`jsonParsed` transaction responses. Omitted in
`accounts` mode when rewards are disabled. Uses the structure documented in
[Rewards](#rewards).

#### !! loadedAddresses

!type object

Loaded account addresses resolved from lookup tables. Present in full
non-`jsonParsed` transaction metadata responses. This field is always serialized
as an object, using empty arrays when no addresses were loaded. Omitted for
`jsonParsed` and `accounts` responses. Uses the structure documented in
[Loaded Addresses](#loaded-addresses).

#### !! returnData

!type object | undefined

Most recent return data generated by an instruction in the transaction. Present
in full and `jsonParsed` transaction metadata responses when available. Omitted
if no instruction generated return data, and omitted in `accounts` mode. Uses
the structure documented in [Return Data](#return-data).

#### !! computeUnitsConsumed

!type u64 | undefined

Number of [compute units](/docs/core/fees/compute-budget) consumed by the
transaction. Present when available in full and `jsonParsed` transaction
responses; omitted otherwise and in `accounts` mode.

#### !! costUnits

!type u64 | undefined

Total cost-model units charged by the transaction. Present when available in
full and `jsonParsed` transaction responses; omitted otherwise and in `accounts`
mode.

#### !! status

!type object

DEPRECATED: Transaction status that mirrors `err`.

##### !! Ok

!type null

Deprecated success marker.

##### !! Err

!type string | object

Deprecated failure payload. Uses the same structure documented in
[Transaction Errors](#transaction-errors).

</CodeReference>

### Transaction Errors

Transaction errors serialize as a string or a variant-tagged object:

| Reference       | Details                                                                                                                    |
| --------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Included in     | [Transaction Status Metadata](#transaction-status-metadata); [Simulation Results](#simulation-results)                     |
| Response path   | `err`                                                                                                                      |
| Type Definition | [`UiTransactionError`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L239-L327) |

Simple variants appear as a string:

<CodeReference>

```jsonc !!
// !hover transactionError.string
"BlockhashNotFound"
```

## !reference

### !! transactionError

!type string | object

Serialized transaction error value.

#### !! string

!type string

Simple error variant encoded as a string, such as `"BlockhashNotFound"`.

</CodeReference>

Variants with additional data appear as an object, for example:

<CodeReference>

```jsonc !!
// !hover(1:8) transactionError.object
{
  // !hover(1:6) transactionError.object.InstructionError
  "InstructionError": [
    // !hover transactionError.object.InstructionError.instructionIndex
    0,
    // !hover(1:3) transactionError.object.InstructionError.instructionError
    {
      "Custom": 1
    }
  ]
}
```

## !reference

### !! transactionError

!type string | object

Serialized transaction error value.

#### !! object

!type object

Tuple and struct variants serialize as an object keyed by the variant name.

##### !! InstructionError

!type [u8, string | object]

Instruction error tuple containing:

###### !! instructionIndex

!type u8

Zero-based index of the outer instruction in `transaction.message.instructions`.

###### !! instructionError

!type string | object

Serialized instruction error value. This may be a string such as
`"InvalidArgument"` or an object such as `{"Custom": 1}`.

</CodeReference>

### Inner Instructions

When an instruction in a transaction makes a
[cross-program invocation](/docs/core/cpi) (CPI), the invoked instructions are
detailed under `innerInstructions`.

| Reference        | Details                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Included in      | [Transaction Status Metadata](#transaction-status-metadata); [Simulation Results](#simulation-results)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Response path    | `innerInstructions`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Type Definitions | [`UiCompiledInstruction`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L542-L550), [`UiInstruction`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L563-L569), [`UiParsedInstruction`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L571-L576), [`UiPartiallyDecodedInstruction`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L578-L586), [`UiInnerInstructions`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L597-L604) |

- `index: u8` – Index of the instruction at
  `transaction.message.instructions[index]` that made the CPI.
- `instructions: array[object]` – List of CPI instructions invoked by the
  instruction at `index`, encoded as Json or JsonParsed objects.

Transaction responses use the form matching the requested transaction encoding:
`json` returns compiled instructions with account indexes, while `jsonParsed`
returns parsed or partially decoded instructions with base-58 encoded addresses.
[Simulation Results](#simulation-results) always use the JSON Parsed form.

#### JSON Parsed

<CodeReference>

```jsonc !!
// !hover(1:56) innerInstructions
"innerInstructions": [
  {
    // !hover innerInstructions.index
    "index": 5,
    // !hover(1:51) innerInstructions.instructions
    "instructions": [
      {
        "accounts": [
          "5PHirr8joyTMp9JMm6nW7hNDVyEYdkzDqazxPD7RaTjx",
          "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"
        ],
        "data": "2BfZXS1GQrCLZ1vzWVcaYz6Kpzd9QSStQWUgg9fK2UEsEo",
        "programId": "pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ",
        "stackHeight": 2
      },
      {
        // !hover(1:15) innerInstructions.instructions.parsed
        "parsed": {
          // !hover(1:12) innerInstructions.instructions.parsed.info
          "info": {
            "authority": "44ZsKstjBY52Zz1iB9Q9HqVPbpK4d6BqAJgqshz1bXPs",
            "destination": "mKLWCKDeHeym4egVLMTLNV661E1FsHarXvYr6pwAFPz",
            "mint": "HTi6JahmSzq2s1B2zg7GG6Ev6cQEpoGRDRxKWATYpump",
            "source": "DocSpnPnyffShXENq9xKSuL68GeScV7HsQnZw5X65LSb",
            "tokenAmount": {
              "amount": "175173728464",
              "decimals": 6,
              "uiAmount": 175173.728464,
              "uiAmountString": "175173.728464"
            }
          },
          // !hover innerInstructions.instructions.parsed.type
          "type": "transferChecked"
        },
        // !hover innerInstructions.instructions.program
        "program": "spl-token",
        // !hover innerInstructions.instructions.programId
        "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
        // !hover innerInstructions.instructions.stackHeight
        "stackHeight": 2
      },
      {
        // !hover(1:15) innerInstructions.instructions.parsed
        "parsed": {
          // !hover(1:12) innerInstructions.instructions.parsed.info
          "info": {
            "authority": "8YFbpsQqUkzmcLHrSDR44LN9DeGrV47rtwETN4sM6V4i",
            "destination": "5eHy2DQ7cQjEw2PoEfxvUd5rttzr2NydmGhKpQHk2TdM",
            "mint": "So11111111111111111111111111111111111111112",
            "source": "2vu4YeTiCp5qfqDLAfAS5fPUGp7o24borXCGctbzR5Uc",
            "tokenAmount": {
              "amount": "106318851",
              "decimals": 9,
              "uiAmount": 0.106318851,
              "uiAmountString": "0.106318851"
            }
          },
          // !hover innerInstructions.instructions.parsed.type
          "type": "transferChecked"
        },
        // !hover innerInstructions.instructions.program
        "program": "spl-token",
        // !hover innerInstructions.instructions.programId
        "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        // !hover innerInstructions.instructions.stackHeight
        "stackHeight": 2
      }
    ]
  }
]
```

## !reference

### !! innerInstructions

!type array[object]

#### !! index

!type u8

Index of the instruction at `transaction.message.instructions[index]` that made
the CPI.

#### !! instructions

!type array[object]

List of CPI instructions invoked by the instruction at `index`. Each instruction
is either fully parsed or partially decoded.

##### !! parsed

!type object | undefined

Parser output when the program is recognized. Present when the instruction was
fully parsed:

###### !! info

!type object

Program specific data returned by the parser.

###### !! type

!type string

Instruction name identified by the parser.

##### !! program

!type string | undefined

Name of the program the CPI is being made to. Present when the instruction was
fully parsed.

##### !! programId

!type string

Program ID of the program the CPI is being made to.

##### !! stackHeight

!type u32 | null

CPI depth.

##### !! accounts

!type array[string] | undefined

Account addresses referenced by the instruction, in order. Present when the
instruction was partially decoded because the RPC node did not have a parser for
the program.

##### !! data

!type string | undefined

Instruction data, base-58 encoded. Present when the instruction was partially
decoded because the RPC node did not have a parser for the program.

</CodeReference>

#### JSON

<CodeReference>

```jsonc !!
// !hover(1:31) innerInstructions
"innerInstructions": [
  {
    // !hover innerInstructions.index
    "index": 5,
    // !hover(1:26) innerInstructions.instructions
    "instructions": [
      {
        // !hover innerInstructions.instructions.accounts
        "accounts": [28, 16],
        // !hover innerInstructions.instructions.data
        "data": "2BfZXS1GQrCLZ1vzWVcaYz6Kpzd9QSStQWUgg9fK2UEsEo",
        // !hover innerInstructions.instructions.programIdIndex
        "programIdIndex": 29,
        // !hover innerInstructions.instructions.stackHeight
        "stackHeight": 2
      },
      {
        // !hover innerInstructions.instructions.accounts
        "accounts": [6, 5, 7, 0],
        // !hover innerInstructions.instructions.data
        "data": "imDtMm9P2f2U5",
        // !hover innerInstructions.instructions.programIdIndex
        "programIdIndex": 25,
        // !hover innerInstructions.instructions.stackHeight
        "stackHeight": 2
      },
      {
        // !hover innerInstructions.instructions.accounts
        "accounts": [8, 19, 3, 4],
        // !hover innerInstructions.instructions.data
        "data": "g9PBeEKHUSc7i",
        // !hover innerInstructions.instructions.programIdIndex
        "programIdIndex": 14,
        // !hover innerInstructions.instructions.stackHeight
        "stackHeight": 2
      },
      {
        // !hover innerInstructions.instructions.accounts
        "accounts": [8, 19, 9, 4],
        // !hover innerInstructions.instructions.data
        "data": "ghWmjs5Cndrfz",
        // !hover innerInstructions.instructions.programIdIndex
        "programIdIndex": 14,
        // !hover innerInstructions.instructions.stackHeight
        "stackHeight": 2
      }
    ]
  }
]
```

## !reference

### !! innerInstructions

!type array[object]

#### !! index

!type u8

Index of the instruction at `transaction.message.instructions[index]` that made
the CPI.

#### !! instructions

!type array[object]

List of CPI instructions invoked by the instruction at `index`, encoded as Json
or JsonParsed objects.

##### !! accounts

!type array[u8]

Indexes into the transaction's account key space for the accounts passed to the
program the CPI is being made to. For versioned transactions, lookup-loaded
addresses are appended after the static message keys.

##### !! data

!type string

Base58 encoded instruction data passed to the program the CPI is being made to.

##### !! programIdIndex

!type u8

Index into the transaction's account key space of the Program ID for the program
the CPI is being made to. For versioned transactions, lookup-loaded addresses
are appended after the static message keys.

##### !! stackHeight

!type u32 | null

Depth of the CPI call.

</CodeReference>

### Token Balances

The JSON structure of token balances is defined as a list of objects in the
following structure:

| Reference        | Details                                                                                                                                                                                                                                              |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Included in      | [Transaction Status Metadata](#transaction-status-metadata); [Simulation Results](#simulation-results)                                                                                                                                               |
| Response path    | `preTokenBalances[]`, `postTokenBalances[]`                                                                                                                                                                                                          |
| Type Definitions | [`UiTransactionTokenBalance`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L485-L501), [`UiTokenAmount`](https://github.com/anza-xyz/agave/blob/v3.1.8/account-decoder-client-types/src/token.rs#L6-L13) |

<CodeReference>

```jsonc !!
// !hover(1:26) postTokenBalances
"postTokenBalances": [
  {
    // !hover postTokenBalances.accountIndex
    "accountIndex": 1,
    // !hover postTokenBalances.mint
    "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    // !hover postTokenBalances.owner
    "owner": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
    // !hover postTokenBalances.programId
    "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    // !hover(1:6) postTokenBalances.uiTokenAmount
    "uiTokenAmount": {
      // !hover postTokenBalances.uiTokenAmount.amount
      "amount": "0",
      // !hover postTokenBalances.uiTokenAmount.decimals
      "decimals": 6,
      // !hover postTokenBalances.uiTokenAmount.uiAmount
      "uiAmount": null,
      // !hover postTokenBalances.uiTokenAmount.uiAmountString
      "uiAmountString": "0"
    }
  },
  {
    // !hover postTokenBalances.accountIndex
    "accountIndex": 2,
    // !hover postTokenBalances.mint
    "mint": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    // !hover postTokenBalances.owner
    "owner": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
    // !hover postTokenBalances.programId
    "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    // !hover(1:6) postTokenBalances.uiTokenAmount
    "uiTokenAmount": {
      // !hover postTokenBalances.uiTokenAmount.amount
      "amount": "466231747",
      // !hover postTokenBalances.uiTokenAmount.decimals
      "decimals": 6,
      // !hover postTokenBalances.uiTokenAmount.uiAmount
      "uiAmount": 466.231747,
      // !hover postTokenBalances.uiTokenAmount.uiAmountString
      "uiAmountString": "466.231747"
    }
  }
],

// !hover(1:26) preTokenBalances
"preTokenBalances": [
  {
    // !hover preTokenBalances.accountIndex
    "accountIndex": 1,
    // !hover preTokenBalances.mint
    "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    // !hover preTokenBalances.owner
    "owner": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
    // !hover preTokenBalances.programId
    "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    // !hover(1:6) preTokenBalances.uiTokenAmount
    "uiTokenAmount": {
      // !hover preTokenBalances.uiTokenAmount.amount
      "amount": "466190218",
      // !hover preTokenBalances.uiTokenAmount.decimals
      "decimals": 6,
      // !hover preTokenBalances.uiTokenAmount.uiAmount
      "uiAmount": 466.190218,
      // !hover preTokenBalances.uiTokenAmount.uiAmountString
      "uiAmountString": "466.190218"
    }
  },
  {
    // !hover preTokenBalances.accountIndex
    "accountIndex": 2,
    // !hover preTokenBalances.mint
    "mint": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    // !hover preTokenBalances.owner
    "owner": "a1Xnxu7n1Rmeph9KP4Q1Cx7o8EPUN16fwPZHQ8ncVLa",
    // !hover preTokenBalances.programId
    "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    // !hover(1:6) preTokenBalances.uiTokenAmount
    "uiTokenAmount": {
      // !hover preTokenBalances.uiTokenAmount.amount
      "amount": "0",
      // !hover preTokenBalances.uiTokenAmount.decimals
      "decimals": 6,
      // !hover preTokenBalances.uiTokenAmount.uiAmount
      "uiAmount": null,
      // !hover preTokenBalances.uiTokenAmount.uiAmountString
      "uiAmountString": "0"
    }
  }
]
```

## !reference

### !! postTokenBalances

!type array[object]

#### !! accountIndex

!type u8

Index of the account in which the token balance is provided for.

#### !! mint

!type string

Pubkey of the token's mint.

#### !! owner

!type string | undefined

Pubkey of token balance's owner. Omitted if the validator did not record it.

#### !! programId

!type string | undefined

Pubkey of the Token program that owns the account. Omitted if the validator did
not record it.

#### !! uiTokenAmount

!type object

##### !! amount

!type string

Raw amount of tokens as a string, ignoring decimals.

##### !! decimals

!type u8

Number of decimals configured for token's mint.

##### !! uiAmount

!type number | null

Token amount as a float, accounting for decimals. **DEPRECATED**

##### !! uiAmountString

!type string

Token amount as a string, accounting for decimals.

### !! preTokenBalances

!type array[object]

#### !! accountIndex

!type u8

Index of the account in which the token balance is provided for.

#### !! mint

!type string

Pubkey of the token's mint.

#### !! owner

!type string | undefined

Pubkey of token balance's owner. Omitted if the validator did not record it.

#### !! programId

!type string | undefined

Pubkey of the Token program that owns the account. Omitted if the validator did
not record it.

#### !! uiTokenAmount

!type object

##### !! amount

!type string

Raw amount of tokens as a string, ignoring decimals.

##### !! decimals

!type u8

Number of decimals configured for token's mint.

##### !! uiAmount

!type number | null

Token amount as a float, accounting for decimals. **DEPRECATED**

##### !! uiAmountString

!type string

Token amount as a string, accounting for decimals.

</CodeReference>

### Rewards

Transaction and block metadata may include rewards:

| Reference       | Details                                                                                                        |
| --------------- | -------------------------------------------------------------------------------------------------------------- |
| Included in     | [Confirmed Blocks](#confirmed-blocks); [Transaction Status Metadata](#transaction-status-metadata)             |
| Response path   | `rewards[]`                                                                                                    |
| Type Definition | [`Reward`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L208-L218) |

<CodeReference>

```jsonc !!
// !hover(1:9) rewards
"rewards": [
  {
    // !hover rewards.pubkey
    "pubkey": "7PmWxxiTneGteGxEYvzj5pGDVMQ4nuN9DfUypEXmaA8o",
    // !hover rewards.lamports
    "lamports": 0,
    // !hover rewards.postBalance
    "postBalance": 637848765,
    // !hover rewards.rewardType
    "rewardType": "Voting",
    // !hover rewards.commission
    "commission": 0
  }
]
```

## !reference

### !! rewards

!type array[object]

Rewards applied while processing a transaction or block.

#### !! pubkey

!type string

Rewarded account pubkey, as a base-58 encoded string.

#### !! lamports

!type i64

Lamports credited or debited by this reward entry.

#### !! postBalance

!type u64

Account balance after the reward was applied.

#### !! rewardType

!type string | null

Reward category. When present, the value is `Fee`, `Rent`, `Voting`, or
`Staking`.

#### !! commission

!type u8 | null

Vote-account commission at the time of the reward. Present only for voting and
staking rewards; otherwise `null`.

</CodeReference>

### Loaded Addresses

Transaction metadata may include loaded addresses resolved from lookup tables:

| Reference       | Details                                                                                                                   |
| --------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Included in     | [Transaction Status Metadata](#transaction-status-metadata); [Simulation Results](#simulation-results)                    |
| Response path   | `loadedAddresses`                                                                                                         |
| Type Definition | [`UiLoadedAddresses`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L451-L474) |

<CodeReference>

```jsonc !!
// !hover(1:13) loadedAddresses
"loadedAddresses": {
  // !hover(1:5) loadedAddresses.writable
  "writable": [
    "8sjV1AqBFvFuADBCQHhotaRq5DFFYSjjg1jMyVWMqXvZ",
    "9x85APtURYxxxosTmJhvZWBmPSoTMqhYHz4tBnJ7N4T8",
    "CNRQ2Q5YURFcQrATzYeKUWgKUoBDfqzkDrRWf21UXCVo"
  ],
  // !hover(1:6) loadedAddresses.readonly
  "readonly": [
    "MNFSTqtC93rEfYHB6hF82sKdZpUDFWkViLByLd1k1Ms",
    "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"
  ]
}
```

## !reference

### !! loadedAddresses

!type object

Loaded account addresses resolved from lookup tables.

#### !! writable

!type array[string]

Ordered list of writable loaded-account addresses, as base-58 encoded strings.

#### !! readonly

!type array[string]

Ordered list of readonly loaded-account addresses, as base-58 encoded strings.

</CodeReference>

### Return Data

Transaction metadata may include return data from the most recent instruction
that generated it:

| Reference        | Details                                                                                                                                                                                                                                                       |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Included in      | [Transaction Status Metadata](#transaction-status-metadata); [Simulation Results](#simulation-results)                                                                                                                                                        |
| Response path    | `returnData`                                                                                                                                                                                                                                                  |
| Type Definitions | [`UiTransactionReturnData`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L417-L443), [`UiReturnDataEncoding`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-status-client-types/src/lib.rs#L445-L449) |

<CodeReference>

```jsonc !!
// !hover(1:4) returnData
"returnData": {
  // !hover returnData.programId
  "programId": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
  // !hover returnData.data
  "data": ["wyHKGwAAAAA=", "base64"]
}
```

## !reference

### !! returnData

!type object

Most recent return data generated by an instruction in the transaction.

#### !! programId

!type string

Program that generated the return data, as a base-58 encoded pubkey.

#### !! data

!type [string, "base64"]

Return data payload and encoding. This field uses base-64 data with `"base64"`
encoding.

</CodeReference>
