聞き起こしTweetlinedevday.linecorp.comLINEさんのイベントにも関わらずマニアックなセッションにお越しいただいてありがとうございます。DLTを開発しています分散DB、信頼性のあるDBの開発によって世の中を良くする。LINEさんに投資いただいているご縁でお声がけいただいた。私は分散DBをずっとやってきた。ブロックチェーンライクなたい改ざん性DBをやっている質問時間あるようなので細かいフィードバックとかお待ちしています。デザインや、ブロックチェーンとどう違うのか、どういうユニークな特徴があるのか、ベンチマークや故障耐性の話をする。ラインさんのブロックチェーンプラットフォームと組んだらこんなことができるという話をご紹介したい。DLTを一言でいうと、ブロックチェーンインスパイアードな分散型台帳ブロックチェーンはたい改ざん性、改ざん検知性を特徴としていて、決定性や非中央集権は改ざん検知のための特徴だと思っている。これ自体は非常に面白いが、実用的かと聞かれると必ずしもそうではない分散DBで脈々と受け継がれてきたものがあまり生かされていない。DLTは今までのDLTをブロックチェーンをうまく融合することにチャレンジする。スケーラビリティと改ざん検知性は相反する要求。DLTではうまく解決する方法を提案している。いう特徴を持っている。高いレベルでの改ざん検知性を持っている。管理者でも悪意を持って書き換えるとバレてしまうという特性がある。やり方は2つ、構造をうまく利用する方法と、決定性をうまく利用する方法2つ目として、スケーラビリティと可用性が非常に高い。ノード数が増えるに応じてスケーラビリティや可用性が上がる。変な中間状態が見えたり、不整合が起きたりすることがない。真ん中の青い部分がコア。下にはインフラみたいなものがある、主にクラウドが近年はある。DBというマスターレスな分散DBがある。そこはScalabilityなどを担保その上では改ざん検知性をいろいろな、構造や非構造で担保しているその上で開山検知性をさらに担保しているどんなアーキテクチャかという図がこれです。BLがいるスマートコントラクトが左から右に流れて右で実際の処理が行われる。大きなポイントは、左のクライアントに、実行したいビジネスロジックが定義されている。それがクライアントの秘密鍵で署名されて、右側で実行される。DBではパブリックキーを持っていて検証する。DBは、マスターレスの分散トランザクションマネージャーアベイラビリティが高いトランザクション管理機構。左からクライアントが着て私の銀行口座を更新しても、右からきて更新しても、変なことが起きない。内部的にはPaxosコミットを真似たようなトランザクションプロトコルの拡張版のようなものを作っていて、いる。基本的にノード数が増えればスケールするモデル。左のクライアントにペイメントのビジネスロジックが例えば定義されている。AさんからBさんにお金を送る、引数としてだれでいくらと定義されている。Networkで処理される。それがヒストリカルにデータ構造に追加されていく。この構造自体に改ざん検知性をもたせていて、それは右下の簡単な式で表されている。基本的にDBなのでステートマシン。S0は初期状態なので改ざんされたら分かる、改ざん検知性がある。S0が改ざん検知性があると、S1が改ざん検知性がある。Snまで改ざんを検知できる構造。これだとネットワークを乗っ取られて、データ構造を全部消したりすることも可能なので、これだけでは必ずしも完全性があるとは言えない。Order性があるので、それを利用して並列実行可能な状態かつ決定的な順序で並び替える。DBは並び替えられたものを受け取って並列実行していく。決定性があるので、右の3つのクラスタのようなものは、独立しているが皆同じ状態になる。上と真ん中の状態を比較すると通常は一緒。違いがあるとするとなにか悪いことがあったと分かる。このように決定を利用して、独立のコピーを作りコピーを比較することで改ざんを検知する。大きな特徴はなにか話したい。右側はいわゆるScalarDLのデータ構造はDAGになっているが末端は誰からも参照されていないので、比較的簡単に証拠を残さずに消すことができる。クライアントサイドプルーフという機能で、末端レコードをどこか別のエンティティから参照させるということで、末端のレコードが存在することを別のところで管理し、消しても証拠が残るようにする機構。Consensusビザンチン耐性とかは値を書き換えるという実行と、値が悪意を持って書き換えられていないかのバリデーションが一緒になっている。その理由で、各ノードの実行と検証が、ホモジーニアスな構成でないと、全体の実行速度が一番遅いものに引きずられる。左にクライアントがあって右に3つ処理ノード=クラスタがある。上のクラスタを大きくすることで、実行は上でできるようになる。底のサイズを増やすほど実行速度は増やせる。デメリットはあって、検証、というか、他の、データと比較して改ざんを検知する仕組みは、みんなが終わったところまでしかできないという制限がある右の図を見ていただくと、上がどんどん進めているので実行はどんどん進められるが、検証は、2個めまでしか進められない。基本的にはみんなが追いつくと考えられるので、どこかのタイミングでは改ざんが起きていないか検証できるこういうような、一部の妥協でスケーラビリティと改ざん検知性のトレードオフをつくってスケールを確保している。並列実行を最大限できるようにしている。これはブロックチェーンから見るという見方と、DBの文脈から見るという2つの見方がある。ブロックチェーンはブロックのチェーンなのでトータルオーダーなので全部構造上並んでいる。頭から一個一個処理するしか無いというもの。ScalarDLTはパーシャルオーダーだから並列実行できるところはどんどん並列実行する。通常RDBだと同様な形で並列実行するが、DBの並列実行と我々の並列実行は決定性という観点で違う。左側はいわゆるRDBのトランザクションモデル。トランザクションの集合Tが着たときに、RDBMSがあって、RDBMSだと、トランザクションの集合が入力で、ファンクションがRDBMSの場合、出力が変わってしまうことがある。トランザクション集合をある一定の集合で実行した結果と一緒になるが、どの順で実行した結果になるかは定めていないので、結果が変わる場合がある。DLTは決定性をもたせているので、入力集合が一緒なら出力が一緒。違ったら改ざんがあったことが検知できる。見方を変えてブロックチェーンと弊社プロダクトがどう違うのかパブリックブロックチェーンとどう違うかパブリックブロックチェーンはいわゆる定義は、P2Pのパブリックネットワークを定義としている。この場合は、基本的には悪意がある参加者が全くいなくてみんなが正しく動作しても、いわゆる履歴が分岐してしまうので結果のファイナリティが得られないという問題があります。パブリックブロックチェーンのファイナリティは常に確率的にしか動作しない。その結果、結果のファイナリティが得られないという特性があります。DLTやプライベートブロックチェーンは、悪意がなければ決定的に確定するのでファイナリティが確保できる。ファイナリティが確保できないのは悪意を持ったなにかがあったということになるので、システムとしてわかりやすい。詳しくペーパーを書いたので見ていただければ嬉しいです。パブリックブロックチェーンは性能を出しにくいという特性がある。DLTに分があると思っています。FabricやTendermintがある。DLTはそこが分離されているので実行のスケーラビリティは確保できる。あとは、ブロックチェーンはブロックのチェーンでトータルオーダーなので並列性が確保できないという課題がある。我々の方は、いわゆるパーシャルオーダーで並列で実行できるところは並列で実行するので、プロセッサーコアのリソースとかを有効活用できる。した特徴の違いがある。ここからはユニークな特徴をお話する。コントラクト、複数のコントラクトをネストして呼ぶことができるが、それらをアトミックに実行できるという特性がある。コントラクトの例として、AからBに支払うペイメントと、それに伴う手数料支払のコントラクトと、を通常はモジュール化して分けて作るのがいいが、分けたときにそれがアトミックに実行できないという問題が起きる場合があります。我々の場合そこが確実に実行できるので、ペイメントはできたが手数料支払は失敗したというようなことは起きない。アプリケーションを作る側としては非常に楽という性質があります。何に必要な機能かという話をしますブロックチェーンにかいた情報は消せない、検索しにくいが、改ざん検知性があるDBは消せるし、検索性は高いが改ざん検知性がないよくあるのは、DBに書いて、最後にブロックチェーンに記録するみたいなことをするが、一貫性がないので、ブロックチェーンに書くのを失敗すると不整合が起きて、価値がない。我々の場合はDBとチェーンを一個のDBの中に入れてアトミックに更新するので、検索性も高く、消せるデータを、かつチェーンとの一貫性の担保ができる。うまいところ両取りできるのがUDFという機能です。具体的にはコントラクトの他にファンクションを定義し、ファンクションというのはイミュータブルなデータを書き込むロジック、コントラクトは改ざん検知性のあるDBへ書き込む、この2つで実現ここからはベンチマークの結果などの紹介スケーラビリティのグラフ横は処理するノード数、縦はTPS値は意味がなくてスケールしているというところに注目していただきたい3ノードから90で30倍ほしいが、90%ぐらい、ほぼリニアにスケールしている。LedgerでCaliperというのがあって、HyperLedger系がベンチマークできる横軸がスループットで縦軸がレイテンシ、右下にいくほどよい赤と黄色がFabricで構成を変えたもの。