Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

⾃⼰紹介

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

イーサリアム

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Vyperによる開発

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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