検証可能ガチャサンプル
ソースコードを公開しなくても、運営側が公平にガチャを実施していることを確認できる仕組みのサンプルです。
詳しい説明は
Qiita のほう
を参照してください。
ユーザIDはユーザに割り当てられたIDで、ユーザ側も見れるものにします。
運用側は、アイテムの一覧テーブルをガチャ開始前に公開します。アイテム数の比率が、そのままアイテムの出現確率になります。
秘密キーは、ガチャのたびにランダムなものを用意し、ガチャが終了するまで秘密にしておきます。 ガチャがひける期間が終わったら、公開します。この鍵が公開されると、利用者は自分でガチャを再計算し、運営側が不正していないことを確認できます。 常設ガチャの場合は、週次や月次で秘密キーを変更することで対応できます。
ユーザは、ガチャを引くときにくじ番号を指定します。
ユーザID・秘密キー・アイテム設定が同じであれば、同じくじ番号は必ず同じ結果になります。 一方で、秘密キーがわからなければ、どのアイテムが出るのか予測はできません。 また、くじ番号はユーザ側が指定するので、運営側が利用者に不利益を与えるような細工をすることもできません。
ですので、ガチャ期間中は、確率を明らかにしたうえで何が出るかわからないようにでき、ガチャ終了後にそれを検証可能になります。
設定
ユーザID
秘密キー
ランダム生成
(16進数表記)
アイテム
1:エンタープライズ(Sレア) 1:フッド(Sレア) 4:赤城(レア) 4:加賀(レア) 10:サンディエゴ(ノーマル) 10:ジュノー(ノーマル) 10:エイジャックス(ノーマル) 10:ヴァンパイア(ノーマル) 10:シグネット(ノーマル) 10:ハムマン(ノーマル) 10:ラフィー(ノーマル) 10:シャベリン(ノーマル) 10:ノーフォーク(ノーマル)
「アイテム枚数:アイテム名」で1行1件で記載します。
設定を反映しガチャの準備をする
結果
アイテムの確率
ガチャ結果
くじ番号
HMACのメッセージ
ID
アイテム
くじ番号:
おまかせで選ぶ
※8桁の数値で指定してください。
ガチャを回す
10連ガチャ(レア以上保証)を回す
ここでは制限していませんが、実際には同じくじ番号で複数回ひけないようにする必要があります。
10連ガチャのレア保証は、10回目を引くまでに、レアが出ていない場合、レアが出るまで連番を進めて繰り返しガチャを引く形で実現します。 サンプルデータでは、レア以上が10%入ってますので、10回ひいてもだめなときにレア保証用の動作をします。