我最近试图为我的 dex 限价订单监控 BSC 链上合约地址的交易,我终于找到了一个稳定的解决方案来监控日志事件——“使用 web sockect 连接”。
bsc = "wss://ws-nd-112-055-480.p2pify.com/xxxxxxxxxxxxxxxxxxx"
web3 = Web3(Web3.WebsocketProvider(bsc))
poolAdd = '0x0eD7e52944161450477ee417DE9Cd3a859b14fD0'
block_filter = web3.eth.filter({'fromBlock': 'latest', 'address': poolAdd, 'topics': [sha128Dic['swap']]})
while 1:
log_new(block_filter)
time.sleep(1)
但是,我尝试在下面的列表中更改一些 websokect 端点提供程序,交换事件日志仍有一些巨大的时间延迟。其中一些发生在近一个小时前。
wss://bsc-ws-node.nariox.org:443
莫拉利斯:https ://moralis.io/speedy-nodes/
ANKR:https ://app.ankr.com/api
链栈: https ://chainstack.com/build-better-with-binance-smart-chain/
当我切换回 http 提供程序时,例如:Web3.HTTPProvider('https://bsc-dataseed.binance.org/')。事件日志几乎是及时的,但一些“过滤器未找到异常将在时间流逝期间发现”。
这是写在 BSC websocket 介绍上的注释:'您可以发出 eth_getLogs 请求,最大块范围为 5K。如果您需要频繁拉取日志,我们建议您使用 WebSockets 在可用时将新日志推送给您。
任何人都可以帮助找到更好的方法来获得及时的 websocket 端点吗?