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

重放市场

1

选择时间窗口

检查目标范围是否匹配预构建的 bundle,这些 bundle 覆盖过去 30 天。如有需要,可以用 --after <DATE> 或 --before <DATE> 筛选。

sim ranges
Start Time (UTC)       End Time (UTC)         Start Slot    End Slot      Bundle Size   Kind            Scope
----------------------------------------------------------------------------------------------------------------------------------
2026-06-30T17:53:10Z   2026-06-30T19:00:53Z   429,926,541   429,936,540   10,000        account_state   global
2026-06-30T18:23:38Z   2026-06-30T18:27:02Z   429,931,041   429,931,540   500           account_state   global
2026-07-19T05:50:16Z   2026-07-19T07:00:13Z   433,838,452   433,848,451   10,000        account_state   global

对于超过 30 天的范围,或落在预构建 bundle 之间的范围,请构建自定义 bundle。

sim bundle build --start-slot 400000000 --end-slot 400001000
2

运行基准

启动一个会话来重放交易,并记录现有行为。如果该范围由多个 bundle 覆盖,可使用 --parallel 将工作分配到多个并发会话。

# 基准
sim run \
  --start-slot 400000000 \
  --end-slot 400001000 \
  --program-id <PROGRAM_ID> \
  --output-file baseline.json

这会生成一个按行分隔的 JSON 文件,其中包含本次运行的结果。

baseline.json
{
  "metadata": {
    "start_slot": 400000000,
    "end_slot": 400001000,
    "program_id": "<PROGRAM_ID>",
    "session_ids": ["..."],
    "timestamp": "2026-05-29T03:06:07Z"
  },
  "transactions": [
    {
      "slot": 400000042,
      "signature": "<BASE58_SIG>",
      "success": true,
      "error": null,
      "logs": ["Program log: ...", "..."],
      "sol_changes": { "<PUBKEY>": -5000000 },
      "token_changes": { "<PUBKEY>": { "<MINT>": -1000 } },
      "account_diffs": { "<PUBKEY>": { "before": "...", "after": "..." } }
    }
  ],
  "summary": {
    "total": 847,
    "successes": 831,
    "failures": 16
  }
}

sim 提供了一个辅助命令,可读取该 JSON 并汇总运行结果。

sim summarize baseline.json
File        : baseline.json
Slot range  : 400000000 → 400001000
Program IDs : <PROGRAM_ID>
Session(s)  : 10
Ran at      : 2026-05-29 03:06:07 UTC

i Transactions : 205308 (96972 successes, 108336 failures)
# 追踪特定钱包的余额变化
sim summarize baseline.json --accounts E2gE...
Account: E2gE...
  SOL  29.455253127 → 29.293640983  (Δ -0.161612144)
3

运行实验

构建一个修改后的程序,可以包含参数调整、功能升级或错误修复。用它替换原始二进制文件,并在相同的历史交易流上运行新逻辑。

# 实验
sim run \
  --start-slot 400000000 \
  --end-slot 400001000 \
  --program-id <PROGRAM_ID> \
  --program-so <PATH_TO_NEW_BINARY> \
  --output-file experiment.json

如果新程序需要更多计算单元,请使用 --extra-compute-units <EXTRA_UNITS> 提高上限,以避免交易失败。

4

比较结果

基准和实验都完成后,比较这两次运行:

  • 回归:原本成功的交易 -> 现在失败

  • 改进:原本失败的交易 -> 现在成功

  • 余额变化:每个账户的 token 账户中的差额

sim compare baseline.json experiment.json
# 只显示出问题的部分
sim compare baseline.json experiment.json regressions
# 检查对 P&L 的影响
sim compare baseline.json experiment.json balances

最后更新于