わかるPlasma MVP

Junki Yuasa
Acompany
Published in
7 min readMay 13, 2019

こんにちは!この記事はEthereum初心者がPlasma MVPを通じてPlasmaを理解するためのものです。Ethereumについて最低限の知識がある方ならわかる内容になっていると思います。

はじめに

Plasmaはスケーラブルなアプリケーションを構築するためのスマートコントラクト実行フレームワークです。「Plasma」という単一のプロジェクトはありません。Plasmaは概念であり、Plasma MVPやPlasma Chamberはその概念にそって設計されたものです。

Plasmaを理解するのにとてもいい記事があります。

なぜPlasmaが必要か

ブロックチェーンでは単純な支払いを処理するために1秒間で数千トランザクションを処理することが求められています。しかし、現在Ethereumでは最大で毎秒20~30のトランザクションしか処理できません。これは「スケーラビリティ」問題と呼ばれます。

開発者たちはこの問題を解決するために様々な角度から取り組んでいます。ブロックチェーン自体をアップグレードすることでよりチェーンをスケーラブルにしようとする取り組みである「レイヤー1」スケーリングと元のブロックチェーンは変更せず新しいレイヤーを追加する「レイヤー2」スケーリングがあります。

「レイヤー2」スケーリングにおいてAからBへの送金を考えましょう。Aはアセットを元のチェーンにロックし、その資金を2番目のチェーンに「作成」します。そして2番目のチェーン上でAからBへのアセットの移動を行います。Bが資金を取り出す時はサイドチェーンのアセットを「破壊」して元のチェーンのロックを解除します。それが「サイドチェーン」の考え方です。

サイドチェーンで処理をすることで高速かつ低い手数料が実現できます。その一方、サイドチェーンでそれらのアセットを作成することを「合意」しなければならないのでそこにはコンセンサスアルゴリズムが必要になります。このコンセンサスアルゴリズムが正しく機能すれば資産は安全ですが、失敗すると資産は奪われてしまいます。

そこでPlasmaの登場です。Plasmaチェーンはコンセンサスアルゴリズムが正しく機能しなくても資産の安全性を保証します。なぜ安全性を保証できるのかを単純なUTXOベースのPlasmaチェーン用の設計であるPlasma MVPの仕組みにそってみていきましょう。

Plasma MVPの仕組み

デポジット

まずユーザーがEthreumのスマートコントラクトにETHを入金すると、単一のトランザクションのみを含むブロックがPlasmaチェーン上に作成されます。このトランザクションは、預金額と等しい価値で預金者のための新しいアウトプットを作成します。これで取引の準備は完了です。

トランザクションの作成

ユーザーは作成されたアウトプットを使って新しいアウトプットを作ることで、Plasmaチェーンで取引ができます。ユーザーはトランザクションを作る際に署名を行います。この取引はその後オペレーターと呼ばれる人に送信されます。オペレータは十分なトランザクションを受け取ると、このブロックのマークルルートをEthreumチェーンに送信します。マークルルートがなんなのかは以下でみていきます。

マークルルート

マークルルートを理解するためにブロックチェーンにおいて使用されるマークルツリーというデータ構造を知っておく必要があります。マークルツリーを使用するとハッシュ関数を用いてたくさんのデータセットを一定のデータ長に要約できます。これがマークルルートです。それに加えて特定のデータがセットに含まれていることを証明できます。

全てのトランザクションはマークルツリーの形で構成されており、オペレーターはこのマークルツリーのマークルルートをEthereumチェーンに送信します。マークルルートのみをルートチェーンに記録するので効率的です。

Exitを始める

ユーザーはPlasmaチェーンから資金を回収したい時はEthereumチェーンでExitトランザクションを送信します。MVPでは資金はUTXOとして示されるので資金の出口は特定のアウトプットを示す必要があります。アウトプットの所有者しか取り出せないようにするためユーザーはマークルツリーにおけるトランザクションの証明とともに資金の出口を送信します。コントラクトはこのトランザクションがブロックに含まれていることとアウトプットが持ち主のものであることの確認をします。

Challenge期間

上のことを確認してもユーザーはすでに使用されているアウトプットを引き出すということができてしまいます。アウトプットが未使用であることを確認するためにChallenge期間を設けます。それはアウトプットが使われていることを証明することで異議申し立てをできる期間です。

Exitの優先度

ここでオペレーターが無効なトランザクションを作成して引き出しをすることなどができてしまいます。

AからBへの送金という取引をブロックに含めた後でオペレーターがAからオペレーターへの送金という無効な取引を作成したとしましょう。

Bは無効なトランザクションを作ったオペレーターよりも先に資金を得るべきです。そのためにルールを追加します。「古い」UTXOは「新しい」UTXOよりも先に処理されるというルールです。UTXOがPlasmaチェーンに含まれた時期で優先順位がつけられます。それによって無効なトランザクションの前に発生したトランザクションは無効なトランザクションより先に処理されます。これによってAからBへのトランザクションが作られたあとでオペレーターがその資金を得るということはできなくなりました。

確認署名

上のルールでは無効なトランザクションの後に有効なトランザクションが作られるというケースに対応できていません。これはユーザーが作成したトランザクションをオペレーターに送信し、オペレーターが有効なトランザクションの前に無効なトランザクションを作成し、有効なトランザクションよりも前にPlasmaチェーンに含めた時に起こり得ます。

2回署名されるまでトランザクションが無効であることを要求することでこれに対処します。ユーザーはトランザクションを作成する際に1回目の署名を行います。その後、トランザクションが有効なブロックに含まれると確認署名という2番目の署名に署名します。これによって無効な取引の後に含まれる取引には確認署名がない(ユーザーがしない)ため、資金を取り戻すことができます。

Plasmaチェーンを監視する

ユーザーはPlasmaチェーンを同期して、期待通りに実行されていることを確認するソフトウェアを実行します。資金を安全に保つには数日に一回これを行わなければいけません。

まとめ

Plasmaの最小構成であるPlasma MVPについて紹介しました。実装レベルの解説ではないですが、概要は掴めたのではないかと思います。

今後も弊社mediumでPlasma Chamberを含むその他のPlasma実装について紹介していく予定です!ぜひそちらも読んでみてください!

参考

https://www.learnplasma.org/en/

--

--