公平性の仕組み
LUCKVERSE の結果はすべて、先に慎重に決めてからアニメーションで見せています。その仕組みをくわしく説明します。
乱数のもと
すべてのツールは、最新のブラウザーに組み込まれた暗号論的に安全な乱数生成器 crypto.getRandomValues() を使います。ブラウザーが暗号鍵を作るときと同じ乱数源で、過去の結果から次を予測することはできません。
偏りのない整数
よくある近道、つまり乱数を範囲で割った余りを使う方法では、小さい値がわずかに出やすくなります。LUCKVERSE は代わりに棄却サンプリングを使います。偏りの原因になる値は捨てて引き直すので、範囲内のどの数も完全に同じ確率で出ます。
重みは正確です
重み付きのルーレットでは、重み3の項目は「3÷重みの合計」の確率で選ばれます。合計に対して偏りのない整数を1回引く方法です。各マスの大きさも同じ重みから計算するので、見た目が本当の確率を表します。
アニメーションは抽選結果に従います
当選者はルーレットが動く前に決まります。ルーレットは何周か回ってから減速し、当選マスの端を避けてその内側に止まります。止まったら、針の下のマスが引いた当選者と一致するかを確認します。自動テストはビルドのたびにこれを2万回繰り返しています。
公平なあみだくじ
適当に横線を引いたあみだくじは、たいてい公平ではありません。横線が数本だと、スタート地点の近くに着きやすいからです。LUCKVERSE は先に結果を一様にランダムに決め、その結果にぴったりつながるあみだを作ります。人と結果の組み合わせはどれも同じ確率で、各線が別々の結果に着くことを毎回確認しています。
検証できる抽選
プレゼント企画なら、名前抽選で誰でも後から確かめられる抽選ができます。
- 秘密の256ビットのシードを作ります。シードと正確なリストのハッシュを合わせたSHA-256の指紋が表示されるので、それを公開します。
- 必要なら、指紋の投稿後に参加者が公開ソルトを決めます。
- 当選者は、シードとソルトから作る決定的な SHA-256 ストリームと、同じ偏りのないサンプリングで計算します。
- シードを公開します。誰でも検証ページを開いて指紋と当選者を計算し直し、何も変わっていないことを確かめられます。
私たちがしないこと
LUCKVERSE には賭けもお金も独自の景品もありません。結果はサーバーに保存せず、リストと履歴はブラウザーの中にだけ残ります。