見出し画像

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  の公式ドキュメントに使い方がたくさん載っています。気になるかたはこちらを参考に試してみてください。

いいなと思ったら応援しよう!