What is Move language

What is Move language

Introduce Libra Move language with comparison to ethereum EVM.
Presented on the event: https://gbec.connpass.com/event/142598/

F4a070b8c7ef49bce7126605f15ce214?s=128

nakajo2011

August 19, 2019
Tweet

Transcript

  1. Move言語について
 
 2019.08.19
 


  2. Copyright © 2019 chaintope Inc. All rights reserved. 自己紹介
 2

    • Yukishige Nakajo • 株式会社chaintope Chief Ethereum Researcher • 福岡県の飯塚市でEthereumの研究中 • Rust, Istanbul (Eth1.0 update), DID, EVM • https://twitter.com/nakajo https://y-nakajo.hatenablog.com/
  3. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 3 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  4. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 4 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  5. Copyright © 2019 chaintope Inc. All rights reserved. 1. はじめに


    5 • Move Languageに焦点を当てている
 • Move Laguageのwhite paperの内容を解説
 • Move Languageの構造からLibraの狙いおよび、Ethereum との違いを考える
 • Libra自体まだ開発途中であることに注意

  6. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 6 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  7. Copyright © 2019 chaintope Inc. All rights reserved. 2. Libra

    Component
 7 • Account (Deployed by Move)
 ◦ AccessPath, Auth key, prologue, epilogue...
 • Module (Deployed by Move)
 ◦ Procedure, Resource
 • Move runtime (VM)
 • Transactions (No Block)
 ◦ sender address, sender public key, program, signature, gas …
 • BFT Consensus - LibraBFT(HotStaff extension)

  8. Copyright © 2019 chaintope Inc. All rights reserved. 2. Libra

    Component
 8 Networks (Transaction lifecycle)
 • 基本的にClientはRPCを投げるだけ。 • validator nodeを探す機能は現在開発中。 https://developers.libra.org/docs/assets/papers/the-libra-blockchain.pdf section 6より
  9. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 9 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  10. Copyright © 2019 chaintope Inc. All rights reserved. 3. Move言語の目標


    10 • デジタル資産が定義でき、プログラマブルに扱える
 ◦ カスタムモジュールとリソースの定義が可能
 ◦ 柔軟な表現力を持つ
 • 線形論理に触発された安全性
 ◦ 宣言されたリソースは「消費」されなければならない
 ◦ リソースはbytecode上で型情報を持つ
 

  11. Copyright © 2019 chaintope Inc. All rights reserved. 3. Move言語の目標


    11 カスタムモジュールとリソースの定義
 0xff.MyCoin - Module (Address + Name = ID) 0xff.MyCoin.T - Resource 0xff.MyCoin.T2 - Resource
  12. Copyright © 2019 chaintope Inc. All rights reserved. 3. Move言語の目標


    12 柔軟な表現力を持つ
 • チューリング完全 • Moduleを定義できるだけでなく、Transactionにもscriptを定義できる。
  13. Copyright © 2019 chaintope Inc. All rights reserved. 3. Move言語の目標


    13 線形論理(消費の概念)
 従来のプログラミング言語の型システム
 
 let egg = new Egg(); let cook1 = new SunnySide(egg); let cook2 = new Scramble(egg); 素材:いらすとや https://www.irasutoya.com/
  14. Copyright © 2019 chaintope Inc. All rights reserved. 3. Move言語の目標


    14 線形論理(消費の概念)
 線形型を採用したMove言語
 
 • 線形論理 - 宣言したものは必ず使わないといけない • アフィン論理 - 線形論理に弱化規則を追加。宣言したものは最大1回使える。 (つま り使わなくても良い)Rust言語はこれ let egg = new Egg(); let cook1 = new SunnySide(egg); // eggは2回使えない(消費済み) let cook2 = new Scramble(egg); 素材:いらすとや https://www.irasutoya.com/
  15. Copyright © 2019 chaintope Inc. All rights reserved. 3. Move言語の目標


    15 リソースはbytecode上で型情報を持つ
 
 • idとしてのmodule名がbytecodeに埋め込まれている • bytecodeレベルでも型を持つため、リソースを区別することが可能 • これはscriptなのでprocedureの型が埋め込まれている
  16. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 16 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  17. Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー


    17 1. パブリックブロックチェーンが備えるべき最低限の2つの 機能
 ◦ 総量の保存:システム内で資産を供給できなければ ならない。また、複製は禁止しなければならない。
 ◦ アクセス制御:ある一定のポリシーで参加者は自分 の資産を保護できなければならない。
 

  18. Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー


    18 • パブリックブロックチェーンでは全ての参加者が同じ権限を持つことが重要
 • そのため、参加者は資産の転送などの任意の状態遷移を提案できる必要 がある。
 • しかし、システムは全ての状態遷移を受け入れる必要はなく、任意のポリ シーにしたがって、状態遷移を拒否できなければいけない。
 • 物理的資産と比べてデジタル資産では表現が難しい2つの要素がある。
 ◦ 希少性:システム内で資産を供給できなければならない。また、複製は 禁止しなければならない。
 ◦ アクセス制御:ある一定のポリシーで参加者は自分の資産を保護でき なければならない。

  19. Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー


    19 希少性とアクセス制御の問題を明確にするために、StrawCoinの台帳を管理する 非常に単純なブロックチェーンを考えてみる。これをToyBCと呼ぶことにする。
 • StrawCoinの残高を公開鍵Kをキーとするハッシュテーブルで管理する。
 • グローバル状態に保存されている公開鍵Kが保有するStrawCoinの数量nは G[K] := n と記述する。
 

  20. Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー


    20 希少性 (1)
 
 • ToyBCにおいて、aliceからBobへの送金は上記のように定義できる。
 • この定義では、残高のチェックが欠如しているため、AliceやBobは任意の数量 のStrawCoinを生み出せてしまう。
 

  21. Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー


    21 希少性 (2)
 
 • 残高の不足を考慮した定義
 • Aliceは無からStrawCoinを生み出せないし、残高を超えた送金も不可能。
 • ただし、BoBはAliceのStrawCoinを自分に送金可能(access制限がない)
 

  22. Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー


    22 access制限 (3)
 
 • Kとペアの秘密鍵でメッセージmに対する署名を SK(m)とする。
 • verify_sig関数で署名を評価する。
 • 署名の検証を追加したことで、AliceのStrawCoinを送金する場合はAliceの許可 (=署名)が必要となる。
 

  23. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 23 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  24. Copyright © 2019 chaintope Inc. All rights reserved. 5. 既存のブロックチェーンVMの抱える問題


    24 Bitcoin
 • Pros
 ◦ CheckSigやCheckMultiSigのサポート
 ◦ UTXOによる残高厳格な残高管理
 • Cons
 ◦ scriptの表現力の制限
 ◦ カラードコインによるカスタムアセット定義の複雑さ
 ◦ カスタムアセットの残高管理はサポートされない

  25. Copyright © 2019 chaintope Inc. All rights reserved. 5. 既存のブロックチェーンVMの抱える問題


    25 Ethereum
 • Pros
 ◦ チューリング完全による柔軟な表現力
 ◦ ERC20に代表するカスタムアセットを定義可能
 • Cons
 ◦ カスタムアセットの残高管理はサポートされない
 ◦ EtherをContractの送金する際の動的ディスパッチによる脆弱性(リエン トランス問題など)

  26. Copyright © 2019 chaintope Inc. All rights reserved. 5. 既存のブロックチェーンVMの抱える問題


    26 • 既存のブロックチェーンでは、カスタムアセットを定義する 際に、これら3つの要件を再定義する必要がある。

  27. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 27 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  28. Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン


    28 • First-Class-Resources
 ◦ Libra上での全てのアセットはMove言語を用いてリ ソースとして定義される
 ◦ LibraコインでさえもMove言語で記述されている
 ◦ リソースは他のモジュールから参照可能
 ◦ リソースの内部はリソースを定義したモジュールから しか見えないし扱えない。
 ◦ Global Stateは全てリソースから成る

  29. Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン


    29 • Flexibility
 ◦ Transactionにもscriptという形でMoveプログラムを埋 め込み可能
 ◦ モジュールのみに拠らない柔軟性を与える
 ◦ scriptは1回限り有効
 ◦ BitcoinとEthereumの両方の性質を持つ

  30. Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン


    30 • Safety
 ◦ リソースの安全性、型安全、メモリ安全を保証
 ◦ 型付きbytecodeとして型安全性を担保
 ◦ scriptではリソースを定義できない
 ◦ バイトコード検証ツールで上記3つの安全性をチェック
 ◦ これらの安全性はあくまでリソースの移動に関しての み(意図しないアセットの増減を抑制する)
 

  31. Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン


    31 • Verifiability 
 ◦ 完全な検証は(現実時間ないでは)不可能なので、高 度な静的検証をサポートできるように設計
 ▪ 動的ディスパッチなし
 ▪ 限られた可変性 - Rustの「参照チェック」に似たも の
 ▪ モジュール化 - モジュールによるリソースのカプ セル化
 

  32. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 32 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  33. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    33
  34. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    34
  35. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    35
  36. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    36
  37. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    37
  38. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    38
  39. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    39 • ModuleとResource valueのみを持つ。 • Transactionとの連携はLibraAccount Moduleに定義される
  40. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    40 • Transaction 処理で呼ばれる prologue と epilogue Moveで記述さ れたLibraAccountのprocedure • gasを何で支払うかはLibraAccountで定義
  41. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


    41 • LibraでのAccount生成 = LibraAccount Moduleの生成。
 • address 作成 ≠ アカウント作成ではない。
 • Transaction処理とLibraAccount Moduleは密接に関係し ている
 • 理論上は色々なリソースでgas代の支払いが可能。

  42. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 42 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  43. Copyright © 2019 chaintope Inc. All rights reserved. 8. VM

    Publishing
 43 • Libraではまだカスタムmoduleを登録できない。
 • Transaction scriptも指定されたものしか利用できない。
 • 現在利用できるmodulesとscriptsは libra/language/stdlib/ にある。

  44. Copyright © 2019 chaintope Inc. All rights reserved. 8. VM

    Publishing
 44 stdlib/Modules
 • address_util.mvir
 • bytearray_util.mvir
 • hash.mvir
 • libra_account.mvir
 • libra_coin.mvir
 • signature.mvir
 
 • u64_util.mvir
 • validator_set.mvir
 • vector.mvir

  45. Copyright © 2019 chaintope Inc. All rights reserved. 8. VM

    Publishing
 45 stdlib/Scripts
 • create_account.mvir
 • mint.mvir
 • peer_to_peer_transfer.mvir
 • placeholder_script.mvir
 • rotate_authentication_key.mvir

  46. Copyright © 2019 chaintope Inc. All rights reserved. 8. VM

    Publishing
 46 #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(tag = "type", content = "whitelist")] pub enum VMPublishingOption { /// Only allow scripts on a whitelist to be run Locked(HashSet<[u8; SCRIPT_HASH_LENGTH]>), /// Allow custom scripts, but _not_ custom module publishing CustomScripts, /// Allow both custom scripts and custom module publishing Open, } 

  47. Copyright © 2019 chaintope Inc. All rights reserved. Move言語について
 Move言語について


    Move言語につい て
 47 1. はじめに 2. Libra Component 3. Move言語の目標 4. ブロックチェーンの抽象ビュー 5. 既存のブロックチェーンVMの抱 える問題 6. Moveのデザイン 7. TransactionとAccount 8. VM Publishing 9. 所感
  48. Copyright © 2019 chaintope Inc. All rights reserved. 9. 所感


    48 Pros
 • First-class-resourcesのコンセプトは面白い
 • Libraはロジック的には、ベース通貨を切り替える(増や す)ことができる
 • Moduleの柔軟性と安全性は担保されている
 • ModuleがEthereumのContractとは違い、コンセンサスの コアな要素も担っている

  49. Copyright © 2019 chaintope Inc. All rights reserved. 9. 所感


    49 Cons
 • Transactionの処理がすごく重たそう
 • Module開発はEthereumのContractに比べるとし辛い
 • Transactionの構造に署名を含めてしまっている

  50. Copyright © 2019 chaintope Inc. All rights reserved. 9. 所感


    50 • Ethereumで提案されているAbstract Accountの思想を受 け継いでいるように思う
 • ModuleがEthereumのClientよりも深くコンセンサスに関 わっている。
 • カスタムModuleを許可したパブリックチェーンとして稼働 したところを見てみたい!

  51. 株式会社chaintope 代表取締役社長 正田英樹 福岡県飯塚市幸袋560-8 info@chaintope.com 51