diff --git a/sepolia/2024-05-30-transfer-proxyadmin-owners/.env b/sepolia/2024-05-30-transfer-proxyadmin-owners/.env new file mode 100644 index 0000000..27e9152 --- /dev/null +++ b/sepolia/2024-05-30-transfer-proxyadmin-owners/.env @@ -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 diff --git a/sepolia/2024-05-30-transfer-proxyadmin-owners/Makefile b/sepolia/2024-05-30-transfer-proxyadmin-owners/Makefile new file mode 100644 index 0000000..557ed0f --- /dev/null +++ b/sepolia/2024-05-30-transfer-proxyadmin-owners/Makefile @@ -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()" + diff --git a/sepolia/2024-05-30-transfer-proxyadmin-owners/foundry.toml b/sepolia/2024-05-30-transfer-proxyadmin-owners/foundry.toml new file mode 100644 index 0000000..0be0575 --- /dev/null +++ b/sepolia/2024-05-30-transfer-proxyadmin-owners/foundry.toml @@ -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 \ No newline at end of file diff --git a/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferL1ProxyAdminOwner.s.sol b/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferL1ProxyAdminOwner.s.sol new file mode 100644 index 0000000..4fe5ccb --- /dev/null +++ b/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferL1ProxyAdminOwner.s.sol @@ -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(); + } +} diff --git a/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferL2ProxyAdminOwner.s.sol b/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferL2ProxyAdminOwner.s.sol new file mode 100644 index 0000000..e31ad6a --- /dev/null +++ b/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferL2ProxyAdminOwner.s.sol @@ -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(); + } +} diff --git a/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferSystemConfigProxyOwner.s.sol b/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferSystemConfigProxyOwner.s.sol new file mode 100644 index 0000000..e5fae3d --- /dev/null +++ b/sepolia/2024-05-30-transfer-proxyadmin-owners/script/TransferSystemConfigProxyOwner.s.sol @@ -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(); + } +}