For the complete documentation index, see llms.txt. This page is also available as Markdown.

快速入门

1

创建会话

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

  • startSlot / endSlot:模拟范围(包含起止 slot)。

  • signerFilter(可选):跳过由这些地址签名的历史交易。

  • disconnectTimeoutSecs(可选):断开连接后会话的保持时间(最长 900 秒)。

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

// via websocket to `ws(s)://<host>/backtest`
{
  "method": "createBacktestSession",
  "params": {
    "startSlot": 123456,
    "endSlot": 234567,
    "signerFilter": ["addr..."],
    "disconnectTimeoutSecs": 30
  }
}

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

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

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

2

读取账户

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

  • getAccountInfo, getBalance, getMultipleAccounts

  • accountSubscribe, programSubscribe, signatureSubscribe

请参阅 API 参考,了解支持的全部 Solana 订阅方法。

3

发送交易

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

  • RPC 方式:

    • 通过标准 Solana RPC 方法 sendTransaction 提交交易。

    • 这些交易会在当前 slot 中、历史区块交易之后立即执行。

  • WebSocket 方式:

    • 在 continue 请求中附带 base64 编码的交易。

    • 这些交易会批量执行,并同时触发模拟推进到下一个 slot。

每个 slot 的执行顺序:

  1. 历史区块交易。

  2. 用户通过 RPC sendTransaction 提交的交易。

  3. 用户在 continue 批次中包含的交易。

4

执行 slot

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

  • advanceCount:暂停并等待用户操作之前要执行的 slot 数量,省略时默认为 1。

  • transactions:自定义交易。

  • modifyAccountStates:执行前应用的账户覆盖。

// via websocket to `/backtest/<session_id>`
{
  "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
      }
    }
  }
}

在 continue 过程中,服务器会发送 status 更新(例如 preparingBundle、decodedTransactions、appliedAccountModifications、executedBlockTransactions、programAccountsLoaded)。准备好推进到下一个 slot 时,服务器会发送 readyForContinue。

5

重新连接会话

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

// via websocket to `/backtest`
{
  "method": "attachBacktestSession",
  "params": {
    "sessionId": "<session_id>",
    "lastSequence": 42
  }
}

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

6

关闭会话

// via websocket to `/backtest/<session_id>`
{
  "method": "closeBacktestSession"
}

此操作返回 success 响应,并删除该会话。

策略团队须知

  • 使用 preloadPrograms + status: programAccountsLoaded,可在首次 continue 之前实现确定性启动。

  • 如需快速迭代,可使用 advanceCount > 1 快进,同时仍可接收 slot 通知。

  • 签名检查已被明确禁用,因此可以伪造来自任意账户的交易。

最后更新于