LabFacebookTwitterはてブPocketFeedlyプッシュ通知たまには中の人(うどん)も記事を書いてみようかと思います。もとに記事を書いてます。crypto(一定程度ダウンしたらネットワークが止まる)Ethereumが取ろうとしているアプローチVDFとはVDFのASICはじめに乱数は、日常よく使われるものです。パスワード生成などなど、ランダムに数字を発生させて決めるという行為は一般的なものです。くじ引きという行為をデジタルな場で行う際、乱数は非常に大切になってきます。ブロックチェーン上でも乱数を扱いたいという需要はあります。ギャンブルギャンブルにおいて乱数の重要性はいうまでもありません。勝敗を決する数字が真にランダムな値ではなく、操作されてたとしたら...。ギャンブルは成り立ちません。SatoshiDiceという一時期かなり流行ったギャンブルでは運営側が秘密の文字列を用意する(24時間毎に変更、秘密の文字列のハッシュ値は2日後のまで公開)ユーザーがDice側に送った際のトランザクションハッシュと、その秘密の文字列をハッシュするハッシュして出たハッシュ値の先頭の文字列を乱数とみなしギャンブルする(ユーザーは後日公開された秘密の文字列を見て不正がないかどうかチェックできる)といった仕組みを使いフェアにしてました。ShardingShardingとはざっくりいってしまうと、ランダムにグループ分けして、それぞれのグループがトランザクションを並列処理することで処理速度をあげようっていう仕組みのことです。定期的にグループをランダムに入れ替えます太字にしたのでお分りかと思いますが、このランダムにというのが非常に重要になってくるのです。なければ悪意のある攻撃者がある一意のShard(グループ)に振り分けられることを意図できてしまい、攻撃されてしまう恐れがあるからです。攻撃コストはネットワーク全体で処理するよりn個のShardに分けられた方が1/nになりますし。そんなこんなで、Shardingにもこのランダムさというのは非常に大切になってくるのです。これ以外にもゲームなどにも重要になってくるでしょう。Randomnessより)予測不可能(unpredictable)であること例えばこれまでに生成された値からパターンを見出され、次の値が何となく予測されてしまうのは非常にまずいです。そもそもそんなものは乱数とは呼べないでしょう。それは一方向性のハッシュ関数によって普通に実現されてます偏りのない公平なもの(unbiasable)であることブロックチェーンにはそもそもランダムに近い値がいくつかあります。これこれはたまたま記事執筆中に生成されたEthereumのブロックの情報です。見ての通り、ランダムに生成された値がいくつもあります。いったものは、生成された乱数をマイナーが知っていることになります。こちらの記事には高額な証券のパターンについて触れられてますが、それらは高額なお金がかかっているもの、例えばギャンブルなどでは重要な課題になります。実際昔懐かしVDiceとかではOraclizeという外部からデータを取ってくるシステムクォ使って乱数を取り込んだりしていましたが、これもOraclizeなどに依存する仕組みです。いつでも必ず乱数を生成できる(unstoppable)こといつでも必ず乱数が生成できるということは、unstoppableなブロックチェーンの世界において大事なことです。引こうとしたら無反応になったり、Shardingでグループの入れ替えをしようとしたのに乱数が生成できなくてブロックチェーンが止まったりといったことが起きたらやばいです。Livenessは非常に大事です。乱数を生成する際のジレンマですが既存の方法にはジレンマが存在します。先述したように、PoWではブロックに含まれる数字を乱数(またはその種)とした場合、ブロックを採掘したマイナーが最初に答えを知っていることになります。都合が悪い場合(金銭的利益がブロックをブロードキャストしないことを上回る場合)はブロードキャストしないということが考えられます。#1まあでもこの仕組みでも新しくブロックを生成するノードは全てをしれます。RANDAOについてはこちらがわかりやすいですhttps://qiita.com/yama_mo/items/a65c6a058264ee282601ですがRandao側もQ&Aで認めている通り、マイナーにより恣意的選択をされる可能性はゼロではないです。仕組み上6ブロック以上というある程度時間をかけて生成しているので、恣意的選択をされる可能性を下げているようです。後述するDfinityでも採用されているBLS署名も実装する予定とのことです。crypto(一定程度ダウンしたらネットワークが止まる)Dfinityに使われている仕組みでは、ざっくり言ってしまえばn/m以上の人が参加すればブロック承認のための署名が生成されるというものを使ってます。n以上であれば必ず発行されるし、そのnに誰が参加するかは署名が生成されるまではわからない。後から検証は容易にできるというものです。Dfinityではこの署名を乱数として扱い、Shardの振り分け先を決定しています。この仕組みを見てわかる通り、署名を行うために常時一定程度のノードがオンラインになっている必要があります。たくさんのノードがシャットダウンしてしまったら一切の処理が行えなくなる(Stopしてしまう)のです。Ethereumが取ろうとしているアプローチEthereumはRANDAOで作り出した乱数を種に、VDFでさらに処理して乱数を作りだすという仕組みを取ろうとしています。これによりバイアスを取り除くという作業をするようです。Fanctionsの略です。Workに近いように思えますが、違いがあります。Workでは、処理を並列的に行います。たくさんのASICを持った方がそれに比例してたくさんの計算を行うことができます。WorkよりですがVDFは違います。ハッシュチェーンをずーっと計算し続ける(前の計算結果がわからないと次にに進めない)ものです。ASICを用意すればいいというものではなく、一台の超性能のいいコンピューターが勝つというものです。Workは答えがいくつもあるものですが(要件を満たせば正当なブロックとみなされるため)、VDFでは答えは一つです。VDFのASICさて、このVDFはもちろん攻撃者よりも善良な者がパワーを上回らなければいけません。実行する際1台以上のノードがいなくてはいけません。Workに近いですね。いうことでEthereumとFilecoinはASICの研究開発をしていくそうです。トータルで20億から30億円だそうrigの仕様ですオープンソースにするそうですが、正直聞いたときはうーんと思いました。Dfinityのアプローチの方がいいなと感じたからです。(そんな半分もノードが一気にオフラインになるのは想像つかないので)ですが、クライアントがクラッシュしたり(Ethereumでもそういうことがありました)といったことを考えると致し方ないのかな〜とも思います。Labの中の人のうどんです。株式と仮想通貨における特徴や、違いについて説明しています。