اثباتِ ریاضیِ بی‌طرفی

راستی‌آزمایی قرعه‌ی دوره

برای افرادِ هم‌امتیاز، ترتیب با قرعه‌ای تعیین می‌شود که پیش از اجرا به آن تعهد داده شده و پس از بسته‌شدن افشا می‌شود. در نتیجه نه قابل دستکاری است و نه قابل پیش‌بینی — و هر کسی می‌تواند آن را بازمحاسبه کند.

۱تعهد (Commitment)

پیش از باز شدن انتخاب منتشر شد. این هَش، seed را پنهان نگه می‌دارد ولی بعداً امکان دستکاری آن را می‌گیرد.

SHA-256 منتشرشده در ۱۴۰۵/۰۵/۱۷
10861bebef8579d813f2e6badd830325da09d5088063aa55d2ee74bc0dfc4997
۲افشا (Reveal)

پس از بسته‌شدن انتخاب منتشر شد. هَشِ این راز (همراه با دامنه و شناسه‌ی دوره) دقیقاً برابر تعهدِ بالا است — پس هیچ تغییری رخ نداده.

Seed — هنوز افشا نشده
— افشا پس از بسته‌شدنِ انتخاب و انتشار نتایج انجام می‌شود —

مقادیر قرعه‌ی گروه هم‌امتیاز

مقادیر قرعه پس از انتشارِ رسمیِ نتایج، برای همه در همین جدول منتشر می‌شود.

قرعهکد رهگیرینتیجهdraw value
هنوز مقدار قرعه‌ای برای نمایش وجود ندارد.
برای همه — به زبان ساده
۱

شرکت پیش از شروع، یک «قفلِ بسته» (هَش) منتشر می‌کند که محتوای آن مخفی است.

۲

پس از پایان، «کلیدِ» داخل قفل (seed) را نشان می‌دهد. چون قفل از قبل منتشر شده بود، کسی نتوانسته کلید را عوض کند.

۳

از ترکیب این کلید با کد رهگیریِ هر نفر، یک «شماره‌ی شانس» ساخته می‌شود. کوچک‌ترین شماره، اولین نفر.

برای بازرس فنی

هر کسی می‌تواند مستقل بازمحاسبه کند:

assert sha256("ALO1-commit-v2" ‖ campaignId ‖ secret) == commitment
entropy = sha256("ALO1-entropy-v2" ‖ campaignId ‖ commitment ‖ hashes ‖ algo)
seed = sha256("ALO1-seed-v2" ‖ secret ‖ campaignId ‖ hashes ‖ algo ‖ entropy)
key = sha256("ALO1-participant-v2" ‖ campaignId ‖ selectionId)
draw = hmac_sha256(seed, key)
value = int(draw[:8],16) / 2^32
sort group by draw asc

الگوریتم، seed، تعهد و فهرستِ کدهای رهگیری همگی منتشر شده‌اند؛ خروجی قطعی و تکرارپذیر است.

۰۱ — ورودی‌های منتشرشده

همان مقادیری که بازمحاسبه‌ی بالا با آن‌ها انجام می‌شود.

نسخه‌ی الگوریتم
3.0.0
تعهد (commitment)
10861bebef8579d813f2e6badd830325da09d5088063aa55d2ee74bc0dfc4997
راز افشاشده (secret)
seed نهایی
هَش مجموعه‌داده
هَش اولویت‌ها
هَش امتیازها
آنتروپی عمومیِ مشتق‌شده
حالت نمایشی