监听交易的的几种方式快慢问题,有没有更好的方法查询内存池?

方式一、

event_filter = self.contract.events.PairCreated.createFilter(fromBlock='latest')

这种方式测了一下,获取到的数据比较全。好像是交易上链之后才监听到?这样的话算是没办法第一时间监听到,不知道我的理解是否正确。

方式二、

event_filter  = self.w3.eth.filter('pending')
for Filter_info in event_filter.get_new_entries():
    trans = self.w3.eth.get_transaction(getTrans)

方式二get_new_entries获取的数据只有tx值没有其他参数,理论上来说只要rpc没问题,应该是能在pending状态时第一时间获得数据,但是由于获得的信息比较少,只能通过w3.eth.get_transaction获得更详细的信息,但这也意味着由于多请求一次导致监听效果很差。 后续想尝试优化get_transaction的请求速度,看能不能有一个比较的好的监听效果。

方式三

? 未知,求分享。

最好的方式,希望能在交易处于pendding状态时获得详细的信息。当然指定合约地址监控最好。

pending_tx_filter = web3.eth.filter({'fromBlock': 'latest', 'toBlock': 'pending', 'address': 'xxxxxxxxxxxxxxxxxxx'})

看了一些资料,尝试了这种方式但是没有报错也没有监听到任何数据产生。希望大家能给点意见,感谢!

请先 登录 后评论

最佳答案 2022-11-01 15:06

可以订阅交易池的交易。

参考: https://learnblockchain.cn/article/4386

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 3 收藏,3008 浏览
  • 修仙哥 提出于 2022-10-16 00:02