forked from scroll-tech/scroll
-
Notifications
You must be signed in to change notification settings - Fork 0
/
L2GatewayTestBase.t.sol
76 lines (59 loc) · 2.57 KB
/
L2GatewayTestBase.t.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// SPDX-License-Identifier: MIT
pragma solidity =0.8.16;
import {DSTestPlus} from "solmate/test/utils/DSTestPlus.sol";
import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import {IL1BlockContainer, L1BlockContainer} from "../L2/predeploys/L1BlockContainer.sol";
import {IL1GasPriceOracle, L1GasPriceOracle} from "../L2/predeploys/L1GasPriceOracle.sol";
import {L2MessageQueue} from "../L2/predeploys/L2MessageQueue.sol";
import {Whitelist} from "../L2/predeploys/Whitelist.sol";
import {L1ScrollMessenger} from "../L1/L1ScrollMessenger.sol";
import {L2ScrollMessenger} from "../L2/L2ScrollMessenger.sol";
abstract contract L2GatewayTestBase is DSTestPlus {
// from L2MessageQueue
event AppendMessage(uint256 index, bytes32 messageHash);
// from L2ScrollMessenger
event SentMessage(
address indexed sender,
address indexed target,
uint256 value,
uint256 messageNonce,
uint256 gasLimit,
bytes message
);
event RelayedMessage(bytes32 indexed messageHash);
event FailedRelayedMessage(bytes32 indexed messageHash);
// pay 0.1 extra ETH to test refund
uint256 internal constant extraValue = 1e17;
L1ScrollMessenger internal l1Messenger;
address internal feeVault;
Whitelist private whitelist;
L2ScrollMessenger internal l2Messenger;
L1BlockContainer internal l1BlockContainer;
L2MessageQueue internal l2MessageQueue;
L1GasPriceOracle internal l1GasOracle;
function setUpBase() internal {
feeVault = address(uint160(address(this)) - 1);
// Deploy L1 contracts
l1Messenger = new L1ScrollMessenger();
// Deploy L2 contracts
whitelist = new Whitelist(address(this));
l1BlockContainer = new L1BlockContainer(address(this));
l2MessageQueue = new L2MessageQueue(address(this));
l1GasOracle = new L1GasPriceOracle(address(this));
l2Messenger = L2ScrollMessenger(
payable(new ERC1967Proxy(address(new L2ScrollMessenger(address(l2MessageQueue))), new bytes(0)))
);
// Initialize L2 contracts
l2Messenger.initialize(address(l1Messenger));
l2MessageQueue.initialize(address(l2Messenger));
l1GasOracle.updateWhitelist(address(whitelist));
address[] memory _accounts = new address[](1);
_accounts[0] = address(this);
whitelist.updateWhitelistStatus(_accounts, true);
// make nonzero block.timestamp
hevm.warp(1);
}
function setL1BaseFee(uint256 baseFee) internal {
l1GasOracle.setL1BaseFee(baseFee);
}
}