Slide 1

Slide 1 text

Move言語について
 
 2019.08.19
 


Slide 2

Slide 2 text

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/

Slide 3

Slide 3 text

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. 所感

Slide 4

Slide 4 text

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. 所感

Slide 5

Slide 5 text

Copyright © 2019 chaintope Inc. All rights reserved. 1. はじめに
 5 ● Move Languageに焦点を当てている
 ● Move Laguageのwhite paperの内容を解説
 ● Move Languageの構造からLibraの狙いおよび、Ethereum との違いを考える
 ● Libra自体まだ開発途中であることに注意


Slide 6

Slide 6 text

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. 所感

Slide 7

Slide 7 text

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)


Slide 8

Slide 8 text

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より

Slide 9

Slide 9 text

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. 所感

Slide 10

Slide 10 text

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


Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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/

Slide 14

Slide 14 text

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/

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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. 所感

Slide 17

Slide 17 text

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


Slide 18

Slide 18 text

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


Slide 19

Slide 19 text

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


Slide 20

Slide 20 text

Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー
 20 希少性 (1)
 
 ● ToyBCにおいて、aliceからBobへの送金は上記のように定義できる。
 ● この定義では、残高のチェックが欠如しているため、AliceやBobは任意の数量 のStrawCoinを生み出せてしまう。
 


Slide 21

Slide 21 text

Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー
 21 希少性 (2)
 
 ● 残高の不足を考慮した定義
 ● Aliceは無からStrawCoinを生み出せないし、残高を超えた送金も不可能。
 ● ただし、BoBはAliceのStrawCoinを自分に送金可能(access制限がない)
 


Slide 22

Slide 22 text

Copyright © 2019 chaintope Inc. All rights reserved. 4. ブロックチェーンの抽象ビュー
 22 access制限 (3)
 
 ● Kとペアの秘密鍵でメッセージmに対する署名を SK(m)とする。
 ● verify_sig関数で署名を評価する。
 ● 署名の検証を追加したことで、AliceのStrawCoinを送金する場合はAliceの許可 (=署名)が必要となる。
 


Slide 23

Slide 23 text

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. 所感

Slide 24

Slide 24 text

Copyright © 2019 chaintope Inc. All rights reserved. 5. 既存のブロックチェーンVMの抱える問題
 24 Bitcoin
 ● Pros
 ○ CheckSigやCheckMultiSigのサポート
 ○ UTXOによる残高厳格な残高管理
 ● Cons
 ○ scriptの表現力の制限
 ○ カラードコインによるカスタムアセット定義の複雑さ
 ○ カスタムアセットの残高管理はサポートされない


Slide 25

Slide 25 text

Copyright © 2019 chaintope Inc. All rights reserved. 5. 既存のブロックチェーンVMの抱える問題
 25 Ethereum
 ● Pros
 ○ チューリング完全による柔軟な表現力
 ○ ERC20に代表するカスタムアセットを定義可能
 ● Cons
 ○ カスタムアセットの残高管理はサポートされない
 ○ EtherをContractの送金する際の動的ディスパッチによる脆弱性(リエン トランス問題など)


Slide 26

Slide 26 text

Copyright © 2019 chaintope Inc. All rights reserved. 5. 既存のブロックチェーンVMの抱える問題
 26 ● 既存のブロックチェーンでは、カスタムアセットを定義する 際に、これら3つの要件を再定義する必要がある。


Slide 27

Slide 27 text

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. 所感

Slide 28

Slide 28 text

Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン
 28 ● First-Class-Resources
 ○ Libra上での全てのアセットはMove言語を用いてリ ソースとして定義される
 ○ LibraコインでさえもMove言語で記述されている
 ○ リソースは他のモジュールから参照可能
 ○ リソースの内部はリソースを定義したモジュールから しか見えないし扱えない。
 ○ Global Stateは全てリソースから成る


Slide 29

Slide 29 text

Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン
 29 ● Flexibility
 ○ Transactionにもscriptという形でMoveプログラムを埋 め込み可能
 ○ モジュールのみに拠らない柔軟性を与える
 ○ scriptは1回限り有効
 ○ BitcoinとEthereumの両方の性質を持つ


Slide 30

Slide 30 text

Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン
 30 ● Safety
 ○ リソースの安全性、型安全、メモリ安全を保証
 ○ 型付きbytecodeとして型安全性を担保
 ○ scriptではリソースを定義できない
 ○ バイトコード検証ツールで上記3つの安全性をチェック
 ○ これらの安全性はあくまでリソースの移動に関しての み(意図しないアセットの増減を抑制する)
 


Slide 31

Slide 31 text

Copyright © 2019 chaintope Inc. All rights reserved. 6. Moveのデザイン
 31 ● Verifiability 
 ○ 完全な検証は(現実時間ないでは)不可能なので、高 度な静的検証をサポートできるように設計
 ■ 動的ディスパッチなし
 ■ 限られた可変性 - Rustの「参照チェック」に似たも の
 ■ モジュール化 - モジュールによるリソースのカプ セル化
 


Slide 32

Slide 32 text

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. 所感

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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


Slide 42

Slide 42 text

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. 所感

Slide 43

Slide 43 text

Copyright © 2019 chaintope Inc. All rights reserved. 8. VM Publishing
 43 ● Libraではまだカスタムmoduleを登録できない。
 ● Transaction scriptも指定されたものしか利用できない。
 ● 現在利用できるmodulesとscriptsは libra/language/stdlib/ にある。


Slide 44

Slide 44 text

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


Slide 45

Slide 45 text

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


Slide 46

Slide 46 text

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


Slide 47

Slide 47 text

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. 所感

Slide 48

Slide 48 text

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


Slide 49

Slide 49 text

Copyright © 2019 chaintope Inc. All rights reserved. 9. 所感
 49 Cons
 ● Transactionの処理がすごく重たそう
 ● Module開発はEthereumのContractに比べるとし辛い
 ● Transactionの構造に署名を含めてしまっている


Slide 50

Slide 50 text

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


Slide 51

Slide 51 text

株式会社chaintope 代表取締役社長 正田英樹 福岡県飯塚市幸袋560-8 [email protected] 51