web3-py について
web3-pyは、Ethereumと連携するPythonアプリやスクリプト向けのライブラリです。ノード接続、チェーンデータの照会、コントラクト呼び出し、アカウント管理、トランザクション処理に対応します。
主な機能
- 01HTTP、WebSocket、IPCで接続
- 02残高、ブロック、イベントの照会
- 03ABIを使ったコントラクト操作
- 04アカウント管理とトランザクション署名
- 05トランザクションのガス見積もり
活用シーン
- 01Ethereumアカウント残高の取得
- 02スマートコントラクト関数の呼び出し
- 03Pythonから署名済みトランザクションを送信
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill web3-pyインストール後、Claude Code で/web3-pyを入力して読み込まれたか確認します。
詳細
web3-py
目的
web3-pyは、Web3プロトコルを使用してEthereumブロックチェーンとやり取りするためのPythonライブラリです。ブロックチェーンデータ、スマートコントラクト、トランザクションへのプログラムによるアクセスを可能にします。
使用する場面
Ethereumのデータを照会したり、スマートコントラクトをデプロイしたり、トランザクションを処理したりするPythonアプリケーションを構築する際に、このスキルを使用してください。dApp、ブロックチェーン分析、Ethereumノードとやり取りする自動化スクリプトに適しています。
主な機能
- HTTP、WebSocket、IPCプロバイダーを介してEthereumノードに接続します。
- アカウントを管理し、トランザクションに署名し、ガスを見積もります。
- ABI定義を使用してスマートコントラクトとやり取りします。
- 残高、ブロック、イベントなど、ブロックチェーンの状態を照会します。
- Binance Smart Chainなど、Ethereum互換チェーンをサポートします。
使用パターン
必ずweb3-pyをインポートし、プロバイダーを指定してWeb3インスタンスを初期化してください。機密性の高いキーには環境変数を使用します。たとえば、シェルでINFURA_API_KEYを設定します。パフォーマンスを高めるには、web3.asyncを使って非同期処理に対応できるようにコードを構成してください。本番環境では、呼び出しをtry-exceptブロックで囲み、信頼性の高いプロバイダーURLを使用してください。
一般的なコマンド/API
- アカウント残高を取得するには、
web3.eth.get_balance(address)を使用します。例:from web3 import Web3 w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/' + os.getenv('INFURA_API_KEY'))) balance = w3.eth.get_balance('0xYourAddress') - トランザクションを送信するには、
w3.eth.send_transaction(transaction)を使用します。例:tx = {'from': account.address, 'to': '0xRecipient', 'value': w3.to_wei(1, 'ether')} signed_tx = w3.eth.account.sign_transaction(tx, private_key=os.getenv('ETH_PRIVATE_KEY')) tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction) - スマートコントラクトの関数を呼び出すには、
contract.functions.myFunction().call()を使用します。例:contract = w3.eth.contract(address='0xContractAddress', abi=contract_abi) result = contract.functions.balanceOf('0xAddress').call() - ガスを見積もるには、
w3.eth.estimate_gas(transaction)を使用します。'from'、'to'、'data'キーを含む辞書を渡します。
統合に関する注意
pip install web3を使ってインストールし、web3-pyを統合します。Infuraの場合は、https://mainnet.infura.io/v3/$INFURA_API_KEYのようなURLでプロバイダーを設定します。キーには環境変数を使用します。たとえば、APIアクセスにはos.getenv('INFURA_API_KEY')を使用します。ローカルノードでは、IPCを使用します:Web3(Web3.IPCProvider('/path/to/geth.ipc'))。Ethereumのバージョンとの互換性を確認し、リプレイ攻撃を防ぐため、トランザクションにチェーンIDを指定してください。本番環境に移行する前に、Ganacheなどのサンドボックスで統合をテストしてください。
エラー処理
次のように、ConnectionErrorに対するtry-exceptを使って接続エラーを処理します:
try:
w3.eth.get_block('latest')
except web3.exceptions.ConnectionError:
print("Node unreachable; check provider URL and network status.")
トランザクションが失敗した場合は、残高不足やガス関連の問題に対するValueErrorを捕捉します:
try:
tx_hash = w3.eth.send_transaction(tx)
except ValueError as e:
if 'insufficient funds' in str(e):
raise Exception("Add funds to account before retrying.")
使用前に、w3.is_address(address)などでアドレスの入力を検証してください。デバッグに役立つよう、プロバイダーからのRPCエラーなど、エラーコードを含む詳細情報とともにエラーを記録してください。
具体的な使用例
- トークン残高の照会:Ethereumメインネット上のアドレスのERC-20残高を取得するには、InfuraでWeb3を初期化し、トークンコントラクトを読み込んで、balanceOf関数を呼び出します。スクリプトでの使用例:
INFURA_API_KEY環境変数を設定してから、「一般的なコマンド/API」にあるコントラクト呼び出しのコードスニペットを実行します。 - シンプルなスマートコントラクトのデプロイ:SolidityコントラクトをABIとバイトコードにコンパイルし、
w3.eth.contractを使ってデプロイします。例:コード内でコントラクトのインスタンスを作成し、send_transactionの例に示すようにガス上限を処理しながら、バイトコードを含むトランザクションを送信します。
グラフの関係
- クラスターとの関連:blockchain(他のブロックチェーンツールと機能を共有します)。
- タグとの関連:web3(APIとの直接的なやり取り)、python(Pythonベースの実装)、ethereum(Ethereumエコシステムに特化)。
- 関連リンク:smart-contracts(コントラクト処理機能を介した関連。埋め込みヒントに記載)。