> ## 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

> Почему не нужен секрет оператора, и полное вычисление по публичным входным данным.

Бросок в Dice вообще не использует секрет оператора. Он вычисляется в блокчейне из хеша слота Solana, зафиксированного в момент исполнения вашей ставки, адреса вашего аккаунта и вашего личного счётчика ставок, а затем рассчитывается в той же транзакции, которая сделала ставку. Нет ни сида, который оператор мог бы выбрать, ни чего-либо, что нужно раскрывать потом.

На этой странице описан точный механизм каждого броска в [Dice](/ru/docs/games/dice). Dice — самый простой случай [схемы доказуемо честной игры](/ru/docs/provably-fair/overview): здесь **вообще нет секрета оператора**. Бросок вычисляется из публичных входных данных и рассчитывается в блокчейне в той же транзакции, которая делает ставку.

<h2 id="why-there-is-no-commit-step">
  Почему в Dice нет шага коммита?
</h2>

Crash нужен зафиксированный секрет, потому что его результат должен быть *определён, но скрыт*, пока идёт раунд. У броска кубиков такой фазы нет: результат используется в той же инструкции, которая его вычисляет. Поэтому вместо коммита секрета вычисление просто **не использует никаких данных от оператора**: нечего фиксировать, нечего раскрывать, и нет сида, который оператор мог бы подобрать в свою пользу.

Энтропия берётся из самой сети Solana и смешивается со значениями, которые идентифицируют вашу ставку:

* **`slothash`**: самая свежая запись sysvar `SlotHashes` сети Solana в момент исполнения транзакции вашей ставки. Это энтропия, созданная сетью, и при сборке транзакции она неизвестна (отправитель не может знать, в какой именно слот попадёт транзакция).
* **`user`**: 32-байтный адрес вашего пользовательского аккаунта в блокчейне (аккаунта, который программа выводит из вашего кошелька). Благодаря этому броски разных игроков независимы: две ставки, попавшие в один слот, получат разные броски.
* **`nonce`**: ваш личный счётчик ставок, который хранится в блокчейне и увеличивается с каждой игрой. Благодаря ему ваши собственные ставки подряд независимы даже внутри одного слота, а заодно он защищает от повторной отправки.

<h2 id="the-exact-formula">
  Какова точная формула броска в Dice?
</h2>

```text theme={null}
входные данные
  slothash   32 байта   последний хеш слота Solana в момент исполнения транзакции ставки
  user       32 байта   адрес вашего пользовательского аккаунта в блокчейне
  nonce      8 байт     ваш счётчик ставок, little-endian

вычисление
  hash = sha256( "dice" ‖ slothash ‖ user ‖ nonce )   // "dice" = 4 ASCII-байта 0x64 0x69 0x63 0x65
  roll = u128_be( hash[0..16] ) mod 10000              // первые 16 байт, беззнаковое 128-битное big-endian

результат
  roll — целое число в диапазоне 0..9999, то есть 0.00–99.99 с двумя знаками после точки
```

Детали, важные при пересчёте:

* Вход хеша — это конкатенация строго в таком порядке: ASCII-метка `"dice"`, хеш слота, адрес пользовательского аккаунта, затем nonce, закодированный как **8 байт little-endian**.
* Выборка — это **первые 16 байт** результата SHA-256, прочитанные как беззнаковое 128-битное целое в порядке **big-endian** и взятые по модулю 10,000.
* Взятие 128-битной выборки по модулю 10,000 даёт теоретическое смещение меньше 2⁻¹¹⁴ — на десятки порядков меньше преимущества казино. Поэтому оно задокументировано, а не исправлено.

## Условие выигрыша и выплата

```text theme={null}
Меньше цели : выигрыш, если roll < target      шанс выигрыша = target исходов из 10000
Больше цели : выигрыш, если roll > target      шанс выигрыша = 9999 − target исходов из 10000

multiplier_bps = floor( (10000 − edge_bps) × 10000 / win_chance_bps )
```

Выбранный шанс выигрыша должен быть в пределах от 2% до 98%. При текущем преимуществе 1.5% (`edge_bps = 150`):

| Ставка | Шанс выигрыша | Множитель |
| - | - | - |
| Меньше 5000 | 50% | 1.97x |
| Меньше 200 | 2% | 49.25x |
| Меньше 9800 | 98% | 1.0051x |

Ожидаемый возврат одинаков для любой цели: `шанс × множитель ≈ 98.5%` от ставки (округление вниз даёт перевес в пользу казино не более чем на один базисный пункт). Текущее преимущество и лимиты указаны на странице [Комиссии и лимиты](/ru/docs/fees-and-limits).

## Что гарантировано, а что нет

**Обеспечивается программой:**

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

**Честная оговорка: момент отправки.** Ставки в Dice не требуют оплаты комиссии сети: бэкенд MCC подписывает и отправляет транзакцию за вас, поэтому оператор контролирует, *когда* она будет отправлена. Хеш слота `N−1` становится публичным в начале слота `N`, так что оператор с очень низкой задержкой мог бы оценить, какой бросок получит ставка, *если* попадёт в текущий слот, и задержать отправку, чтобы перебросить. Схема признаёт это, а не делает вид, что проблемы нет (её устранение потребовало бы VRF-оракула, стоимость которого на одну ставку превышает ожидаемую прибыль казино на небольших ставках). Что сдерживает этот риск:

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

<h2 id="verify-a-roll">
  Как проверить бросок в Dice?
</h2>

Каждая игра порождает событие `DiceBetSettled` в собственной транзакции ставки со всем необходимым: `slothash`, `user`, `nonce`, `target_bps`, `direction`, `win_chance_bps`, `roll`, `multiplier_bps` и `is_win`, а также полной разбивкой расчёта. Чтобы проверить:

1. Откройте транзакцию ставки в обозревателе Solana и считайте поля события (экран Dice в приложении показывает входные данные честности для вашей сессии, а история ставок содержит ссылку на транзакцию).
2. Пересчитайте `sha256("dice" ‖ slothash ‖ user ‖ nonce)`, возьмите первые 16 байт в порядке big-endian по модулю 10,000 и сравните с `roll` из события.
3. Проверьте определение выигрыша или проигрыша (`roll < target` для «Меньше», `roll > target` для «Больше») и множитель по формуле выше.

Общие советы о том, как читать данные событий в обозревателе, — на странице [Проверка раунда](/ru/docs/provably-fair/verify-a-round).

Как играть в саму игру, описано в [руководстве по Dice](/ru/docs/games/dice).
