Skip to content

Commit 6e06df1

Browse files
committed
fix the test
1 parent 3a42a0e commit 6e06df1

File tree

1 file changed

+38
-40
lines changed

1 file changed

+38
-40
lines changed

target_chains/ethereum/contracts/forge-test/Entropy.t.sol

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)