以太合约方法 "No mathing event" 错误

Ethers contract on method "No mathing event" error

我刚开始学习ethers,这是我的代码:

(async () => {
  const connection = new ethers.providers.JsonRpcProvider(
    "https://mainnet.infura.io/v3/key"
  );

  const contract = new ethers.Contract(
    "0x7be8076f4ea4a4ad08075c2508e481d6c946d12b",
    abi,
    connection
  );

  contract.on("atomicMatch_", (...args) => {
    console.log(args);
  });
})();

所以合约是opensea主合约-link 我想听 sales transactions/events。正如我在该事件的合同名称中看到的那样,在 ABI 中可能是 Atomic Match_atomicMatch_。 对于 ABI,我只是将整个合同复制粘贴到 https://remix.ethereum.org/ 网站并复制了 abi 代码。问题是我现在收到这个错误:

Error: no matching event (argument="name", value="atomicMatch_", code=INVALID_ARGUMENT, version=abi/5.5.0)

这里有什么问题?我尝试了两个事件名称,但我一遍又一遍地得到同样的错误...

@edit 这里是sandbox, 当我将事件名称更改为 OrdersMatched 时有什么奇怪的,例如它工作得很好...

Ethers contract.on() (docs) 在发出具有指定名称的事件时调用。

您的代码段传递的是函数名称 (atomicMatch_),而不是事件名称。

atomicMatch_ 函数有效地发出名为 OrdersMatched 的事件。这就是为什么将处理程序更改为 contract.on('OrdersMatched') 可以解决问题。


此外,沙箱使用 getDefaultProvider() 下的内置提供程序,它通过 WSS 与应用程序通信。您的代码段使用的 HTTPS 提供程序在设计上无法侦听事件。您还需要使用 WSS 提供程序(Infura 支持它们)。