@@ -1830,25 +1830,21 @@ contract EntropyTest is Test, EntropyTestUtils, EntropyEvents, EntropyEventsV2 {
18301830 assertEq (entries[1 ].topics[2 ], bytes32 (uint256 (uint160 (address (consumer)))));
18311831 assertEq (entries[1 ].topics[3 ], bytes32 (uint256 (sequenceNumber)));
18321832
1833- // Verify the data field contains the expected values
1834- // The data field contains the non-indexed parameters in order:
1835- // randomNumber, callbackFailed, callbackErrorCode, callbackGasUsed, dummy
1836- bytes32 expectedRandomNumber = random.combineRandomValues (
1833+ // Verify the data field contains the expected values (per event ABI)
1834+ (bytes32 randomNumber , bool callbackFailed , bytes memory callbackErrorCode , uint32 callbackGasUsed , bytes memory _dummy ) =
1835+ abi.decode (entries[1 ].data, (bytes32 , bool , bytes , uint32 , bytes ));
1836+
1837+ assertEq (randomNumber, random.combineRandomValues (
18371838 userRandomNumber,
18381839 provider1Proofs[sequenceNumber],
18391840 0
1840- );
1841-
1842- // Decode the data field
1843- (bytes32 randomNumber , bool callbackFailed , bytes memory callbackErrorCode , uint32 callbackGasUsed , bytes memory dummy ) =
1844- abi.decode (entries[1 ].data, (bytes32 , bool , bytes , uint32 , bytes ));
1845-
1846- // Verify each field matches the expected values
1847- assertEq (randomNumber, expectedRandomNumber);
1841+ ));
18481842 assertEq (callbackFailed, true );
18491843 assertEq (callbackErrorCode, bytes ("" ));
1850- // assertEq(callbackGasUsed, 0);
1851- assertEq (dummy, bytes ("" ));
1844+
1845+ // callback gas usage is approximate and only triggered when the provider has set a gas limit
1846+ assertTrue (random.getProviderInfoV2 (provider1).defaultGasLimit == 0 || ((callbackGasUsage * 98 ) / 100 < callbackGasUsed));
1847+ assertTrue (random.getProviderInfoV2 (provider1).defaultGasLimit == 0 || (callbackGasUsed < (callbackGasUsage * 102 ) / 100 ));
18521848
18531849 // Verify request is still active after failure
18541850 EntropyStructsV2.Request memory reqAfterFailure = random
@@ -1859,39 +1855,41 @@ contract EntropyTest is Test, EntropyTestUtils, EntropyEvents, EntropyEventsV2 {
18591855 EntropyStatusConstants.CALLBACK_FAILED
18601856 );
18611857 } else {
1862- vm.expectEmit (false , false , false , true , address (random));
1863- emit RevealedWithCallback (
1864- EntropyStructConverter.toV1Request (req),
1865- userRandomNumber,
1866- provider1Proofs[sequenceNumber],
1867- random.combineRandomValues (
1868- userRandomNumber,
1869- provider1Proofs[sequenceNumber],
1870- 0
1871- )
1872- );
1873- vm.expectEmit (true , true , true , false , address (random));
1874- emit EntropyEventsV2.Revealed (
1875- provider1,
1876- req.requester,
1877- req.sequenceNumber,
1878- random.combineRandomValues (
1879- userRandomNumber,
1880- provider1Proofs[sequenceNumber],
1881- 0
1882- ),
1883- false ,
1884- bytes ("" ),
1885- 0 ,
1886- bytes ("" )
1887- );
1858+ vm.recordLogs ();
18881859 random.revealWithCallback (
18891860 provider1,
18901861 sequenceNumber,
18911862 userRandomNumber,
18921863 provider1Proofs[sequenceNumber]
18931864 );
18941865
1866+ Vm.Log[] memory entries = vm.getRecordedLogs ();
1867+
1868+ assertEq (entries.length , 2 );
1869+ assertEq (entries[1 ].topics[0 ], keccak256 ("Revealed(address,address,uint64,bytes32,bool,bytes,uint32,bytes) " ));
1870+
1871+ // Verify the topics match the expected values
1872+ assertEq (entries[1 ].topics[1 ], bytes32 (uint256 (uint160 (provider1))));
1873+ assertEq (entries[1 ].topics[2 ], bytes32 (uint256 (uint160 (req.requester))));
1874+ assertEq (entries[1 ].topics[3 ], bytes32 (uint256 (req.sequenceNumber)));
1875+
1876+ // Verify the data field contains the expected values (per event ABI)
1877+ (bytes32 randomNumber , bool callbackFailed , bytes memory callbackErrorCode , uint32 callbackGasUsed , bytes memory _dummy ) =
1878+ abi.decode (entries[1 ].data, (bytes32 , bool , bytes , uint32 , bytes ));
1879+
1880+ assertEq (randomNumber, random.combineRandomValues (
1881+ userRandomNumber,
1882+ provider1Proofs[sequenceNumber],
1883+ 0
1884+ ));
1885+ assertEq (callbackFailed, false );
1886+ assertEq (callbackErrorCode, bytes ("" ));
1887+ console.log (callbackGasUsage);
1888+ console.log (callbackGasUsed);
1889+ // callback gas usage is approximate and only triggered when the provider has set a gas limit
1890+ assertTrue (random.getProviderInfoV2 (provider1).defaultGasLimit == 0 || ((callbackGasUsage * 90 ) / 100 < callbackGasUsed));
1891+ assertTrue (random.getProviderInfoV2 (provider1).defaultGasLimit == 0 || (callbackGasUsed < (callbackGasUsage * 110 ) / 100 ));
1892+
18951893 // Verify request is cleared after successful callback
18961894 EntropyStructsV2.Request memory reqAfterSuccess = random
18971895 .getRequestV2 (provider1, sequenceNumber);
0 commit comments