Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What is Move language

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for nakajo2011 nakajo2011
August 19, 2019

What is Move language

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

Avatar for nakajo2011

nakajo2011

August 19, 2019
Tweet

More Decks by nakajo2011

Other Decks in Programming

Transcript

  1. 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/
  2. 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. 所感
  3. 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. 所感
  4. Copyright © 2019 chaintope Inc. All rights reserved. 1. はじめに


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

  5. 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. 所感
  6. 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)

  7. 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より
  8. 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. 所感
  9. Copyright © 2019 chaintope Inc. All rights reserved. 3. Move言語の目標


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

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


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


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


    15 リソースはbytecode上で型情報を持つ
 
 • idとしてのmodule名がbytecodeに埋め込まれている • bytecodeレベルでも型を持つため、リソースを区別することが可能 • これはscriptなのでprocedureの型が埋め込まれている
  15. 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. 所感
  16. Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー


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

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


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

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


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

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


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

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


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

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


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

  22. 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. 所感
  23. Copyright © 2019 chaintope Inc. All rights reserved. 5. 既存のブロックチェーンVMの抱える問題


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

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


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

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


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

  26. 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. 所感
  27. Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン


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

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


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

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


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

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


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

  31. 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. 所感
  32. Copyright © 2019 chaintope Inc. All rights reserved. 7. TransactionとAccount


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


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


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

  35. 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. 所感
  36. Copyright © 2019 chaintope Inc. All rights reserved. 8. VM

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

  37. 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

  38. 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

  39. 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, } 

  40. 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. 所感
  41. Copyright © 2019 chaintope Inc. All rights reserved. 9. 所感


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

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


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

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


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