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

  2. ⾃⼰紹介

  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
  4. Japan ICT DAO(10/8設⽴) 企業 幹事会社 コミュニティ マネージャー コミュニティ アドバイザー コミュニティメン

    バー コミュニティ マネージャー コミュニティ アドバイザー コミュニティメン バー コミュニティメン バー コミュニティメン バー コミュニティメン バー コミュニティ マネージャー コミュニティ アドバイザー コミュニティメン バー コミュニティメン バー コミュニティメン バー コミュニティメン バー コミュニティ マネージャー 株式会社CRE-CO https://goworkship.com/event/115501/ ICTに課題のある企業
  5. 初代デジタル⼤⾂ 平井卓也⽒から応援メッセージまで 私達の予想以上にWeb3が重要視されていた。

  6. イーサリアム

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

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

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

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

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

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

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

    する必⽤があります。 変換するためのコンパイラや配布(デプロイ)するためのデプロイツールが必要になります。 スマートコントラクトコード (Solidity、Vyperなど) バイトコード コンパイル デプロイ ブロックチェーンネットワーク
  14. イーサリアムのアカウント • イーサリアムのアカウントにはEOAとコントラクトの⼆種類がある。 EOA(Externally Owned Account) コントラクト • 通常(外部所有)のウォレットアカウント (アドレス)

    • プライベートキーを持っている (資⾦の管理をできる) • スマートコントラクト⽤のアカウント • プライベートキーを持っていない • スマートコントラクトのコードを持っている • アドレスを持っている アドレス アドレス nonce balance strageRoot codeHash nonce balance strageRoot codeHash バイトコード ストレージ ワールドステート EOAアカウント コントラクトアカウント
  15. スマートコントラクトが動くブロックチェーン スマートコントラクトはプログラムとして表現します。 また、ブロックチェーンプラットフォームによって プログラミングできるものが異なります。 • イーサリアム︓Solidyty,Vyper( Python),Fe(Vyper,Rust) • Hyperledger Fablic︓Go,Java

    • R3 Corda︓Kotlin • ソラナ︓Rust ※ビットコインにはスクリプトが書けるが、スマートコントラクトではない。 ⾃動実⾏︓代⾦⽀払い+商品送付 1.商品を注⽂ スマート コントラクト 契約条件をプログラムとして記述しておき、ある 条件が満たされたときに⾃動的に決められた 処理がおこなわれる。 Ethereum Hyperledger Fabric R3 Corda ブロックチェーン・プラットフォームとして SOLANA
  16. Solidity • SolidityはEthereum Virtual Machine (EVM)で動作するスマートコントラクト専 ⽤のプログラミング⾔語。 • イーサリアム共同創設者キャビン・ウッドが作成した。 •

    EVMの中では1番⼈気(デファクトスタンダード)がある。 • 構⽂はJavaScriptやC++に似ている。 • Solidityには Solidity コンパイラや solc と呼ばれるコンパイラが⽤意されていて、 EVMが理解できるバイトコードに変換する必要がある。 Solidity
  17. Vyper • SolidityはEthereum Virtual Machine (EVM)で動作するスマートコントラクト専 ⽤のプログラミング⾔語 • 2番⽬に⼈気のあるスマートコントラクト(Pythonベース) •

    まだベータ版である • 強⼒な型付け • 正確なガス消費量の上限値計算 • Solidityよりも安全性の⾼いコード記述 • 関数の継承やオーバーロードができない(デメリット) • Vyperはチューリング完全ではない(デメリット) Vyper
  18. Fe(フィー) https://fe-lang.org/ 2020年にVyperで 脆弱性が⾒つかり Fe(フィー)⾔語プロジェクトが ⽴ち上がった。

  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取引 • 参加者がプラットフォームの健全性を維持 • 参加者が維持の対価としてトークンを得る
  20. Vyperによる開発

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

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

  23. REMIX IDE REMIX IDEはEthereumの スマートコントラクト⽤の IDE(統合開発環境)。 スマートコントラクトコードの 開発に関する作業を全て⾏える。 ・エディット ・コンパイル

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

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

  26. Remix IDEでの開発#3 ②「tests」フォルダ上で 右クリックし、 ポップアップメニューより 「New File」をクリック ①「File Explorer」メニュー をクリック

    ファイルエクスプローラー上から vyperコードを書くための ファイルを作成する。
  27. Remix IDEでの開発#4 ①ファイル名を “hello.vy”に設定 ②vyperのコーディングを ⾏う Vyperのコーディングを⾏う。

  28. Remix IDEでの開発#5 ③「Compile xxx.vy」 (コンパイル) ボタンをクリック ※コンパイルエラーがあると 警告メッセージが表⽰されます。 ②「REMOTE COMPILER」

    に切り換え ①「Viper」メニュー をクリック 例:関数の末尾に:がない場合 Vyperのコンパイルを⾏う。
  29. Remix IDEでの開発#6 ②「Deploy」をクリック ①「Run & transactions」 メニューをクリック コンパイルしたバイナリを テスト環境にデプロイする。

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

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

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

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

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

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

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

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