Розыгрыш: честный выбор победителя с проверяемым seed

Список участников, число победителей и запасных, seed — и результат, который любой сможет пересчитать сам: перемешивание детерминированное, протокол содержит seed и SHA-256 списка, а ссылка для проверки подставляет их автоматически. Есть режим «случайное число от 1 до N» для розыгрышей по комментариям.

работает в браузере · данные никуда не отправляются

seed → SHA-256 → sfc32 → Фишер–Йетс · детерминированно

Как пользоваться

  1. Вставьте участников — по одному в строке (юзернеймы, номера, e-mail). Галочки уберут дубли, символ @, лишние пробелы и разницу регистра.
  2. Укажите, сколько победителей и запасных нужно. Seed можно сгенерировать кнопкой и опубликовать заранее, оставить пустым (создастся случайный) или вписать свой — например, хеш будущего блока или курс валюты на дату.
  3. Нажмите Разыграть. Победители появятся крупно с номерами, ниже — запасные и отпечаток розыгрыша: seed, SHA-256 списка, число участников, время.
  4. Опубликуйте протокол и ссылку для проверки: любой участник откроет её, вставит тот же список и увидит зелёное «список совпадает» и тех же победителей.

Почему этому розыгрышу можно верить

Обычный «рандомайзер» просит поверить на слово: нажали кнопку — выпал кто-то. Здесь результат — чистая функция от двух вещей: списка участников и seed. Список сортируется по строке (поэтому порядок вставки не важен), из seed через SHA-256 получаются четыре 32-битных числа, они запускают генератор sfc32, а тот перемешивает список алгоритмом Фишера — Йетса. Первые N позиций — победители, следующие M — запасные. Тот же seed и тот же список дают тот же результат на любом компьютере, в любом браузере, через год.

Чтобы это можно было проверить, инструмент считает SHA-256 от нормализованного списка и кладёт его в протокол вместе с seed. Участник вставляет опубликованный список, открывает ссылку для проверки — seed и хеш подставляются из адреса — и видит зелёное «список совпадает с протоколом», если ни один участник не был добавлен или убран, и тех же победителей.

Зачем публиковать seed заранее

Если организатор выбирает seed после того, как увидел результат, он может перебирать сиды, пока не выпадет «нужный» человек. Защита простая: seed фиксируется до закрытия приёма заявок и публикуется — в посте, в закрепе, в комментарии с датой. Ещё надёжнее взять seed, который никто не контролирует и который станет известен только после дедлайна: хеш блока Bitcoin с заданным номером, официальный курс ЦБ на дату, число из лотерейного тиража. Тогда ни организатор, ни участники не могут повлиять на исход, а проверить может каждый.

Как это работает под капотом

ШагЧто происходит
1. НормализацияПустые строки убираются; по галочкам — обрезаются пробелы и @, приводится регистр, удаляются дубли. Список сортируется по строке (сравнение по кодовым точкам).
2. Отпечаток спискаSHA-256 от строк, соединённых через \n. Изменение любого символа в любом имени меняет хеш целиком.
3. Seed → состояниеSHA-256 от seed (UTF-8) режется на четыре 32-битных слова — начальное состояние генератора sfc32.
4. ПеремешиваниеФишер — Йетс: для i от конца к началу выбирается j из [0, i] без смещения (отбор с отклонением), элементы меняются местами.
5. РезультатПервые N — победители, следующие M — запасные, порядок в списке = приоритет замены.

Режим «числа от 1 до N»

Для розыгрыша по номерам комментариев, репостов или билетов список не нужен: укажите N, и инструмент так же детерминированно выберет числа. Протокол при этом содержит N вместо хеша списка, а проверить может любой, кто откроет ссылку. Обратите внимание: честность выбора номера не защищает от накрутки самих комментариев — это уже вопрос модерации.

Зачем арбитражнику и админу канала

  • Розыгрыши в Telegram-каналах: список подписчиков или участников бота, seed в закрепе, протокол в посте с итогами — претензии «подкрутили» снимаются ссылкой на проверку.
  • Распределение слотов: кто первым получит доступ к офферу, кому достанется бесплатный аудит — тот же механизм.
  • Конкурсы среди партнёров: победитель среди вебмастеров по списку ID — с публичным seed никто не заподозрит менеджера.

Частые вопросы

Как доказать участникам, что розыгрыш был честным?

Опубликуйте seed до дедлайна, а после розыгрыша — протокол и ссылку для проверки. Любой участник вставит тот же список, увидит совпадение SHA-256 и тех же победителей. Подменить результат нельзя, не меняя seed или список, а оба зафиксированы публично.

Что такое seed и какой выбрать?

Seed — строка, из которой детерминированно выводится вся случайность. Подойдёт любая: сгенерированная кнопкой (16 hex-символов из системного криптогенератора), фраза, а лучше — внешнее непредсказуемое значение, известное только после дедлайна: хеш блока биткоина, курс валюты на дату.

Что будет, если изменить порядок участников?

Ничего: перед перемешиванием список сортируется по строке, поэтому результат зависит только от состава участников и seed. Проверяющему не нужно восстанавливать исходный порядок.

Что означает SHA-256 списка в протоколе?

Это отпечаток состава участников после нормализации. Если хоть одно имя добавить, убрать или изменить, хеш станет другим и проверка покажет красное «список отличается». Так участники убеждаются, что список не правили после публикации seed.

Можно ли разыграть без списка — по номерам комментариев?

Да, режим «числа от 1 до N»: укажите число участников, и инструмент выберет номера тем же детерминированным алгоритмом. Протокол и ссылка для проверки работают так же.

Отправляется ли список участников на сервер?

Нет. Хеширование, генерация и перемешивание выполняются в браузере через WebCrypto и JavaScript; в ссылке для проверки — только seed, хеш списка и число участников, ни одного имени.

свежие базы — в канале Подписаться на канал