Skip to content

Commit a0cb09d

Browse files
committed
feat: replace requires with custom errors for the gateways
1 parent 82f8b1c commit a0cb09d

File tree

2 files changed

+51
-27
lines changed

2 files changed

+51
-27
lines changed

contracts/src/gateway/ForeignGateway.sol

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,16 @@ contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {
4949
// ************************************* //
5050

5151
modifier onlyFromVea(address _messageSender) {
52-
require(
53-
veaOutbox == msg.sender ||
54-
(block.timestamp < deprecatedVeaOutboxExpiration && deprecatedVeaOutbox == msg.sender),
55-
"Access not allowed: Vea Outbox only."
56-
);
57-
require(_messageSender == homeGateway, "Access not allowed: HomeGateway only.");
52+
if (
53+
veaOutbox != msg.sender &&
54+
(block.timestamp >= deprecatedVeaOutboxExpiration || deprecatedVeaOutbox != msg.sender)
55+
) revert VeaOutboxOnly();
56+
if (_messageSender != homeGateway) revert HomeGatewayMessageSenderOnly();
5857
_;
5958
}
6059

6160
modifier onlyByGovernor() {
62-
require(governor == msg.sender, "Access not allowed: Governor only.");
61+
if (governor != msg.sender) revert GovernorOnly();
6362
_;
6463
}
6564

@@ -105,7 +104,7 @@ contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {
105104
/// @dev Changes the governor.
106105
/// @param _governor The address of the new governor.
107106
function changeGovernor(address _governor) external {
108-
require(governor == msg.sender, "Access not allowed: Governor only.");
107+
if (governor != msg.sender) revert GovernorOnly();
109108
governor = _governor;
110109
}
111110

@@ -122,7 +121,7 @@ contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {
122121
/// @dev Changes the home gateway.
123122
/// @param _homeGateway The address of the new home gateway.
124123
function changeHomeGateway(address _homeGateway) external {
125-
require(governor == msg.sender, "Access not allowed: Governor only.");
124+
if (governor != msg.sender) revert GovernorOnly();
126125
homeGateway = _homeGateway;
127126
}
128127

@@ -143,7 +142,7 @@ contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {
143142
uint256 _choices,
144143
bytes calldata _extraData
145144
) external payable override returns (uint256 disputeID) {
146-
require(msg.value >= arbitrationCost(_extraData), "Not paid enough for arbitration");
145+
if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();
147146

148147
disputeID = localDisputeID++;
149148
uint256 chainID;
@@ -206,8 +205,8 @@ contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {
206205
) external override onlyFromVea(_messageSender) {
207206
DisputeData storage dispute = disputeHashtoDisputeData[_disputeHash];
208207

209-
require(dispute.id != 0, "Dispute does not exist");
210-
require(!dispute.ruled, "Cannot rule twice");
208+
if (dispute.id == 0) revert DisputeDoesNotExist();
209+
if (dispute.ruled) revert CannotRuleTwice();
211210

212211
dispute.ruled = true;
213212
dispute.relayer = _relayer;
@@ -219,8 +218,8 @@ contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {
219218
/// @inheritdoc IForeignGateway
220219
function withdrawFees(bytes32 _disputeHash) external override {
221220
DisputeData storage dispute = disputeHashtoDisputeData[_disputeHash];
222-
require(dispute.id != 0, "Dispute does not exist");
223-
require(dispute.ruled, "Not ruled yet");
221+
if (dispute.id == 0) revert DisputeDoesNotExist();
222+
if (!dispute.ruled) revert NotRuledYet();
224223

225224
uint256 amount = dispute.paid;
226225
dispute.paid = 0;
@@ -247,9 +246,9 @@ contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {
247246
revert("Not supported");
248247
}
249248

250-
// ************************ //
251-
// * Internal * //
252-
// ************************ //
249+
// ************************************* //
250+
// * Internal * //
251+
// ************************************* //
253252

254253
function extraDataToCourtIDMinJurors(
255254
bytes memory _extraData
@@ -268,4 +267,16 @@ contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {
268267
minJurors = DEFAULT_NB_OF_JURORS;
269268
}
270269
}
270+
271+
// ************************************* //
272+
// * Errors * //
273+
// ************************************* //
274+
275+
error GovernorOnly();
276+
error HomeGatewayMessageSenderOnly();
277+
error VeaOutboxOnly();
278+
error ArbitrationFeesNotEnough();
279+
error DisputeDoesNotExist();
280+
error CannotRuleTwice();
281+
error NotRuledYet();
271282
}

contracts/src/gateway/HomeGateway.sol

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ contract HomeGateway is IHomeGateway, UUPSProxiable, Initializable {
4545

4646
/// @dev Requires that the sender is the governor.
4747
modifier onlyByGovernor() {
48-
require(governor == msg.sender, "No allowed: governor only");
48+
if (governor != msg.sender) revert GovernorOnly();
4949
_;
5050
}
5151

@@ -129,8 +129,8 @@ contract HomeGateway is IHomeGateway, UUPSProxiable, Initializable {
129129

130130
/// @inheritdoc IHomeGateway
131131
function relayCreateDispute(RelayCreateDisputeParams memory _params) external payable override {
132-
require(feeToken == NATIVE_CURRENCY, "Fees paid in ERC20 only");
133-
require(_params.foreignChainID == foreignChainID, "Foreign chain ID not supported");
132+
if (feeToken != NATIVE_CURRENCY) revert FeesPaidInNativeCurrencyOnly();
133+
if (_params.foreignChainID != foreignChainID) revert ForeignChainIDNotSupported();
134134

135135
bytes32 disputeHash = keccak256(
136136
abi.encodePacked(
@@ -144,7 +144,7 @@ contract HomeGateway is IHomeGateway, UUPSProxiable, Initializable {
144144
)
145145
);
146146
RelayedData storage relayedData = disputeHashtoRelayedData[disputeHash];
147-
require(relayedData.relayer == address(0), "Dispute already relayed");
147+
if (relayedData.relayer != address(0)) revert DisputeAlreadyRelayed();
148148

149149
uint256 disputeID = arbitrator.createDispute{value: msg.value}(_params.choices, _params.extraData);
150150
disputeIDtoHash[disputeID] = disputeHash;
@@ -167,8 +167,8 @@ contract HomeGateway is IHomeGateway, UUPSProxiable, Initializable {
167167

168168
/// @inheritdoc IHomeGateway
169169
function relayCreateDispute(RelayCreateDisputeParams memory _params, uint256 _feeAmount) external {
170-
require(feeToken != NATIVE_CURRENCY, "Fees paid in native currency only");
171-
require(_params.foreignChainID == foreignChainID, "Foreign chain ID not supported");
170+
if (feeToken == NATIVE_CURRENCY) revert FeesPaidInERC20Only();
171+
if (_params.foreignChainID != foreignChainID) revert ForeignChainIDNotSupported();
172172

173173
bytes32 disputeHash = keccak256(
174174
abi.encodePacked(
@@ -182,10 +182,10 @@ contract HomeGateway is IHomeGateway, UUPSProxiable, Initializable {
182182
)
183183
);
184184
RelayedData storage relayedData = disputeHashtoRelayedData[disputeHash];
185-
require(relayedData.relayer == address(0), "Dispute already relayed");
185+
if (relayedData.relayer != address(0)) revert DisputeAlreadyRelayed();
186186

187-
require(feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount), "Transfer failed");
188-
require(feeToken.increaseAllowance(address(arbitrator), _feeAmount), "Allowance increase failed");
187+
if (!feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();
188+
if (!feeToken.increaseAllowance(address(arbitrator), _feeAmount)) revert AllowanceIncreaseFailed();
189189

190190
uint256 disputeID = arbitrator.createDispute(_params.choices, _params.extraData, feeToken, _feeAmount);
191191
disputeIDtoHash[disputeID] = disputeHash;
@@ -209,7 +209,7 @@ contract HomeGateway is IHomeGateway, UUPSProxiable, Initializable {
209209

210210
/// @inheritdoc IArbitrableV2
211211
function rule(uint256 _disputeID, uint256 _ruling) external override {
212-
require(msg.sender == address(arbitrator), "Only Arbitrator");
212+
if (msg.sender != address(arbitrator)) revert ArbitratorOnly();
213213

214214
bytes32 disputeHash = disputeIDtoHash[_disputeID];
215215
RelayedData memory relayedData = disputeHashtoRelayedData[disputeHash];
@@ -234,4 +234,17 @@ contract HomeGateway is IHomeGateway, UUPSProxiable, Initializable {
234234
function receiverGateway() external view override returns (address) {
235235
return foreignGateway;
236236
}
237+
238+
// ************************************* //
239+
// * Errors * //
240+
// ************************************* //
241+
242+
error GovernorOnly();
243+
error ArbitratorOnly();
244+
error FeesPaidInERC20Only();
245+
error FeesPaidInNativeCurrencyOnly();
246+
error ForeignChainIDNotSupported();
247+
error DisputeAlreadyRelayed();
248+
error TransferFailed();
249+
error AllowanceIncreaseFailed();
237250
}

0 commit comments

Comments
 (0)