WTFAcademy / WTF-Ethers

我最近在重新学ethers.js,巩固一下细节,也写一个“WTF Ethers.js极简入门”,供小白们使用,每周更新1-3讲。Now supports English! 官网: https://wtf.academy
https://wtf.academy
Other
3.03k stars 489 forks source link

19节mempool中,如有用ethers v6版本, 捕获 websocket异常是如何处理呢? #110

Open 256yangwei opened 10 months ago

256yangwei commented 10 months ago

console.log("\n1. 连接 wss RPC") // 准备 alchemy API 可以参考https://github.com/AmazingAng/WTFSolidity/blob/main/Topics/Tools/TOOL04_Alchemy/readme.md const ALCHEMY_MAINNET_WSSURL = 'wss://eth-mainnet.g.alchemy.com/v2/oKmOQKbneVkxgHZfibs-iFhIlIAl6HDN'; const provider = new ethers.providers.WebSocketProvider(ALCHEMY_MAINNET_WSSURL); let i =0 provider.on("pending", async (txHash) => { if (txHash && i < 100) { // 打印txHash console.log([${(new Date).toLocaleTimeString()}] 监听Pending交易 ${i}: ${txHash} \r); i++ } }); provider ._websocket.on("error", async () => { console.log(Unable to connect to ${ep.subdomain} retrying in 3s...); setTimeout(listen_address, 3000); }); provider ._websocket.on("close", async (code) => { console.log( Connection lost with code ${code}! Attempting reconnect in 3s... ); provider ._websocket.terminate(); setTimeout(listen_address, 3000); });

求问一下,在第19节 Mempool里,如果是在 ethers v5里,以上的 provider ._websocket.on("error", async () => {});代码是可以正常捕获错误,延时后继续推送交易的; 但是在ethers V6里provider 定义变了 const provider = new ethers.WebSocketProvider(ALCHEMY_MAINNET_WSSURL);然后这个捕获异常provider ._websocket.on("error", async () => {})就不能用了,请问V6里捕获websocket error是怎么用的呢?谢谢大佬,往不吝赐教!

cykk commented 3 months ago

可以参考V6的官方文档: https://docs.ethers.org/v6/search/?search=websocket

cykk commented 3 months ago

provider.websocket.onerror = async () => { console.log(``); };