Как это работает

Розыгрыш проходит в четыре шага. На каждом мы выкладываем то, что потом нельзя переписать, и говорим, где это проверить. Технические имена стоят мелко под шагами: они нужны, если вы будете проверять сами. На приборах значения тестового розыгрыша 20 октября.

Открытый журнал, запись 170
условия записаны

19:43:03, отпечаток условий 6b72 a149

Условия на виду до старта

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

Открытый журнал ведём не мы. Запись в нём получает время и номер, и переписать её потом нельзя: любой, кто сохранил её раньше, увидит разницу.

Что выкладываем
условия розыгрыша и номер будущего числа
Где проверить
в открытом журнале и в нашем канале отметок

Технически: отпечаток условий в Sigstore Rekor

Открытый журнал, запись 171
приём закрыт

1 000 записей, код списка 98ed 874e

Список закрыт и опубликован

Участники входят в одно касание: на стриме через VK Видео Live, в акции компании через её сайт или приложение. Каждый сразу получает квитанцию: номер записи и время. Имя в журнал не пишется, только код аккаунта.

Когда приём закрыт, список целиком становится одним коротким кодом и уходит в тот же открытый журнал. Если потом добавить, убрать или поменять запись, код станет другим, а прежний уже хранится у третьих лиц.

Что выкладываем
код списка участников и число записей
Где проверить
в открытом журнале, через несколько секунд после закрытия

Технически: корень дерева Меркла списка в Sigstore Rekor

Сеть drand
№ 33 237 140

вышло в 19:46:24, подпись сети сошлась

Число приходит со стороны

Случайное число выпускает сеть drand. Её ведут независимые друг от друга организации. Раз в три секунды выходит новое число, и его подписывает вся сеть. Номер нужного числа стоит в условиях с самого начала, а само число до выхода не знает никто, мы тоже.

Номер выбирают так, чтобы число вышло уже после закрытия приёма: на стриме примерно через 70 секунд, в акции компании не раньше чем через 5 минут.

Что выкладываем
номер числа drand, назначенный в условиях
Где проверить
у любого зеркала сети drand

Технически: раунд сети drand quicknet, подпись BLS

Страница проверки
совпало

победители: записи № 748, 910, 444, пересчитано за 50 мс

Каждый пересчитает сам

Номер победившей записи считает формула из условий: в неё входят число drand и наше секретное число. Формула открыта. Страница проверки повторяет расчёт на телефоне участника и сверяет условия и список с тем, что лежит в журнале.

Если всё сошлось, сверху стоит Совпало. Если записанное поменяли, страница скажет Не совпало и покажет, в какой строке.

Открытый журнал иногда отвечает с опозданием. Тогда после выхода числа страница ещё 10 минут ждёт отметку закрытия и пишет Ожидание. Если отметки, сделанной до выхода числа, так и нет, сверху будет Нет внешней отметки до раунда. Что тогда с итогом, сказано в условиях до старта: на стриме он принимается, в акции компании розыгрыш не состоялся. А если розыгрыш сорвался по правилам условий, страница пишет Не состоялся.

Что выкладываем
секретное число, победителей и подпись сервиса
Где проверить
на странице проверки и утилитой на Python

Технически: формула draw-v1, PROTOCOL.md §12

Как список становится одним кодом

Из каждой записи получается короткий код. Коды склеиваются попарно, пока не останется один: это и есть код списка. Поменяйте одну запись, и поменяется весь путь до верха. Чтобы доказать, что запись 4 в списке, хватает её самой, соседней записи и кода пары 1 и 2: так страница проверки находит участника по квитанции.

запись 1запись 2запись 3запись 4пара 1 и 2пара 3 и 4код списка

Почему мы тоже не можем подкрутить

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

Дописать участников после выхода числа сервис мог бы, только если закрытие не отмечено снаружи вовремя. Тогда страница не напишет Совпало.

Знать исход заранее мог бы только тот, кто одновременно управляет нашим сервисом и большинством узлов сети drand.

Чего проверка не ловит

Полный список с мерами в протоколе, раздел 21. Протокол

Проверить свой розыгрыш

Номер розыгрыша есть в квитанции и в ссылке от организатора.