Skip to content

Commit

Permalink
Add script to transfer L1/L2 ProxyAdmin and Systemconfig owner (#178)
Browse files Browse the repository at this point in the history
  • Loading branch information
cody-wang-cb authored Jun 3, 2024
1 parent b6d4227 commit 82b71ed
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 0 deletions.
14 changes: 14 additions & 0 deletions sepolia/2024-05-30-transfer-proxyadmin-owners/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
OP_COMMIT=46a9f00c2f5bf61b73be6cce0e50006b96db7ad2
BASE_CONTRACTS_COMMIT=5d98dab6a4f3ba60713a17417a2df7a17d77c52f

# L1
PROXY_ADMIN=0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3
OLD_PROXY_ADMIN_OWNER=0x608081689Fe46936fB2fBDF7552CbB1D80ad4822
NEW_PROXY_ADMIN_OWNER=0x0fe884546476dDd290eC46318785046ef68a0BA9
SYSTEM_CONFIG_PROXY=0xf272670eb55e895584501d564AfEB048bEd26194
OLD_SYSTEM_CONFIG_OWNER=0x608081689Fe46936fB2fBDF7552CbB1D80ad4822
NEW_SYSTEM_CONFIG_OWNER=0x0fe884546476dDd290eC46318785046ef68a0BA9

# L2
OLD_PROXY_ADMIN_OWNER_L2=0x8937037a0bB08658e5A178C182e60b12f14720ce
NEW_PROXY_ADMIN_OWNER_L2=0x20f984546476DDd290eC46318785046eF68a1Cba
19 changes: 19 additions & 0 deletions sepolia/2024-05-30-transfer-proxyadmin-owners/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
include ../../Makefile
include ../.env
include .env

##
# Foundry commands
##
.PHONY: transfer-l1-proxy-admin-owner
transfer-l1-proxy-admin-owner:
forge script TransferL1ProxyAdminOwner --rpc-url $(L1_RPC_URL) --sig "run()"

.PHONY: transfer-l2-proxy-admin-owner
transfer-l2-proxy-admin-owner:
forge script TransferL2ProxyAdminOwner --rpc-url $(L2_RPC_URL) --sig "run()"

.PHONY: transfer-system-config-proxy-owner
transfer-system-config-proxy-owner:
forge script TransferSystemConfigProxyOwner --rpc-url $(L1_RPC_URL) --sig "run()"

20 changes: 20 additions & 0 deletions sepolia/2024-05-30-transfer-proxyadmin-owners/foundry.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[profile.default]
src = 'src'
out = 'out'
libs = ['lib']
broadcast = 'records'
fs_permissions = [ {access = "read-write", path = "./"} ]
optimizer = true
optimizer_runs = 999999
solc_version = "0.8.15"
via-ir = true
remappings = [
'@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/',
'@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts',
'@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts',
'@rari-capital/solmate/=lib/solmate/',
'@base-contracts/=lib/base-contracts',
'solady/=lib/solady/src/'
]

# See more config options https://github.com/foundry-rs/foundry/tree/master/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import "forge-std/Script.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@eth-optimism-bedrock/src/universal/ProxyAdmin.sol";

contract TransferL1ProxyAdminOwner is Script {
address internal PROXY_CONTRACT = vm.envAddress("PROXY_ADMIN");
address internal OLD_OWNER = vm.envAddress("OLD_PROXY_ADMIN_OWNER");
address internal NEW_OWNER = vm.envAddress("NEW_PROXY_ADMIN_OWNER");

function run() public {
ProxyAdmin proxyAdmin = ProxyAdmin(PROXY_CONTRACT);
require(proxyAdmin.owner() == OLD_OWNER, "L1 ProxyAdmin owner is not the expected owner");
vm.startBroadcast(OLD_OWNER);
proxyAdmin.transferOwnership(NEW_OWNER);
require(proxyAdmin.owner() == NEW_OWNER, "L1 ProxyAdmin owner did not get updated");
vm.stopBroadcast();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import "forge-std/Script.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@eth-optimism-bedrock/src/libraries/Predeploys.sol";
import "@eth-optimism-bedrock/src/universal/ProxyAdmin.sol";

contract TransferL2ProxyAdminOwner is Script {
address internal PROXY_CONTRACT = Predeploys.PROXY_ADMIN;
address internal OLD_OWNER = vm.envAddress("OLD_PROXY_ADMIN_OWNER_L2");
address internal NEW_OWNER = vm.envAddress("NEW_PROXY_ADMIN_OWNER_L2");

function run() public {
ProxyAdmin proxyAdmin = ProxyAdmin(PROXY_CONTRACT);
require(proxyAdmin.owner() == OLD_OWNER, "L2 ProxyAdmin owner is not the expected owner");
vm.startBroadcast(OLD_OWNER);
proxyAdmin.transferOwnership(NEW_OWNER);
require(proxyAdmin.owner() == NEW_OWNER, "L2 ProxyAdmin owner did not get updated");
vm.stopBroadcast();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import "forge-std/Script.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";

contract TransferSystemConfigProxyOwner is Script {
address internal SYSTEM_CONFIG_PROXY = vm.envAddress("SYSTEM_CONFIG_PROXY");
address internal OLD_OWNER = vm.envAddress("OLD_SYSTEM_CONFIG_OWNER");
address internal NEW_OWNER = vm.envAddress("NEW_SYSTEM_CONFIG_OWNER");

function run() public {
require(
OwnableUpgradeable(SYSTEM_CONFIG_PROXY).owner() == OLD_OWNER, "System config owner is not the expected owner"
);
vm.startBroadcast(OLD_OWNER);
OwnableUpgradeable(SYSTEM_CONFIG_PROXY).transferOwnership(NEW_OWNER);
require(OwnableUpgradeable(SYSTEM_CONFIG_PROXY).owner() == NEW_OWNER, "System config owner did not get updated");
vm.stopBroadcast();
}
}

0 comments on commit 82b71ed

Please sign in to comment.