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

PythonによるWeb3開発

abenben
October 13, 2022

 PythonによるWeb3開発

2022年10月13日のみんなのPython勉強会#86で発表した『PythonによるWeb3開発』のスライドです。
https://startpython.connpass.com/event/260988/
#stapy

abenben

October 13, 2022
Tweet

More Decks by abenben

Other Decks in Technology

Transcript

  1. PythonによるWeb3開発
    Start Python Club
    阿部 一也(あべんべん)
    @abenben
    2022.10.13 みんなのPython勉強会 #86

    View full-size slide

  2. ⾃⼰紹介

    View full-size slide

  3. IT企業でシステムエンジニアとしてキャリアを積み、三菱UFJトラスト投資⼯学研究
    所において⾦融ITテクノジストとして⾦融分野の取組む中で、「フィンテックエンジニア
    養成読本」を執筆・監修。
    MUFGデジタルアクセラレータプログラムではメンターを担当。
    現職では教育・HR分野向けの2つのブロックチェーン実証実験(慶應義塾⼤学
    経済学部附属経済研究所FinTEKセンター STARプロジェクト、経済産業省 未
    来の教室 Ongaeshi実証事業)のテックリードとして従事。
    ⾦融・フィンテック、 Python、ブロックチェーン、クラウド、ソフトウェア開発の各ITコ
    ミュニティの運営と、先端技術・ビジネス・組織改⾰イベント等の企画・運営に取り組
    む。
    ブロックチェーン、Pythonデータ分析、RPA、クラウド導⼊などのDX推進のエンジニ
    アリング指導や、新規プロダクトのソリューション検討などが得意分野です。
    コミュニティ運営
    Start Python Club、⾦融エンジニア養成コミュニティ、fin-py,Fin-JAWS等
    監修、執筆、翻訳、査読、協⼒など
    ・Sparkによる実践データ解析 ―⼤規模データのための機械学習事例集
    ・マンガと図解でスッキリわかる プログラミングのしくみ
    ・実践 ⾦融データサイエンス 隠れた構造をあぶり出す6つのアプローチ
    ・テスト駆動Python
    ・あたらしいPythonによるデータ分析の教科書
    ・みんなのブロックチェーン
    ・フィンテックエンジニア養成読本
    ・Python 3スキルアップ教科書
    ・After GAFA 分散化する世界の未来地図
    ・実践シナリオ・プランニング
    阿部 ⼀也
    Institution for a Global Society株式会社
    上席研究員
    Profile
    Twitter @abenben

    View full-size slide

  4. Japan ICT DAO(10/8設⽴)
    企業
    幹事会社
    コミュニティ
    マネージャー
    コミュニティ
    アドバイザー
    コミュニティメン
    バー
    コミュニティ
    マネージャー
    コミュニティ
    アドバイザー
    コミュニティメン
    バー
    コミュニティメン
    バー
    コミュニティメン
    バー
    コミュニティメン
    バー
    コミュニティ
    マネージャー
    コミュニティ
    アドバイザー
    コミュニティメン
    バー
    コミュニティメン
    バー
    コミュニティメン
    バー
    コミュニティメン
    バー
    コミュニティ
    マネージャー
    株式会社CRE-CO
    https://goworkship.com/event/115501/
    ICTに課題のある企業

    View full-size slide

  5. 初代デジタル⼤⾂ 平井卓也⽒から応援メッセージまで
    私達の予想以上にWeb3が重要視されていた。

    View full-size slide

  6. イーサリアム

    View full-size slide

  7. イーサリアム
    Ethereum Foundationを中⼼に開発がすすめられている
    分散アプリケーションのプラットフォーム
    2013年にVitalik Buterin(当時19歳)によって開発
    ブロックチェーン上のアプリケーションで実⾏するスクリプト⾔語を持つ
    (スマートコントラクト)

    View full-size slide

  8. この記事の取材に協⼒しました😀
    https://wired.jp/special/2017/vitalik-buterin/
    暗号資産(仮想通貨)イーサリアムの
    共同創設者ヴィタリック・ブテリン⽒
    Pythonたくさん使ってる

    View full-size slide

  9. スマートコントラクトとは

    View full-size slide

  10. スマートコントラクトとは
    • スマートコントラクトとは、ある条件を満たすと⾃動的に契約(コントラクト)を実⾏す
    る仕組み。(=⼈がいないところで契約を⾃動的に履⾏すること)
    • 1997年にニック・スザボ(NickSzabo)が提唱した⾔葉でビットコインやイーサリアムよ
    りも前からある概念なのです(ブロックチェーン以外のことも指している)。

    View full-size slide

  11. スマートコントラクトとWebアプリの違い
    Webアプリ
    スマートコントラクトも企業がサービス提供するために使っているWebアプリもある条件に
    よって実⾏されるプログラムとしては同じようなものです。具体的にどのあたりが違うかイメー
    ジを共有します。
    ⼀般的には、企業が開発したWebアプリは企業のクラウドサーバーの中に⼀つだけ存在し
    て、プログラムや情報は守られています。
    スマートコントラクトは各ブロックチェーンの全ノードの仮想マシン上に配布され、プログラム
    の内容や情報(=契約内容や契約のステータスや結果、時間など)はオープンになって
    います。

    View full-size slide

  12. スマートコントラクトのメリット
    • 透明性の⾼さ
    スマートコントラクトの契約が全てのノードに記録されることで共有が容易になり、不正や
    改ざんなどを防げる。
    • 時間やコストの削減
    第三者の仲介がない状態で契約の履⾏が可能なため、時間が短縮され、第三者への
    仲介⼿数料が不要となります(ただし、別途ガス代は発⽣する)。

    View full-size slide

  13. EVM
    Ethereum Virtual Machine (EVM)はスマートコントラクトと呼ばれるコードを実⾏す
    る各ブロックチェーンの仮想マシン。
    スマートコントラクトは プログラミング⾔語で記述されますが, EVMでは複雑な構造を解釈
    することができないので、仮想マシンが解析しやすい低レベルなバイトコードの命令に変換
    する必⽤があります。
    変換するためのコンパイラや配布(デプロイ)するためのデプロイツールが必要になります。
    スマートコントラクトコード
    (Solidity、Vyperなど)
    バイトコード
    コンパイル デプロイ
    ブロックチェーンネットワーク

    View full-size slide

  14. イーサリアムのアカウント
    • イーサリアムのアカウントにはEOAとコントラクトの⼆種類がある。
    EOA(Externally Owned Account) コントラクト
    • 通常(外部所有)のウォレットアカウント
    (アドレス)
    • プライベートキーを持っている
    (資⾦の管理をできる)
    • スマートコントラクト⽤のアカウント
    • プライベートキーを持っていない
    • スマートコントラクトのコードを持っている
    • アドレスを持っている
    アドレス アドレス
    nonce
    balance
    strageRoot
    codeHash
    nonce
    balance
    strageRoot
    codeHash
    バイトコード
    ストレージ
    ワールドステート
    EOAアカウント コントラクトアカウント

    View full-size slide

  15. スマートコントラクトが動くブロックチェーン
    スマートコントラクトはプログラムとして表現します。
    また、ブロックチェーンプラットフォームによって
    プログラミングできるものが異なります。
    • イーサリアム︓Solidyty,Vyper(
    Python),Fe(Vyper,Rust)
    • Hyperledger Fablic︓Go,Java
    • R3 Corda︓Kotlin
    • ソラナ︓Rust
    ※ビットコインにはスクリプトが書けるが、スマートコントラクトではない。
    ⾃動実⾏︓代⾦⽀払い+商品送付
    1.商品を注⽂
    スマート
    コントラクト
    契約条件をプログラムとして記述しておき、ある
    条件が満たされたときに⾃動的に決められた
    処理がおこなわれる。
    Ethereum
    Hyperledger Fabric
    R3 Corda
    ブロックチェーン・プラットフォームとして
    SOLANA

    View full-size slide

  16. Solidity
    • SolidityはEthereum Virtual Machine (EVM)で動作するスマートコントラクト専
    ⽤のプログラミング⾔語。
    • イーサリアム共同創設者キャビン・ウッドが作成した。
    • EVMの中では1番⼈気(デファクトスタンダード)がある。
    • 構⽂はJavaScriptやC++に似ている。
    • Solidityには Solidity コンパイラや solc と呼ばれるコンパイラが⽤意されていて、
    EVMが理解できるバイトコードに変換する必要がある。
    Solidity

    View full-size slide

  17. Vyper
    • SolidityはEthereum Virtual Machine (EVM)で動作するスマートコントラクト専
    ⽤のプログラミング⾔語
    • 2番⽬に⼈気のあるスマートコントラクト(Pythonベース)
    • まだベータ版である
    • 強⼒な型付け
    • 正確なガス消費量の上限値計算
    • Solidityよりも安全性の⾼いコード記述
    • 関数の継承やオーバーロードができない(デメリット)
    • Vyperはチューリング完全ではない(デメリット)
    Vyper

    View full-size slide

  18. Fe(フィー)
    https://fe-lang.org/
    2020年にVyperで
    脆弱性が⾒つかり
    Fe(フィー)⾔語プロジェクトが
    ⽴ち上がった。

    View full-size slide

  19. DApps
    • 「DecentralizedApplications(DApps)」はブロックチェーンを⽤いた⾃律分散
    型のアプリケーション。
    • ビットコインは、DAppsの⼀種。
    Hardware
    Internet Protocol(TCP/IP)
    Web Email SNS
    WebApp
    Hardware
    Internet Protocol(TCP/IP)
    Bitcoin
    Blockchain
    Cetntralized Application Decetntralized Application
    その他のアプリケーション
    • 中央管理者が必⽤
    • 仲介者を介した取引
    • 管理者がプラットフォームの健全性を維持
    • 管理者がコンテンツから収益を得る
    • 中央管理者が不要
    • P2P取引
    • 参加者がプラットフォームの健全性を維持
    • 参加者が維持の対価としてトークンを得る

    View full-size slide

  20. Vyperによる開発

    View full-size slide

  21. ⾔語仕様
    # @version ^0.3.7
    greet: public(String[100])
    @external
    def __init__():
    self.greet = "Hello World"
    sample1.vy

    View full-size slide

  22. Etherscan(Vyper)
    https://etherscan.io/vyper
    EtherscanはEthereumネットワーク⽤のブロックチェーン・エクスプローラー。
    ここでもVyperのソースコードをコンパイルし、ABI、バイトコードなどを出⼒できる。

    View full-size slide

  23. REMIX IDE
    REMIX IDEはEthereumの
    スマートコントラクト⽤の
    IDE(統合開発環境)。
    スマートコントラクトコードの
    開発に関する作業を全て⾏える。
    ・エディット
    ・コンパイル
    ・デバッグ
    ・デプロイ
    https://remix-project.org/
    ①「REMIX IDE」を
    クリック

    View full-size slide

  24. Remix IDEでの開発#1
    ブラウザ上で、
    REMIX IDEに遷移し、
    左メニュー下にある
    プラグインの管理に切り換えます。
    ①「Plugin manager」を
    クリック

    View full-size slide

  25. Remix IDEでの開発#2
    ①「vyper」を検索する
    ②「vyper」をActivateに
    する。
    Vyperのプラグインを検索して
    アクティベートします。

    View full-size slide

  26. Remix IDEでの開発#3
    ②「tests」フォルダ上で
    右クリックし、
    ポップアップメニューより
    「New File」をクリック
    ①「File Explorer」メニュー
    をクリック
    ファイルエクスプローラー上から
    vyperコードを書くための
    ファイルを作成する。

    View full-size slide

  27. Remix IDEでの開発#4
    ①ファイル名を
    “hello.vy”に設定
    ②vyperのコーディングを
    ⾏う
    Vyperのコーディングを⾏う。

    View full-size slide

  28. Remix IDEでの開発#5
    ③「Compile xxx.vy」
    (コンパイル)
    ボタンをクリック
    ※コンパイルエラーがあると
    警告メッセージが表⽰されます。
    ②「REMOTE COMPILER」
    に切り換え
    ①「Viper」メニュー
    をクリック
    例:関数の末尾に:がない場合
    Vyperのコンパイルを⾏う。

    View full-size slide

  29. Remix IDEでの開発#6
    ②「Deploy」をクリック
    ①「Run & transactions」
    メニューをクリック
    コンパイルしたバイナリを
    テスト環境にデプロイする。

    View full-size slide

  30. Remix IDEでの開発#7
    ①スクロールバーを下げると、
    変数名や関数名のボタンがある。
    ②「greet」変数名のボタンをクリック
    すると変数の内容が表⽰される。
    実際の動作を確認する。

    View full-size slide

  31. 学習コンテンツ動画(Vyper version 0.2⽤)
    https://www.youtube.com/playlist?list=PLO5VPQH6OWdWOd-IJTfIzlM2a1yv1rSN-

    View full-size slide

  32. Web3.py
    Pythonで実装されたイーサリアムに
    アクセスするクライアントツール
    (web3.jsのPython版)
    イーサリアム互換のためPolygonなども動作。
    $ pip install web3.py
    インストール

    View full-size slide

  33. Infura①
    https://infura.io/login
    ①アカウント申請する
    ②アカウント申請後にログインする

    View full-size slide

  34. Infura② ①”CREATE NEW KEY”を
    クリック
    ②「NETWORK」で”Web3 API”を
    選択して、「NAME」に任意の
    名前を⼊⼒して「CREATE」を
    クリック

    View full-size slide

  35. Infura③
    ①このAPI キーを控えておく。
    ②このURLを控えておく。

    View full-size slide

  36. Web3.pyで接続
    ②控えていたKEYを利⽤
    ①控えていたURLを利⽤
    ③接続できたけど、残⾼はない。

    View full-size slide

  37. まとめ
    • Pythonライクなスマートコントラクトから触れると
    Pythonistaの導⼊敷居が下げられそう。
    • Solidityの⽅が圧倒的に実績があり、ツールが充実している。
    (Vyperはまだベータ版)

    View full-size slide