2022年10月13日のみんなのPython勉強会#86で発表した『PythonによるWeb3開発』のスライドです。 https://startpython.connpass.com/event/260988/ #stapy
PythonによるWeb3開発Start Python Club阿部 一也(あべんべん)@abenben2022.10.13 みんなのPython勉強会 #86
View Slide
⾃⼰紹介
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株式会社上席研究員ProfileTwitter @abenben
Japan ICT DAO(10/8設⽴)企業幹事会社コミュニティマネージャーコミュニティアドバイザーコミュニティメンバーコミュニティマネージャーコミュニティアドバイザーコミュニティメンバーコミュニティメンバーコミュニティメンバーコミュニティメンバーコミュニティマネージャーコミュニティアドバイザーコミュニティメンバーコミュニティメンバーコミュニティメンバーコミュニティメンバーコミュニティマネージャー株式会社CRE-COhttps://goworkship.com/event/115501/ICTに課題のある企業
初代デジタル⼤⾂ 平井卓也⽒から応援メッセージまで私達の予想以上にWeb3が重要視されていた。
イーサリアム
イーサリアムEthereum Foundationを中⼼に開発がすすめられている分散アプリケーションのプラットフォーム2013年にVitalik Buterin(当時19歳)によって開発ブロックチェーン上のアプリケーションで実⾏するスクリプト⾔語を持つ(スマートコントラクト)
この記事の取材に協⼒しました😀https://wired.jp/special/2017/vitalik-buterin/暗号資産(仮想通貨)イーサリアムの共同創設者ヴィタリック・ブテリン⽒Pythonたくさん使ってる
スマートコントラクトとは
スマートコントラクトとは• スマートコントラクトとは、ある条件を満たすと⾃動的に契約(コントラクト)を実⾏する仕組み。(=⼈がいないところで契約を⾃動的に履⾏すること)• 1997年にニック・スザボ(NickSzabo)が提唱した⾔葉でビットコインやイーサリアムよりも前からある概念なのです(ブロックチェーン以外のことも指している)。
スマートコントラクトとWebアプリの違いWebアプリスマートコントラクトも企業がサービス提供するために使っているWebアプリもある条件によって実⾏されるプログラムとしては同じようなものです。具体的にどのあたりが違うかイメージを共有します。⼀般的には、企業が開発したWebアプリは企業のクラウドサーバーの中に⼀つだけ存在して、プログラムや情報は守られています。スマートコントラクトは各ブロックチェーンの全ノードの仮想マシン上に配布され、プログラムの内容や情報(=契約内容や契約のステータスや結果、時間など)はオープンになっています。
スマートコントラクトのメリット• 透明性の⾼さスマートコントラクトの契約が全てのノードに記録されることで共有が容易になり、不正や改ざんなどを防げる。• 時間やコストの削減第三者の仲介がない状態で契約の履⾏が可能なため、時間が短縮され、第三者への仲介⼿数料が不要となります(ただし、別途ガス代は発⽣する)。
EVMEthereum Virtual Machine (EVM)はスマートコントラクトと呼ばれるコードを実⾏する各ブロックチェーンの仮想マシン。スマートコントラクトは プログラミング⾔語で記述されますが, EVMでは複雑な構造を解釈することができないので、仮想マシンが解析しやすい低レベルなバイトコードの命令に変換する必⽤があります。変換するためのコンパイラや配布(デプロイ)するためのデプロイツールが必要になります。スマートコントラクトコード(Solidity、Vyperなど)バイトコードコンパイル デプロイブロックチェーンネットワーク
イーサリアムのアカウント• イーサリアムのアカウントにはEOAとコントラクトの⼆種類がある。EOA(Externally Owned Account) コントラクト• 通常(外部所有)のウォレットアカウント(アドレス)• プライベートキーを持っている(資⾦の管理をできる)• スマートコントラクト⽤のアカウント• プライベートキーを持っていない• スマートコントラクトのコードを持っている• アドレスを持っているアドレス アドレスnoncebalancestrageRootcodeHashnoncebalancestrageRootcodeHashバイトコードストレージワールドステートEOAアカウント コントラクトアカウント
スマートコントラクトが動くブロックチェーンスマートコントラクトはプログラムとして表現します。また、ブロックチェーンプラットフォームによってプログラミングできるものが異なります。• イーサリアム︓Solidyty,Vyper(Python),Fe(Vyper,Rust)• Hyperledger Fablic︓Go,Java• R3 Corda︓Kotlin• ソラナ︓Rust※ビットコインにはスクリプトが書けるが、スマートコントラクトではない。⾃動実⾏︓代⾦⽀払い+商品送付1.商品を注⽂スマートコントラクト契約条件をプログラムとして記述しておき、ある条件が満たされたときに⾃動的に決められた処理がおこなわれる。EthereumHyperledger FabricR3 Cordaブロックチェーン・プラットフォームとしてSOLANA
Solidity• SolidityはEthereum Virtual Machine (EVM)で動作するスマートコントラクト専⽤のプログラミング⾔語。• イーサリアム共同創設者キャビン・ウッドが作成した。• EVMの中では1番⼈気(デファクトスタンダード)がある。• 構⽂はJavaScriptやC++に似ている。• Solidityには Solidity コンパイラや solc と呼ばれるコンパイラが⽤意されていて、EVMが理解できるバイトコードに変換する必要がある。Solidity
Vyper• SolidityはEthereum Virtual Machine (EVM)で動作するスマートコントラクト専⽤のプログラミング⾔語• 2番⽬に⼈気のあるスマートコントラクト(Pythonベース)• まだベータ版である• 強⼒な型付け• 正確なガス消費量の上限値計算• Solidityよりも安全性の⾼いコード記述• 関数の継承やオーバーロードができない(デメリット)• Vyperはチューリング完全ではない(デメリット)Vyper
Fe(フィー)https://fe-lang.org/2020年にVyperで脆弱性が⾒つかりFe(フィー)⾔語プロジェクトが⽴ち上がった。
DApps• 「DecentralizedApplications(DApps)」はブロックチェーンを⽤いた⾃律分散型のアプリケーション。• ビットコインは、DAppsの⼀種。HardwareInternet Protocol(TCP/IP)Web Email SNSWebAppHardwareInternet Protocol(TCP/IP)BitcoinBlockchainCetntralized Application Decetntralized Applicationその他のアプリケーション• 中央管理者が必⽤• 仲介者を介した取引• 管理者がプラットフォームの健全性を維持• 管理者がコンテンツから収益を得る• 中央管理者が不要• P2P取引• 参加者がプラットフォームの健全性を維持• 参加者が維持の対価としてトークンを得る
Vyperによる開発
⾔語仕様# @version ^0.3.7greet: public(String[100])@externaldef __init__():self.greet = "Hello World"sample1.vy
Etherscan(Vyper)https://etherscan.io/vyperEtherscanはEthereumネットワーク⽤のブロックチェーン・エクスプローラー。ここでもVyperのソースコードをコンパイルし、ABI、バイトコードなどを出⼒できる。
REMIX IDEREMIX IDEはEthereumのスマートコントラクト⽤のIDE(統合開発環境)。スマートコントラクトコードの開発に関する作業を全て⾏える。・エディット・コンパイル・デバッグ・デプロイhttps://remix-project.org/①「REMIX IDE」をクリック
Remix IDEでの開発#1ブラウザ上で、REMIX IDEに遷移し、左メニュー下にあるプラグインの管理に切り換えます。①「Plugin manager」をクリック
Remix IDEでの開発#2①「vyper」を検索する②「vyper」をActivateにする。Vyperのプラグインを検索してアクティベートします。
Remix IDEでの開発#3②「tests」フォルダ上で右クリックし、ポップアップメニューより「New File」をクリック①「File Explorer」メニューをクリックファイルエクスプローラー上からvyperコードを書くためのファイルを作成する。
Remix IDEでの開発#4①ファイル名を“hello.vy”に設定②vyperのコーディングを⾏うVyperのコーディングを⾏う。
Remix IDEでの開発#5③「Compile xxx.vy」(コンパイル)ボタンをクリック※コンパイルエラーがあると警告メッセージが表⽰されます。②「REMOTE COMPILER」に切り換え①「Viper」メニューをクリック例:関数の末尾に:がない場合Vyperのコンパイルを⾏う。
Remix IDEでの開発#6②「Deploy」をクリック①「Run & transactions」メニューをクリックコンパイルしたバイナリをテスト環境にデプロイする。
Remix IDEでの開発#7①スクロールバーを下げると、変数名や関数名のボタンがある。②「greet」変数名のボタンをクリックすると変数の内容が表⽰される。実際の動作を確認する。
学習コンテンツ動画(Vyper version 0.2⽤)https://www.youtube.com/playlist?list=PLO5VPQH6OWdWOd-IJTfIzlM2a1yv1rSN-
Web3.pyPythonで実装されたイーサリアムにアクセスするクライアントツール(web3.jsのPython版)イーサリアム互換のためPolygonなども動作。$ pip install web3.pyインストール
Infura①https://infura.io/login①アカウント申請する②アカウント申請後にログインする
Infura② ①”CREATE NEW KEY”をクリック②「NETWORK」で”Web3 API”を選択して、「NAME」に任意の名前を⼊⼒して「CREATE」をクリック
Infura③①このAPI キーを控えておく。②このURLを控えておく。
Web3.pyで接続②控えていたKEYを利⽤①控えていたURLを利⽤③接続できたけど、残⾼はない。
まとめ• Pythonライクなスマートコントラクトから触れるとPythonistaの導⼊敷居が下げられそう。• Solidityの⽅が圧倒的に実績があり、ツールが充実している。(Vyperはまだベータ版)