如何在没有哈希的情况下从交易中检索数据?

问题描述 投票:0回答:1

我想制作一个“机器人”来监听特定合约的详细交易并过滤详细信息。之后,我将条件指令放在这些细节上,然后选择一些动作。

在以太坊侧链上使用 python 中的 web3。

我测试了 web3.eth.get_transaction(hash),但我想要交易前的哈希

是否可以在交易前获取哈希?也许是待处理的交易。或者一个“等待”交易并直接获取哈希的函数

python hash transactions web3py
1个回答
0
投票

我可以看到几种方法来获取发送到特定合约的交易的详细信息,而无需首先知道它的哈希值。

日志过滤器:

如果您的合约产生了日志事件,您可以通过以下方式获取它们。来自文档

new_event_filter = w3.eth.filter({'fromBlock': 'latest','address': "your contract address"})
new_event_filter.get_new_entries()

你会想在最后一行循环,每次都获取一个事件详细信息列表,包括生成它的交易的哈希值,然后调用

eth.get_transaction()
.

待处理交易:

如果您有权访问节点的内存池,您确实可以使用过滤器监听新的待处理交易。来自文档

new_transaction_filter = w3.eth.filter('pending')
new_transaction_filter.get_new_entries()

你会想在最后一行循环,每次都得到一个你可以用来调用

eth.get_transaction()
的交易哈希列表。 你可能想捕捉
TransactionNotFound
未找到的异常。 然后您可以在
to
字段上进行过滤,以仅获取发送到所需合约的交易。

已确认的交易/区块:

另一种获取交易的方法是对它进行哈希处理,以与上述类似的方式过滤新块,但“最新”的 i/o 待处理。来自文档

new_block_filter = w3.eth.filter('latest')
new_block_filter.get_new_entries()

您将获得最新的区块哈希列表,并可以请求区块获取其交易哈希列表。来自文档

web3.eth.get_block(block_identifier)

其中

block_identifier
可以是块ID或哈希。

甚至更好:

web3.eth.get_block(block_identifier, full_transactions=True)

直接获取该区块中所有交易的列表及其详细信息。 并再次过滤它们以将那些发送到您的合约。

© www.soinside.com 2019 - 2024. All rights reserved.