方式一、
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'})
看了一些资料,尝试了这种方式但是没有报错也没有监听到任何数据产生。希望大家能给点意见,感谢!