Получение событий из квитанции о транзакции в хардхате

#javascript #solidity #ethers.js #hardhat

Вопрос:

У меня есть ethers контракт, с которым я заключил сделку:

 const randomSVG = new ethers.Contract(RandomSVG.address, RandomSVGContract.interface, signer)
let tx = await randomSVG.create()
 

У меня есть событие с этой транзакцией:

 function create() public returns (bytes32 requestId) {
        requestId = requestRandomness(keyHash, fee);
        emit requestedRandomSVG(requestId);
    }
 

Однако я не вижу журналов в квитанции о транзакции.](https://docs.ethers.io/v5/api/providers/types/#providers-TransactionReceipt)

 // This returns undefined
console.log(tx.logs)
 

Ответ №1:

Когда вы создаете транзакцию с Ethers.js, вы получаете ответ на транзакцию, который еще не может быть включен в блокчейн. Поэтому он не знает, какие журналы будут выдаваться.

Вместо этого вы хотите подождать, пока транзакция не будет подтверждена, и вы получите ответ на транзакцию. В этот момент транзакция была включена в блок, и вы можете видеть, какие события были отправлены.

 const randomSVG = new ethers.Contract(RandomSVG.address, RandomSVGContract.interface, signer)
const tx = await randomSVG.create()
// Wait until the tx has been confirmed (default is 1 confirmation)
const receipt = await tx.wait()
// Receipt should now contain the logs
console.log(receipt.logs)