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

Воспроизведение рынка

1

Выбор отрезка времени

Проверьте, попадает ли нужный диапазон в готовые бандлы: они покрывают последние 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 дней или тех, что попадают между готовыми бандлами, соберите собственный бандл.

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

Базовый прогон

Запустите сессию, чтобы заново исполнить транзакции и зафиксировать текущее поведение. Если диапазон покрывается несколькими бандлами, флаг --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

Если новой программе нужно больше вычислительных единиц (CU), поднимите лимит флагом --extra-compute-units <EXTRA_UNITS>, иначе транзакции будут падать.

4

Сравнение результатов

Когда готовы и базовый прогон, и эксперимент, сравните их:

  • регрессии: транзакция раньше проходила -> теперь падает

  • улучшения: транзакция раньше падала -> теперь проходит

  • изменения балансов: разница по токен-аккаунтам каждого аккаунта

sim compare baseline.json experiment.json
# Показать только то, что сломалось
sim compare baseline.json experiment.json regressions
# Проверить влияние на P&L
sim compare baseline.json experiment.json balances

Последнее обновление