I'm having a problem with contract events being not reliable as in they are mostly not emitted but sometimes are emitted.
Events from a smart contract (Gnosis Safe contract, SignMsg but true for other events as well) events usually are not being emitted through ethers on optimism even though I can see they are actually emitted from the contract on etherscan. I'm using Alchemy as the RPC provider and it seems there are no outages or rate limiting on there as well.
In the below code, you can see how i wait for the events.
This only happens on Optimism. Goerli works perfectly fine.
I'm curious why this piece of code fails to receive the events sometimes. Any clue or suggestion is appreciated 🙏🙏🙏
Thanks in advance.
const waitSmartContractSignature = async (signer: Signer, hash: string) => {
const walletContract = new Contract(await signer.getAddress(), EIP1271.abi, signer)
const internalHash = await walletContract.getMessageHash(hash)
const eventFilter = walletContract.filters.SignMsg(internalHash)
return await resolveOnContractEvent(walletContract, eventFilter)
}
const resolveOnContractEvent = (contract: Contract, eventFilter: EventFilter) =>
new Promise<void>((resolve, reject) => contract.once(eventFilter, resolve).once('error', reject))