MetaMask 中的 ethers.js v6 事件处理问题

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

将 ethers.js v6 与 MetaMask 结合使用时,我在 DApp 中遇到事件处理问题。情况是这样的:

  • 我已使用 Hardhat 在孟买测试网上成功部署了我的合约。
  • 我正在使用 ethers.js v6 连接到 MetaMask (window.ethereum)。
  • 使用
    contract.on("EventName", callback)
    订阅时,不会收到合约发出的事件。
  • 有趣的是,当我在同一网络上切换到像 Alchemy 这样的 RPC 提供商时,接收事件没有任何问题。
  • 我还通过监听 DAI 令牌 Transfer 事件测试了我的代码(如下),它可以与 Web3Provider 和 MetaMask 配合使用。

我怀疑可能存在兼容性问题或配置步骤,或者我不知道接收特定于 MetaMask 的事件导致此差异的原因。这是我正在使用的代码的简化版本:

const { ethers } = require("ethers");

// Assuming MetaMask is installed and injected as window.ethereum
const provider = new ethers.providers.Web3Provider(window.ethereum);
const contractAddress = "YOUR_CONTRACT_ADDRESS";
const abi = [...]; // Your contract ABI definition
const contract = new ethers.Contract(contractAddress, abi, provider);

// Subscribe to contract events
contract.on("eventName", (data) => {
  console.log("Event received:", data);
});

还有其他人遇到过 ethers.js v6 和 MetaMask 的类似问题吗?任何有关如何排除和解决此问题的见解或建议或任何信息将不胜感激。预先感谢!

solidity metamask ethers.js
1个回答
0
投票

您可以尝试使用这样的 addListener 方法。

contract.addListener("eventName", (data) => {
  console.log("Event received:", data);
});

© www.soinside.com 2019 - 2024. All rights reserved.