ブロックチェーン開発会社LayerXの取り組み

中村龍矢氏:それでは「シャーディング技術の全体像と研究動向」ということで発表します。よろしくお願いします。

本日はシャーディング祭りということで、まず序盤に僕からシャーディングの概論的なことをお話しします。それから題材としてEthereum 2.0のシャーディングについて話して、最後にQ&Aとして、Sli.doでもらった質問に答えていこうかなと思っています。資料は、あとでTwitterで公開します。

それではまず自己紹介も兼ねて、弊社の研究開発についてお話しします。LayerXはブロックチェーン開発会社です。創業したときからR&Dチームがありまして、先端の技術にキャッチアップすること、キャッチアップにとどまらないで自分たちで技術を生み出して発展に貢献すること、それからこの技術的なビジョンを持って社内外で発信することをビジョンにやっています。

今までのテーマを全部総合すると、セキュリティ、スケーラビリティ、インターオペラビリティ、プライバシーという、けっこういろんな方面の研究をやっています。

スマートコントラクトの研究

最初はスマートコントラクトのセキュリティから研究を始めました。ここにあるVyperというのは、Ethereumの有名なSolidityに代わる言語として作られたものです。最初はこのコンパイラにコントリビューションをしたりとか……。ここに書いてある「Vyper Compiler」は、Ethereumの「Remix」という有名なブラウザのコンパイラですが、そこにVyperプラグインというのがありまして、それは弊社が昔作ったものです。

ここから転じて、形式的検証というスマートコントラクトのセキュリティを数学的に証明する、といったプロジェクトを始めました。

ここで使っているのは「K Framework」という形式的検証のツールなんですけれども、Ethereumのコミュニティに限らず、本当にパブリックチェーンコミュニティで、今、広く扱われている形式的検証ツールになっています。

ここから徐々に、「形式的検証の対象をプログラムからプロトコルに変えてみたらおもしろいんじゃないか?」ということで始めたのが、CBC CasperというEthereumのProof of Stake向けのコンセンサスアルゴリズム。これの形式的検証を始めました。

こちらはプログラムの形式的検証と違うので別のツールを使っていて、Isabelleという定理証明器を使って証明を進めていきました。

こちらの研究は論文になっていまして、世界で初めて査読つきの国際学会に通ったCBC Casperの論文になってます。こういったCasperに関する学術的な研究は、Ethereum Foundationの「Grants Program」というものにサポートしてもらっています。

Ethereum 2.0の脆弱性発見と改善策の提案

2019年の秋ぐらいから、今日のテーマでもあるEthereum 2.0のセキュリティを研究し始めまして、ここに書いてあるBouncing Attackとか、2つほど脆弱性の発見と改善策の提案を行なっています。こちらは2つともEthereum 2.0の公式の仕様にマージされています。

こうしたかたちで、既存のコンセンサスアルゴリズムに対して証明を与えたりとかセキュリティをチェックするということだけではなくて、我々もどんどん自分たちで作っていこうと、いくつかオリジナルのコンセンサスアルゴリズムに関しても提案をしています。

こういったCasperの研究に関しては、弊社の中で閉じこもるのではなくて、なるべく外の研究者と議論をしながら進めていまして……。とくにCasperはEthereumのプロトコルですので、VitalikをはじめとするEthereum Foundationのメンバーが議論にとてもつき合ってくれて、2019去年のDEVCONでもいろんな方に紹介をしてもらいました。

シャーディングとスケーラビリティに関する研究

ここまでがセキュリティです。今日のトピックであるシャーディングというのは、スケーラビリティ関連の研究です。去年の秋・冬ぐらいから始めたもので、今日このあと岡南君が発表するシャーディングの負荷集中の現象、それからその緩和策の提案といったものを研究して、こちらも学会というかワークショップに発表しています。これは後ほど紹介します。

それ以外も、少しずつスケーラビリティに関しては既存の提案を見ていて……。僕はわりとセキュリティ・スケーラビリティ周りを研究しているのですが、もう1個プライバシーを主にやっているチームがあって、そちらで2019年の今ごろ作ったのが「Zerochain」という秘匿送金ブロックチェーンです。

これはPolkadotを運営しているWeb3 Foundationが作っているSubstrateというブロックチェーンフレームワーク上に、Rustで実装されています。こちらはWeb3 Foundationのグラントに採択されていて、サポートを受けています。

最近の新しい研究トピックとしては、「インターオペラビリティ:クロスチェーン」で、「Cordage」がつい最近リリースされています。

こちらはオープンソースの「Corda」というブロックチェーン、わりとエンタープライズ向けのブロックチェーンと、それからほかのチェーンをつないでいくというプロジェクトになっていまして、現在はEnterprise Ethereumの中でも非常に有名な「Quorum」というものと接続しています。これは絶賛開発中ですので、今後もいろんなアップデートがあるかと思います。

アカデミアでの発表

そういったかたちでEthereumとかCordaみたいな実際のインダストリーのブロックチェーンの研究ということもあるんですけれども、それをなるべくアカデミアのほうに論文で発表して、「こういった問題があるんだよ」ということをベンチャーとして伝えていきたいなと思っています。2019年は、国内で2つほど、国外で4つのカンファレンスに参加しています。

今ザーッとこれまでの研究についてやったことを話してきたんですけれども、その背景にどういった目的があるかとか、スタートアップとしてどういうふうにほかの大学や大企業と競って研究をしていくかということに関しては、最近記事を書きましたので、こちらをぜひご覧ください。このリンクから行くか、Twitterで発表しています。

シャーディングって何?

というわけで、いよいよ本題のシャーディング概論とEthereum 2.0のほうに移りたいと思います。1点目は「シャーディングについて」です。

まず「シャーディングとは?」ということですが、非常に広い定義から紹介します。非常に広く言うと、複数のブロックチェーンで、1つの分散台帳、アプリケーションプラットフォームを作っていくというものです。

ここで、それぞれのシャードというのが右の図にある一つひとつのブロックチェーンのことを指していまして、大事なのは、それぞれのシャードが別々の履歴を管理する、別々のヒストリーを管理すると……。なので、あるシャードにあるコントラクト・アカウントはほかのシャードには基本的にはない、というかたちになります。

なぜやるかということなのですが、非常に乱暴に言うと、シャードの数だけTPSが上がっていくので、スケーラビリティの改善が主なモチベーションになります。

これは非常に広い定義ですが、狭義のシャーディングの定義として2つほど条件があります。こちらがわりとEthereumとかアカデミアでシャーディングと呼ばれているものです。

1つ目の定義が「異なるノードが各シャードに割り当てられる」というものです。自分があるシャードに割り当てられたとしたら、そのバリデーターはほかのシャードのことは見ない。これがシャーディングのスケーラビリティ改善としての特徴でして、TPSが上がっても1つあたりのノードが見るべきデータの量は変わりませんので、ストレージに関してTPS分だけ要求が増えることがありません。

この1つ目の条件を満たさない広い意味のシャーディングも「Transaction sharding」と言われたりして、こちらもこれで論文とか研究はあります。

2つ目の条件が非常に大事でして、「セキュリティは“あまり”落ちない」と書いてあるのですが、このようにブロックチェーンを分割してしまうと、かつ条件1を満たすと、一つひとつのシャードに属するノードの数、バリデーターの数は、当然N個に分けたらN分の1になりますので、セキュリティもN分の1になってしまうと。

これだと正しいスケーラビリティのソリューションじゃないので、これをなんとかして解決するのがシャーディングの2個目の条件になります。残念ながら完全に落ちなくするのは難しいと。ですが、“あまり”落ちないということで、その落ち幅がある程度に収まるというのが2つ目の条件になっています。

シャーディングに取り組んでいるのか誰かということですが、今日紹介するEthereumも当然やってるんですけれども、新しいブロックチェーン系のプロジェクトもシャーディングを導入しています。NEARというのはスタートアップでパブリックチェーンを作っていくというところで……。Polkadotは知ってる方もいるんじゃないかと思いますが、非常にEthereum 2.0に近いシャーディングの設計をとっています。

アカデミアでも2018年頃から急にいわゆるさっきの2個の条件を満たすシャーディングが現れ始めています。どれもセキュリティ系のトップカンファレンスですが、Omniledger・Chainspace・RapidChainということで、2018年ごろに出た提案になります。

シャーディングのプロジェクトを見る、3つのポイント

では、こういったシャーディングのプロジェクトはどのように見たらよいかということで、今日はこの3つのポイントから見ていこうかなと思います。

1つ目がアーキテクチャ。シャードが分かれると言ってるんだけれども、どれぐらい・どういったかたちでそのシャードがつながっているのか。

2つ目がシャードセキュリティ。先ほどの条件の2つ目である、セキュリティがN分の1になってしまう問題をどう解決するか。ここでまたシャーディングの提案が分かれていきます。

3つ目がクロスシャードトランザクション。これもまた2つに分かれまして。ほかのシャードのデータをどういうふうに見るかというデータ層の話、それからそのデータ層の上でどういうふうにシャードをまたぐトランザクションを実行するかといったアプリケーション層。この2つに分かれるんですけれども、このクロスシャードトランザクションのつくり方によってもシャーディングの提案は分かれていきます。

それぞれいろんな提案をラフに見ていくこともできるのですが、今日はあえてEthereum 2.0に絞って解説しようかなと思っています。その理由は、Ethereum 2.0は比較的オーソドックスな提案をしていて、これを見ると他のシャーディングの提案も見やすくなるかなと思っています。