mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-14 08:28:02 -05:00
Co-authored-by: zimpha <zimpha@users.noreply.github.com> Co-authored-by: Péter Garamvölgyi <peter@scroll.io> Co-authored-by: Haichen Shen <shenhaichen@gmail.com>
67 lines
2.3 KiB
Solidity
67 lines
2.3 KiB
Solidity
// SPDX-License-Identifier: UNLICENSED
|
|
pragma solidity ^0.8.10;
|
|
|
|
import {Script} from "forge-std/Script.sol";
|
|
import {console} from "forge-std/console.sol";
|
|
|
|
import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol";
|
|
|
|
import {ScrollOwner} from "../../src/misc/ScrollOwner.sol";
|
|
|
|
// solhint-disable state-visibility
|
|
// solhint-disable var-name-mixedcase
|
|
|
|
contract DeployL2ScrollOwner is Script {
|
|
string NETWORK = vm.envString("NETWORK");
|
|
|
|
uint256 L2_DEPLOYER_PRIVATE_KEY = vm.envUint("L2_DEPLOYER_PRIVATE_KEY");
|
|
|
|
address SCROLL_MULTISIG_ADDR = vm.envAddress("L2_SCROLL_MULTISIG_ADDR");
|
|
|
|
address SECURITY_COUNCIL_ADDR = vm.envAddress("L2_SECURITY_COUNCIL_ADDR");
|
|
|
|
address L2_PROPOSAL_EXECUTOR_ADDR = vm.envAddress("L2_PROPOSAL_EXECUTOR_ADDR");
|
|
|
|
function run() external {
|
|
vm.startBroadcast(L2_DEPLOYER_PRIVATE_KEY);
|
|
|
|
deployScrollOwner();
|
|
|
|
if (keccak256(abi.encodePacked(NETWORK)) == keccak256(abi.encodePacked("sepolia"))) {
|
|
// for sepolia
|
|
deployTimelockController("1D", 1 minutes);
|
|
deployTimelockController("7D", 7 minutes);
|
|
deployTimelockController("14D", 14 minutes);
|
|
} else if (keccak256(abi.encodePacked(NETWORK)) == keccak256(abi.encodePacked("mainnet"))) {
|
|
// for mainnet
|
|
deployTimelockController("1D", 1 days);
|
|
deployTimelockController("7D", 7 days);
|
|
deployTimelockController("14D", 14 days);
|
|
}
|
|
|
|
vm.stopBroadcast();
|
|
}
|
|
|
|
function deployScrollOwner() internal {
|
|
ScrollOwner owner = new ScrollOwner();
|
|
|
|
logAddress("L2_SCROLL_OWNER_ADDR", address(owner));
|
|
}
|
|
|
|
function deployTimelockController(string memory label, uint256 delay) internal {
|
|
address[] memory proposers = new address[](1);
|
|
address[] memory executors = new address[](1);
|
|
|
|
proposers[0] = SCROLL_MULTISIG_ADDR;
|
|
executors[0] = L2_PROPOSAL_EXECUTOR_ADDR;
|
|
|
|
TimelockController timelock = new TimelockController(delay, proposers, executors, SECURITY_COUNCIL_ADDR);
|
|
|
|
logAddress(string(abi.encodePacked("L2_", label, "_TIMELOCK_ADDR")), address(timelock));
|
|
}
|
|
|
|
function logAddress(string memory name, address addr) internal view {
|
|
console.log(string(abi.encodePacked(name, "=", vm.toString(address(addr)))));
|
|
}
|
|
}
|