chore: update CompletedMessage to have the hash of the message without all the fields

This commit is contained in:
Andrea Franz
2025-06-27 15:11:42 +02:00
parent 4408e5a1fb
commit 6200e94927
4 changed files with 22 additions and 10 deletions

View File

@@ -9,15 +9,15 @@ import { IL1ETHBridge } from "./interfaces/IL1ETHBridge.sol";
import { IL2ETHBridge } from "./interfaces/IL2ETHBridge.sol";
import { MessageServiceBase } from "../../messaging/MessageServiceBase.sol";
import { IMessageService } from "../../messaging/interfaces/IMessageService.sol";
import { IETHYieldManager } from "./interfaces/IETHYieldManager.sol";
contract L1ETHBridge is IL1ETHBridge, Initializable, UUPSUpgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable, MessageServiceBase {
/**
* @notice The completed message struct.
*/
struct CompletedMessage {
address to;
uint256 value;
bytes callData;
uint256 withdrawalRequestId;
bytes32 messageHash;
}
/**
@@ -117,10 +117,11 @@ contract L1ETHBridge is IL1ETHBridge, Initializable, UUPSUpgradeable, OwnableUpg
uint256 _value,
bytes memory _calldata
) external nonReentrant onlyMessagingService onlyAuthorizedRemoteSender {
completedMessages[nextCompletedMessageId] = CompletedMessage(_to, _value, _calldata);
nextCompletedMessageId++;
emit MessageCompleted(nextCompletedMessageId);
bytes32 hash = keccak256(abi.encode(_to, _value, _calldata));
uint256 requestId = IETHYieldManager(yieldManager).requestWithdrawal(_value);
completedMessages[nextCompletedMessageId] = CompletedMessage(requestId, hash);
nextCompletedMessageId++;
}
/**

View File

@@ -0,0 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.26;
interface IETHYieldManager {
function requestWithdrawal(uint256 _amount) external returns (uint256 requestId);
}

View File

@@ -149,9 +149,8 @@ contract L1ETHBridgeTest is Test {
bridge.completeBridging(user1, 100, "test-data");
assertEq(bridge.nextCompletedMessageId(), 1);
(address to, uint256 value, bytes memory callData) = bridge.completedMessages(0);
assertEq(to, user1);
assertEq(value, 100);
assertEq(callData, "test-data");
(uint256 withdrawalRequestId, bytes32 hash) = bridge.completedMessages(0);
assertEq(withdrawalRequestId, 0);
assertEq(hash, keccak256(abi.encode(user1, 100, "test-data")));
}
}

View File

@@ -7,6 +7,8 @@ contract ETHYieldManagerMock {
uint256 value;
}
uint256 public nextRequestId;
Deposit[] public deposits;
receive() external payable {
@@ -21,4 +23,8 @@ contract ETHYieldManagerMock {
require(deposits.length > 0, "No deposits made");
return deposits[deposits.length - 1];
}
function requestWithdrawal(uint256 _amount) external returns (uint256 requestId) {
return nextRequestId++;
}
}