なぜBlockchainはRustを選ぶのか #roppongirs / why-blockchain-chooses-rust

なぜBlockchainはRustを選ぶのか #roppongirs / why-blockchain-chooses-rust

2019/07/30 Roppongi.rs #1 登壇資料

55e8251480e61d7f4a7f3f94233c6100?s=128

jkcomment

July 30, 2019
Tweet

Transcript

  1. Powered by DMM Blockchain Labs 1 なぜBlockchainは
 Rustを選ぶのか


  2. 自己紹介 - About me
 @ DMM.com Jikyung Kim(金 志京) ・DMM.com

    Blockchain Engineer ・Blockchain研究・開発 ・スニーカー、ロードバイク @jkcomment 2
  3. 書籍紹介 - Publishing
 @ DMM.com 3

  4. Agenda
 @ DMM.com • Rustの現状 • なぜBlockchainはRustを選ぶのか • まとめ 4

  5. Rustの現状
 5

  6. Rust?
 @ DMM.com • Rustとは? ◦ システムプログラミング言語 ◦ 安全性(型安全、メモリ安全) ◦

    速度(C, C++並) ◦ コンパイラが優秀 ◦ FireFox, Dropbox, Dwango etc... 6
  7. Rust?
 @ DMM.com • Stack Overflow 2018年の調査結果でRustが一番好きな言語に! 7

  8. Rustの現状
 @ DMM.com 8

  9. Rustの現状
 @ DMM.com 9 Rustやめますか!

  10. Rustの現状
 @ DMM.com • Rust実装の有名なサービスがまだない(少ない) • Rust実装の有名なOSSプロジェクトがまだない • システム系 +

    組み込み系はC言語1強 • 学習コストが高い • なんか難しそうー 10
  11. なぜBlockchainは
 Rustを選ぶのか
 11

  12. Blockchainとは
 @ DMM.com • Blockchain? ◦ P2Pで形成されたネットワーク上で動作する分散型台帳システム ◦ 「ブロック」と呼ばれるデータの単位を一定時間ごとに生成し、チェーン のように連結していくことによりデータを保管する

    ◦ 取引情報やブロックはハッシュ関数で暗号化される 12
  13. Blockchain Nodeの実装例
 @ DMM.com • C++: bitcoin, EOS, Zilliqa •

    Go: Ethereum, Klaytn, Quorum 13
  14. Blockchain Nodeの実装例
 @ DMM.com • C++: bitcoin, EOS, Zilliqa •

    Go: Ethereum, Klaytn, Quorum • Rust: Ethereum(Parity), Polkadot(Substrate), Holochain, NEAR, Grin, Conflux, CodeChain, Purple Protocol, Enigma(core), zero-chain, Plasm, Edgeware… 14
  15. なぜRustなのか
 @ DMM.com • なぜ!? 15

  16. なぜRustなのか
 @ DMM.com • なぜ!? 16 特に理由はない

  17. なぜRustなのか① - 性能
 @ DMM.com • 理由は様々 ◦ Memory Safety

    ◦ Concurrency ◦ Fast 17
  18. なぜRustなのか② - モジュール
 @ DMM.com • Blockchainにおける必要な処理 ◦ Networking(P2P) ◦

    Cryptography ◦ Consensus ◦ Storage ◦ etc 18
  19. なぜRustなのか② - モジュール
 @ DMM.com • Blockchainにおける必要な処理 ◦ Networking(P2P) ◦

    Cryptography ◦ Consensus ◦ Storage ◦ etc 19
  20. なぜRustなのか② - モジュール(Networking)
 @ DMM.com • Networking(P2P) ◦ BlockchainはP2Pでネットワークを形成する ◦

    P2P(Peer to Peer)? ▪ 対等の者同士が対等な立場で相互にやり取りをおこなう ▪ 実現するために必要な機能が多い • Transport, Discovery, Peer Routing, NAT越えなど 20
  21. なぜRustなのか② - モジュール(Networking)
 @ DMM.com • libp2p ◦ p2pアプリケーションを実現するために必要なモジュールを提供 21

  22. なぜRustなのか② - モジュール(Cryptography)
 @ DMM.com • Cryptography ◦ 暗号化関連のモジュールが豊富 22

  23. なぜRustなのか③ - wasm
 @ DMM.com • wasmとは? ◦ WebAssembly •

    他の言語でも書けるじゃん? ◦ Go/C#の場合、runtimeのライブラリが大きすぎてバイナリのサイズが 大きくなるし、C/C++の場合、wasmへのプロセスが面倒 ◦ Rustはバイナリが小さい、楽、wasmにしてもメモリ安全 23
  24. なぜRustなのか④ - Substrate
 @ DMM.com 24

  25. なぜRustなのか④ - Substrate
 @ DMM.com • Substrateとは? ◦ Parity社が開発したBlockchain Framework

    ◦ 誰でも簡単(?)に独自のBlockchainが作れる ◦ Substrateベースのプロジェクトが増えている ▪ zero-chain, Plasm, Edgeware, shasper, ChainX... 25
  26. BlockchainにおけるRustの悪い使い方
 @ DMM.com • マクロが便利なのはわかりますが、、、 ◦ コードが理解しづらい ◦ コンパイルエラーは展開後のコードで起こり原因が分かりづらい •

    トレイト地獄 • match地獄 26
  27. Blockchain以外のRustの使い道
 @ DMM.com • システムプログラミング言語なのでOSが作れる • Webアプリケーション開発もイケる ◦ Rocket, Iron,

    actix-webなど • フロントエンド開発もできるぞ!(feat. wasm) 27
  28. 番外編① - 個人的にRustが良いと思う理由
 @ DMM.com • オブジェクト指向言語好きじゃない • 速さ =

    正義 • 堅牢さ = 正義 28
  29. 番外編② - 個人的にRustで苦労した話
 @ DMM.com • 関数型言語がわからず。。。 ◦ Haskellを勉強しますた •

    国内だと情報が少ない ◦ 最近本が色々出始めてますね!嬉しい! 29
  30. まとめ
 30

  31. まとめ
 @ DMM.com • BlockchainでRustが選ばれる理由は特にない ◦ RustはBlockchainでよく選ばれているのは事実 ▪ RustはBlockchainと相性が良い!(かも) •

    Blockchain以外でもRustは全然イケる! • ものづくりは楽しむべき。Rustで楽しんで行きましょう! ◦ Blockchain楽しいですよ:D 31
  32. 参考
 @ DMM.com 32 https://insights.stackoverflow.com/survey/2018#most-loved-dreaded-and-wanted https://www.parity.io/why-rust/ https://lib.rs/cryptography https://www.parity.io/wasm-smart-contract-development/ https://github.com/WebAssembly/meetings/blob/master/2018/CG-04.md#webassembly-in-blockchain https://github.com/paritytech/substrate

    https://grin-tech.org/ https://libp2p.io/implementations/ https://github.com/libp2p/specs https://github.com/rust-in-blockchain/awesome-blockchain-rust https://github.com/klaytn/klaytn https://github.com/libra/libra https://github.com/substrate-developer-hub/awesome-substrate https://github.com/darwinia-network/darwinia-appchain https://github.com/servo/servo https://github.com/actix https://github.com/SergioBenitez/Rocket https://github.com/libp2p/rust-libp2p https://github.com/rust-lang/book
  33. Thank you for the attention.
 Powered by DMM Blockchain Labs

    33