getRecordedLogs
Signature
Section titled “Signature”struct Log { bytes32[] topics; bytes data; address emitter;}
function getRecordedLogs() external returns (Log[] memory);Description
Section titled “Description”Gets the emitted events recorded by recordLogs.
This function will consume the recorded logs when called.
Examples
Section titled “Examples”/// event LogTopic1(/// uint256 indexed topic1,/// bytes data/// );
/// event LogTopic12(/// uint256 indexed topic1,/// uint256 indexed topic2,/// bytes data/// );
/// bytes memory testData0 = "Some data";/// bytes memory testData1 = "Other data";
// Start the recordervm.recordLogs();
emit LogTopic1(10, testData0);emit LogTopic12(20, 30, testData1);
// Notice that your entries are <Interface>.Log[]// as opposed to <instance>.Log[]Vm.Log[] memory entries = vm.getRecordedLogs();
assertEq(entries.length, 2);
// Recall that topics[0] is the event signatureassertEq(entries[0].topics.length, 2);assertEq(entries[0].topics[0], keccak256("LogTopic1(uint256,bytes)"));assertEq(entries[0].topics[1], bytes32(uint256(10)));// assertEq won't compare bytes variables. Try with strings instead.assertEq(abi.decode(entries[0].data, (string)), string(testData0));
assertEq(entries[1].topics.length, 3);assertEq(entries[1].topics[0], keccak256("LogTopic12(uint256,uint256,bytes)"));assertEq(entries[1].topics[1], bytes32(uint256(20)));assertEq(entries[1].topics[2], bytes32(uint256(30)));assertEq(abi.decode(entries[1].data, (string)), string(testData1));
// Emit another eventemit LogTopic1(40, testData0);
// Your last read consumed the recorded logs,// you will only get the latest emitted even after that callentries = vm.getRecordedLogs();
assertEq(entries.length, 1);
assertEq(entries[0].topics.length, 2);assertEq(entries[0].topics[0], keccak256("LogTopic1(uint256,bytes)"));assertEq(entries[0].topics[1], bytes32(uint256(40)));assertEq(abi.decode(entries[0].data, (string)), string(testData0));