> For the complete documentation index, see [llms.txt](https://docs.termina.technology/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.termina.technology/documentation/developer-docs-zh/ji-shu-she-zhi-zhi-nan/kuai-su-ru-men.md).

# 快速入门

{% stepper %}
{% step %}

#### 创建会话

在指定的 slot 范围内启动新的模拟会话。

* `startSlot` / `endSlot`：模拟范围（包含起止 slot）。
* `signerFilter`（可选）：跳过由这些地址签名的历史交易。
* `disconnectTimeoutSecs`（可选）：断开连接后会话的保持时间（最长 900 秒）。

此方法需要在请求头中传入 `X-API-Key`。

{% code title="// via websocket to `ws(s)://<host>/backtest`" %}

```json
{
  "method": "createBacktestSession",
  "params": {
    "startSlot": 123456,
    "endSlot": 234567,
    "signerFilter": ["addr..."],
    "disconnectTimeoutSecs": 30
  }
}
```

{% endcode %}

服务器还会先发送一条初始 `slotNotification`（对应 `startSlot`），会话就绪后再发送 `readyForContinue`。请使用返回的 RPC 端点进行该会话的交互。

```json
{
  "method": "sessionCreated",
  "params": {
    "sessionId": "<session_id>",
    "rpcEndpoint": "/backtest/<session_id>"
  }
}
```

> 在会话期间，此 WebSocket 连接必须保持打开。一旦连接关闭，会话将被终止，所有账户状态也会被删除。
> {% endstep %}

{% step %}

#### 读取账户

每个会话都在 `/backtest/<session_id>` 提供标准的 Solana JSON-RPC 方法和订阅，包括：

* `getAccountInfo`, `getBalance`, `getMultipleAccounts`
* `accountSubscribe`, `programSubscribe`, `signatureSubscribe`&#x20;

> 请参阅 [API 参考](/documentation/developer-docs-zh/ji-shu-she-zhi-zhi-nan/api-can-kao.md#api-table)，了解支持的全部 Solana 订阅方法。
> {% endstep %}

{% step %}

#### 发送交易

自定义交易支持两种提交方式：

* **RPC 方式：**
  * 通过标准 Solana RPC 方法 `sendTransaction` 提交交易。
  * 这些交易会在当前 slot 中、历史区块交易之后立即执行。
* **WebSocket 方式：**
  * 在 `continue` 请求中附带 base64 编码的交易。
  * 这些交易会批量执行，并同时触发模拟推进到下一个 slot。

每个 slot 的执行顺序：

1. 历史区块交易。
2. 用户通过 RPC `sendTransaction` 提交的交易。
3. 用户在 `continue` 批次中包含的交易。
   {% endstep %}

{% step %}

#### 执行 slot

模拟器从 `startSlot` 开始，并等待明确的 `continue` 指令后才会继续执行后续 slot。

* `advanceCount`：暂停并等待用户操作之前要执行的 slot 数量，省略时默认为 `1`。
* `transactions`：自定义交易。
* `modifyAccountStates`：执行前应用的账户覆盖。

{% code title="// via websocket to `/backtest/<session_id>`" %}

```json
{
  "method": "continue",
  "params": {
    "advanceCount": 1,
    "transactions": ["<base64_encoded_transaction>"],
    "modifyAccountStates": {
      "addr...": {
        "data": {
          "data": "<base64_bytes>",
          "encoding": "base64"
        },
        "executable": false,
        "lamports": 33594,
        "owner": "11111111111111111111111111111111",
        "space": 80
      }
    }
  }
}

```

{% endcode %}

在 `continue` 过程中，服务器会发送 `status` 更新（例如 `preparingBundle`、`decodedTransactions`、`appliedAccountModifications`、`executedBlockTransactions`、`programAccountsLoaded`）。准备好推进到下一个 slot 时，服务器会发送 `readyForContinue`。
{% endstep %}

{% step %}

#### 重新连接会话 <a href="#reattach-session" id="reattach-session"></a>

如果会话连接意外断开，请在恢复窗口内重新连接。WebSocket 订阅事件会缓存最近 100 个 slot。

{% code title="// via websocket to `/backtest`" %}

```json
{
  "method": "attachBacktestSession",
  "params": {
    "sessionId": "<session_id>",
    "lastSequence": 42
  }
}
```

{% endcode %}

注意，`lastSequence` 为可选参数。如果省略，服务器将重放全部缓存的事件流。

{% endstep %}

{% step %}

#### 关闭会话

{% code title="// via websocket to `/backtest/<session_id>`" %}

```json
{
  "method": "closeBacktestSession"
}
```

{% endcode %}

此操作返回 `success` 响应，并删除该会话。
{% endstep %}
{% endstepper %}

#### 策略团队须知

* 使用 `preloadPrograms` + `status: programAccountsLoaded`，可在首次 `continue` 之前实现确定性启动。
* 如需快速迭代，可使用 `advanceCount > 1` 快进，同时仍可接收 slot 通知。
* 签名检查已被明确禁用，因此可以伪造来自任意账户的交易。
