Skip to content

Commit a52883d

Browse files
zimphaThegaram
andauthored
hotfix: forbid enforced gateway (#101)
Co-authored-by: Péter Garamvölgyi <[email protected]>
1 parent 8e6a02b commit a52883d

5 files changed

+32
-9
lines changed

scripts/foundry/DeployL1BridgeContracts.s.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ contract DeployL1BridgeContracts is Script {
156156
L2_SCROLL_MESSENGER_PROXY_ADDR,
157157
L1_SCROLL_CHAIN_PROXY_ADDR,
158158
L1_MESSAGE_QUEUE_V1_PROXY_ADDR,
159-
L1_MESSAGE_QUEUE_V2_PROXY_ADDR
159+
L1_MESSAGE_QUEUE_V2_PROXY_ADDR,
160+
address(enforcedTxGateway)
160161
);
161162

162163
logAddress("L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR", address(impl));

src/L1/L1ScrollMessenger.sol

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger {
5353
/// @notice The address of L1MessageQueueV2 contract.
5454
address public immutable messageQueueV2;
5555

56+
/// @notice The address of `EnforcedTxGateway`.
57+
address public immutable enforcedTxGateway;
58+
5659
/***********
5760
* Structs *
5861
***********/
@@ -110,17 +113,15 @@ contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger {
110113
address _counterpart,
111114
address _rollup,
112115
address _messageQueueV1,
113-
address _messageQueueV2
116+
address _messageQueueV2,
117+
address _enforcedTxGateway
114118
) ScrollMessengerBase(_counterpart) {
115-
if (_rollup == address(0) || _messageQueueV1 == address(0) || _messageQueueV2 == address(0)) {
116-
revert ErrorZeroAddress();
117-
}
118-
119119
_disableInitializers();
120120

121121
rollup = _rollup;
122122
messageQueueV1 = _messageQueueV1;
123123
messageQueueV2 = _messageQueueV2;
124+
enforcedTxGateway = _enforcedTxGateway;
124125
}
125126

126127
/// @notice Initialize the storage of L1ScrollMessenger.
@@ -193,7 +194,7 @@ contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger {
193194
}
194195

195196
// @note check more `_to` address to avoid attack in the future when we add more gateways.
196-
if (_to == messageQueueV1 || _to == messageQueueV2) {
197+
if (_to == messageQueueV1 || _to == messageQueueV2 || _to == enforcedTxGateway) {
197198
revert ErrorForbidToCallMessageQueue();
198199
}
199200
_validateTargetAddress(_to);

src/test/L1GatewayTestBase.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ abstract contract L1GatewayTestBase is ScrollTestBase {
121121
address(l2Messenger),
122122
address(rollup),
123123
address(messageQueueV1),
124-
address(messageQueueV2)
124+
address(messageQueueV2),
125+
address(enforcedTxGateway)
125126
)
126127
)
127128
);

src/test/L1ScrollMessengerTest.t.sol

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,26 @@ contract L1ScrollMessengerTest is L1GatewayTestBase {
6262
l1Messenger.relayMessageWithProof(address(this), address(messageQueueV2), 0, 0, new bytes(0), proof);
6363
}
6464

65+
function testForbidCallEnforcedGatewayFromL2() external {
66+
bytes32 _xDomainCalldataHash = keccak256(
67+
abi.encodeWithSignature(
68+
"relayMessage(address,address,uint256,uint256,bytes)",
69+
address(this),
70+
address(enforcedTxGateway),
71+
0,
72+
0,
73+
new bytes(0)
74+
)
75+
);
76+
prepareL2MessageRoot(_xDomainCalldataHash);
77+
78+
IL1ScrollMessenger.L2MessageProof memory proof;
79+
proof.batchIndex = rollup.lastFinalizedBatchIndex();
80+
81+
hevm.expectRevert(L1ScrollMessenger.ErrorForbidToCallMessageQueue.selector);
82+
l1Messenger.relayMessageWithProof(address(this), address(enforcedTxGateway), 0, 0, new bytes(0), proof);
83+
}
84+
6585
function testForbidCallSelfFromL2() external {
6686
bytes32 _xDomainCalldataHash = keccak256(
6787
abi.encodeWithSignature(

src/test/L2ScrollMessenger.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ contract L2ScrollMessengerTest is DSTestPlus {
2828

2929
function setUp() public {
3030
// Deploy L1 contracts
31-
l1Messenger = new L1ScrollMessenger(address(1), address(1), address(1), address(1));
31+
l1Messenger = new L1ScrollMessenger(address(1), address(1), address(1), address(1), address(1));
3232

3333
// Deploy L2 contracts
3434
whitelist = new Whitelist(address(this));

0 commit comments

Comments
 (0)