我在Google上看了很多选项,除了如何订阅事件web3.eth.subscribe("newBlockHeaders"...之外,没有找到任何东西,或者根本不起作用。但我认为这个解决方案是最耗费资源和效率最低的。告诉我这是我唯一能实现的方法吗?有没有付费的解决方案?我的任务是跟踪钱包的余额并在更新时通知用户。通过更新余额,我的意思是当钱包中发生事件时:1.收到转账1.转账已发送
web3.eth.subscribe("newBlockHeaders"...
ie3xauqp1#
这是一个示例合约,它有两个发出“TransferReceived”和“TransferSent”的函数。
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; contract Sample { event TransferReceived(address sender, uint amount); event TransferSent(address sender, uint amount); function SendTransfer() public payable{ emit TransferSent(msg.sender, msg.value); } function ReceiveTransfer(uint amount) public { emit TransferReceived(msg.sender, amount); } }
这是一段Javascript代码,用于监听样本合约上的两个事件。
const contractAddress = process.env.CONTRACT_ADDRESS; const provider = new ethers.providers.WebSocketProvider(process.env.WEB_SOCKET); const contract = new ethers.Contract(contractAddress, abi, provider); export async function handleEvents() { contract.on("TransferReceived", async (sender, amount,event) => { //Do Something }) contract.on("TransferSent", async (sender, amount, event) => { //Do something }); }
您可以从Alchemy或Infura等节点提供者那里获得WebSocket URL。
1条答案
按热度按时间ie3xauqp1#
这是一个示例合约,它有两个发出“TransferReceived”和“TransferSent”的函数。
这是一段Javascript代码,用于监听样本合约上的两个事件。
您可以从Alchemy或Infura等节点提供者那里获得WebSocket URL。