Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity 0.8.15;

// Testing utilities
import { CommonTest } from "test/setup/CommonTest.sol";
import { Reverter, GasBurner } from "test/mocks/Callers.sol";
import { GasBurner } from "test/mocks/GasBurner.sol";
import { stdError } from "forge-std/StdError.sol";
import { ForgeArtifacts, StorageSlot } from "scripts/libraries/ForgeArtifacts.sol";

Expand Down Expand Up @@ -781,7 +781,7 @@ contract L1CrossDomainMessenger_Uncategorized_Test is L1CrossDomainMessenger_Tes
);

vm.store(address(optimismPortal2), bytes32(senderSlotIndex), bytes32(abi.encode(sender)));
vm.etch(target, address(new Reverter()).code);
vm.mockCallRevert(target, bytes(hex"1111"), bytes(hex""));
vm.deal(address(optimismPortal2), value);
vm.prank(address(optimismPortal2));
l1CrossDomainMessenger.relayMessage{ value: value }(
Expand All @@ -798,8 +798,9 @@ contract L1CrossDomainMessenger_Uncategorized_Test is L1CrossDomainMessenger_Tes
assertEq(l1CrossDomainMessenger.successfulMessages(hash), false);
assertEq(l1CrossDomainMessenger.failedMessages(hash), true);

vm.expectEmit(address(l1CrossDomainMessenger));
vm.clearMockedCalls();

vm.expectEmit(address(l1CrossDomainMessenger));
emit RelayedMessage(hash);

vm.etch(target, address(0).code);
Expand Down Expand Up @@ -926,9 +927,8 @@ contract L1CrossDomainMessenger_Uncategorized_Test is L1CrossDomainMessenger_Tes
// Set the value of op.l2Sender() to be the L2 Cross Domain Messenger.
vm.store(address(optimismPortal2), bytes32(senderSlotIndex), bytes32(abi.encode(sender)));

// Turn the target into a Reverter.
vm.etch(target, address(new Reverter()).code);

// Make the target revert.
vm.mockCallRevert(target, bytes(hex"1111"), bytes(hex""));
// Target should be called with expected data.
vm.expectCall(target, hex"1111");

Expand All @@ -955,7 +955,7 @@ contract L1CrossDomainMessenger_Uncategorized_Test is L1CrossDomainMessenger_Tes
assertEq(l1CrossDomainMessenger.failedMessages(hash), true);

// Make the target not revert anymore.
vm.etch(target, address(0).code);
vm.clearMockedCalls();

// Target should be called with expected data.
vm.expectCall(target, hex"1111");
Expand Down Expand Up @@ -1062,8 +1062,8 @@ contract L1CrossDomainMessenger_Uncategorized_Test is L1CrossDomainMessenger_Tes
// Set the value of op.l2Sender() to be the L2 Cross Domain Messenger.
vm.store(address(optimismPortal2), bytes32(senderSlotIndex), bytes32(abi.encode(sender)));

// Turn the target into a Reverter.
vm.etch(target, address(new Reverter()).code);
// Make the target revert.
vm.mockCallRevert(target, bytes(hex"1111"), bytes(hex""));

// Target should be called with expected data.
vm.expectCall(target, hex"1111");
Expand All @@ -1087,7 +1087,7 @@ contract L1CrossDomainMessenger_Uncategorized_Test is L1CrossDomainMessenger_Tes
assertEq(l1CrossDomainMessenger.failedMessages(hash), true);

// Make the target not revert anymore.
vm.etch(target, address(0).code);
vm.clearMockedCalls();

// Target should be called with expected data.
vm.expectCall(target, hex"1111");
Expand Down
3 changes: 1 addition & 2 deletions packages/contracts-bedrock/test/L2/FeeVault.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ pragma solidity 0.8.15;

// Testing
import { CommonTest } from "test/setup/CommonTest.sol";
import { Reverter } from "test/mocks/Callers.sol";

// Interfaces
import { IProxyAdmin } from "interfaces/universal/IProxyAdmin.sol";
Expand Down Expand Up @@ -185,7 +184,7 @@ abstract contract FeeVault_Uncategorized_Test is CommonTest {
assertEq(feeVault.totalProcessed(), 0);

// Ensure the RECIPIENT reverts
vm.etch(feeVault.RECIPIENT(), type(Reverter).runtimeCode);
vm.mockCallRevert(feeVault.RECIPIENT(), bytes(hex""), hex"");

// The entire feeVault's balance is withdrawn
vm.expectCall(recipient, address(feeVault).balance, bytes(""));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity 0.8.15;

// Testing
import { CommonTest } from "test/setup/CommonTest.sol";
import { Reverter, GasBurner } from "test/mocks/Callers.sol";
import { GasBurner } from "test/mocks/GasBurner.sol";
import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol";
import { stdError } from "forge-std/StdError.sol";

Expand Down Expand Up @@ -398,7 +398,7 @@ contract L2CrossDomainMessenger_Uncategorized_Test is L2CrossDomainMessenger_Tes
bytes32 hash =
Hashing.hashCrossDomainMessage(Encoding.encodeVersionedNonce(0, 1), sender, target, value, 0, hex"1111");

vm.etch(target, address(new Reverter()).code);
vm.mockCallRevert(target, bytes(hex"1111"), bytes(hex""));
vm.deal(address(caller), value);
vm.prank(caller);
l2CrossDomainMessenger.relayMessage{ value: value }(
Expand All @@ -419,7 +419,7 @@ contract L2CrossDomainMessenger_Uncategorized_Test is L2CrossDomainMessenger_Tes

emit RelayedMessage(hash);

vm.etch(target, address(0).code);
vm.clearMockedCalls();
vm.prank(address(sender));
l2CrossDomainMessenger.relayMessage(
Encoding.encodeVersionedNonce(0, 1), // nonce
Expand Down
2 changes: 2 additions & 0 deletions packages/contracts-bedrock/test/L2/SequencerFeeVault.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ pragma solidity 0.8.15;

// Interfaces
import { IFeeVault } from "interfaces/L2/IFeeVault.sol";

// Contracts
import { ISequencerFeeVault } from "interfaces/L2/ISequencerFeeVault.sol";

// Libraries
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,6 @@ pragma solidity ^0.8.0;
// Libraries
import { Burn } from "src/libraries/Burn.sol";

contract CallRecorder {
struct CallInfo {
address sender;
bytes data;
uint256 gas;
uint256 value;
}

CallInfo public lastCall;

function record() public payable {
lastCall.sender = msg.sender;
lastCall.data = msg.data;
lastCall.gas = gasleft();
lastCall.value = msg.value;
}
}

/// @dev Any call will revert
contract Reverter {
function doRevert() public pure {
revert("Reverter: Reverter reverted");
}

fallback() external {
revert();
}
}

/// @title GasBurner
/// @notice Contract that burns a specified amount of gas on receive or fallback.
contract GasBurner {
Expand Down
35 changes: 16 additions & 19 deletions packages/contracts-bedrock/test/periphery/Transactor.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ pragma solidity 0.8.15;

// Testing utilities
import { Test } from "forge-std/Test.sol";
import { CallRecorder, Reverter } from "test/mocks/Callers.sol";
import { Transactor } from "src/periphery/Transactor.sol";

/// @title Transactor_TestInit
Expand All @@ -13,14 +12,8 @@ abstract contract Transactor_TestInit is Test {
address bob = address(256);

Transactor transactor;
Reverter reverter;
CallRecorder callRecorded;

function setUp() public {
// Deploy Reverter and CallRecorder helper contracts
reverter = new Reverter();
callRecorded = new CallRecorder();

// Deploy Transactor contract
transactor = new Transactor(address(alice));
vm.label(address(transactor), "Transactor");
Expand Down Expand Up @@ -48,22 +41,24 @@ contract Transactor_Constructor_Test is Transactor_TestInit {
contract Transactor_Call_Test is Transactor_TestInit {
/// @notice Tests CALL, should do a call to target
function test_call_succeeds() external {
address target = makeAddr("target");
// Initialize call data
bytes memory data = abi.encodeCall(CallRecorder.record, ());
bytes memory data = hex"aabbccdd";
// Run CALL
vm.prank(alice);
vm.expectCall(address(callRecorded), 200_000 wei, data);
transactor.CALL(address(callRecorded), data, 200_000 wei);
vm.expectCall(target, 200_000 wei, data);
transactor.CALL(target, data, 200_000 wei);
}

/// @notice It should revert if called by non-owner
function test_call_unauthorized_reverts() external {
// Initialize call data
bytes memory data = abi.encodeCall(CallRecorder.record, ());
address target = makeAddr("target");
bytes memory data = hex"aabbccdd";
// Run CALL
vm.prank(bob);
vm.expectRevert("UNAUTHORIZED");
transactor.CALL(address(callRecorded), data, 200_000 wei);
transactor.CALL(target, data, 200_000 wei);
}
}

Expand All @@ -72,21 +67,23 @@ contract Transactor_Call_Test is Transactor_TestInit {
contract Transactor_DelegateCall_Test is Transactor_TestInit {
/// @notice Deletate call succeeds.
function test_delegateCall_succeeds() external {
// Initialize call data
bytes memory data = abi.encodeCall(Reverter.doRevert, ());
// Initialize call data and target
address target = address(0x1234);
bytes memory data = hex"aabbccdd";
// Run CALL
vm.prank(alice);
vm.expectCall(address(reverter), data);
transactor.DELEGATECALL(address(reverter), data);
vm.expectCall(target, data);
transactor.DELEGATECALL(target, data);
}

/// @notice It should revert if called by non-owner
function test_delegateCall_unauthorized_reverts() external {
// Initialize call data
bytes memory data = abi.encodeCall(Reverter.doRevert, ());
// Initialize call data and target
address target = address(0x1234);
bytes memory data = hex"aabbccdd";
// Run CALL
vm.prank(bob);
vm.expectRevert("UNAUTHORIZED");
transactor.DELEGATECALL(address(reverter), data);
transactor.DELEGATECALL(target, data);
}
}
8 changes: 4 additions & 4 deletions packages/contracts-bedrock/test/safe/TimelockGuard.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { Safe } from "safe-contracts/Safe.sol";
import { GuardManager } from "safe-contracts/base/GuardManager.sol";
import { ITransactionGuard } from "interfaces/safe/ITransactionGuard.sol";
import "test/safe-tools/SafeTestTools.sol";
import { Reverter } from "test/mocks/Callers.sol";

import { TimelockGuard } from "src/safe/TimelockGuard.sol";
import { SaferSafes } from "src/safe/SaferSafes.sol";
Expand Down Expand Up @@ -703,9 +702,10 @@ contract TimelockGuard_CheckTransaction_Test is TimelockGuard_TestInit {
function test_checkTransaction_failedTransaction_succeeds() external {
// Build a transaction that will revert (call a contract that always reverts)
TransactionBuilder.Transaction memory dummyTx = _createEmptyTransaction(safeInstance);
Reverter reverter = new Reverter();
dummyTx.params.to = address(reverter);
// empty data triggers fallback, which reverts
address target = address(0x1234);
dummyTx.params.to = target;
// Make the target revert
vm.mockCallRevert(target, bytes(hex""), bytes(hex""));
dummyTx.updateTransaction();
dummyTx.scheduleTransaction(timelockGuard);

Expand Down
Empty file added x
Empty file.
Loading