Как мы выбираем победителя

Коротко: заранее фиксируем список, публикуем обязательство, после розыгрыша раскрываем seed. Результат воспроизводится математически.

1

Фиксация списка

Участники проходят проверку условий и получают порядковые номера. Список хешируется — его нельзя изменить незаметно.

2

Обязательство

Мы создаём случайный seed и публикуем SHA-256(seed). До розыгрыша никто не знает seed, но все видят его отпечаток.

3

Розыгрыш

Для каждого участника считается HMAC-SHA256(seed, id). Побеждают первые N по возрастанию хеша.

4

Раскрытие

Публикуем seed и протокол. Любой может пересчитать результат на странице проверки.

verify.js
// 1. Список фиксируется до жеребьёвки
const listHash = sha256(entries.map(e => e.id).sort().join("\n"));

// 2. Обязательство публикуется заранее
const seed = randomHex(16);
const commit = sha256(seed);          // публикуем commit

// 3. Победитель — функция от seed и id участников
const scored = entries.map(e => ({
  id: e.id,
  score: hmacSha256(seed, e.id)
}));
scored.sort((a, b) => a.score < b.score ? -1 : 1);
const winners = scored.slice(0, N);

// 4. После розыгрыша публикуем seed
// любой может повторить шаг 3 и получить тех же победителей

Почему это честно

Изменить список после публикации обязательства нельзя: хеш не совпадёт. Подменить seed нельзя: он должен давать опубликованный SHA-256. Выбрать «удобного» победителя нельзя: результат — функция от seed и id.

Границы честности

Мы честно пишем, что проверяем автоматически, а что берём со слов блогера: подписку в Telegram и ВКонтакте проверяет API, подписку в YouTube — никто.

Площадка Комментарии Подписка
ВКонтакте Автоматически Автоматически
Telegram Только вперёд Автоматически
YouTube Автоматически Невозможно
RuTube Вручную Невозможно
Свой список Вручную Заявлено блогером
«Только вперёд» в Telegram означает: бот видит сообщения с момента, когда его сделали администратором. Прочитать историю комментариев нельзя — ни нам, ни кому-либо ещё.