SVOJ TICKET

Правила розыгрыша

Что это

Впиши сюда: что за маркет, когда и где проходит.

Как получить SVOJ TICKET

Впиши: покупка от 1000 RSD у одного мастера — один билет, максимум один билет от каждого мастера.

Как участвовать

Зарегистрируй билет на этом сайте до 20:00 29.08 — наведи камеру на QR с оборота или введи номер и код вручную на главной. Незарегистрированный билет в розыгрыше не участвует, даже если он у тебя на руках.

Билетов можно зарегистрировать сколько угодно — по одному от каждого мастера. Каждый участвует отдельно и повышает твои шансы.

Приз

Три победителя. Каждый получает билет на концерт СБПЧ.

Приз не выдаётся деньгами и не обменивается на денежный эквивалент.

Бумажный билет для получения приза не нужен. SVOJ TICKET — одноразовый: он нужен ровно один раз, чтобы зарегистрироваться на сайте. Дальше всё привязано к твоей регистрации, и мы свяжемся по тому контакту, который ты оставил. Потерял бумажку после регистрации — ничего страшного.

Впиши: дата и площадка концерта, как и когда передаются билеты.

Кто не участвует

Впиши: мастера, организаторы, их родственники и т.д.

Итоги

Розыгрыш вечером 29.08. Победители появятся на главной странице сайта и в инстаграме @svoj.market. Мы сами напишем победителям в Instagram или Telegram — по контакту из регистрации.

Почему этот розыгрыш нельзя подтасовать

Обычно в конкурсах приходится верить на слово: организатор называет номер, а как он его выбрал — никто не знает. Здесь по-другому. Мы не просим верить. Любой человек может сам пересчитать результат и убедиться, что он получается именно такой. Ниже объясняем как — без единого технического слова.

Представь запечатанный конверт

За несколько дней до маркета мы загадали случайное число. Записали его на бумажке и запечатали в конверт. Конверт никому не показываем.

Но вместе с конвертом мы публикуем его «отпечаток пальца» — короткую строчку из букв и цифр, которая получается из загаданного числа. Вот её свойства, и они важны:

Этот отпечаток напечатан на каждом из билетов — посмотри на свой, он внизу лицевой стороны, под словом SHA256. И он же опубликован в инстаграме до начала маркета. То есть тысяча человек носит в кармане доказательство того, что мы загадали число заранее и потом его не меняли.

Что происходит дальше, по шагам

  1. До маркета. Число загадано, конверт запечатан, отпечаток напечатан на билетах и выложен в инстаграм.
  2. Весь день 29.08. Люди покупают, получают билеты и регистрируют их. Список участников открыт и виден всем прямо сейчас.
  3. В 20:00. Регистрация закрывается. Список фиксируется целиком — дальше в него нельзя ни добавить, ни убрать.
  4. После этого. Мы вскрываем конверт и показываем загаданное число. Каждый может проверить, что его отпечаток совпадает с напечатанным на билетах — значит, число то же самое, что и было.
  5. И только теперь считается победитель: число из конверта плюс список участников, пропущенные через простую формулу, дают номера победителей. Результат один и тот же у всех, кто повторит расчёт.

А что если…

…организатор подобрал число так, чтобы выиграл свой человек?

Не получится. Чтобы подобрать число под конкретного победителя, нужно знать список участников. А список закрывается в 20:00 — то есть на несколько дней позже, чем число было загадано и его отпечаток напечатан на тираже. Организатор в тот момент ещё не знал даже, сколько человек зарегистрируется.

…он подменил число после того, как увидел список?

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

…он добавил в список свой билет уже после закрытия?

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

…он просто назовёт другой номер, не тот, что посчитался?

Тогда расчёт не сойдётся ни у кого. Формула публичная, данные публичные — любой человек за минуту получит настоящий ответ и увидит подмену.

…сайт показывает одно, а на самом деле считает другое?

Страница проверки розыгрыша считает результат в твоём собственном браузере, а не на нашем сервере. Можешь после загрузки страницы отключить интернет — расчёт всё равно пройдёт. А если не доверяешь и этому, ниже есть код на Python: пересчитай где угодно, хоть на чужом компьютере.

…розыгрыша вообще не будет, а победителя решат заранее?

«Решить заранее» здесь невозможно ровно потому, что результат — не чьё-то решение. Это арифметика из двух чисел, каждое из которых зафиксировано публично и в строго определённом порядке. Единственное, что может сделать организатор, — объявить результат неправильно. И это немедленно заметят.

Как проверить самому

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

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

Способ третий, ни от кого не зависящий. Вот весь расчёт на Python. Скопируй, подставь свои данные, запусти где угодно:

import hashlib

seed = "…"        # число из конверта
entropy = "…"  # внешняя энтропия, может быть пустой
nums = ["1234", "5678", …]  # опубликованный список

# 1. Совпадает ли отпечаток с тем, что на билете
print(hashlib.sha256(seed.encode()).hexdigest())

# 2. Кто победил
nums = sorted(nums, key=int)
payload = seed + "|" + entropy + "|" + ",".join(nums)
pool = list(nums)
for place in (1, 2, 3):
    d = hashlib.sha256((payload + "|" + str(place)).encode()).hexdigest()
    print(place, pool.pop(int(d[:16], 16) % len(pool)))

Первая строка должна совпасть с отпечатком, напечатанным на твоём билете под словом SHA256. Если совпала — всё остальное честно по построению.

Что стоит сохранить, если хочешь проверить потом

Этих трёх вещей достаточно, чтобы перепроверить результат когда угодно, даже если сайт перестанет работать.

Контакты

Впиши: куда писать, если что-то пошло не так.

Draw rules

What this is

Add here: what the market is, when and where, what is being drawn.

How to get a SVOJ TICKET

Add: purchase from 1,000 RSD at one maker — one ticket, at most one ticket per maker, 1,000 tickets in the run.

How to enter

Register your ticket on this site before 20:00 on 29.08 — via the QR code on the back, or by hand on the home page. An unregistered ticket does not enter the draw.

You may register as many tickets as you have — one from each maker. Each one enters separately.

Prize

Three winners. Each gets a ticket to the SBPCH concert.

The prize is not paid in cash and cannot be exchanged for money.

You do not need the paper ticket to claim the prize. A SVOJ TICKET is single-use: it is needed exactly once, to register on the site. After that everything is tied to your registration and we contact you using the details you left. Lost the slip after registering? No problem.

Add: date and venue of the concert, how and when tickets are handed over.

Who cannot enter

Add: makers, organisers, their relatives, and so on.

Results

The draw takes place on the evening of 29.08. Results are posted on Instagram @svoj.market and on this site.

Why this draw can be trusted

The organiser cannot bend the result — and that is not a promise, it follows from the order of steps:

  1. Before the market a random secret (seed) is generated. What gets published is not the seed but its fingerprint — a SHA256 hash. That hash is printed on every ticket and posted on Instagram.
  2. After 20:00 the full list of registered numbers is published. From that moment it is frozen.
  3. Only then is the seed itself revealed, and the winner computed from it.

Neither side can be swapped. The seed cannot be reverse-engineered to produce a chosen winner, because its hash was printed on the tickets before the market. And the entry list cannot be tuned to the seed, because when the list is published nobody knows the seed yet.

The formula

nums   = sorted numbers of registered tickets
payload = seed + "|" + external_entropy + "|" + nums.join(",")
digest = sha256(payload)
index  = first 16 hex chars of digest as an integer, mod count
winner = nums[index]

Verify it in your browser — that page computes everything locally and sends nothing to the server. Or redo it yourself:

import hashlib
payload = seed + "|" + entropy + "|" + ",".join(sorted(nums, key=int))
d = hashlib.sha256(payload.encode()).hexdigest()
print(sorted(nums, key=int)[int(d[:16], 16) % len(nums)])

Contact

Add: where to write if something went wrong.