多くのdAppsから使われるコントラクトの課題

中村龍矢氏:これで以上になるんですけれども、それではQ&Aのほうにいこうかなと思います。このSli.doに「いいね!」順に上がっていくのかな? なので、上から見ていこうかなと思います。10分ぐらい使っていいのかなと思うので、今ない質問もぜんぜん質問を投げていただければと思います。

1つ目の質問からいこうと思います。

「ステーブルコインのような多くのdAppsから使われるようなコントラクトがあると、該当コントラクトを使うクロスシャードトランザクションが増えすぎかねない & Yankingもあまり現実的でないケースがあるかと思うのですが、こういったケースへの対策はあるのでしょうか?」

そうですね。まさにこれが弊社の研究でもあるのですが、シャーディングにおいて1個のアプリケーションがものすごく人気になってしまうと、そのアカウントがあるシャードに集中してしまって、負荷にちょっとばらつきが出てしまったりとか、それによって手数料が上がったりとかする問題が考え得る。これが弊社がやっているロードバランシングとかの研究ですので、これはこの次の発表で岡南君が話してくれるかなと思います。

もう1個のYankingがあまり現実的ではないケースというほうを少し解説しますと、さっきYankingで、ホテルだったらホテルの予約コントラクトを分割してそれを動かしていったんですけれども、できないケースもたくさんあって、例えば分割できないケースですね。

例として挙げるのが、Uniswap、今Ethereum界隈ですごく使われているDEXですけど、あれはいわゆる取引する通貨をそのコントラクトにプールするタイプなので、そのプールを分割しちゃうと非常に意味がなくなってしまうので、ああいったコントラクトというのは分割できない。

かつ、Yankingできちゃうと、みんなが使うものなのにみんなが自由に動かしちゃうので……。当然DEXの場合はフロントランニングだとかいろんなアタックがあるので、Yankingがrealじゃないパターンもあると思います。その場合Yankingは使えないので、別のクロスシャードなアプローチを使う必要があります。

クロスシャード通信におけるFinality

「各シャードにFinalityがないと、クロスシャードで通信を行なった場合に、一方で処理されて、他方では処理されないみたいなことがあると思うのですが、ETH2.0やほかのブロックチェーンではどのように対応しているのでしょうか?」

まず1つ目の回答です。ETH2.0の場合は、Finalityがあります。1個のチェーンでのFinalityというのはBeacon chainのFinalityに連動しているので、必ず決まります。

注意点としては、実はETH2.0の場合、各シャードのFinalityを待たずにできるのがいいところなんですよね。これは非常に細かい話になるんですけれども、Beacon chainみたいのがない、Hubがないブロックチェーンというのは、全部のシャードで個別にFinalityがあって、そのFinalityを検知してってやるので、Finalityを待つ時間がすごくかかるんですけど、ETH2.0の場合は、すべてのシャードのFinalityというのはある程度Beacon chainで連動している分、同じBeacon chainのチェーンを頼っているシャードは両方がrevertするか両方が残るかというふうに必ず決まっているので、Finalityを待たずしてクロスシャードでトランザクションができるのがちょっといいところになっています。これはまた今度別の機会とかで話そうかなと思います。

なので、ほかのブロックチェーンという観点だと、みんなシャーディングのプロポーザルはFinalityがあるチェーンになっています。Finalityを待ってクロスシャードをやっています。

クロスシャードトランザクションの遅延

「クロスシャードトランザクションを行なおうとすると、遅延が大きくなりそうなのですが、そのあたりはどうなんでしょうか?」

そうですね。さっきも話したんですけれども、クロスシャードトランザクションというのは、非同期の場合、必ず2ステップぐらい必要なんですよね。Yankingの場合も、いったんYankして、そこからアトミックコミットとしてとか。2 Phase Lockの場合も、仮予約・仮予約→予約・予約というので、遅延は増えます。

なので、これは非常にちょっと問題点で、とくに今のEthereum上でアプリケーションを作っているゲーム会社の人とかDeFiを作っている人たちはこれをすごく嫌がっていて、シャーディングが好まれない部分でもあります。

では、どうやってクロスシャードで同期的な通信、「クロスシャードなんだけどトランザクションを投げると必ずそのトランザクションの中で返ってくるか」というのに関しては、理論的にセキュリティを変えずにやるのは無理なのですが、Layer 2的にやることが提案されていて、これも同期的シャーディング、同期的クロスシャードトランザクションということで、少しおもしろいテーマなのかなと思っています。

ETH1.0がETH2.0にシャードチェーンとしてマージされる場合のメリット・デメリット

「ETH1.0がETH2.0にシャードチェーンとしてマージされる場合のメリット・デメリット(を教えてください)」

まずETH1.0とETH2.0がどうなるかというのがあるのですが、さっきも話したとおり、最初はETH2.0は既存のチェーンとは別で作られるので、はじめは共存します。なので、普通に別のブロックチェーンとして使われる。ところが当然、「いつか将来ではどっちかに寄せたいよね」という話があると思います。

今のところのプランは、いくつか提案はあるんですけれども、将来的にETH2.0が安定してもう完全に移行しようと、もうETH2.0にしようとなった場合は、ETH1.0のデータをどこかでバシッと止めて、そのスナップショットをどこかのシャードにまるごと書き込むというふうになります。これがいろいろある提案のうちの1つです。これによってETH2.0でも今のETH1.0のチェーンは使えるようになります。

さっきもあったExecution Environmentというのは非常にキャパの広いLayerなので、EVMをそのまま再現して、そこで使うとかもできます。

このメリット・デメリットなんですけれども、基本的にETH1.0のチェーンがなくなっちゃうとはいえ、たぶんガバナンス的には全員は納得しなくてたぶん残ると思うので、その同じものが共存してしまうとかっていう混乱は当然あるかなと思います。

ETH1.0のチェーンをそのまま使いたい人もいます。なんでかというと、ETH2.0になるとどうしてもシャーディングになるのでちょっとウォレットとかの雰囲気が変わるんですよね。なので、そういった変化がいやで、今のETH1.0のモデルのまま使いたい人が、全部持っていかれちゃうと無理やりETH2.0のほうにいっちゃうので、「なんでそうなったんだろう?」というふうになるという問題があるかなと思います。こういった部分はデメリットかなと思っています。

OVM、zkRollup等のLayer2系の動向

あっ、(質問が)変わりましたね。(質問の)3つ目のところが変わったので少し見ようかなと思います。

「OVM, zkRollup等のL2系の動向について、中村さんの意見をおうかがいしたいです」。

まずちょっと「OVMとは?」ということなんですけど、OVMはさっきも紹介したRollup系の話で、まず去年まであったようなPlasmaとかっていうL2系のアプローチから急に去年トレンドが変わって、Rollupと言われているものにL2系の研究とかは変わっています。

Plasmaも基本的には同じで、どんどんL2、オフチェーンでどんどんトランザクションを作っていって、L1はまったく使わないで、どこかのタイミングでチェックポイントをして、そのチェックポイントが間違っていたらその間違いを証明するってものです。

意見としては、基本的にはL2のセキュリティの一番の違いは、そういう「チャレンジ」があるので、普通のブロックチェーンと違ってL2系のセキュリティというのは、メインチェーンのlivenessの問題がsafetyに影響しちゃうということ。メインチェーンでcensorshipが起きるとチャレンジのトランザクションを投げられなくなるので、Rollupでいうところのoptimistic rollupに関しては壊れてしまうといった問題があります。

ということなのでぜんぜんいいとは思うんですけど、当然そのセキュリティのモデルが違うので、それに準じたユースケースになるかなと思っています。なので、基本的にはぜんぜん応援していこうかなと思っていて、Rollup系のことはすごく注視して見ています。

質問、じゃああと1個だけいこうかなと思います。乱数生成のほうはRANDAOとかっていうものを使っていますので、またちょっと調べてみてください。

Beacon chainが停止するとすべてのシャードが止まるか

最後にこれだけいこうと思います。

「Beacon chainが停止した場合はすべて(のシャード)が止まりますか?」

ということなんですけれども、まず1つ目の回答は、Beacon chainが止まった場合は止まります。基本のベースのチェーンなので。

SPOFではあるんですけれども、当然そのBeacon chainのセキュリティは全バリデーターに守られていますので、Beacon chainが止まるというのは今のブロックチェーンにおいて止まるのと同じことですので、問題はないかなと思っています。

では、ちょっと早口だったんですけれども、いろいろな質問をいただきまして、ありがとうございました。できるかぎりは回答しようと思いますが、Twitterのほうで資料を上げようと思います。

それでは、以上になります。ありがとうございました。