mcpField
W
web3-py

web3-py

github.com/alphaonedev開発46 回インストール
リポジトリ

web3-py について

web3-pyは、Ethereumと連携するPythonアプリやスクリプト向けのライブラリです。ノード接続、チェーンデータの照会、コントラクト呼び出し、アカウント管理、トランザクション処理に対応します。

主な機能

  1. 01HTTP、WebSocket、IPCで接続
  2. 02残高、ブロック、イベントの照会
  3. 03ABIを使ったコントラクト操作
  4. 04アカウント管理とトランザクション署名
  5. 05トランザクションのガス見積もり

活用シーン

  1. 01Ethereumアカウント残高の取得
  2. 02スマートコントラクト関数の呼び出し
  3. 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エラーなど、エラーコードを含む詳細情報とともにエラーを記録してください。

具体的な使用例

  1. トークン残高の照会:Ethereumメインネット上のアドレスのERC-20残高を取得するには、InfuraでWeb3を初期化し、トークンコントラクトを読み込んで、balanceOf関数を呼び出します。スクリプトでの使用例:INFURA_API_KEY環境変数を設定してから、「一般的なコマンド/API」にあるコントラクト呼び出しのコードスニペットを実行します。
  2. シンプルなスマートコントラクトのデプロイ:SolidityコントラクトをABIとバイトコードにコンパイルし、w3.eth.contractを使ってデプロイします。例:コード内でコントラクトのインスタンスを作成し、send_transactionの例に示すようにガス上限を処理しながら、バイトコードを含むトランザクションを送信します。

グラフの関係

  • クラスターとの関連:blockchain(他のブロックチェーンツールと機能を共有します)。
  • タグとの関連:web3(APIとの直接的なやり取り)、python(Pythonベースの実装)、ethereum(Ethereumエコシステムに特化)。
  • 関連リンク:smart-contracts(コントラクト処理機能を介した関連。埋め込みヒントに記載)。

コメント