> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mycryptocasino.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Проверка раунда

> Пошаговая проверка завершённого раунда по публичным данным, а также более короткие проверки для Dice и Mines.

Любой завершённый раунд вы можете проверить сами по публичным данным в блокчейне — без аккаунта и без особого доступа. Проверить нужно три вещи: что хеш коммита был опубликован до начала раунда, что хеш раскрытого секрета совпадает с этим коммитом и что пересчёт по публичной формуле даёт ровно тот результат, по которому раунд был выплачен.

В этом руководстве мы берём завершённый раунд [Crash](/ru/docs/games/crash) и проверяем его от начала до конца: что секрет оператора был зафиксирован **до** раунда и что точка краша в точности совпадает с результатом [публичной формулы](/ru/docs/provably-fair/crash). Особый доступ не нужен: все данные берутся из публичных записей в блокчейне. В коротком разделе в конце описаны [Dice](#dice-and-mines) и Mines — каждую из них можно проверить по одной транзакции.

## Что вы доказываете

1. **Коммит был первым.** Хеш секрета появился в блокчейне до начала раунда, поэтому результат не мог быть выбран после вашей ставки.
2. **Секрет совпадает с коммитом.** `sha256(secret)` равен зафиксированному хешу.
3. **Множитель честный.** Пересчёт формулы по секрету и хешу блока даёт ровно ту точку краша, по которой раунд был выплачен.

## Шаг 1. Откройте данные о честности раунда в приложении

Откройте историю ставок (или историю раундов) и нажмите на завершённый раунд, чтобы открыть его детали. Рядом с результатом раунда вы увидите:

* **Краш на**: итоговый множитель, который нужно проверить.
* **Хеш секрета игры**: раскрытый 32-байтный секрет. Он ведёт на **транзакцию коммита** в обозревателе Solana.
* **Хеш блока**: хеш слота Solana, используемый как энтропия сети. Он ведёт на **транзакцию старта раунда**.
* **«Честная ли эта игра? Откройте проверку честности»**: открывает инструмент проверки честности с уже подставленными данными этого раунда. Инструмент получает три подписи транзакций раунда (коммит, хеш блока, раскрытие) и сеть, а затем в один клик пересчитывает за вас всё, что описано ниже.

Инструмент проверки честности — самый удобный путь. Остальная часть страницы описывает полностью независимый путь, при котором вы доверяете только блокчейну и своему компьютеру.

## Шаг 2. Три транзакции раунда

| Данные о честности | Инструкция в блокчейне | Что она публикует |
| - | - | - |
| Транзакция коммита | `start_new_round` | Коммит `sha256(secret)` в событии `CrashRoundPrepared` — до открытия приёма ставок |
| Транзакция хеша блока | `start_game` | Зафиксированный хеш слота Solana в событии `CrashGameStarted`; с этого момента результат определён |
| Транзакция раскрытия | `crash` | Раскрытый секрет и итоговая точка краша в событии `CrashRoundFinalized` |

## Шаг 3. Считайте значения в обозревателе Solana

Откройте каждую транзакцию в любом обозревателе (Solscan, Solana Explorer, SolanaFM…) в той сети, где работает приложение. На странице транзакции найдите декодированные **события** программы (иногда они находятся в разделе «Logs» или «Instruction data»; обозреватели, которым известен IDL программы, показывают поля событий по именам).

Соберите четыре значения:

* `commit_hash`: 32 байта, из транзакции коммита.
* `blockhash`: 32 байта, из транзакции хеша блока.
* `local_e`: 32-байтный секрет, из транзакции раскрытия.
* `crash_point_bps`: итоговая точка краша в базисных пунктах, из транзакции раскрытия (29948 означает 2.9948x).

<Tip>
  **Кодировки**

  В зависимости от сайта обозреватели показывают 32-байтные значения в hex, base58 или как массив байтов. Скрипт ниже ожидает **hex**; если обозреватель показывает base58, сконвертируйте значение (подойдёт любой декодер base58: важны сами байты, а не форма записи).
</Tip>

## Шаг 4. Проверьте порядок

В обозревателе сравните **слот** (или время блока) транзакции коммита и транзакции хеша блока. Коммит должен быть раньше. В этом суть всей схемы: секрет был запечатан ещё до того, как появилась энтропия, с которой его смешивают.

## Шаг 5. Пересчитайте точку краша

Запустите этот код в Node.js (без зависимостей), подставив три hex-строки из шага 3:

```js theme={null}
const { createHash } = require("node:crypto");
const sha256 = (buf) => createHash("sha256").update(buf).digest();

// ── Заполните по событиям раунда в блокчейне (hex, по 32 байта) ──
const commit = Buffer.from("<commit_hash hex>", "hex"); // из транзакции коммита
const blockhash = Buffer.from("<blockhash hex>", "hex"); // из транзакции хеша блока
const secret = Buffer.from("<local_e hex>", "hex"); // из транзакции раскрытия
const edgeBps = 150n; // преимущество казино в bps на момент раунда; см. «Комиссии и лимиты»

// 1. Раскрытый секрет должен совпадать с коммитом
console.log("commitment ok:", sha256(secret).equals(commit));

// 2. Пересчёт точки краша: та же целочисленная арифметика, что и в программе
const hash = sha256(Buffer.concat([blockhash, secret])); // сначала blockhash, затем secret
const X = BigInt(hash.readUInt32BE(0)); // первые 4 байта, big-endian
const TWO32 = 1n << 32n;
const cappedX = X < TWO32 - 1000n ? X : TWO32 - 1000n;
const raw = ((10000n - edgeBps) * TWO32) / (TWO32 - cappedX); // деление BigInt округляет вниз
const crashBps = raw > 10000n ? raw : 10000n;

console.log("crash point:", `${Number(crashBps) / 10000}x`, `(${crashBps} bps)`);
```

Обе проверки должны пройти: `commitment ok: true`, а выведенная точка краша должна совпасть с множителем **Краш на** этого раунда (и с `crash_point_bps` в событии раскрытия). Если всё сходится, вы доказали, никому не доверяя, что результат раунда был зафиксирован до его начала и вычислен строго по публичной формуле.

<h2 id="dice-and-mines">
  Dice и Mines
</h2>

Мгновенные игры проверяются так же, только по меньшему числу транзакций:

* **Dice**: одна транзакция на ставку. Её событие `DiceBetSettled` содержит все входные данные для вычисления (`slothash`, `user`, `nonce`), а также `roll` и выплату. Пересчитайте по формуле со страницы [Честность Dice](/ru/docs/provably-fair/dice).
* **Mines**: две транзакции на игру. Стартовая транзакция публикует коммит поля и хеш слота; транзакция расчёта раскрывает сид и всё поле целиком. Пересчитайте по формуле со страницы [Честность Mines](/ru/docs/provably-fair/mines).

## Если что-то не сходится

Сначала исключите типичные причины: значение в base58 вставлено туда, где ожидался hex; выбрана не та транзакция (у каждого раунда их три); использовано не то преимущество казино, что действовало на момент раунда (оно хранится в конфигурации в блокчейне, и каждое его изменение само по себе является транзакцией в блокчейне).

Если расхождение всё равно остаётся, это именно то, что эта система призвана выявлять: данные публичны и хранятся вечно, поэтому любой может повторить вашу проверку. Свяжитесь с поддержкой и укажите номер раунда. Учтите: у настоящего несовпадения коммита или формулы нет честного объяснения — именно поэтому схема не позволяет его скрыть.
