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

Plasma Implementation in Vyper

Plasma Implementation in Vyper

@blockchain.tokyo #11

Ryuya Nakamura

August 30, 2018
Tweet

More Decks by Ryuya Nakamura

Other Decks in Programming

Transcript

  1. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 1 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Plasma Implementation in Vyper Aug-2018 @veryNR
  2. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 2 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. 自己紹介 • LayerX Inc. ◦ Engineer/Researcher • Interests ◦ Plasma ◦ State Channel ◦ Vyper Twitter: @veryNR GitHub: nrryuya Ryuya Nakamura
  3. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 3 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Plasma implementation in Vyper! https://github.com/LayerXcom/plasma-mvp-vyper Issues & pull requests are welcome!
  4. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 4 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. 1:About LayerX R&D Team 2:Vyper Agenda 3:Plasma MVP in Vyper
  5. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 5 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. 1. About LayerX R&D Team
  6. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 6 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. About LayerX R&D Team • Ryuya Nakamura • Ex data engineer @Gunosy • Twitter: veryNR • GitHub: nrryuya • Osuke Sudo • Owner of the blog “Zoom” • Twitter: zoom_zoomzo • GitHub: osuketh
  7. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 7 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. About LayerX R&D Team ポリシー • 新技術にコミット • キャッチアップで終わらない • 全てオープンにやる リサーチテーマ • Plasma • State Channel • Vyper • Automatic code audit • BLS signature • DEX, Protocols for financial derivatives • 研究開発を通したコミュニティへの貢献
  8. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 8 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. 2. Vyper
  9. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 9 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. • PythonライクなEVM向けスマートコントラクト言語 • 元々はVitalikが開発した言語 ◦ Casper FFGのコントラクトをVyperで書いたりしてた • Ethereum Foundationのgrant programにある • ベータ版なので本番ではまだ使われていない はず • 公開されている実装例 ◦ ◦ ◦ ◦ ▪ っぽい で、 もらってた Vyper
  10. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 10 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Vyper Community • 氏 の人 が開 発の中心 • のレスは早い • 隔週でオンライン
  11. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 11 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Vyper デザイン原則(公式ドキュメントより) • Security: ◦ 安全なスマートコントラクトを自然に開発できるように • Language and compiler simplicity: ◦ 言語とコンパイラの実装をシンプルに • Auditablity: ◦ コードは最大限human-readableに ◦ 読み手のシンプルさ > 書き手のシンプルさ →Pythonと近い
  12. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 12 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. example: ERC20 in Vyper ↓ ↓ ↓
  13. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 13 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Vyper features デザイン原則に基づいた、 と異なる特徴 • コンパイル時の決定性 ◦ なし ▪ ループはあるが には整数リテラルしか渡せない ◦ 配列のインデックスもリテラルのみ • オーバーフロー防止 ◦ 普通の演算子がオーバーフローを対策しているので、 不要 ◦ の指数に変数は渡せない • コンパクトなコンパイラ ◦ 実装のコンパイラ ◦ を中間言語に利用
  14. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 14 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. What Vyper DOES NOT provide... デザイン原則から意図的に持たない機能 • の定義 ◦ 関数実行の前後に任意の処理を入れられて複雑、大抵は関数実行前に何か を確認する処理→シンプルに で代用 • コントラクトの継承 ◦ プログラムを読むのに複数ファイルを行き来しなくてはならない • インラインアセンブリ ◦ スタックマシンを意識して するのは本当に大変。。。 基本は改「善」と思うが、継承・無限ループが無いのはどうなんだ。。。
  15. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 15 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Vyper tools • は の • 様々なエディタプラグイン ◦ • というツールが 互換の を作ってくれる • は開発中 • 的な はない ◦ というシンプルなコンパイラ アプリはある
  16. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 16 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. 3. Plasma MVP in Vyper
  17. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 17 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Plasma MVP in Vyper 目的 ①自分たちで を知るため 実際に使ってみて良し悪しを理解する 開発状況やコミュニティについて知る ② コミュニティのため まだ色々な仕様が議論中→実装例が求められている コントラクトは様々なロジックが必要 マークルプルーフ、署名検証、優先度つきキュー →ちょうど良いのでは?
  18. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 18 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Plasma MVP in Vyper 実装したコントラクトは二つだけ • コントラクト ◦ チェーンとのやりとり ◦ ライブラリ呼び出しが まだ 無いので 関数としてここに実装 ▪ 署名検証 • コントラクト ◦ 優先度つきキュー
  19. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 19 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Plasma MVP in Vyper • 仕様に関してSolidity実装と違いはほぼ生まれなかった ◦ priority queueのサイズに制約を加える必要はあった ◦ finalizeExit関数で無限ループが使えなかったため • 実装の違いは生まれた→主に「現状の」 の制約によるもの ◦ 元々 コントラクトでは継承が無く、 も だけ → のデザイン原則による 実装に悪影響はなさそう • 各種ビルトイン関数で実装が減った ▪ 不要 ▪ デコード、バイト列のスライスの関数も実装不要 ※詳しい実装の違いは の記事をご覧ください で を実装しました
  20. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 20 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Hard things ①デバッグ • デバッガがない • そもそもコントラクトは デバッグができない ◦ も したら発行されない • でひたすらビルド デプロイ • コードをコメントアウトしながら の位置を探す
  21. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 21 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Hard things ② デコーダーのデプロイ • の 関数はオンチェーンのコントラクトを する仕組み ◦ や の みたいな • など 環境で使うは事前にデプロイが必要 • を実装しました ※ ドキュメントに書いてあるアドレス・ データは使えない(?)
  22. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 22 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Contribution • 開発がてら少しだけコントリビュート ◦ ドキュメント修正プルリク バグの報告 ◦ ▪ 定数の導入 ▪ 型のみを論理値として使う ▪ 時間に関するビルトイン定数 • の反響 ◦ 界ではそこそこ? ▪ リポジトリに入ることに ◦ 署名からアドレスを取得する関数の導入が決定
  23. CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights

    reserved. 23 CONFIDENTIAL : copyright © by 2018 LayerX Inc. all rights reserved. Summary • は書き 読みやすくて素敵! • 新しい言語を作っていくのは楽しい • 今後も やっていきたい ◦ の 対応 間違いのご指摘やご意見は までお願いします