Жизненный цикл Round (раунда)
Каждый Round длится ровно 60 секунд. Время указывается в протокольном UTC.
Четыре фазы
| Фаза | Длительность | Что происходит |
|---|---|---|
| Announce | t₀ → t₀+5с | Публикуется вопрос q_t. Вопрос выбирается из резервуара по формуле `seed_t mod |
| Commit | t₀+5с → t₀+35с | Каждый участник отправляет commit c_i = HMAC-SHA256(s_i ‖ round_t, b_i), где b_i ∈ {0, 1} — выбранный ответ, а s_i — 128-битный секрет пользователя. Commit скрывает ответ до фазы Reveal. |
| Reveal | t₀+35с → t₀+50с | Участники раскрывают (s_i, b_i). Round Engine проверяет каждый commit. Участники, не выполнившие Reveal, исключаются. |
| Settle | t₀+50с → t₀+60с | Вычисляется большинство `M = argmax_v |
Зачем нужны две фазы (Commit + Reveal)?
Наивный дизайн, позволяющий игрокам отправлять b_i в открытом виде, приводит к трём проблемам:
- Стадное поведение. Игроки, голосующие позже, видят текущую статистику и присоединяются к большинству.
- Сговор ботов. Скоординированная сеть ботов может дождаться публичного сигнала и захватить большинство.
- Утечка вопроса. Открытые Commit позволяют злоумышленнику наблюдать частичные ответы и выводить истинное распределение мнений до голосования.
Криптографический протокол Commit / Reveal устраняет все три проблемы. Во время Commit никто не может увидеть ответы других участников. Во время Reveal каждый commit публично проверяется по раскрытым (s_i, b_i).
Подробная спецификация приведена в разделе Криптографический протокол.
Что произойдёт, если я не выполню Reveal?
Вы исключаетесь из этого Round и не получаете Round POP (баллы). Ваш commit всё равно записывается в цепочку (как часть Merkle Root) для аудита. Ваш Reputation Score (рейтинг репутации) получает небольшое байесовское обновление в сторону «ненадёжный участник».
Что произойдёт при задержках сети?
Round Engine предоставляет 2-секундный льготный период после каждой фазы для медленных клиентов. За его пределами Commit и Reveal молча отклоняются.
Как выбирается вопрос?
Question Oracle (см. Oracle & Randomness) поддерживает резервуар из более чем 100 000 предварительно сгенерированных и откалиброванных вопросов. Каждый вопрос проходит через:
- Генерацию ансамблем из нескольких LLM.
- Устранение предвзятости для удаления демографических и языковых искажений.
- Калибровочный претест на синтетической популяции для проверки ожидаемого распределения ответов ~50/50. Вопросы с перекошенными ожидаемыми ответами отбраковываются.
Round seed seed_t детерминированно выбирает из этого резервуара, поэтому выбор непредсказуем, но полностью проверяем.
Могут ли Round заканчиваться вничью?
Математически — да (ровно 50/50). Когда |{b_i=0}| = |{b_i=1}|, Prize Pool переходит в Round t+1, вопрос перерисовывается, и обе стороны выживают.