@@ -22,8 +22,6 @@ library UniversalBridgeStorage {
22
22
mapping (bytes32 => bool ) processed;
23
23
/// @dev Mapping from forward address or token address => whether restricted.
24
24
mapping (address => bool ) isRestricted;
25
- /// @dev protocol fee bps, capped at 300 bps (3%)
26
- uint256 protocolFeeBps;
27
25
/// @dev protocol fee recipient address
28
26
address protocolFeeRecipient;
29
27
/// @dev whether the bridge is paused
@@ -55,7 +53,7 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
55
53
uint256 tokenAmount;
56
54
address payable forwardAddress;
57
55
address payable spenderAddress;
58
- uint256 expirationTimestamp ;
56
+ uint256 protocolFeeBps ;
59
57
address payable developerFeeRecipient;
60
58
uint256 developerFeeBps;
61
59
bytes callData;
@@ -76,10 +74,10 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
76
74
bytes32 indexed transactionId ,
77
75
address tokenAddress ,
78
76
uint256 tokenAmount ,
77
+ uint256 protocolFee ,
79
78
address developerFeeRecipient ,
80
79
uint256 developerFeeBps ,
81
80
uint256 developerFee ,
82
- uint256 protocolFee ,
83
81
bytes extraData
84
82
);
85
83
@@ -96,22 +94,16 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
96
94
error UniversalBridgePaused (); // 0x46ecd2c9
97
95
error UniversalBridgeRestrictedAddress (); // 0xec7d39b3
98
96
error UniversalBridgeVerificationFailed (); // 0x1573f645
99
- error UniversalBridgeRequestExpired (uint256 expirationTimestamp ); // 0xb4ebecd8
100
97
error UniversalBridgeTransactionAlreadyProcessed (); // 0x7d21ae4b
101
98
102
99
constructor () {
103
100
_disableInitializers ();
104
101
}
105
102
106
- function initialize (
107
- address _owner ,
108
- address _operator ,
109
- address payable _protocolFeeRecipient ,
110
- uint256 _protocolFeeBps
111
- ) external initializer {
103
+ function initialize (address _owner , address _operator , address payable _protocolFeeRecipient ) external initializer {
112
104
_initializeOwner (_owner);
113
105
_grantRoles (_operator, _OPERATOR_ROLE);
114
- _setProtocolFeeInfo (_protocolFeeRecipient, _protocolFeeBps );
106
+ _setProtocolFeeInfo (_protocolFeeRecipient);
115
107
}
116
108
117
109
/*///////////////////////////////////////////////////////////////
@@ -136,8 +128,8 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
136
128
}
137
129
}
138
130
139
- function setProtocolFeeInfo (address payable feeRecipient , uint256 feeBps ) external onlyOwner {
140
- _setProtocolFeeInfo (feeRecipient, feeBps );
131
+ function setProtocolFeeInfo (address payable feeRecipient ) external onlyOwner {
132
+ _setProtocolFeeInfo (feeRecipient);
141
133
}
142
134
143
135
function pause (bool _pause ) external onlyOwner {
@@ -148,9 +140,8 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
148
140
_universalBridgeStorage ().isRestricted[_target] = _restrict;
149
141
}
150
142
151
- function getProtocolFeeInfo () external view returns (address feeRecipient , uint256 feeBps ) {
143
+ function getProtocolFeeInfo () external view returns (address feeRecipient ) {
152
144
feeRecipient = _universalBridgeStorage ().protocolFeeRecipient;
153
- feeBps = _universalBridgeStorage ().protocolFeeBps;
154
145
}
155
146
156
147
function isPaused () external view returns (bool ) {
@@ -188,6 +179,10 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
188
179
revert UniversalBridgeRestrictedAddress ();
189
180
}
190
181
182
+ if (req.protocolFeeBps > MAX_PROTOCOL_FEE_BPS) {
183
+ revert UniversalBridgeInvalidFeeBps ();
184
+ }
185
+
191
186
// verify amount
192
187
if (req.tokenAmount == 0 ) {
193
188
revert UniversalBridgeInvalidAmount (req.tokenAmount);
@@ -200,7 +195,8 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
200
195
req.tokenAddress,
201
196
req.tokenAmount,
202
197
req.developerFeeRecipient,
203
- req.developerFeeBps
198
+ req.developerFeeBps,
199
+ req.protocolFeeBps
204
200
);
205
201
206
202
if (_isNativeToken (req.tokenAddress)) {
@@ -251,10 +247,10 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
251
247
req.transactionId,
252
248
req.tokenAddress,
253
249
req.tokenAmount,
250
+ protocolFee,
254
251
req.developerFeeRecipient,
255
252
req.developerFeeBps,
256
253
developerFee,
257
- protocolFee,
258
254
req.extraData
259
255
);
260
256
}
@@ -282,10 +278,6 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
282
278
TransactionRequest calldata req ,
283
279
bytes calldata signature
284
280
) private view returns (bool ) {
285
- if (req.expirationTimestamp < block .timestamp ) {
286
- revert UniversalBridgeRequestExpired (req.expirationTimestamp);
287
- }
288
-
289
281
bool processed = _universalBridgeStorage ().processed[req.transactionId];
290
282
291
283
if (processed) {
@@ -300,7 +292,7 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
300
292
req.tokenAmount,
301
293
req.forwardAddress,
302
294
req.spenderAddress,
303
- req.expirationTimestamp ,
295
+ req.protocolFeeBps ,
304
296
req.developerFeeRecipient,
305
297
req.developerFeeBps,
306
298
keccak256 (req.callData),
@@ -319,10 +311,10 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
319
311
address tokenAddress ,
320
312
uint256 tokenAmount ,
321
313
address developerFeeRecipient ,
322
- uint256 developerFeeBps
314
+ uint256 developerFeeBps ,
315
+ uint256 protocolFeeBps
323
316
) private returns (uint256 , uint256 ) {
324
317
address protocolFeeRecipient = _universalBridgeStorage ().protocolFeeRecipient;
325
- uint256 protocolFeeBps = _universalBridgeStorage ().protocolFeeBps;
326
318
327
319
uint256 protocolFee = (tokenAmount * protocolFeeBps) / 10_000 ;
328
320
uint256 developerFee = (tokenAmount * developerFeeBps) / 10_000 ;
@@ -353,17 +345,12 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
353
345
version = "1 " ;
354
346
}
355
347
356
- function _setProtocolFeeInfo (address payable feeRecipient , uint256 feeBps ) internal {
348
+ function _setProtocolFeeInfo (address payable feeRecipient ) internal {
357
349
if (feeRecipient == address (0 )) {
358
350
revert UniversalBridgeZeroAddress ();
359
351
}
360
352
361
- if (feeBps > MAX_PROTOCOL_FEE_BPS) {
362
- revert UniversalBridgeInvalidFeeBps ();
363
- }
364
-
365
353
_universalBridgeStorage ().protocolFeeRecipient = feeRecipient;
366
- _universalBridgeStorage ().protocolFeeBps = feeBps;
367
354
}
368
355
369
356
function _isNativeToken (address tokenAddress ) private pure returns (bool ) {
@@ -372,7 +359,7 @@ contract UniversalBridgeV1 is EIP712, Initializable, UUPSUpgradeable, OwnableRol
372
359
373
360
function _authorizeUpgrade (address ) internal override onlyOwner {}
374
361
375
- function _universalBridgeStorage () internal view returns (UniversalBridgeStorage.Data storage ) {
362
+ function _universalBridgeStorage () internal pure returns (UniversalBridgeStorage.Data storage ) {
376
363
return UniversalBridgeStorage.data ();
377
364
}
378
365
}
0 commit comments