Skip to content

Commit

Permalink
Fixed RngWitnet#isRequestFailed so that checks the specific request id
Browse files Browse the repository at this point in the history
  • Loading branch information
asselstine committed May 10, 2024
1 parent cc0a04b commit ba33ff0
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 5 deletions.
3 changes: 2 additions & 1 deletion src/RngWitnet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ contract RngWitnet is IRng {
/// @param _requestId The ID of the request to check
/// @return True if the Witnet request failed, false otherwise
function isRequestFailed(uint32 _requestId) onlyValidRequest(_requestId) public view returns (bool) {
return witnetRandomness.getRandomizeStatus(requests[_requestId]) == WitnetV2.ResponseStatus.Error;
(uint256 witnetQueryId,,) = witnetRandomness.getRandomizeData(requests[_requestId]);
return witnetRandomness.witnet().getQueryResponseStatus(witnetQueryId) == WitnetV2.ResponseStatus.Error;
}

/// @notice Gets the random number produced by the 3rd-party service
Expand Down
14 changes: 10 additions & 4 deletions test/RngWitnet.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,21 @@ import "forge-std/Test.sol";
import "forge-std/console2.sol";

import { DrawManager } from "pt-v5-draw-manager/DrawManager.sol";
import { IWitnetRandomness } from "witnet/interfaces/IWitnetRandomness.sol";
import { IWitnetRandomness, WitnetOracle, WitnetV2 } from "witnet/interfaces/IWitnetRandomness.sol";
import { RngWitnet } from "../src/RngWitnet.sol";

contract RngWitnetTest is Test {

IWitnetRandomness witnetRandomness;
WitnetOracle witnet;
RngWitnet rngWitnet;

function setUp() public {
witnet = WitnetOracle(makeAddr("WitnetOracle"));
vm.etch(address(witnet), "witnet" );
witnetRandomness = IWitnetRandomness(makeAddr("WitnetRandomness"));
vm.etch(address(witnetRandomness), "witnet" );
vm.etch(address(witnetRandomness), "witnetRandomness" );
vm.mockCall(address(witnetRandomness), 0, abi.encodeWithSelector(witnetRandomness.witnet.selector), abi.encode(address(witnet)));
rngWitnet = new RngWitnet(witnetRandomness);
vm.deal(address(this), 1000e18);
}
Expand Down Expand Up @@ -60,10 +64,12 @@ contract RngWitnetTest is Test {
function testIsRequestFailed() public {
(,uint256 lockBlock,) = requestRandomNumber();

vm.mockCall(address(witnetRandomness), abi.encodeWithSelector(witnetRandomness.getRandomizeStatus.selector, lockBlock), abi.encode(2));
vm.mockCall(address(witnetRandomness), abi.encodeWithSelector(witnetRandomness.getRandomizeData.selector, lockBlock), abi.encode(999, 0, 0));

vm.mockCall(address(witnet), abi.encodeWithSelector(witnet.getQueryResponseStatus.selector, 999), abi.encode(WitnetV2.ResponseStatus.Ready));
assertEq(rngWitnet.isRequestFailed(1), false);

vm.mockCall(address(witnetRandomness), abi.encodeWithSelector(witnetRandomness.getRandomizeStatus.selector, lockBlock), abi.encode(3));
vm.mockCall(address(witnet), abi.encodeWithSelector(witnet.getQueryResponseStatus.selector, 999), abi.encode(WitnetV2.ResponseStatus.Error));
assertEq(rngWitnet.isRequestFailed(1), true);
}

Expand Down

0 comments on commit ba33ff0

Please sign in to comment.