Ether.js websocket 特定地址的待处理交易

问题描述 投票:0回答:1

我在我的项目中使用 ether.js,并通过 Infura 建立了 Websocket 连接。我找不到直接监听特定地址交易的简单方法。作为解决方法,我在挂起的挂钩中合并了一个过滤器。这种方法在一定程度上发挥了作用,但性能并不是最优的,而且只是暂时的。由于每笔交易都是在钩子内请求的,因此每天的请求限制很快就会被突破。

如果有人了解如何正确配置 Websocket 连接以侦听特定地址的待处理交易,我将非常感谢您的帮助!

const wsProvider = new InfuraWebSocketProvider('sepolia', API_KEY);

export const initTransactionsListener = (address: string): WebSocketListener => {
    wsProvider.on('pending', async (tx: string) => {
        const transaction = await wsProvider.getTransaction(tx);

        if ([null, undefined].includes(transaction)) {
            return;
        }

        const { from, to } = transaction;

        if (![from, to].includes(address)) {
            return;
        }

        console.log('Transaction', transaction)
    });
    
    return {
        destroy: async () => await wsProvider.destroy()
    };
};
ethereum web3js ethers.js
1个回答
0
投票

下面的代码将解决您的问题。修改以适合您的使用

       provider.on("pending", (txHash) => {
              
              const address = "address you want to listen for trx";

            provider.getTransaction(txHash).then(function (transaction) {
                //console.log(transaction?.from);

                const from = transaction?.from;
                const to = transaction?.to;
                const value =transaction?.value;

                if (from === address) {
                    process.stdout.write(`[${(new Date).toLocaleTimeString()}] Outgoing transfer: ${value} ETH to ${to} \r`);
                    //console.log(`Outgoing transfer: ${value} ETH to ${to}`);
                } else if (to === address) {
                    //console.log(`Incoming transfer: ${value} ETH from ${from}`);
                    process.stdout.write(`[${(new Date).toLocaleTimeString()}] Incoming transfer: ${value} ETH to ${from} \r`);
                }else {
                console.log('Unknown transfer'); 
}
            
                console.log(`[${(new Date).toLocaleTimeString()}]  => Monitoring address: ${address}`);

              });
        });
© www.soinside.com 2019 - 2024. All rights reserved.