Acabo de empezar a aprender ethers , aquí está mi código:
(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); }); })(); entonces el contrato es opensea principal de mar abierto - enlace Me gustaría escuchar transacciones/eventos de ventas. Como veo en el contrato, el nombre de ese evento es probablemente Atomic Match_ o atomicMatch_ en ABI. Para ABI, solo copié el contrato completo pegado en el sitio web https://remix.ethereum.org/ y copié el código abi. El problema es que estoy recibiendo este error ahora:
Error: no matching event (argument="name", value="atomicMatch_", code=INVALID_ARGUMENT, version=abi/5.5.0)
¿Que esta mal aquí? Intenté con ambos nombres de eventos, pero recibo el mismo error una y otra vez...
@edit aquí es sandbox para ello, lo que es extraño cuando cambio el nombre del evento a OrdersMatched por ejemplo, funciona totalmente bien...
Ethers contract.on() ( docs ) se invoca cuando se emite un evento con el nombre especificado.
Su fragmento pasa un nombre de función ( atomicMatch_ ), no un nombre de evento.
La función atomicMatch_ emite efectivamente el evento denominado OrdersMatched . Es por eso que cambiar el controlador a contract.on('OrdersMatched') soluciona el problema.
Además, la zona de pruebas utiliza un proveedor integrado en getDefaultProvider() , que se comunica con la aplicación a través de WSS. Su fragmento está utilizando un proveedor HTTPS que, por diseño, no puede escuchar eventos. También deberá usar un proveedor de WSS (son compatibles con Infura).