Web3.pyの導入でコケたのって俺だけ?笑
今回は、Web3.py の導入方法と簡単な使用例を紹介します。なぜか導入でコケたので、そのあたりも一緒に話していきます。
ENS を触ってみようと思いましたが、方法がわかりませんでした。とりあえず、公式サイトを漁っていると ENS のライブラリを見つけました。
Python 信者のためのライブラリ Web3.py があったので、とりあえずこれを使ってみることにしました。
とりあえず入れてみる。
# pip install web3
-> こけた
ここでコケるかい!?笑
小一時間かけて解決法を見つけた。
# xcode-select --install
# pip install web3
-> いけた
しかしこの後、バージョンの違いか、上手く動かなかったため頓挫。
ライブラリのリポジトリを見てみると、docker ファイルがあったので、ローカルにクローンしてみた。
# git clone git@github.com:ethereum/web3.py.git
# cd web3.py
# docker-compose build
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web3py_sandbox latest 22cca075fb86 2 minutes ago 1.2GB <- OK
問題なく docker イメージが作成されました。では、立ち上げて中に入ってみます。
# docker up -d
Creating network "web3py_default" with the default driver
Creating web3py_sandbox_1 ... done
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a78179c1402f web3py_sandbox "tail -f /dev/null" 10 seconds ago Up 5 seconds web3py_sandbox_1 <- OK
# docker exec -it web3py_sandbox_1 bash
Python インタプリタを立ち上げてライブラリを使用してみます。
$ python3
>>> from web3 import Web3
>>> w3 = Web3(Web3.HTTPProvider("http://127.0.0.1:8545"))
>>> w3.isConnected()
False
このライブラリは、イーサリアムノードへの接続に依存しています。この接続を「プロバイダ」と呼び、その設定方法はいくつかあります。私は、HTTPProvider を使用しました。
まぁ私はローカルに geth を動かしていないので、あたりまえですが接続を確認(isConnected)すると False になります。
うーん、プライベートネットワークを立ち上げて、プライベートチェーン ENS を作ってみてもいいけど・・・できればメインネットでやりたい。
infura でできるの?
前から名前は知ってたけど、そんなことに使えるのか?笑
適当にプロジェクト作成して、さっきのプロバイダに指定。
>>> w3 = Web3(Web3.HTTPProvider('<作成したプロジェクトのエンドポイント>'))
>>> w3.isConnected()
True
おぉー!!!
適当にブロック情報を取得してみる。
>>> w3.eth.get_block(13990970)
AttributeDict({'baseFeePerGas': 121109302902, 'difficulty': 12143915483436036,...
Etherscan を確認した感じ、ちゃんとメインネットの情報を取得できているようだ。
参考:https://etherscan.io/block/13990970
最後に、せっかくだから ENS に関連したクエリも投げてみた。
>>> from ens import ENS
>>> ns = ENS.fromWeb3(w3)
>>> eth_address = ns.address("hashport.eth")
>>> eth_address
'0x8404A839Aca323e93b394E738061a3180386bed7'
hashport.eth という名前の所有者を検索してみた。どうやら、0x8404A… というアドレスが所有者になっているようだ。
公式アプリでも確認してみると「コントローラー」?というものらしい。登録者とコントローラーの違いがよくわかりませんが・・・。
Web3.py の公式ドキュメントに使い方がたくさん載っています。気になるかたはこちらを参考に試してみてください。