我想制作一个“机器人”来监听特定合约的详细交易并过滤详细信息。之后,我将条件指令放在这些细节上,然后选择一些动作。
在以太坊侧链上使用 python 中的 web3。
我测试了 web3.eth.get_transaction(hash),但我想要交易前的哈希
是否可以在交易前获取哈希?也许是待处理的交易。或者一个“等待”交易并直接获取哈希的函数
我可以看到几种方法来获取发送到特定合约的交易的详细信息,而无需首先知道它的哈希值。
如果您的合约产生了日志事件,您可以通过以下方式获取它们。来自文档:
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)
直接获取该区块中所有交易的列表及其详细信息。 并再次过滤它们以将那些发送到您的合约。