# simulateTransactionsAtSlot

> For the complete documentation index, see [llms.txt](/docs/llms.txt).

POST https://solana-mainnet.g.alchemy.com/v2/{apiKey}

Simulates one or more transactions against the archived account state at a historical slot, using the real Solana runtime. It is a separate method from `simulateTransaction` and from Jito's `simulateBundle`, combining `simulateTransaction`'s "what would this do" question with `simulateBundle`'s multi-transaction sequencing, and extending both to any slot in the [Account Archive](/docs/solana/account-archive)'s coverage.

Up to 5 transactions execute in order over a single shared, mutable overlay: each successful transaction's writable-account changes are written back before the next entry runs, even across a slot change. The first failure aborts the rest of the sequence, which are marked `skipped`. `stateOverrides` lets you patch specific accounts (or the Clock sysvar) before each entry runs; everything you do not override keeps its archived value.

Response invariants:

- `simulationResults` is always an array, in request order, even
  for a single-entry request.

- `status` is authoritative; filter on it rather than on `err`,
  because `skipped` entries also carry `err: null`.

- A `failed` entry still ran, so it reports `feeLamports` and an
  empty (not `null`) `changedWritableAccounts`.

- A failed transaction returns a successful JSON-RPC response
  with the entry's `err` populated. Bad input (unknown fields,
  more than 5 simulations, decreasing slots, a vote-program
  transaction, an unparseable transaction) is a `-32602`
  JSON-RPC error, detected before anything executes.

- Each entry's `postExecutionAccounts` is filtered to only the
  accounts the simulation actually touched (its `stateOverrides`
  plus the transaction's writes); accounts named in
  `postExecutionAccountsConfigs` that the simulation did not
  touch are omitted from that entry (expect `[]` on a `success`
  whose transaction touched none of them).


Caps enforced before execution (each triggers `-32602` if exceeded): at most 5 simulations per request; 100 accounts per accounts config; 100 `stateOverrides` entries per simulation (10 MiB per `data` override); 128 unique transaction-referenced accounts per entry (static keys plus lookup-table entries); 25 MiB combined byte budget across the rendered result.

Notes on behavior worth knowing before you build:

- Durable-nonce transactions (an `AdvanceNonceAccount`
  instruction at index 0) validate against the archived nonce
  account's real state at that slot, not against a blockhash.

- Vote-program transactions are rejected outright with `-32602`
  because vote accounts are not in the archive.

- `sigVerify: true` requires `replaceRecentBlockhash: false`,
  since replacing the blockhash would invalidate signatures;
  sending both as `true` is refused with `-32602`.

- The simulator pins a single Agave/SVM release, so very old
  slots fall outside what the current build can reproduce
  faithfully. The usable window is recent history and grows
  over time as the backfill pipeline extends further back.

Reference: https://www.alchemy.com/docs/chains/solana/solana-api-endpoints/simulate-transactions-at-slot

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| Simulation request | object | Yes | A single object containing the ordered simulations, optional pre- and post-execution account captures, and the execution flags (`innerInstructions`, `sigVerify`, `replaceRecentBlockhash`). |

## Result

**Simulation results** (object): A context slot plus the per-simulation execution results. `simulationResults` is always present and in request order, even for a single-entry request.

## Example

### Request

```json
{
  "jsonrpc": "2.0",
  "method": "simulateTransactionsAtSlot",
  "params": [
    {
      "simulations": [
        {
          "slot": 400000000,
          "encodedTransaction": "AVshRNwSzqLB+PQb2vsbiK/ZUNZuyrcWvArv9sv9/AQieAx9gXlF0MApk8AZpYh6ESEbchfb8BBg7VYJrKJdeQ4BAAEDiojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1yBOXcOqH0XX1ajVGbDTH7My42KkbTuN6Jd9g9bj8mzlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEBAgIAAQwCAAAAQEIPAAAAAAA="
        }
      ],
      "postExecutionAccountsConfigs": {
        "accounts": [
          "9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu"
        ],
        "encoding": "base64"
      },
      "innerInstructions": false,
      "sigVerify": false,
      "replaceRecentBlockhash": true
    }
  ],
  "id": 1
}
```

### Response

```json
{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "apiVersion": "2.3.3",
      "slot": 400000000
    },
    "value": {
      "preExecutionAccounts": null,
      "simulationResults": [
        {
          "slot": 400000000,
          "status": "success",
          "err": null,
          "replacementBlockhash": "FwRYtTPRk5N4wUeP87rTw9kQVSwigB6kbikGzzeCMrW5",
          "logs": [
            "Program 11111111111111111111111111111111 invoke [1]",
            "Program 11111111111111111111111111111111 success"
          ],
          "unitsConsumed": 150,
          "feeLamports": 5000,
          "changedWritableAccounts": [
            "AKnL4NNf3DGWZJS6cPknBuEGnVsV4A4m5tgebLHaRSZ9",
            "9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu"
          ],
          "postExecutionAccounts": [
            {
              "address": "9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu",
              "account": {
                "lamports": 1001000000,
                "owner": "11111111111111111111111111111111",
                "executable": false,
                "rentEpoch": 18446744073709552000,
                "data": [
                  "",
                  "base64"
                ],
                "space": 0
              }
            }
          ],
          "innerInstructions": null,
          "returnData": null,
          "loadedAccountsDataSize": 0,
          "loadedAddresses": null
        }
      ]
    }
  },
  "id": 1
}
```

## Code Examples

### cURL

```bash
curl --request POST \
  --url https://solana-mainnet.g.alchemy.com/v2/docs-demo \
  --header 'Content-Type: application/json' \
  --data '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "simulateTransactionsAtSlot",
  "params": [
    {
      "simulations": [
        {
          "slot": 400000000,
          "encodedTransaction": "AVshRNwSzqLB+PQb2vsbiK/ZUNZuyrcWvArv9sv9/AQieAx9gXlF0MApk8AZpYh6ESEbchfb8BBg7VYJrKJdeQ4BAAEDiojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1yBOXcOqH0XX1ajVGbDTH7My42KkbTuN6Jd9g9bj8mzlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEBAgIAAQwCAAAAQEIPAAAAAAA="
        }
      ],
      "postExecutionAccountsConfigs": {
        "accounts": [
          "9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu"
        ],
        "encoding": "base64"
      },
      "innerInstructions": false,
      "sigVerify": false,
      "replaceRecentBlockhash": true
    }
  ]
}'
```

### JavaScript

```javascript
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'simulateTransactionsAtSlot',
    params: [
      {
        simulations: [
          {
            slot: 400000000,
            encodedTransaction: 'AVshRNwSzqLB+PQb2vsbiK/ZUNZuyrcWvArv9sv9/AQieAx9gXlF0MApk8AZpYh6ESEbchfb8BBg7VYJrKJdeQ4BAAEDiojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1yBOXcOqH0XX1ajVGbDTH7My42KkbTuN6Jd9g9bj8mzlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEBAgIAAQwCAAAAQEIPAAAAAAA='
          }
        ],
        postExecutionAccountsConfigs: {accounts: ['9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu'], encoding: 'base64'},
        innerInstructions: false,
        sigVerify: false,
        replaceRecentBlockhash: true
      }
    ]
  })
};

fetch('https://solana-mainnet.g.alchemy.com/v2/docs-demo', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://solana-mainnet.g.alchemy.com/v2/docs-demo"

payload = {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "simulateTransactionsAtSlot",
    "params": [
        {
            "simulations": [
                {
                    "slot": 400000000,
                    "encodedTransaction": "AVshRNwSzqLB+PQb2vsbiK/ZUNZuyrcWvArv9sv9/AQieAx9gXlF0MApk8AZpYh6ESEbchfb8BBg7VYJrKJdeQ4BAAEDiojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1yBOXcOqH0XX1ajVGbDTH7My42KkbTuN6Jd9g9bj8mzlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEBAgIAAQwCAAAAQEIPAAAAAAA="
                }
            ],
            "postExecutionAccountsConfigs": {
                "accounts": ["9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu"],
                "encoding": "base64"
            },
            "innerInstructions": False,
            "sigVerify": False,
            "replaceRecentBlockhash": True
        }
    ]
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

### Go

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://solana-mainnet.g.alchemy.com/v2/docs-demo"

	payload := strings.NewReader("{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"simulateTransactionsAtSlot\",\n  \"params\": [\n    {\n      \"simulations\": [\n        {\n          \"slot\": 400000000,\n          \"encodedTransaction\": \"AVshRNwSzqLB+PQb2vsbiK/ZUNZuyrcWvArv9sv9/AQieAx9gXlF0MApk8AZpYh6ESEbchfb8BBg7VYJrKJdeQ4BAAEDiojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1yBOXcOqH0XX1ajVGbDTH7My42KkbTuN6Jd9g9bj8mzlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEBAgIAAQwCAAAAQEIPAAAAAAA=\"\n        }\n      ],\n      \"postExecutionAccountsConfigs\": {\n        \"accounts\": [\n          \"9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu\"\n        ],\n        \"encoding\": \"base64\"\n      },\n      \"innerInstructions\": false,\n      \"sigVerify\": false,\n      \"replaceRecentBlockhash\": true\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
```

### Java

```java
HttpResponse<String> response = Unirest.post("https://solana-mainnet.g.alchemy.com/v2/docs-demo")
  .header("Content-Type", "application/json")
  .body("{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"simulateTransactionsAtSlot\",\n  \"params\": [\n    {\n      \"simulations\": [\n        {\n          \"slot\": 400000000,\n          \"encodedTransaction\": \"AVshRNwSzqLB+PQb2vsbiK/ZUNZuyrcWvArv9sv9/AQieAx9gXlF0MApk8AZpYh6ESEbchfb8BBg7VYJrKJdeQ4BAAEDiojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1yBOXcOqH0XX1ajVGbDTH7My42KkbTuN6Jd9g9bj8mzlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEBAgIAAQwCAAAAQEIPAAAAAAA=\"\n        }\n      ],\n      \"postExecutionAccountsConfigs\": {\n        \"accounts\": [\n          \"9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu\"\n        ],\n        \"encoding\": \"base64\"\n      },\n      \"innerInstructions\": false,\n      \"sigVerify\": false,\n      \"replaceRecentBlockhash\": true\n    }\n  ]\n}")
  .asString();
```

### C#

```csharp
using RestSharp;


var options = new RestClientOptions("https://solana-mainnet.g.alchemy.com/v2/docs-demo");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddJsonBody("{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"simulateTransactionsAtSlot\",\n  \"params\": [\n    {\n      \"simulations\": [\n        {\n          \"slot\": 400000000,\n          \"encodedTransaction\": \"AVshRNwSzqLB+PQb2vsbiK/ZUNZuyrcWvArv9sv9/AQieAx9gXlF0MApk8AZpYh6ESEbchfb8BBg7VYJrKJdeQ4BAAEDiojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1yBOXcOqH0XX1ajVGbDTH7My42KkbTuN6Jd9g9bj8mzlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEBAgIAAQwCAAAAQEIPAAAAAAA=\"\n        }\n      ],\n      \"postExecutionAccountsConfigs\": {\n        \"accounts\": [\n          \"9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu\"\n        ],\n        \"encoding\": \"base64\"\n      },\n      \"innerInstructions\": false,\n      \"sigVerify\": false,\n      \"replaceRecentBlockhash\": true\n    }\n  ]\n}", false);
var response = await client.PostAsync(request);

Console.WriteLine("{0}", response.Content);

```


## OpenRPC Method Specification

```yaml
name: simulateTransactionsAtSlot
summary: Simulates one or more transactions against archived Solana account state at a historical slot.
description: |-
  Simulates one or more transactions against the archived account state at a historical slot, using the real Solana runtime. It is a separate method from `simulateTransaction` and from Jito's `simulateBundle`, combining `simulateTransaction`'s "what would this do" question with `simulateBundle`'s multi-transaction sequencing, and extending both to any slot in the [Account Archive](/docs/solana/account-archive)'s coverage.

  Up to 5 transactions execute in order over a single shared, mutable overlay: each successful transaction's writable-account changes are written back before the next entry runs, even across a slot change. The first failure aborts the rest of the sequence, which are marked `skipped`. `stateOverrides` lets you patch specific accounts (or the Clock sysvar) before each entry runs; everything you do not override keeps its archived value.

  Response invariants:

  - `simulationResults` is always an array, in request order, even
    for a single-entry request.

  - `status` is authoritative; filter on it rather than on `err`,
    because `skipped` entries also carry `err: null`.

  - A `failed` entry still ran, so it reports `feeLamports` and an
    empty (not `null`) `changedWritableAccounts`.

  - A failed transaction returns a successful JSON-RPC response
    with the entry's `err` populated. Bad input (unknown fields,
    more than 5 simulations, decreasing slots, a vote-program
    transaction, an unparseable transaction) is a `-32602`
    JSON-RPC error, detected before anything executes.

  - Each entry's `postExecutionAccounts` is filtered to only the
    accounts the simulation actually touched (its `stateOverrides`
    plus the transaction's writes); accounts named in
    `postExecutionAccountsConfigs` that the simulation did not
    touch are omitted from that entry (expect `[]` on a `success`
    whose transaction touched none of them).


  Caps enforced before execution (each triggers `-32602` if exceeded): at most 5 simulations per request; 100 accounts per accounts config; 100 `stateOverrides` entries per simulation (10 MiB per `data` override); 128 unique transaction-referenced accounts per entry (static keys plus lookup-table entries); 25 MiB combined byte budget across the rendered result.

  Notes on behavior worth knowing before you build:

  - Durable-nonce transactions (an `AdvanceNonceAccount`
    instruction at index 0) validate against the archived nonce
    account's real state at that slot, not against a blockhash.

  - Vote-program transactions are rejected outright with `-32602`
    because vote accounts are not in the archive.

  - `sigVerify: true` requires `replaceRecentBlockhash: false`,
    since replacing the blockhash would invalidate signatures;
    sending both as `true` is refused with `-32602`.

  - The simulator pins a single Agave/SVM release, so very old
    slots fall outside what the current build can reproduce
    faithfully. The usable window is recent history and grows
    over time as the backfill pipeline extends further back.
x-compute-units: 1500
params:
  - name: Simulation request
    required: true
    description: A single object containing the ordered simulations, optional pre- and post-execution account captures, and the execution flags (`innerInstructions`, `sigVerify`, `replaceRecentBlockhash`).
    schema:
      title: SimulateTransactionsAtSlot Request
      type: object
      description: 'The full request body for `simulateTransactionsAtSlot`. The caller passes this as a single positional parameter (`params: [{...}]`).'
      required:
        - simulations
      properties:
        simulations:
          type: array
          minItems: 1
          maxItems: 5
          description: 'Ordered list of 1-5 transactions to simulate. They execute in order over a single shared overlay: each successful transaction''s writable-account changes are written back before the next entry runs, even across a slot change. The first failure aborts the rest of the sequence, which are marked `skipped`.'
          items:
            title: SimulateTransactionsAtSlot Simulation Entry
            type: object
            required:
              - encodedTransaction
            properties:
              encodedTransaction:
                type: string
                description: The transaction to simulate, encoded as a base64 string. `base58` is not accepted.
              slot:
                type: integer
                minimum: 0
                description: The finalized slot whose archived state this transaction executes against. If omitted, defaults to the previous entry's `slot` (the first entry defaults to the finalized tip). Slots across entries must be non-decreasing; a decreasing slot is refused with `-32602`.
              stateOverrides:
                type: object
                description: Optional map of account overrides applied to the archived state before this transaction runs. Up to 100 entries per simulation. Keys are base-58 pubkeys; values are either an account override or, for the Clock sysvar pubkey only, a Clock override. Mixing the two shapes on the Clock pubkey is refused.
                additionalProperties:
                  oneOf:
                    - title: SimulateTransactionsAtSlot Account Override
                      type: object
                      additionalProperties: false
                      description: Partial override of a single account's state. Only the fields present are overridden; every other field keeps its archived value. The combined byte size of all overridden `data` payloads is capped at 10 MiB per `data` override.
                      properties:
                        lamports:
                          type: integer
                          minimum: 0
                          description: Replacement lamport balance.
                        data:
                          description: Replacement account data. Either a bare base64 string, or a `[data, "base64"]` tuple. Base58 is not accepted.
                          oneOf:
                            - type: string
                            - type: array
                              minItems: 2
                              maxItems: 2
                              items:
                                type: string
                        owner:
                          title: Pubkey
                          type: string
                          description: Replacement owner program.
                        executable:
                          type: boolean
                          description: Replacement `executable` flag.
                    - title: SimulateTransactionsAtSlot Clock Sysvar Override
                      type: object
                      additionalProperties: false
                      description: Shape accepted only for the Clock sysvar pubkey (`SysvarC1ock11111111111111111111111111111111`). It overrides the clock fields that the runtime surfaces to programs. Mixing this shape with the generic account-override shape on the same key is refused.
                      properties:
                        unixTimestamp:
                          type: integer
                          description: Replacement UNIX timestamp (seconds).
                        slot:
                          type: integer
                          minimum: 0
                          description: Replacement clock slot.
                        epoch:
                          type: integer
                          minimum: 0
                          description: Replacement clock epoch.
        preExecutionAccountsConfigs:
          description: Accounts to capture once, from the archived state at the first simulation's slot, before any transaction runs. Omit to skip the pre-execution capture (`preExecutionAccounts` will be `null`).
          title: SimulateTransactionsAtSlot Accounts Config
          type: object
          required:
            - accounts
          properties:
            accounts:
              type: array
              maxItems: 100
              description: Base-58 pubkeys to capture (up to 100).
              items:
                title: Pubkey
                type: string
                description: Base-58 encoded public key.
            encoding:
              type: string
              enum:
                - base64
                - jsonParsed
              default: base64
              description: Encoding for the returned account data. Only `base64` (default) and `jsonParsed` are supported here (not `base58` or `base64+zstd`).
            dataSlice:
              type: array
              description: Per-account byte slice to return instead of the full `data`. Supply one entry per `accounts` entry (use `null` for accounts you do not want sliced), or omit the field entirely.
              items:
                oneOf:
                  - title: Data Slice
                    type: object
                    properties:
                      length:
                        type: integer
                        description: Number of bytes to return.
                      offset:
                        type: integer
                        description: Byte offset from which to start reading.
                  - type: 'null'
        postExecutionAccountsConfigs:
          description: Accounts to capture after every simulation, applied once per simulation entry. Only the subset of these accounts that the simulation actually touched (via its own `stateOverrides` or the transaction's writes) is returned on each entry; untouched requested accounts are omitted from that entry's `postExecutionAccounts`. Omit the config entirely to skip the post-execution capture (each entry's `postExecutionAccounts` will be `null`).
          title: SimulateTransactionsAtSlot Accounts Config
          type: object
          required:
            - accounts
          properties:
            accounts:
              type: array
              maxItems: 100
              description: Base-58 pubkeys to capture (up to 100).
              items:
                title: Pubkey
                type: string
                description: Base-58 encoded public key.
            encoding:
              type: string
              enum:
                - base64
                - jsonParsed
              default: base64
              description: Encoding for the returned account data. Only `base64` (default) and `jsonParsed` are supported here (not `base58` or `base64+zstd`).
            dataSlice:
              type: array
              description: Per-account byte slice to return instead of the full `data`. Supply one entry per `accounts` entry (use `null` for accounts you do not want sliced), or omit the field entirely.
              items:
                oneOf:
                  - title: Data Slice
                    type: object
                    properties:
                      length:
                        type: integer
                        description: Number of bytes to return.
                      offset:
                        type: integer
                        description: Byte offset from which to start reading.
                  - type: 'null'
        innerInstructions:
          type: boolean
          default: false
          description: If `true`, each entry's `innerInstructions` field is populated. Defaults to `false`, in which case `innerInstructions` is `null`.
        sigVerify:
          type: boolean
          default: false
          description: 'If `true`, the transaction signatures are verified. Requires `replaceRecentBlockhash: false` (sending both as `true` is refused with `-32602`, since replacing the blockhash would invalidate the signatures).'
        replaceRecentBlockhash:
          type: boolean
          default: true
          description: If `true` (the default), the simulator replaces the transaction's recent blockhash before execution so that archived or stale transactions still run.
examples:
  - name: simulateTransactionsAtSlot example
    params:
      - name: Simulation request
        value:
          simulations:
            - slot: 400000000
              encodedTransaction: AVshRNwSzqLB+PQb2vsbiK/ZUNZuyrcWvArv9sv9/AQieAx9gXlF0MApk8AZpYh6ESEbchfb8BBg7VYJrKJdeQ4BAAEDiojj3XQJ8ZX9UtstPLpdcspnCb8dlBIb83SIAbQPb1yBOXcOqH0XX1ajVGbDTH7My42KkbTuN6Jd9g9bj8mzlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEBAgIAAQwCAAAAQEIPAAAAAAA=
          postExecutionAccountsConfigs:
            accounts:
              - 9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu
            encoding: base64
          innerInstructions: false
          sigVerify: false
          replaceRecentBlockhash: true
    result:
      name: Simulation results
      value:
        context:
          apiVersion: 2.3.3
          slot: 400000000
        value:
          preExecutionAccounts: null
          simulationResults:
            - slot: 400000000
              status: success
              err: null
              replacementBlockhash: FwRYtTPRk5N4wUeP87rTw9kQVSwigB6kbikGzzeCMrW5
              logs:
                - Program 11111111111111111111111111111111 invoke [1]
                - Program 11111111111111111111111111111111 success
              unitsConsumed: 150
              feeLamports: 5000
              changedWritableAccounts:
                - AKnL4NNf3DGWZJS6cPknBuEGnVsV4A4m5tgebLHaRSZ9
                - 9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu
              postExecutionAccounts:
                - address: 9hSR6S7WPtxmTojgo6GG3k4yDPecgJY292j7xrsUGWBu
                  account:
                    lamports: 1001000000
                    owner: '11111111111111111111111111111111'
                    executable: false
                    rentEpoch: 18446744073709552000
                    data:
                      - ''
                      - base64
                    space: 0
              innerInstructions: null
              returnData: null
              loadedAccountsDataSize: 0
              loadedAddresses: null
result:
  name: Simulation results
  description: A context slot plus the per-simulation execution results. `simulationResults` is always present and in request order, even for a single-entry request.
  schema:
    title: SimulateTransactionsAtSlot Result
    type: object
    description: The RPC response envelope. `context.slot` echoes the first simulation's slot; the per-entry `slot` in each result is the per-entry truth for a sequence spanning multiple slots.
    properties:
      context:
        type: object
        properties:
          apiVersion:
            type: string
          slot:
            type: integer
            description: The first simulation's slot. For multi-slot sequences, read each entry's own `slot` instead.
      value:
        type: object
        properties:
          preExecutionAccounts:
            type: array
            nullable: true
            description: Snapshot of the accounts named in `preExecutionAccountsConfigs`, taken from archived state at the first simulation's slot. `null` if the config was omitted.
            items:
              title: SimulateTransactionsAtSlot Captured Account
              type: object
              description: A `{address, account}` pair for a captured account.
              properties:
                address:
                  title: Pubkey
                  type: string
                  description: Base-58 encoded public key.
                account:
                  nullable: true
                  description: Account state at the capture point, in the requested encoding, or `null` if the account did not exist.
                  title: Account Information
                  type: object
                  properties:
                    lamports:
                      type: integer
                      description: Number of lamports assigned to this account.
                    owner:
                      title: Pubkey
                      type: string
                      description: Program owner of this account.
                    data:
                      title: Account Data
                      type: array
                      description: Account data in the specified encoding format.
                      items:
                        type: string
                    executable:
                      type: boolean
                      description: Indicates if the account contains a program.
                    rentEpoch:
                      type: integer
                      description: The epoch at which this account will next owe rent.
                    size:
                      type: integer
                      description: The data size of the account.
          simulationResults:
            type: array
            description: One entry per simulation, in request order. Always present as an array, even for a single-entry request.
            items:
              title: SimulateTransactionsAtSlot Simulation Result
              type: object
              description: 'Execution outcome for one simulation. Filter on `status` rather than `err`: a `skipped` entry also carries `err: null`.'
              properties:
                slot:
                  type: integer
                  description: The slot this entry executed against.
                status:
                  type: string
                  enum:
                    - success
                    - failed
                    - skipped
                  description: Authoritative outcome. `success` executed cleanly; `failed` executed but the transaction reverted; `skipped` was aborted because an earlier entry failed.
                err:
                  nullable: true
                  description: The `TransactionError` for a `failed` entry, otherwise `null`. Note that a `skipped` entry also carries `null`.
                replacementBlockhash:
                  type: string
                  nullable: true
                  description: The blockhash the simulator substituted when `replaceRecentBlockhash` was `true`, as a bare base-58 string (not an object). `null` when the caller kept its own blockhash, when the transaction is durable-nonce, or when the entry was `skipped`.
                logs:
                  type: array
                  nullable: true
                  description: Program log messages produced during execution.
                  items:
                    type: string
                unitsConsumed:
                  type: integer
                  nullable: true
                  description: Compute units consumed by this transaction. `null` for a `skipped` entry.
                feeLamports:
                  type: integer
                  nullable: true
                  description: Fee charged to the payer. `null` only before fee assessment runs (for example, an unpayable fee payer); a `failed` entry still debits the payer and reports its fee.
                changedWritableAccounts:
                  type: array
                  description: Accounts the transaction actually mutated. Empty (`[]`, not `null`) for a `failed` entry that ran; `null` only for `skipped`.
                  nullable: true
                  items:
                    title: Pubkey
                    type: string
                    description: Base-58 encoded public key.
                postExecutionAccounts:
                  type: array
                  nullable: true
                  description: Captured accounts after this entry, filtered to only those that the simulation actually touched (via its own `stateOverrides` or the transaction's writes). Accounts named in `postExecutionAccountsConfigs` that this entry did not touch are omitted here (expect `[]` for a `success` entry whose transaction did not touch any requested account). `null` if the config was omitted or if the entry was `skipped`.
                  items:
                    title: SimulateTransactionsAtSlot Captured Account
                    type: object
                    description: A `{address, account}` pair for a captured account.
                    properties:
                      address:
                        title: Pubkey
                        type: string
                        description: Base-58 encoded public key.
                      account:
                        nullable: true
                        description: Account state at the capture point, in the requested encoding, or `null` if the account did not exist.
                        title: Account Information
                        type: object
                        properties:
                          lamports:
                            type: integer
                            description: Number of lamports assigned to this account.
                          owner:
                            title: Pubkey
                            type: string
                            description: Program owner of this account.
                          data:
                            title: Account Data
                            type: array
                            description: Account data in the specified encoding format.
                            items:
                              type: string
                          executable:
                            type: boolean
                            description: Indicates if the account contains a program.
                          rentEpoch:
                            type: integer
                            description: The epoch at which this account will next owe rent.
                          size:
                            type: integer
                            description: The data size of the account.
                innerInstructions:
                  type: array
                  nullable: true
                  description: 'Inner instructions produced during execution. `null` unless `innerInstructions: true` was set on the request.'
                  items:
                    title: SimulateTransactionsAtSlot Inner Instruction Group
                    type: object
                    description: Inner instructions emitted by a single top-level instruction.
                    properties:
                      index:
                        type: integer
                        description: Index into the transaction's top-level instructions array that produced these inner instructions.
                      instructions:
                        type: array
                        items:
                          type: object
                          properties:
                            programId:
                              title: Pubkey
                              type: string
                              description: Program invoked by this inner instruction.
                            accounts:
                              type: array
                              description: Accounts passed to the inner instruction.
                              items:
                                title: Pubkey
                                type: string
                                description: Base-58 encoded public key.
                            data:
                              type: string
                              description: Instruction data, base-58 encoded.
                            stackHeight:
                              type: integer
                              description: CPI stack depth at which this instruction was invoked.
                            program:
                              type: string
                              nullable: true
                              description: Human-readable program name when a parser is available, otherwise `null`.
                            parsed:
                              type: object
                              nullable: true
                              description: Parsed form of the instruction when a parser is available, otherwise `null`.
                              properties:
                                type:
                                  type: string
                                info:
                                  type: object
                returnData:
                  nullable: true
                  description: Program return data, if the transaction produced any, otherwise `null`.
                  type: object
                  properties:
                    programId:
                      title: Pubkey
                      type: string
                      description: Base-58 encoded public key.
                    data:
                      type: array
                      minItems: 2
                      maxItems: 2
                      description: '`[base64Data, "base64"]` tuple.'
                      items:
                        type: string
                loadedAccountsDataSize:
                  type: integer
                  nullable: true
                  description: Total loaded account data size for the transaction. `null` only before the loader ran.
                loadedAddresses:
                  nullable: true
                  description: Addresses resolved from address lookup tables, split by writability. `null` if no ALT was used or if the entry was `skipped`.
                  title: Loaded Addresses
                  type: object
                  properties:
                    writable:
                      type: array
                      description: Loaded writable addresses.
                      items:
                        title: Pubkey
                        type: string
                        description: Base-58 encoded public key.
                    readonly:
                      type: array
                      description: Loaded read-only addresses.
                      items:
                        title: Pubkey
                        type: string
                        description: Base-58 encoded public key.
errors:
  - code: -32602
    message: 'Invalid params. Common causes include: unknown fields on the request, more than 5 simulations, a slot that decreases relative to a preceding entry, a vote-program transaction, an unparseable transaction, `sigVerify: true` without `replaceRecentBlockhash: false`, exceeding one of the per-request caps (100 accounts per accounts config, 100 `stateOverrides` per simulation, 128 unique transaction-referenced accounts per entry, 25 MiB combined result budget), or a `stateOverrides` entry on the Clock sysvar key that mixes the account-override and Clock-override shapes.'
  - code: -32601
    message: Method not found.
  - code: -32603
    message: Internal error. Retry the request; if it persists, contact support.
```
