Одиночные ставки
В шесть игр играют в одиночку против заведения: две кости, подбрасывание монеты, рулетка, слоты, лотерея и краш. Ставка — это транзакция CreateApp с одним местом. Её исход определяется случайностью, которой не существовало в момент ставки, а выигрыш выплачивает пул приложений.
Как сделать ставку
Игрок отправляет CreateApp с типом игры (от 16 до 21), ставкой и её суммой в ZBC или в токене. Сумма ставки переходит в пул приложений, когда ставка исполняется. Ставить может любой аккаунт, включая аккаунты с ключами в стиле Ethereum или Bitcoin, которые не могут занять место в многопользовательской игре (многопользовательские приложения).
Завершающий байт N, от 1 до 100, разыгрывает ту же ставку N раз по одному сиду, разделив сумму поровну между розыгрышами.
Когда и как разыгрывается результат
Ставка, включённая в блок N, разрешается в блоке N + 2 по сиду этого блока, примерно через 30 секунд. Сид каждого блока вычисляет его производитель из предыдущего сида с помощью проверяемой случайной функции (сид блока (VRF)), поэтому, пока ставка попадает в блок N, сида блока N + 2 ещё не существует. Никто не может предсказать результат, и производитель, включивший ставку, не может увидеть его первым. Если блок на высоте N + 2 создан собственным узлом игрока (сравниваются аккаунты владельцев), ставка ждёт более позднего блока, созданного кем-то другим.
Розыгрыш — это хеш этого сида и идентификатора приложения с собственной меткой:
r = LE64(first 8 bytes of SHA3-256("zbc-apps" ‖ seed ‖ LE64(app id) ‖ LE64(0)))
Первый розыгрыш многократной ставки использует r; последующие используют выходы генератора splitmix64, инициализированного r. Любой может пересчитать результат по публичным данным и проверить выплату. Нет ни секрета, который нужно раскрыть, ни ежедневного пакета: каждая ставка рассчитывается сама по себе.
Таблицы выплат
| Игра | Ставка | Выигрыш платит | Преимущество заведения |
|---|---|---|---|
| Подбрасывание монеты (17) | орёл или решка | 1,98× | 1 % |
| Две кости (16) | меньше 7 или больше 7 | 2,28× | 5 % |
| счастливая 7 | 5,70× | 5 % | |
| точная сумма | 34,20 ÷ число способов (2 или 12: 34,2×) | 5 % | |
| Рулетка (18) | одно число | 36× | 1/37, около 2,7 % |
| красное или чёрное | 2× | около 2,7 % | |
| Слоты (19) | три семёрки, другая тройка, любая пара | 50×, 15×, 1,8× | около 10,7 % |
| Лотерея (20) | одно число от 0 до 99 | 90× | 10 % |
| Краш (21) | цель T от 1,01× до 10,00× | T, когда точка краша достигает T | около 1 % |
Для точной суммы на костях число способов — это число способов, которыми две кости могут её дать: 6 − |7 − сумма|. В рулетке 37 ячеек, 0 — зелёная, а цвета следуют настоящему европейскому колесу. В слотах три барабана по восемь символов, ожидаемый возврат — 457,4/512. В краше цель фиксируется при ставке; хода, позволяющего забрать выигрыш раньше, нет.
Преимущество заведения заложено в каждую таблицу. При подбрасывании монеты вы выигрываете в половине случаев, а выигрыш возвращает 1,98 ставки, поэтому в среднем каждый поставленный ZBC возвращается как 0,5 × 1,98 = 0,99 ZBC, а оставшийся 1 % остаётся в пуле приложений. Проигрыш ничего не перемещает, поскольку ставка уже в пуле.
Предел ставки
Прежде чем принять ставку, узел вычисляет наибольшую выплату, которую она вообще может дать, а не среднюю, и сравнивает её с пределом в 5 % баланса пула в активе ставки:
largest payout ≤ floor(pool balance × 500 ÷ 10,000)
Наибольшая выплата — собственный множитель ставки для костей, 1,98× для монеты, 36× для рулетки, 50× для слотов, 90× для лотереи и T для краша. Ставка сверх предела отклоняется при отправке («bet too large for the apps pool»), а если она всё же попадает в блок, становится оплаченной пустой операцией.
Благодаря пределу ни один удачный результат не может опустошить пул. Второе ограничение, лимит на блок, может растянуть очень крупный выигрыш на несколько блоков (пул приложений).