ブロックチェーンによる抽選
基本的な使い方
1.対象ブロックチェーン、対象ブロックNo、当たり総数、応募者一覧を入力してください。2.入力が終わりましたら「抽選結果確認用URL」を一般に公開してください。
公開しなくても抽選はできますが運営が順番を入れ替えるなど不正をしていないことを証明するために該当ブロック採掘前にURLを公開することをお薦めします。
3.該当ブロックが採掘された後「抽選結果確認用URL」を表示して「抽選結果の確認」ボタンを押下してください。
すでに確定した結果を確認するための処置のため入力内容を変更しない限り誰が押下しても同じ結果がでます。
抽選アルゴリズム
前提:
block_hash: 指定ブロックナンバーのブロックハッシュatari_count: 当たりの個数、上から順に1位、2位、3位・・・とする
oubo_count:応募総数
具体的なアルゴリズム
例) block_hash: 4b16f3a22a7a12d57ed1229ec0409996ae960cb8ead6fe0b167f482c9ee2fc7catari_count: 5
oubo_count: 100
1. block_hashの後ろに順位を付けた文字列を作る
例)1回目のループだと順位は1なのでblock_hashの後ろに1を加える4b16f3a22a7a12d57ed1229ec0409996ae960cb8ead6fe0b167f482c9ee2fc7c1
2. 1に対してsha256でハッシュ化をn回する(nはループの回数 1ループ目はn=1)
86d29585d0e61ea12920f3a347502f9119a350ca7e563fbc37d20d19f2888e973. 2の先頭12文字分を取る
※JavaScriptで標準で扱える数字の桁数の関係で12桁としています86d29585d0e6
4. 3を10進数化して応募総数で割った余り+1を求める
485. 今までの当たり一覧と重複していない時【4の答え】番目をその順位の当たりとする
今までの当たり番号と重複する時は 2のハッシュ化する回数を一回増やして2~4の行程を重複しなくなるまで繰り返す
ハッシュ化する回数を一回増やすとはハッシュ化した結果に対して再度ハッシュ化するsha256(sha256("4b16f3a22a7a12d57ed1229ec0409996ae960cb8ead6fe0b167f482c9ee2fc7c1"))
6. 次の順位を決めるために1~5を必要な回数だけ繰り返す
詳しくはJavaScriptのソースを読んでください。
また元々はPHP版で実装したものを移植しましたので参考までに。
同じ結果が返ってくるかの検証用にも使っています。
抽選利用の注意点
特定のブロックNOのブロックハッシュを元に抽選しているため マイナーが自分に有利な抽選結果になるブロックハッシュを探してくることができる可能性があります。そのため大金のかかった抽選ではなく遊び用としてご利用ください。
また難易度が高く自分に有利なブロックハッシュを生成することが難しいBTCチェーンを利用することをお勧めします。
裏技
自動で取ってこれるブロックハッシュはMONAとBTCのみですが その他のブロックチェーンのブロックハッシュや任意の文字列をblock hash欄に入力して抽選することもできます。例えばETHチェーンのブロック番号○番のhashを使って抽選します、とか 主催者があらかじめ用意した暗号化ZIPの中に使用する文字列を保存しておくなど。
block hashは文字数制限は特に付けてないのでなんでも入れられます。
面白い使い方をいろいろ考えてみてください。