もくじ
TL;DR
事前に抽選に使うブロックの日時を指定しておく。
抽選券を示すトークンを作って、それを配布する。
抽選時は、トークンを渡したトランザクションのハッシュと、抽選ブロックのハッシュを比較する。
ハッシュ値が近い順に当選者とする。
以上!
上のを読んで理解できる人はもうこのページを閉じて良いです。
ここから先は色々詳しく話していきます。
既存の抽選の問題点
例えば「抽選で○○人に当たる!」とかそういったキャンペーンがあるとき、果たして当選者の選択ははどれだけ信用のできる方法で行われているでしょうか。
古くはハガキ懸賞において「当たりやすいハガキを書く」という技術が生まれたり、コンビニで店員が当たりクジを抜いていたことが発覚したりと、抽選の不公平性は常に疑問を持たれてきました。
応募者の心理としては「全員が等確率で当選することを保証してほしい」という声が上がるのは当然のことと言えるでしょう。
ブロックチェーンによる解決
ブロックチェーン技術のポイントは「非中央集権」と「透明性」です。
これらは、抽選システムに対して非常に相性が良い。
具体的に解決する手法を考えていきます。
抽選の要素の整理
抽選には何が必要でしょうか。
応募者に対して一意に割り振る「抽選番号」と、そこから選択する「当選番号」です。
「抽選者が当選番号をコントロールできない」ということが保証できれば、透明性のある抽選と言えます。
ハッシュ値
ブロックチェーン技術には各所でハッシュ値が利用されています。
ハッシュ値というのは大雑把に言ってしまえば「ランダムな値」のことで、特定の値にコントロールすることが非常に難しい。
このハッシュ値を抽選に利用していきます。
具体的に、ブロックチェーンのどこにハッシュ値が利用されているかを確認します。
トランザクション
まず、トランザクションには固有のハッシュ値があります。
トランザクション(tx)とは、ブロックチェーンの世界の仮想通貨の取引のことを言います。
誰から誰に何を渡したか、という情報が記録されていて、その情報が正しい、ということを示すために署名を付けます。この署名がハッシュ値になります。
ちなみに、ホンモノのトランザクションは色々なサイトで確認することができます。例えばココとか。この例では、「d6bff3b4adc7f5c4cbf6516cce7efba798ab9e56fb64aa6b79fe845e4ae13e4a」がハッシュ値です。
ブロック
次に、ブロックにも固有のハッシュ値があります。
ブロックというのはブロックチェーンのブロックのことで、大雑把に言えばトランザクションをひとまとめにしたものです。
全てのトランザクションは採掘者(マイナー)によって1つのブロックにまとめられ、ブロックチェーンに登録されます。ここにも署名が付きます。これもハッシュ値です。
ホンモノのブロックは、例えばココとかで確認できます。この例では「0000000000000000000d658a2ee7617d41af3870d2b463715410f772bcd7da36」がハッシュ値です。
ハッシュ値はランダムな値なのだと言ったはずなのに、先頭がずっとゼロですね?これはランダムではないのでは?
いいえ、これは例に示したのがビットコインであり、ビットコインは「ランダムなハッシュ値を何億回も作り直して、先頭がずっとゼロになった人がブロックを作って良い」というルールだからです。
抽選システムへの適用
さて、ブロックチェーンにおけるハッシュ値の場所と特性はわかりました。抽選システムへと適用していきましょう。
抽選券
抽選システム専用のブロックチェーンを作ることもできますが、ブロックチェーンには「トークン」や「モザイク」という仕組みがあります。
これは、既存のブロックチェーンの上に、ユーザがオリジナルの通貨を作ることができる仕組みです。これを使うと、色々な通貨で一つのブロックチェーンを共有することができます。
この仕組みを使って、「抽選券トークン」を作りましょう。抽選券トークンは金額を持つ通貨ではなく、1枚単位での取引しか許さないように設定する必要があります。
抽選番号
これは、「抽選券トークン」を渡すときのトランザクションに付いているハッシュ値で良いでしょう。
抽選者は、応募者にトークンを渡すときのハッシュ値を全て覚えておきます。
当選番号
これには、ブロックのハッシュ値を使います。
ではどのブロックを使いましょうか。仕組上はどのブロックでも良いですが、透明性を示すためには以下のいずれかが良いでしょう。
- 最後の抽選券トークンを配ったときのブロック
- 事前に日時を告知しておいて、その日時に生成されたブロック
抽選の実施
抽選番号と当選番号が揃えば、あとは抽選するだけです。
応募者全員の抽選番号と当選番号を比べて、「ブロックのハッシュ値に近い順に当選」、とすれば良いでしょう。
上に示したように、全ての取引はネット上で確認でき、応募者全員の抽選番号と当選番号は誰でも検証可能です。
こうすることで、透明性を確保した抽選システムを構築できます。
少しだけ応用
最後に、わかっているウィークポイントを潰しておきましょう。
ブロックのハッシュ値が偏る
ビットコインのブロックはハッシュ値の先頭に0が続きますし、それ以外の仮想通貨もブロックのハッシュ値に関しては色々な成約があり、ランダムな値として適切とは言えません。
とはいえ値がランダムでないならランダムにしてしまえば良いので、ハッシュ値をさらにハッシュ化すれば済む話です。
応募者の匿名性
応募者の情報がすべて公開されるため、誰が抽選に当たったかを追跡できてしまいます。
応募専用のウォレットを用意させることが望ましいです。
一方で当選者とのやり取りを行うために、トランザクションに暗号化した連絡情報を載せておきたいですね。
抽選券トークンの価格
抽選券トークンを無料配布にしてしまうと、悪意のあるユーザが大量のウォレットを用意して応募券を大量に取得、当選確率を不当に上げる、という自体が想定されます。
ただし、抽選券トークンを有料にする場合、抽選が「賭博」とみなされる可能性がかなり上がるので注意して下さい。
抽選券トークンの再配布
抽選券トークンを再配布されると、最終的な抽選者を追跡しづらくなります。
抽選番号も「最初にトークンを配布したときのトランザクション」か「最後に再配布したときのトランザクション」か、二通り考えられます。後者は応募者によって任意に抽選番号を再設定できることになります。
これらをの手間を考えると、再配布を禁止する設定でトークンを作成することが望ましいでしょう。
当選権利の譲渡を認めたいのであれば、再配布可で作っても良いとは思いますが。
おわりに
というシステムを考えたんですが、果たしてこれを何の抽選に使うべきか、という点でやりたいことを見失ったのでここまでにしておきます。
仮想通貨の特性上、「当選者には○○コインを××枚プレゼント!」という抽選を簡単に作れてしまいますが、すでに仮想通貨は準通貨とみなされており宝クジと同じものとみなされます。
日本では個人が宝クジを経営するのは違法なので絶対に作らないでください。
その他、必ず賭博法と景表法を確認し、高額な商品を対象に抽選する場合は弁護士と相談の上実施してください。私は責任を取れません。