Skip to content

Commit 31efb24

Browse files
feat(RNG): custom errors
1 parent 277457c commit 31efb24

File tree

6 files changed

+31
-16
lines changed

6 files changed

+31
-16
lines changed

contracts/src/rng/BlockhashRNG.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ contract BlockHashRNG is IRNG {
2626
// ************************************* //
2727

2828
modifier onlyByGovernor() {
29-
require(governor == msg.sender, "Governor only");
29+
if (governor != msg.sender) revert GovernorOnly();
3030
_;
3131
}
3232

3333
modifier onlyByConsumer() {
34-
require(consumer == msg.sender, "Consumer only");
34+
if (consumer != msg.sender) revert ConsumerOnly();
3535
_;
3636
}
3737

contracts/src/rng/ChainlinkRNG.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ contract ChainlinkRNG is IRNG, VRFConsumerBaseV2Plus {
4242
// ************************************* //
4343

4444
modifier onlyByGovernor() {
45-
require(governor == msg.sender, "Governor only");
45+
if (governor != msg.sender) revert GovernorOnly();
4646
_;
4747
}
4848

4949
modifier onlyByConsumer() {
50-
require(consumer == msg.sender, "Consumer only");
50+
if (consumer != msg.sender) revert ConsumerOnly();
5151
_;
5252
}
5353

contracts/src/rng/IRNG.sol

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,7 @@ interface IRNG {
1010
/// @dev Receive the random number.
1111
/// @return randomNumber Random number or 0 if not available
1212
function receiveRandomness() external returns (uint256 randomNumber);
13+
14+
error GovernorOnly();
15+
error ConsumerOnly();
1316
}

contracts/src/rng/RNGWithFallback.sol

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ contract RNGWithFallback is IRNG {
3232
/// @param _fallbackTimeoutSeconds Time in seconds to wait before falling back to next RNG
3333
/// @param _rng The RNG address (e.g. Chainlink)
3434
constructor(address _governor, address _consumer, uint256 _fallbackTimeoutSeconds, IRNG _rng) {
35-
require(address(_rng) != address(0), "Invalid default RNG");
35+
if (address(_rng) == address(0)) revert InvalidDefaultRNG();
3636

3737
governor = _governor;
3838
consumer = _consumer;
@@ -45,12 +45,12 @@ contract RNGWithFallback is IRNG {
4545
// ************************************* //
4646

4747
modifier onlyByGovernor() {
48-
require(msg.sender == governor, "Governor only");
48+
if (governor != msg.sender) revert GovernorOnly();
4949
_;
5050
}
5151

5252
modifier onlyByConsumer() {
53-
require(msg.sender == consumer, "Consumer only");
53+
if (consumer != msg.sender) revert ConsumerOnly();
5454
_;
5555
}
5656

@@ -100,4 +100,10 @@ contract RNGWithFallback is IRNG {
100100
}
101101
return randomNumber;
102102
}
103+
104+
// ************************************* //
105+
// * Errors * //
106+
// ************************************* //
107+
108+
error InvalidDefaultRNG();
103109
}

contracts/src/rng/RandomizerRNG.sol

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ contract RandomizerRNG is IRNG {
3737
// ************************************* //
3838

3939
modifier onlyByGovernor() {
40-
require(governor == msg.sender, "Governor only");
40+
if (governor != msg.sender) revert GovernorOnly();
4141
_;
4242
}
4343

4444
modifier onlyByConsumer() {
45-
require(consumer == msg.sender, "Consumer only");
45+
if (consumer != msg.sender) revert ConsumerOnly();
4646
_;
4747
}
4848

@@ -110,7 +110,7 @@ contract RandomizerRNG is IRNG {
110110
/// @param _id The ID of the request.
111111
/// @param _value The random value answering the request.
112112
function randomizerCallback(uint256 _id, bytes32 _value) external {
113-
require(msg.sender == address(randomizer), "Randomizer only");
113+
if (msg.sender != address(randomizer)) revert RandomizerOnly();
114114
randomNumbers[_id] = uint256(_value);
115115
emit RequestFulfilled(_id, uint256(_value));
116116
}
@@ -124,4 +124,10 @@ contract RandomizerRNG is IRNG {
124124
function receiveRandomness() external view override returns (uint256 randomNumber) {
125125
randomNumber = randomNumbers[lastRequestId];
126126
}
127+
128+
// ************************************* //
129+
// * Errors * //
130+
// ************************************* //
131+
132+
error RandomizerOnly();
127133
}

contracts/test/foundry/KlerosCore.t.sol

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {ISortitionModule} from "../../src/arbitration/interfaces/ISortitionModul
1212
import {SortitionModuleMock, SortitionModuleBase} from "../../src/test/SortitionModuleMock.sol";
1313
import {UUPSProxy} from "../../src/proxy/UUPSProxy.sol";
1414
import {BlockHashRNG} from "../../src/rng/BlockHashRNG.sol";
15-
import {RNGWithFallback} from "../../src/rng/RNGWithFallback.sol";
15+
import {RNGWithFallback, IRNG} from "../../src/rng/RNGWithFallback.sol";
1616
import {RNGMock} from "../../src/test/RNGMock.sol";
1717
import {PNK} from "../../src/token/PNK.sol";
1818
import {TestERC20} from "../../src/token/TestERC20.sol";
@@ -3067,15 +3067,15 @@ contract KlerosCoreTest is Test {
30673067
RNGMock rngMock = new RNGMock();
30683068
rngFallback = new RNGWithFallback(msg.sender, address(sortitionModule), fallbackTimeout, rngMock);
30693069

3070-
vm.expectRevert(bytes("Consumer only"));
3070+
vm.expectRevert(IRNG.ConsumerOnly.selector);
30713071
vm.prank(governor);
30723072
rngFallback.requestRandomness();
30733073

3074-
vm.expectRevert(bytes("Consumer only"));
3074+
vm.expectRevert(IRNG.ConsumerOnly.selector);
30753075
vm.prank(governor);
30763076
rngFallback.receiveRandomness();
30773077

3078-
vm.expectRevert(bytes("Governor only"));
3078+
vm.expectRevert(IRNG.GovernorOnly.selector);
30793079
vm.prank(other);
30803080
rngFallback.changeGovernor(other);
30813081
vm.prank(governor);
@@ -3086,14 +3086,14 @@ contract KlerosCoreTest is Test {
30863086
vm.prank(other);
30873087
rngFallback.changeGovernor(governor);
30883088

3089-
vm.expectRevert(bytes("Governor only"));
3089+
vm.expectRevert(IRNG.GovernorOnly.selector);
30903090
vm.prank(other);
30913091
rngFallback.changeConsumer(other);
30923092
vm.prank(governor);
30933093
rngFallback.changeConsumer(other);
30943094
assertEq(rngFallback.consumer(), other, "Wrong consumer");
30953095

3096-
vm.expectRevert(bytes("Governor only"));
3096+
vm.expectRevert(IRNG.GovernorOnly.selector);
30973097
vm.prank(other);
30983098
rngFallback.changeFallbackTimeout(5);
30993099

0 commit comments

Comments
 (0)