Что происходит в блокчейне во время раунда Crash?
Каждый раунд Crash складывается из трёх транзакций в блокчейне, в таком порядке:- Коммит: до открытия ставок бэкенд генерирует случайный 32-байтовый секрет и публикует в блокчейне его хеш SHA-256 (инструкция
start_new_round). Это и есть коммит: с этого момента рассчитать раунд может только этот самый секрет. Коммит публично виден в событииCrashRoundPreparedэтой транзакции. - Ставки: игроки делают ставки. Секрет остаётся скрытым; коммит гарантирует, что его нельзя подменить.
- Старт раунда / фиксация энтропии: когда раунд начинается (инструкция
start_game), программа считывает самый свежий хеш слота из sysvarSlotHashesSolana и сохраняет его в раунде. В приложении это значение называется хешем блока раунда. Теперь точка краша полностью определена (это чистая функция от сохранённого хеша слота и зафиксированного секрета), но вычислить её пока не может никто, кто не знает секрета. Значение публично в событииCrashGameStarted. - Раунд идёт: множитель растёт, игроки забирают выигрыш.
- Раскрытие: бэкенд передаёт секрет (инструкция
crash). Программа проверяет в блокчейне, чтоsha256(secret)равен коммиту (при несовпадении транзакция не проходит), затем сама вычисляет точку краша и завершает раунд. СобытиеCrashRoundFinalizedпубликует секрет, хеш слота и итоговую точку краша.
Какова точная формула точки краша?
Точка краша вычисляется ровно так (это та самая арифметика, которую выполняет программа в блокчейне: целочисленные вычисления, без сюрпризов с округлением):- Порядок конкатенации: сначала blockhash, затем secret.
Xчитается в порядке big-endian из первых 4 байт результата SHA-256.- Все деления — целочисленные (с округлением вниз).
- Нижняя граница
max(10000, …)означает, что множитель никогда не бывает ниже 1.00x, а ограничениеXне даёт знаменателю стать астрономически малым.
Пример расчёта
ПриX = 0xABCD1234 (2,882,343,476) и текущем преимуществе 1.5% (edge_bps = 150):
Как выглядит распределение
Формула превращает равномерно распределённыйX в классическую кривую краша. Вероятность того, что раунд достигнет множителя не меньше m, примерно равна:
Что гарантируется, а что нет
Обеспечивается программой:- После того как коммит попал в блокчейн, оператор не может изменить секрет раунда: транзакция раскрытия отклоняется для любого секрета, хеш которого не совпадает.
- Как только раунд стартовал (хеш слота сохранён), точка краша зафиксирована. Ранний кешаут, поздний или массовый ничего не меняют: исход был определён до того, как множитель начал расти.
- Точку краша вычисляет программа, а не сообщает бэкенд. Неверное значение невозможно записать в блокчейн.
- Всё необходимое для проверки (коммит, хеш слота, секрет, итоговая точка краша) навсегда публикуется в событиях блокчейна.
- Момент старта. Оператор знает секрет до старта раунда, и его бэкенд решает, когда отправить транзакцию старта. Поскольку недавние хеши слотов публичны, он теоретически мог бы заранее вычислить будущий множитель для слотов-кандидатов и подгадать старт, чтобы повлиять на то, какой хеш слота будет зафиксирован. Схема этому не препятствует, но делает это заметным: время старта раунда публично, и любой систематический перекос проявился бы в статистике опубликованных точек краша, которые любой может массово пересчитать.
- Отмены. После старта раунда оператор знает исход раньше игроков и мог бы отменить невыгодный раунд вместо раскрытия. Здесь действуют два жёстких ограничения: отмена полностью возвращает каждую ставку (у программы нет способа конфискации), и каждая отмена порождает публичное событие; частота отмен — это и есть видимый в блокчейне признак. Отмена существует как способ восстановления при потере секрета (например, если бэкенд упал между коммитом и раскрытием) и, как ожидается, практически никогда не используется.