2019.07.03

EthereumのスケーリングソリューションPlasmaのOSS実装を通してその仕組みを理解する

Pocket

こんにちは。次世代システム研究室のL.W.です。

今回は、トークイベントにて紹介した「EthereumのスケーリングソリューションPlasmaのOSS実装を通してその仕組みを理解する」を、時間の都合上お話できなかった部分の補足などを交えて取り上げたいと思います。




 

概要

ブロックチェーン界隈でPlasmaに関わる文書はちらほら見られますが、ほとんど概念からの説明文書となります。

我々はgithubでのオープンソースを解読した上でPlasmaへの理解を深めています。今回はその仕組みについて解説していきます。

Plasmaについて、公式の定義がありませんが、こちらは自分の理解で、以下のように定義してみました。

「レイヤー2のスケーリングソリューションです。スループットの向上と手数料の低下を目指します。ルートチェーンでのスマートコントラクトと連携して、Plasmaチェーンでトランザクションの処理とデータ記録を行い、最小限の情報(マークルツリーのルートハッシュ)だけ定期的にルートチェーンに提出することで、ルートチェーンでの計算負担、ストレージ負担を大幅に軽減する仕組みである。」

この定義を頭に置き、この説明資料を通して、Plasmaへの理解を深めて頂ければと思います。

本ブログ記事はブロックチェーンとイーサリアムの知識をお持ちの方を対象としています。この辺についてご存じでない方は、事前にブロックチェーンとイーサリアムの基礎知識をおさえてください。特にブロックチェーンの分散型台帳イーサリアムのスマートコントラクトの知識は、Plasmaへの理解は欠かせないと思っています。

 

デモ

(※図をクリックすると、拡張できます)

 

デモの期待

  • イーサリアムからEthまたはERC-20トークンをPlasmaチェーンにデポジットしてから、PlasmaチェーンでEthとERC-20トークンの取引を行えます。
  • PlasmaチェーンからEthまたはERC-20トークンがイーサリアムに戻せます。
  • Plasmaチェーンでガスが掛からないです。(マイニング作業が要らないですから)
  • 取引はサーバ役のオペレーターに経由するので、スループットがP2Pのイーサリアムよりはるか高いです。(1000TPS以上と言われています。オペレーターの性能によります)
  • サーバ役のオペレーターがダウンとなっても、PlasmaチェーンからEthまたはERC-20トークンがイーサリアムに戻せます。
 

ソースの説明

今回は、Plasma Chamberのソースを利用して、Plasmaは決済での応用例をプレゼンしてみます。

こちらはプレゼンするためには、Chamberのソースを一部カスタマイズしてみました
  • Plasmaブロックタイムを30sにしました。
  • イーサリアムのコンファメーション数を0にしました。
  • Exit期間を2分にしました。
  • ERC-20に関わる関数はCUIウォレットに追加しました。
 

デモの流れ

1.環境準備
  • プライベートなイーサリアム(ganache-cli)を起動します。
  • Plasmaスマートコントラクトをイーサリアムにデプロイします。
  • Plasmaのオペレーター(フルノード)を立ち上げます。
2.CUIウォレットでPlasmaのDeposit, Transfer, Exit, Withdrawの動作を確認してみます。
  • Deposit(トークンをイーサリアムからPlasmaに入金)
  • Transfer(AliceからBobへトークンで送金、Bobは着金できる)
  • Exit(トークンをPlasmaからイーサリアムに出金(Exit期間中、トークンをPlasmaにロックされる))
  • Withdraw(トークンをイーサリアムに戻る)
3.Plasmaのオペレーターがダウンとなる場合
  • Depositに影響がないこと
  • Transferが不能となること
  • Exitに影響がないこと
  • Withdrawに影響がないこと
 

詳しくは、以下に参照してください。

環境準備:プライベートなイーサリアムを起動します。

0x627306090abab3a6e1400e9345bc60c78a8bef57をAliceのアドレスとし、0xf17f52151ebef6c7334fad080c5704d77216b732をBobのアドレスとします。

デフォルトはそれぞれに100Ethを付与されました。

環境準備:Plasmaスマートコントラクトをイーサリアムにデプロイします。

①PlasmaスマートコントラクトのRootchainとERC-20のスマートコントラクトTestPlasmaTokenをイーサリアムにデプロイしました。


②AliceとBobのEthの残高を確認します(単位はweiとなる)。スマートコントラクトのデプロイにより、ガスが掛かりました。

③AliceとBobのERC-20トークンの残高も確認します。Aliceは10000のERC20を持ち、BobはERC20トークンを持ちません。

 

環境準備:Plasmaのオペレーター(フルノード)を立ち上げます。

オペレーターのノードは起動しています。

CUIウォレットでPlasmaのDeposit, Transfer, Exit, Withdrawの動作を確認してみます

※今回はデモのプレゼンなので、プライベートキーはクリアテキストで表示となりました。実運用では危ないですので、注意要。

 
1.Deposit(トークンをイーサリアムからPlasmaに入金)
①入金する前には、PlasmaにロックされたEthもERC20も0となることを確認できました。

②Aliceは20EthをPlasmaへ入金しました。UTXO確認すると、utxo= [ { tokenId: 0, start: 0, end: 20000000000 } ]を確認できました。(単位はgweiとなります)

③20EthはPlasmaチェーンにdepositされたことを確認できました。(表示する単位はgweiとなります)

④Aliceは1000のERC20トークンをPlasmaへ入金しました。UTXO確認すると、

utxo= [ { tokenId: 0, start: 0, end: 20000000000 }, { tokenId: 1, start: 0, end: 1000 } ]となります。

⑤AliceはイーサリアムでのERC20の残高は9000となること、PlasmaスマートコントラクトでdepositされたER20の数は1000となります。

 
2.Transfer(AliceからBobへトークンで送金、Bobは着金できる)
①AliceからBobに10ethを送金しました。EthのUTXO確認すると{ tokenId: 0, start: 10000000000, end: 20000000000 }となりました。(表示する単位はgweiとなります)

②AliceからBobに500のERC20トークンを送金しました。ERC20のUTXO確認すると{ tokenId: 1, start: 500, end: 1000 }となりました。

③Bobの着金状況を確認します。

utxo= [ { tokenId: 0, start: 0, end: 10000000000 }, { tokenId: 1, start: 0, end: 500 } ]

(表示する単位はgweiとなります)

 
3.Exit(トークンをPlasmaからイーサリアムに出金(Exit期間中、トークンをPlasmaにロックされる))
Bobは{ tokenId: 1, start: 0, end: 500 }をExitしました。「2019-06-27 19:15:48」までこの資金はPlasmaにロックされます。


 
4.Withdraw(トークンをイーサリアムに戻る)
①「2019-06-27 19:15:48」までのExit期間を過ぎてから、withdrawを行います。

②Bobのイーサリアムで500のERC20の残高を確認できます。

 
5.Challenge(不正Exitへの申告)
※実装されていないので、検証不能

 
6.送金の回数の増加につれて、UTXOはどんどん貯めることを確認できます。これらのUTXOはフラグ(fragmentation、断片)を呼ばれます。

 

Plasmaのオペレーターがダウンとなる場合

ここで、わざとオペレーターのノードをダウンさせます。

7.Deposit(トークンをイーサリアムからPlasmaに入金)
Depositに影響がないことを確認できます。

 
8.Transfer(AliceからBobへトークンで送金)
送金するときは、オペレーターを経由するので、オペレーターがないと、送金不能となります。

9.Exit(トークンをPlasmaからイーサリアムに出金(Exit期間中、トークンをPlasmaにロックされる))
Exitに影響がないことを確認できます。

 
10.Withdraw(トークンをイーサリアムに戻る)
Withdrawに影響がないことを確認できます。

 

さいごに

Plasmaソリューションの内、Cryptoeconomics Lab社のPlasma Chamberは極めて有望だと思っています。ここでこのプロダクトに取り組んでいる方々にお礼を申し上げます。彼らの努力で、plasmaは決して遠い未来の技術ではないと信じています。

Plasma Chamberの特色機能のFast Finality、Checkpointへの理解がまだ不足だと認識し、研究した上で、またここで共有させて頂きます。

そして、plasmaの最先端技術のPredicateにも興味を持って、これからのトレンドを追って、研究していきたいです。

 



  次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。 皆さんのご応募をお待ちしています。