Skip to content

Instantly share code, notes, and snippets.

@MiloTruck
Created October 15, 2024 10:16
Show Gist options
  • Select an option

  • Save MiloTruck/837ecb49fe18901d70bf03241548768b to your computer and use it in GitHub Desktop.

Select an option

Save MiloTruck/837ecb49fe18901d70bf03241548768b to your computer and use it in GitHub Desktop.
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.20;
import "forge-std/Test.sol";
import {CrossChainMessenger} from "src/RACE.sol";
contract Receiver {
bool public shouldRevert;
uint256 public lastReceived;
function setShouldRevert(bool _shouldRevert) external {
shouldRevert = _shouldRevert;
}
function receiveMessage(uint256 _lastReceived) external {
require(!shouldRevert);
lastReceived = _lastReceived;
}
}
contract CrossChainMessengerTest is Test {
CrossChainMessenger messenger;
Receiver receiver;
function setUp() public {
messenger = new CrossChainMessenger();
receiver = new Receiver();
}
function test_forceReplayMessagesOnlyExecutesFirstMessage() public {
CrossChainMessenger.Message[] memory messages = new CrossChainMessenger.Message[](2);
messages[0] = CrossChainMessenger.Message({
sender: address(this),
to: address(receiver),
gas: 100_000,
data: abi.encodeCall(Receiver.receiveMessage, (1))
});
messages[1] = CrossChainMessenger.Message({
sender: address(this),
to: address(receiver),
gas: 100_000,
data: abi.encodeCall(Receiver.receiveMessage, (2))
});
receiver.setShouldRevert(true);
messenger.relayMessage(messages[0]);
messenger.relayMessage(messages[1]);
assertEq(receiver.lastReceived(), 0);
receiver.setShouldRevert(false);
messenger.forceReplayMessages(messages);
assertEq(receiver.lastReceived(), 1);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment