やったこと
web3.pyを使用してEthereumのブロックが作成された時にコールバックする方法を確認する。
web3.pyで確認している事例があまりないので記録しておく。
※geth --version 1.70, web3.py --version 3.15
[Step1] gethを起動させる。(Light client mode)
gethをLightクライアントモードで起動させる。(同期方法はfastでもいいけど、サイズも重く
同期が長いため。今回は同期が早いLight modeにする。)
geth
geth --datadir "~/light" --syncmode "light" console --rpc --rpcaddr "localhost" --rpcport "8545"
[Step2] サンプルを書く。
sample_filter.py
from web3 import Web3,HTTPProvider,IPCProvider
import time
web3 = Web3(HTTPProvider('http://localhost:8545'))
def new_block_callback(block_hash):
print("New Block: {0}".format(block_hash))
new_block_filter = web3.eth.filter('latest') #フィルタを作成する。
new_block_filter.watch(new_block_callback) #ブロックが生成されたらコールバックする。
while True: #終了しないように待機する。
time.sleep(1)
[Step3] 結果の確認
gethのプロンプト上では次のように、新しいブロックが生成されるたびMSGが出力されることを確認する。
geth
INFO [10-09|06:45:31] Imported new block headers count=1 elapsed=6.232ms number=4348769 hash=82a83d…31d8dd ignored=0
INFO [10-09|06:45:32] Imported new block headers count=1 elapsed=5.492ms number=4348770 hash=998bf4…3f41a3 ignored=0
出力(例)
$ python3 sample_filter.py
New Block: 0x82a83dadf80b59c7137649c3bf4a192bd2981cd51379be1df6539591ac31d8dd
New Block: 0x998bf46e587da0639bba709da59159ba08ebc499227383f263a3d6961e3f41a3
・・・