キノコの自省録

日々適当クリエイト

ブロックチェーンの分かりにくいであろう部分を説明してみる

ブロックチェーンによる革命が起こるまでにあと10年かかる理由 - ZDNet Japan

ブロックチェーンの普及まであと10年かかる、という記事が出ていますが、なんというか、そもそもブロックチェーンって理解が及んでない気がします。 私もよく「ブロックチェーンって結局何?」って聞かれます。ビットコインブロックチェーンの1実施形態なのですが、ビットコインブロックチェーンと混同する人が非常に多く、 それがまたわかりにくさに拍車をかけている気がします。

大抵の場合、いくつかのキーワードは点でわかるんですけど、これが線にならないんですよね。例えば、だいぶキーワードとして浸透した感のある「マイニング」ですが、物凄い計算量がいることはみんな知っています。でも、なぜこれが必要なのかわからない。実はこの作業はビットコインだとマストなのであって、別の実施形態では必要がないということも知られてません。分散台帳もそうです。P2Pで、各ノードが台帳を持っているということはみんな知ってますが、実際に台帳がどうなっているのかあまり知られてません。

そんなわけで、個人的にわかりにくいんじゃないかなーと思った知識を線で繋いでみます。

キーワード

大体みんな知ってるブロックチェーン、というかビットコインの中身はこんなところではないでしょうか?

「通常サーバクライアントで実装するアプリケーションやサービスを、P2Pで行う。」

「 取引ログは分散台帳に残っており、全てのP2Pノードが分散台帳を保持している。」

「分散台帳はブロックに分かれており、ブロック同士はハッシュチェーンで連結されている。」

ビットコインは発掘者(マイナー)にたくさん計算させるマイニングを行わせることで、P2Pでの合意形成を可能にしている。」

「マイニングに成功すると多額の報酬が支払われる」

なんかわかるようなわからないような、ですよね。とりあえずこれらの分散した知識を、ビットコインの実装を例に鎖でつないでみます。

サーバクライアントとP2P

サーバクライアントではなくP2Pで処理を行うことについては説明するまでもないと思いますが、ブロックチェーンを活用するメリットもここに集約されています。メリットについては後程説明します。

分散台帳

台帳ファイルはノードそれぞれが持っていますが、基本的に「全員同じ台帳」になるように更新します。 たまに、「それぞれのノードが各々の台帳を持っていて、全部足すと1つの台帳が出来上がる」と思っている人がいますが、誤りです。

分散台帳には取引(トランザクション)を記録します。台帳のページ毎に、複数の取引が一度に記載されます。このページをブロックと言います。トランザクションとは、例えば「AさんがBさんに100円送金」みたいなものと考えておけばよいです。これが1トランザクションです。ビットコインの場合は2500トランザクションくらい1ブロックに書くことができます。

未使用のブロックにトランザクションを詰め込み、それを承認して分散台帳に正式に登録します。要するにハンコを押します。このハンコを押されたブロックをハッシュで繋いでいくのでブロックチェーンと言われます。このハンコ押しはどの参加ノードでも行えますが、そのためにはちょっとした作業が必要です。それがProof of Workです。

f:id:kinokorori:20191016232322p:plain
ノード、(分散)台帳、ブロック(チェーン)

コンセンサス

普通、ハンコは責任者が押します。みんながみんなハンコを簡単に押せるようにすると、「取引Aはあっちでもこっちでも承認されてしまった」「取引Bと取引Cが同時に成立して残高がマイナスになってしまった」などの状態の不整合が発生します。これをビザンチン障害と言います。

ビットコインではノード全てがハンコを押す資格を持っていますので、ビザンチン障害が発生する環境にあります。その対応策として、ビットコインではProof of Work(PoW)という計算作業を承認者に行わせて、微妙な時間的ズレを作り出しています。

PoWは何をするかと言うと、ブロックのハッシュ計算に利用するNonce(ナンス)という32ビットの数値を、条件が合うまで延々と探し続けさせます。具体的にはブロックのハッシュ値の先頭16桁が全部0になるNonceを探せ、といった具合です。これがいわゆるマイニングです。最初に見つけ出した人には報酬が支払われます。2019年10月現在では12.5btcです。ちなみに、マイニングは平均10分かかるようにアルゴリズムで自動的に調節されます。

承認されたブロックはP2Pネットワークを通じて拡散されます。新しい台帳を受け取ったノードは、自分の台帳と比較よりもブロックチェーンが長い場合、新しい台帳を採択して更新します。

平均で10分ということは、5分で見つかることもあれば、15分でも見つからない可能性があります。つまり、ある人がNonceを見つけた時、同時に別の人がNonceを見つける確率はかなり低くなります。この平均で10分かかる計算作業による物理的時間のズレの創出と、長いブロックチェーンの採択によって、P2Pネットワークでも合意形成が保たれるという寸法です。この合意形成アルゴリズムをナカモト・コンセンサスと言います。

f:id:kinokorori:20191016232801p:plain
長いものに巻かれよ

ファイナリティ

ほぼ同時に承認が発生すると、ブロックが分岐(フォーク)してしまいます。しかしこれも、時間が解決します。そのうちチェーンの長さに差が生じてきて、片一方はなかったことにされます。

つまり、1回承認されたトランザクションであっても、覆されてしまう可能性があるということです。一般的には6承認、つまり、後ろに6つブロックが繋がれば、承認が覆されることはないとされています。何回後ろに承認が続けば事実上OKとするかをファイナリティと言います。

ちなみに、平均10分承認にかかるということは、6承認には1時間かかるということです。長いですよね。

スケーラビリティ

トランザクションの承認に平均10分、一度に承認できる数が2500くらい、ということは、1分250取引、1秒60取引程度しか捌けないということです。その処理以上のトランザクションが追加されると、処理しきれず溜まっていく一方となります。

スケールアップもスケールアウトも容易ではないので、ブロックチェーンにとってスケーラビリティの確保が最も困難な課題となっています。スケールアップの場合、トランザクションの承認数を増やすことになります。要するに、平均10分かけさせていたPoWを1分にするとかですね。1分に短縮すれば、当然10倍承認が可能になりますが、ファイナリティの方で問題が出ます。スケールアウトの場合、ノードをなんらかのエリアにわけることになりますが、エリア間での取引や整合性が課題になります。

最近では、ライトニングネットワークという取引アルゴリズムが、この問題の解決のカギになるとして注目されています。

取引所とかはなんなんだ

ビットコインはノードを立ち上げれば誰でも取引ができますが、上述したように、1取引に60分はかかります。見やすいUIが付いているわけでもありません。 また、ファイナリティに60分ということは、例えばビットコインをタクシーの支払いに使うとなった場合、承認されるまで60分かかるので、その間降車できません。

ということでビットコインP2Pネットワークだけでは使い勝手が悪いため、外部サービスが構築されています。このサービスは通常のサーバクライアントシステムで実装されているというのが一般的です。

ブロックチェーンのメリット

メリットはサーバクライアントからP2Pに変更した部分にある、と前述しました。具体的には、

  • シェアリングが用意
  • 改ざんが極めて困難
  • ダウンタイム・ゼロ
  • 安価
  • 管理者不在

などのメリットがあると言われています。どの部分を最も魅力と感じるかは人に寄りけりかと思いますが、特にシェアリングと管理者不在が大きいかと思っています。管理者不在と言うことは、CtoCビジネスの拡大が今後期待できるということです。

EthereumとHyperledger

以上がビットコインの話ですが、ビットコインは基本的にお金のやり取りしか扱えません。しかし、ブロックチェーンの有用性に目を付けた人たちが、ビットコイン以外のブロックチェーン基盤を開発しました。有名なのはEthereum(イーサリアム)とHyperledger(ハイパーレッジャー)です。

イーサリアム

イーサリアムはETH(イーサ)という独自通貨を持っています。イーサリアムの特徴は、なんといってもスマートコントラクトだと思います。スマートコントラクトは、取引にスクリプトコードを実行させるという機能で、これにより、通貨の移動だけでなく、「物件のステータスの変更」や、「絵画の所有者の変更」といったことが可能になります。スマートコントラクトを利用したアプリケーションをDAppsと言います。

DAppsで最も人気なのがゲームです。普通のゲームの場合、アカウント売買(ようはRMT)は禁止で、ゲーム内のアイテムの売買はそもそも出来ないことが多いですが、DAppsの場合は、ETH使って取引できるように実装されています。割と有名なのがCryptoKittiesで、このゲーム内で作成された猫が1300万円だかで取引されたとか。

CryptoKitties | Collect and breed digital cats!

DAppsの問題(?)は、記録をブロックチェーン内のDBに行う都合上、これがトランザクションとして発行されます。トランザクションはいくらかの手数料がかかりますので、チマチマとお金が出ていくことになります。ちなみにDAppsではこれをガス代と呼んでいます。

なお、イーサリアムもコンセンサスアルゴリズムにPoWを使用していますが、平均15秒でNonceの探索が終わるようになっているため、ビットコインより圧倒的に速いです。その分分岐も増えてしまいますが、その分岐数をうまく生かして、「最も長いチェーン」を採択するのではなく、「最も計算量の多いチェーン」を採択する、GHOSTプロトコルを採用しています。最近では、この15秒でも遅すぎるということで、PoSという別のアルゴリズムに切り替えることを検討しているようです。

Hyperledger

HyperledgerはLinux Foundationが管理する、ビジネス用途特化型のブロックチェーンです。デファクトスタンダードIBMのHyperledger Fabricだと思います。

Hyperledgerもイーサリアム同様、取引にスクリプトコード(Hyperledgerの場合はChainCodeと言う名前)が実行できます。大きな違いはノードの構成で、ビットコインのように誰でも参加できるのではなく、許可制のコンソーシアム型、もしくは完全クローズドなプライベート型という形態をとります。また、Hyperledgerは独自の通貨を持ちません。取引に支払いを含める場合は、外部から調達する必要があります。

使用用途としては、例えば医療情報の共有や輸出入関係書類の共有と言ったものがあります。輸出入関係書類の共有については、農林水産省がHyperledgerを導入して検討を進めていたことがあります。(今どうなったのかわかりませんが)

Hyperledgerは、ノードが全て同じ機能というわけではなく、役割が異なっています。Hyperledger Fabricの場合、合意形成にEndorsement-Order-Validation(EOV)というアルゴリズムを取っています。このEOVは、ノードごとに役割が異なるため、全員同じノードのビットコイン系とはだいぶ雰囲気が違います。ちなみに合意形成は非常に高速です。

図書

推薦図書。ブロックチェーン理解の助けになったのは、まずこの本。話がやや技術に寄っています。


ブロックチェーン システム設計

企画系ならこちらをお勧めしておきます。技術部分も非常にコンパクトにまとまっています。


新事業企画・起業のための 実践ブロックチェーン・ビジネス