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
16 changes: 12 additions & 4 deletions op-chain-ops/script/script.go
Original file line number Diff line number Diff line change
Expand Up @@ -354,10 +354,18 @@ func (h *Host) Call(from common.Address, to common.Address, input []byte, gas ui

defer func() {
if r := recover(); r != nil {
// Cast to a string to check the error message. If it's not a string it's
// an unexpected panic and we should re-raise it.
rStr, ok := r.(string)
if !ok || !strings.Contains(strings.ToLower(rStr), "revision id 1") {
// Extract the panic message as a string. op-geth's journal.go panics with
// fmt.Errorf (an error type), so we must handle both string and error.
var rStr string
switch v := r.(type) {
case string:
rStr = v
case error:
rStr = v.Error()
default:
panic(r)
}
if !strings.Contains(strings.ToLower(rStr), "revision id") {
fmt.Println("panic", rStr)
panic(r)
}
Expand Down
1 change: 1 addition & 0 deletions op-deployer/pkg/deployer/opcm/implementations.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ type DeployImplementationsOutput struct {
OptimismMintableERC20FactoryImpl common.Address `json:"optimismMintableERC20FactoryImplAddress"`
DisputeGameFactoryImpl common.Address `json:"disputeGameFactoryImplAddress"`
AnchorStateRegistryImpl common.Address `json:"anchorStateRegistryImplAddress"`
CeloSuperchainConfigImpl common.Address `json:"celoSuperchainConfigImplAddress"`
SuperchainConfigImpl common.Address `json:"superchainConfigImplAddress"`
ProtocolVersionsImpl common.Address `json:"protocolVersionsImplAddress"`
}
Expand Down
50 changes: 40 additions & 10 deletions op-deployer/pkg/deployer/standard/standard.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,15 @@ func L1VersionsFor(chainID uint64) (validation.Versions, error) {
func GuardianAddressFor(chainID uint64) (common.Address, error) {
switch chainID {
case 1:
return common.Address(validation.StandardConfigRolesMainnet.Guardian), nil
// Celo Mainnet
return common.HexToAddress("0x6E226fa22e5F19363d231D3FA048aaBa73CC1f47"), nil
// Superchain
// return common.Address(validation.StandardConfigRolesMainnet.Guardian), nil
case 11155111:
return common.Address(validation.StandardConfigRolesSepolia.Guardian), nil
// Celo Mainnet
return common.HexToAddress("0x5e60d897Cd62588291656b54655e98ee73f0aabF"), nil
// Superchain
// return common.Address(validation.StandardConfigRolesSepolia.Guardian), nil
default:
return common.Address{}, fmt.Errorf("unsupported chain ID: %d", chainID)
}
Expand All @@ -76,9 +82,15 @@ func GuardianAddressFor(chainID uint64) (common.Address, error) {
func ChallengerAddressFor(chainID uint64) (common.Address, error) {
switch chainID {
case 1:
return common.Address(validation.StandardConfigRolesMainnet.Challenger), nil
// Celo Mainnet
return common.HexToAddress("0x6b145ebf66602ec524b196426b46631259689583"), nil
// Superchain
// return common.Address(validation.StandardConfigRolesMainnet.Challenger), nil
case 11155111:
return common.Address(validation.StandardConfigRolesSepolia.Challenger), nil
// Celo Mainnet
return common.HexToAddress("0xC813b28614BD4CFA3d5Fdf153df41B273AB9D497"), nil
// Superchain
// return common.Address(validation.StandardConfigRolesSepolia.Challenger), nil
default:
return common.Address{}, fmt.Errorf("unsupported chain ID: %d", chainID)
}
Expand Down Expand Up @@ -121,9 +133,15 @@ func OPCMImplAddressFor(chainID uint64, tag string) (common.Address, error) {
func SuperchainProxyAdminAddrFor(chainID uint64) (common.Address, error) {
switch chainID {
case 1:
return common.HexToAddress("0x543bA4AADBAb8f9025686Bd03993043599c6fB04"), nil
// Celo Mainnet
return common.HexToAddress("0x783A434532Ee94667979213af1711505E8bFE374"), nil
// Superchain
// return common.HexToAddress("0x783A434532Ee94667979213af1711505E8bFE374"), nil
case 11155111:
return common.HexToAddress("0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc"), nil
// Celo Mainnet
return common.HexToAddress("0xf7d7a3d3bb8abb6829249b3d3ad3d525d052027e"), nil
// Superchain
// return common.HexToAddress("0xf7d7a3d3bb8abb6829249b3d3ad3d525d052027e"), nil
default:
return common.Address{}, fmt.Errorf("unsupported chain ID: %d", chainID)
}
Expand All @@ -132,9 +150,15 @@ func SuperchainProxyAdminAddrFor(chainID uint64) (common.Address, error) {
func L1ProxyAdminOwner(chainID uint64) (common.Address, error) {
switch chainID {
case 1:
return common.Address(validation.StandardConfigRolesMainnet.L1ProxyAdminOwner), nil
// Celo Mainnet
return common.HexToAddress("0x4092A77bAF58fef0309452cEaCb09221e556E112"), nil
// Superchain
// return common.Address(validation.StandardConfigRolesMainnet.L1ProxyAdminOwner), nil
case 11155111:
return common.Address(validation.StandardConfigRolesSepolia.L1ProxyAdminOwner), nil
// Celo Mainnet
return common.HexToAddress("0x5e60d897Cd62588291656b54655e98ee73f0aabF"), nil
// Superchain
// return common.Address(validation.StandardConfigRolesSepolia.L1ProxyAdminOwner), nil
default:
return common.Address{}, fmt.Errorf("unsupported chain ID: %d", chainID)
}
Expand All @@ -154,9 +178,15 @@ func L2ProxyAdminOwner(chainID uint64) (common.Address, error) {
func ProtocolVersionsOwner(chainID uint64) (common.Address, error) {
switch chainID {
case 1:
return common.Address(validation.StandardConfigRolesMainnet.ProtocolVersionsOwner), nil
// Celo Mainnet
return common.HexToAddress("0x4092A77bAF58fef0309452cEaCb09221e556E112"), nil
// Superchain
// return common.Address(validation.StandardConfigRolesMainnet.ProtocolVersionsOwner), nil
case 11155111:
return common.Address(validation.StandardConfigRolesSepolia.ProtocolVersionsOwner), nil
// Celo Mainnet
return common.HexToAddress("0x5e60d897Cd62588291656b54655e98ee73f0aabF"), nil
// Superchain
// return common.Address(validation.StandardConfigRolesSepolia.ProtocolVersionsOwner), nil
default:
return common.Address{}, fmt.Errorf("unsupported chain ID: %d", chainID)
}
Expand Down
1 change: 1 addition & 0 deletions op-deployer/pkg/deployer/upgrade/v2_0_0/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ type UpgradeOPChainInput struct {
Prank common.Address `json:"prank"`
Opcm common.Address `json:"opcm"`
EncodedChainConfigs []OPChainConfig `evm:"-" json:"chainConfigs"`
UpgradeSuperchainConfig bool `json:"upgradeSuperchainConfig"`
}

type OPChainConfig struct {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ interface ICeloSuperchainConfig {
function superchainConfig() external view returns (address superchainConfig_);
function pause(string memory _identifier) external;
function paused() external view returns (bool paused_);
function paused(address _identifier) external view returns (bool paused_);
function unpause() external;
function checkAndPauseIfSuperchainPaused() external returns (bool paused_);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ interface IOPContractsManagerUpgrader {

function __constructor__(IOPContractsManagerContractsContainer _contractsContainer) external;

function upgrade(IOPContractsManager.OpChainConfig[] memory _opChainConfigs) external;
function upgrade(IOPContractsManager.OpChainConfig[] memory _opChainConfigs, bool _upgradeSuperchainConfig) external;

function upgradeSuperchainConfig(ISuperchainConfig _superchainConfig, IProxyAdmin _superchainProxyAdmin) external;

Expand Down Expand Up @@ -202,6 +202,7 @@ interface IOPContractsManager {

/// @notice The latest implementation contracts for the OP Stack.
struct Implementations {
address celoSuperchainConfigImpl;
address superchainConfigImpl;
address protocolVersionsImpl;
address l1ERC721BridgeImpl;
Expand Down Expand Up @@ -333,7 +334,8 @@ interface IOPContractsManager {

/// @notice Upgrades the implementation of all proxies in the specified chains
/// @param _opChainConfigs The chains to upgrade
function upgrade(OpChainConfig[] memory _opChainConfigs) external;
/// @param _upgradeSuperchainConfig Flag to optionally upgrade superchain config
function upgrade(OpChainConfig[] memory _opChainConfigs, bool _upgradeSuperchainConfig) external;

/// @notice Upgrades the SuperchainConfig contract.
/// @param _superchainConfig The SuperchainConfig contract to upgrade.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,7 @@ library ChainAssertions {
SystemConfig: address(_output.systemConfigImpl),
L1ERC721Bridge: address(_output.l1ERC721BridgeImpl),
ProtocolVersions: address(_output.protocolVersionsImpl),
CeloSuperchainConfig: address(_output.celoSuperchainConfigImpl),
SuperchainConfig: address(_output.superchainConfigImpl)
});
}
Expand Down
1 change: 1 addition & 0 deletions packages/contracts-bedrock/scripts/deploy/Deploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ contract Deploy is Deployer {
SystemConfig: artifacts.getAddress("SystemConfigProxy"),
L1ERC721Bridge: artifacts.getAddress("L1ERC721BridgeProxy"),
ProtocolVersions: artifacts.getAddress("ProtocolVersionsProxy"),
CeloSuperchainConfig: artifacts.getAddress("CeloSuperchainConfigProxy"),
SuperchainConfig: artifacts.getAddress("SuperchainConfigProxy")
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { Chains } from "scripts/libraries/Chains.sol";
import { Types } from "scripts/libraries/Types.sol";

// Interfaces
import { ICeloSuperchainConfig } from "interfaces/L1/ICeloSuperchainConfig.sol";
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol";
import { IDelayedWETH } from "interfaces/dispute/IDelayedWETH.sol";
Expand Down Expand Up @@ -77,6 +78,7 @@ contract DeployImplementations is Script {
IOptimismMintableERC20Factory optimismMintableERC20FactoryImpl;
IDisputeGameFactory disputeGameFactoryImpl;
IAnchorStateRegistry anchorStateRegistryImpl;
ICeloSuperchainConfig celoSuperchainConfigImpl;
ISuperchainConfig superchainConfigImpl;
IProtocolVersions protocolVersionsImpl;
}
Expand All @@ -89,6 +91,7 @@ contract DeployImplementations is Script {
assertValidInput(_input);

// Deploy the implementations.
deployCeloSuperchainConfigImpl(output_);
deploySuperchainConfigImpl(output_);
deployProtocolVersionsImpl(output_);
deploySystemConfigImpl(output_);
Expand Down Expand Up @@ -124,6 +127,7 @@ contract DeployImplementations is Script {
returns (IOPContractsManager opcm_)
{
IOPContractsManager.Implementations memory implementations = IOPContractsManager.Implementations({
celoSuperchainConfigImpl: address(_output.celoSuperchainConfigImpl),
superchainConfigImpl: address(_output.superchainConfigImpl),
protocolVersionsImpl: address(_output.protocolVersionsImpl),
l1ERC721BridgeImpl: address(_output.l1ERC721BridgeImpl),
Expand Down Expand Up @@ -225,6 +229,18 @@ contract DeployImplementations is Script {

// --- Core Contracts ---

function deployCeloSuperchainConfigImpl(Output memory _output) private {
ICeloSuperchainConfig impl = ICeloSuperchainConfig(
DeployUtils.createDeterministic({
_name: "CeloSuperchainConfig",
_args: DeployUtils.encodeConstructor(abi.encodeCall(ICeloSuperchainConfig.__constructor__, ())),
_salt: _salt
})
);
vm.label(address(impl), "CeloSuperchainConfigImpl");
_output.celoSuperchainConfigImpl = impl;
}

function deploySuperchainConfigImpl(Output memory _output) private {
ISuperchainConfig impl = ISuperchainConfig(
DeployUtils.createDeterministic({
Expand Down Expand Up @@ -622,6 +638,7 @@ contract DeployImplementations is Script {
address(_output.delayedWETHImpl),
address(_output.preimageOracleSingleton),
address(_output.mipsSingleton),
address(_output.celoSuperchainConfigImpl),
address(_output.superchainConfigImpl),
address(_output.protocolVersionsImpl)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,7 @@ contract DeployOPChain is Script {
SystemConfig: address(_doo.systemConfigProxy()),
L1ERC721Bridge: address(_doo.l1ERC721BridgeProxy()),
ProtocolVersions: address(0),
CeloSuperchainConfig: address(0),
SuperchainConfig: address(0)
});

Expand Down
17 changes: 14 additions & 3 deletions packages/contracts-bedrock/scripts/deploy/UpgradeOPChain.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ contract UpgradeOPChainInput is BaseDeployIO {
address internal _prank;
OPContractsManager internal _opcm;
bytes _opChainConfigs;
bool _upgradeSuperchainConfig;

// Setter for OPContractsManager type
function set(bytes4 _sel, address _value) public {
Expand All @@ -26,6 +27,11 @@ contract UpgradeOPChainInput is BaseDeployIO {
else revert("UpgradeOPCMInput: unknown selector");
}

function set(bytes4 _sel, bool _value) public {
if (_sel == this.upgradeSuperchainConfig.selector) _upgradeSuperchainConfig = _value;
else revert("UpgradeOPCMInput: unknown selector");
}

function prank() public view returns (address) {
require(address(_prank) != address(0), "UpgradeOPCMInput: prank not set");
return _prank;
Expand All @@ -40,13 +46,18 @@ contract UpgradeOPChainInput is BaseDeployIO {
require(_opChainConfigs.length > 0, "UpgradeOPCMInput: not set");
return _opChainConfigs;
}

function upgradeSuperchainConfig() public view returns (bool) {
return _upgradeSuperchainConfig;
}
}

contract UpgradeOPChain is Script {
function run(UpgradeOPChainInput _uoci) external {
OPContractsManager opcm = _uoci.opcm();
OPContractsManager.OpChainConfig[] memory opChainConfigs =
abi.decode(_uoci.opChainConfigs(), (OPContractsManager.OpChainConfig[]));
bool upgradeSuperchainConfig_ = _uoci.upgradeSuperchainConfig();

// Etch DummyCaller contract. This contract is used to mimic the contract that is used
// as the source of the delegatecall to the OPCM. In practice this will be the governance
Expand All @@ -60,16 +71,16 @@ contract UpgradeOPChain is Script {
// Call into the DummyCaller. This will perform the delegatecall under the hood and
// return the result.
vm.broadcast(msg.sender);
(bool success,) = DummyCaller(prank).upgrade(opChainConfigs);
(bool success,) = DummyCaller(prank).upgrade(opChainConfigs, upgradeSuperchainConfig_);
require(success, "UpgradeChain: upgrade failed");
}
}

contract DummyCaller {
address internal _opcmAddr;

function upgrade(OPContractsManager.OpChainConfig[] memory _opChainConfigs) external returns (bool, bytes memory) {
bytes memory data = abi.encodeCall(DummyCaller.upgrade, _opChainConfigs);
function upgrade(OPContractsManager.OpChainConfig[] memory _opChainConfigs, bool _upgradeSuperchainConfig) external returns (bool, bytes memory) {
bytes memory data = abi.encodeCall(DummyCaller.upgrade, (_opChainConfigs, _upgradeSuperchainConfig));
(bool success, bytes memory result) = _opcmAddr.delegatecall(data);
return (success, result);
}
Expand Down
1 change: 1 addition & 0 deletions packages/contracts-bedrock/scripts/libraries/Types.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ library Types {
address SystemConfig;
address L1ERC721Bridge;
address ProtocolVersions;
address CeloSuperchainConfig;
address SuperchainConfig;
}
}
Loading