如何获取事件日志 Web3.py?

Posted

技术标签:

【中文标题】如何获取事件日志 Web3.py?【英文标题】:How to get event log Web3.py? 【发布时间】:2021-03-03 02:02:42 【问题描述】:

我正在使用solidity 0.7.4、web3.py 5.12.2 和python 3.7。

我正在使用 Windows 10。

我的目标是在solidity函数中发出一个事件,以便在函数执行后检索日志。

这是我的活动event logString(string arg);

这就是我发出事件emit logString("example string");的方式

在 Remix 上它可以工作,我可以在事务日志中检索我发出的字符串。

当我在 Python 上尝试时,它不起作用。

这是我的 Python 代码:

web3_instance = Web3(HTTPProvider("http://"+host+":"+port, request_kwargs='timeout': timeout))
Platform_contract= web3_instance.eth.contract(address=contract_address, abi=abi, bytecode=bytecode)
coinbase= web3_instance.eth.coinbase
functions= Platform_contract.functions

tx_hash =functions.market_clearing(n_clearings, t_clearing_first,supplier_bids,uniform_pricing,discriminative_pricing).transact('from': coinbase)
tx_receipt = web3_instance.eth.getTransactionReceipt(tx_hash)

log_to_process = tx_receipt['logs'][0]
processed_log = Platform_contract.events.logString().processLog(log_to_process)
log = processed_log['args']['arg']

很遗憾,tx_receipt['logs'] 是空的,我得到了一个异常。

您知道如何检索事件日志吗?

【问题讨论】:

【参考方案1】:

我设法解决了这个问题。我不知道为什么,我必须在 truffle config.js 中准确指定 network_id。然后我再次迁移合约并在该特定 network_id 上运行 ganache-cli。

【讨论】:

以上是关于如何获取事件日志 Web3.py?的主要内容,如果未能解决你的问题,请参考以下文章

如何订阅“日志事件”并在 ThunderCore 上获取通知?

bsc 通过钱包地址获取交易 Web3.py

在事件日志中获取特定任务的开始结束时间

如何访问 Docker 容器的 Windows 事件日志

在 postgres 中,如何从事件日志类型表(具有时间戳)中获取特定时间范围内字段的总和(或汇总)

使用 web3.py 和 infura.io 监听 Uniswap 合约事件