____tz_zs
如何使用 Web3.py 解码交易日志
ContractEvent 提供了与合约事件交互的方法。提供给合约事件子类的位置和关键字参数将用于通过签名查找合约事件。
processReceipt(tx_receipt, errors=WARN)
myContract = web3.eth.contract(address=contract_address, abi=contract_abi)
tx_hash = myContract.functions.myFunction().transact()
receipt = web3.eth.getTransactionReceipt(tx_hash)
logs = myContract.events.myEvent().processReceipt(receipt)
参数 errors 为可选参数,表示如果有错误,日志将根据传入的标志进行不同的处理:
- WARN(默认) - 向控制台记录有错误日志的警告,并丢弃日志。返回任何可以处理的日志。
- STRICT - 停止所有处理并引发遇到的错误。
- IGNORE - 返回任何引发错误的原始日志,并添加“错误”字段,以及能够处理的任何其他日志。
- DISCARD - 静默丢弃任何有错误的日志,并返回没有错误的已处理日志。
processLog() 类似于processReceipt,但一次只处理一个日志,而不是整个交易收据。
>>> tx_hash = contract.functions.myFunction(12345).transact({'to':contract_address})
>>> tx_receipt = w3.eth.get_transaction_receipt(tx_hash)
>>> log_to_process = tx_receipt['logs'][0]
>>> processed_log = contract.events.myEvent().processLog(log_to_process)
事件日志对象 事件日志对象是一个具有以下键的 Python 字典:
- args: Dictionary - 来自事件的参数。
- event: String - 事件名称。
- logIndex:Number - 块中日志索引位置的整数。
- transactionIndex:Number - 创建的交易索引位置日志的整数。
- transactionHash: String, 32 Bytes - 创建此日志的事务的哈希值。
- address: String, 32 Bytes - 此日志的来源地址。
- blockHash: String, 32 Bytes - 此日志所在块的哈希值。当它挂起时为 null。
- blockNumber:Number - 此日志所在的块号。当它挂起时为 null
参考:
How do I decode the transaction’s log with Web3.py? Web3.py —— ContractEvents
|