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

Move for Libra written in Rust

Move for Libra written in Rust

cipepser

July 30, 2019
Tweet

More Decks by cipepser

Other Decks in Programming

Transcript

  1. Rustで実装された
    Libra Move言語とは
    cipepser
    2019/7/30
    Roppongi.rs #1

    View Slide

  2. 自己紹介
    ● cipepser(さいぺ)
    ● Fintertech株式会社
    ● Rust歴: 1年半くらい
    ● 経歴
    ○ SIerで証券系システムのネットワーク設計、構築
    ● 最近の趣味プロジェクト
    ○ 自作Protocol Buffersデコーダ(Golang)
    ○ Monkey言語のRust実装
    ■ Lexerまでは実装済み。AST設計中。
    ■ コンパイラとVMの実装までやりきりたい

    View Slide

  3. 本日の内容
    ● Libraとは
    ● Move言語とは
    ● ブロックチェーン上にアセットを載せる難しさ
    ● 既存のブロックチェーン言語の課題
    ● Moveの設計
    ● Moveに触るには

    View Slide

  4. Libraとは
    ● 2019年6月にFacebookが発表した金融プラットフォーム
    ● ミッション「多くの人びとに力を与える、シンプルで国境のないグローバルな通貨と
    金融インフラになる」
    ● BFTモデルのLibra Blockchainが基盤
    ● とにかくメンバーが強い
    1) The Libra Whitepaper - Blockchain, Association, Reserve | Libra https://libra.org/ja-JP/white-paper/#introduction
    2) Facebook’s cryptocurrency partners revealed—we obtained the entire list of inaugural backers - The Block
    https://www.theblockcrypto.com/2019/06/14/facebooks-cryptocurrency-partners-revealed-we-obtained-the-entire-list-of-inaugural-backers/

    View Slide

  5. Move言語とは
    ● Libraでスマートコントラクトを書く言語
    ● Move自体はRustで実装されている
    ○ 安全とセキュリティを重視
    ● 静的型付けのバイトコード言語
    ○ VMで実行
    ○ bytecode verifierによるチェック

    View Slide

  6. デジタル・アセットをオープンシステムに載せる難しさ
    ● Scarcity(希少性)
    ○ 無から有を生み出せないこと
    ○ 複製できないこと
    ● Access control
    ○ 所有者だけがアセットをコントロールできること

    View Slide

  7. 既存のブロックチェーン言語の課題
    ● 資産を直接エンコードできない
    ○ 資産をIntegerで表現
    ○ 型がない
    ○ エラーハンドリングはどうやって?
    ● Scarcityの実装が開発者に委ねられる
    ○ 言語のサポートなしに、注意深く実装しなければならない
    ● Access controlが柔軟でない
    ○ 署名スキームベースが主流

    View Slide

  8. Moveの設計
    ● first-class assets
    ○ resource typeを定義できる(資産を表現)
    ○ コピーと破棄は明示的に行う( copy/move)
    ● flexibility
    ○ Move言語: modules/resources/produres
    ○ オブジェクト指向言語 : classes/objects/methods
    ● safety
    ○ bytecode verifierによるoff-chain解析
    ● verfiability
    ○ 動的ディスパッチを行わない
    ■ コールグラフが複雑にならない
    ○ mutabilityの制限(valueの変更はreference経由。Rustの所有権システムの力を借りる)
    ○ モジュール化によるデータ抽象化

    View Slide

  9. Moveにふれるには
    ● Githubで公開されている
    ○ https://github.com/libra/libra/tree/master/language
    ● 社内ブログもご一読ください
    ○ Facebook libraのMove言語でスマートコントラクトを書いてみる
    ■ https://note.mu/fintertech/n/n3334c5a021e9
    ● とはいえ、まだまだ発展途上
    ○ 現時点ではLibra Blockchainにデプロイできない
    ■ ローカルでのテストはできる
    ○ ドキュメントや開発ツールも揃っていない
    ■ コードハイライトやsuggestionが早く欲しい
    ■ buitlinsの一覧はWPのappendixに載ってる
    ○ CollectionやGenericsも将来対応するらしい( WPより)
    ■ 今はByteArrayとStructくらい

    View Slide