2016年3月29日火曜日

実現可能な最小の Block chain のサンプルコード(未完成)

Block chain についての Lightning Talk を聞く機会があったので、このとても解りやすい記事を読んで、サンプルコードを書き始めてみた。

価値あるモノ(例えば貨幣)をデジタル化した時に問題になるのが double spend (二重支払い)で、Block chain はこの問題を解決しようとしている。例えば、私が $100 のデジタル貨幣(適当なバイナリデータで表現されているとする)を持っていたとして、バイナリデータは簡単に複製可能なので、この $100 を同時に 2 人(以上)に送ることができてしまう。これを P2P の世界で、中央集権的なサーバなしでどのように解決するか、というのがテーマだ。

もし参加者全員が信頼できるならば、これはいわゆる leader election 問題なので、Paxos/Raft で解決できる。しかしここでは参加者が信頼できることを仮定しない。参加者の一部は悪意あるユーザーかもしれない。Paxos/Raft は、参加者が(データをドロップすることはあっても)プロトコルには従うことを仮定しているので、参加者が悪意ある場合には適用できない。

Block chain のアイデアは、「ある命題を主張するためにコストを支払わなければならないとしたら、コストが十分に高ければ、悪意あるユーザーが偽の主張をする経済的メリットはなくなり、システムは安定する」ということだ。たとえば、「Alice は Bob に $100 あげた(ホントは Chris にあげたのに)」という偽の主張をするインセンティブが Alice にはある。もしその主張が認められれば、Bob に $100 の貸しができるからだ。しかしもし、その虚偽の主張のために $100 のコストを払わなければならないのなら、そしてもし Alice が経済合理的な人間なら、そのように主張するはずがない。

このようなシステムが設計できることを示したのが Block chain 論文だ。参加者は契約(例えばお金のやりとり)をネットワークに流し「この契約を認証した人には $1 差し上げます」という。この $1 を欲しい参加者は、proof-of-work という作業を行い「この契約は正しい」とハンコを押すことができる。もちろん悪意あるユーザーが proof-of-work を行って虚偽の主張を認証することもできるが、proof-of-work は CPU を消費する作業なのでコストがかかる。もし参加者の多くが善意のユーザーだとしたら、偽の主張を認証するためには膨大なコストを払う必要があり、そのようなインセンティブはなくなる。



もしかしたらすでに現実的な解はあるのかもしれないが、Block chain にはシステムの安定性の問題があると思う(コンピュータシステムの安定性の話ではない)。ある主張の真偽は、どれだけ工夫しても確率的にしか定まらず、「この主張は絶対に正しい」という状態には到達しない。
突き詰めて考えれば、これは中央集権的なシステムにも存在する問題だ。Alice が Bob の銀行口座に $100 振り込んだ時、もしかしたらその銀行は Bob を騙していて、実際には $100 は振り込まれていないのかもしれない。私たちは単に銀行を非常に高く信頼してるだけの話だ。
とはいっても、銀行を「誰が運営しているかもわからないコンピュータのネットワーク」で置き換えられるのか、その置き換えを心情的に受け入れられるまでどれだけの期間がかかるのか疑問だ。


というわけで、Block chain は、詐欺の被害が小さい少額決済から順に普及していくのではないかなーと思っている。
なんにせよ、この記事はとても面白かった。サンプルコードはインタラクティブな感じにして完成させたい(希望)。

0 件のコメント:

コメントを投稿