۱. هر نتیجه از مولد تصادفی رمزنگاری میآید
Spinvolta نتایج را با crypto.getRandomValues() میکشد، مولد اعداد تصادفی امن رمزنگاری که در هر مرورگر و سیستمعامل مدرنی هست — همان منبعی که برای ساخت کلیدهای رمزنگاری استفاده میشود. ما هرگز برای تصمیمگیری از Math.random() استفاده نمیکنیم. (چیزهای صرفاً تزئینی، مثل مسیر یک تکه کاغذرنگی، میتوانند از آن استفاده کنند.)
۲. بدون سوگیری باقیمانده
عدد تصادفی ۳۲ بیتی همیشه بهطور مساوی بر مثلاً ۷ گزینه تقسیم نمیشود: ۴٬۲۹۴٬۹۶۷٬۲۹۶ مضرب ۷ نیست، پس محاسبهٔ سادهلوحانهٔ number % 7 به بعضی گزینهها کمی شانس بیشتر میدهد. Spinvolta از نمونهبرداری ردکردنی استفاده میکند: اگر عدد در باقیماندهٔ نابرابر بالای بازه بیفتد، کنار گذاشته میشود و عدد تازهای کشیده میشود. در نتیجه هر گزینه دقیقاً همان شانس را دارد، با هر تعداد گزینه.
۳. وزنها دقیقاند
در حالت وزندار، وزنهایی مثل ۱، ۲٫۵ یا ۰٫۱۲۵ روی مقیاسی مشترک به عدد صحیح تبدیل و دقیق جمع میشوند. یک قرعهٔ یکنواخت روی مجموع برنده را انتخاب میکند، پس گزینهای با وزن ۲ دقیقاً دو برابر گزینهای با وزن ۱ شانس دارد — و اندازهٔ بخشهای گردونه همین احتمال دقیق را نشان میدهد.
۴. چند برنده بدون تکرار
چند برنده، تیمها، ترتیب تصادفی، بُر زدن کارت و قرعهکشیها از بُر زدن Fisher–Yates بیطرف (با همان نمونهبرداری ردکردنی) استفاده میکنند، پس هر ترتیب یا گروه برندهٔ ممکن همان شانس را دارد.
۵. اول نتیجه، بعد پویانمایی
وقتی بچرخان را میزنید، برنده پیش از حرکت گردونه تعیین میشود. سپس حلکنندهای حرکتی را محاسبه میکند — عقب کشیدن، سرعت، تعداد دورها، تاب ملایم آخر — که دقیقاً داخل بخش برنده، در نقطهای تصادفی دور از لبهها، مینشیند. پرتاب محکمتر، چرخش طولانیتر یا توقف دستی فقط ظاهر را عوض میکند. آزمونهای خودکار ما هزاران چرخش تصادفی را بررسی میکنند تا مطمئن شوند پویانمایی همیشه روی نتیجهٔ ازپیشکشیده مینشیند و هرگز به بخش کناری نمیلغزد.
۶. قرعهکشیهای اثباتپذیر برای مسابقهها و اتاقها
برای قرعهکشیها (و هر قرعهای که اعتماد مهم است)، Spinvolta یک قدم جلوتر میرود تا لازم نباشد به ما یا میزبان اعتماد کنید:
۱. پیش از قرعه، مرورگر شما فهرست دقیق و تنظیمات را قفل میکند و یک اثر انگشت منتشر میکند — هش SHA-256 از فهرست، تنظیمات و یک بذر مخفی. سرور ما زمان دریافتش را ثبت میکند.
۲. اثر انگشت دوری آینده از فانوس تصادفی drand League of Entropy را نام میبرد — مقداری عمومی که هر ۳ ثانیه توسط سازمانهای مستقلی در سراسر جهان تولید میشود و هیچکس نمیتواند پیشبینی یا انتخابش کند.
۳. وقتی آن دور منتشر شد، برندگان از اثر انگشت، مقدار فانوس و بذر محاسبه میشوند.
۴. صفحهٔ مدرک همهچیز را نشان میدهد. هر کسی میتواند تأیید را بزند تا در مرورگر خودش دوباره محاسبه کند، از جمله بررسی امضای رمزنگاری فانوس.
میزبان نمیتواند برنده را انتخاب کند چون مقدار فانوس وقتی فهرست قفل شد وجود نداشت. ما هم نمیتوانیم، چون پیش از قفل شدن اثر انگشت بذر را نمیبینیم و drand را کنترل نمیکنیم. اگر فانوس در دسترس نباشد، قرعه به قرعهٔ تعهد و افشا با برچسب روشن برمیگردد.
۷. آزمودهشده با آمار
مجموعهٔ آزمون ما در هر تغییر آزمونهای نیکویی برازش خیدو را روی صدها هزار قرعهٔ شبیهسازیشده اجرا میکند و در مجموعهٔ کامل روی بیش از یک میلیون قرعه: انتخاب یکنواخت، انتخاب وزندار، بُر زدنها و جایگاهها در چند برنده. میتوانید نسخهٔ خودتان را در صفحهٔ آزمون انصاف اجرا کنید.
آنچه نمیتوانیم ثابت کنیم
در چرخش روزمره، به این اعتماد میکنید که کدی که در مرورگرتان اجرا میشود همانی است که توصیف میکنیم. این کد کاملاً روی دستگاه شما اجرا میشود و میتوانید با ابزارهای توسعهدهندهٔ مرورگر بررسیاش کنید. وقتی ریسک بالاتر است — جایزه، قرعهکشی عمومی — از قرعهکشی اثباتپذیر استفاده کنید که به اعتماد به هیچکس نیاز ندارد.
پرسشهای رایج
میشود گردونه را دستکاری کرد؟
نه از راه پویانمایی: نتیجه اول منصفانه کشیده میشود و حرکت برای نمایش آن حل میشود. تنها راه تغییر احتمالها حالت وزندار است که نشان «گردونهٔ وزندار» نمایش میدهد و بخشها را به همان اندازه میکشد.
چرا یک نام دو بار پشت سر هم آمد؟
چون تصادف واقعی تکرار پشتسرهم دارد. با ۱۰ گزینه، یک گزینه در ۱۰٪ مواقع دو بار پشت سر هم میآید. اگر میخواهید هر گزینه فقط یک بار بیاید از حالت حذفی استفاده کنید.
drand چیست؟
drand فانوس تصادفی توزیعشدهای است که League of Entropy، گروهی از دانشگاهها، شرکتها و سازمانهای مستقل، اداره میکند. هر چند ثانیه یک مقدار تصادفی جدید و قابل تأیید منتشر میکند.