Skip to content

Commit de3865c

Browse files
authored
-rc is removed when upgrade() is called by the Upgrade Controller (#13863)
* append -rc if not upgraded yet * append -rc if not upgraded yet * fix tests * fix tests * fixes * try fix go tests * fix contracts tests * fixes * fixes * fixes * fixes
1 parent 4a15412 commit de3865c

23 files changed

+359
-34
lines changed

op-chain-ops/interopgen/deploy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ func DeploySuperchainToL1(l1Host *script.Host, superCfg *SuperchainConfig) (*Sup
171171
L1ContractsRelease: superCfg.Implementations.L1ContractsRelease,
172172
SuperchainConfigProxy: superDeployment.SuperchainConfigProxy,
173173
ProtocolVersionsProxy: superDeployment.ProtocolVersionsProxy,
174+
UpgradeController: superCfg.ProxyAdminOwner,
174175
UseInterop: superCfg.Implementations.UseInterop,
175176
})
176177
if err != nil {

op-deployer/pkg/deployer/bootstrap/implementations.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ type ImplementationsConfig struct {
3939
DisputeGameFinalityDelaySeconds uint64 `cli:"dispute-game-finality-delay-seconds"`
4040
SuperchainConfigProxy common.Address `cli:"superchain-config-proxy"`
4141
ProtocolVersionsProxy common.Address `cli:"protocol-versions-proxy"`
42+
UpgradeController common.Address `cli:"upgrade-controller"`
4243
UseInterop bool `cli:"use-interop"`
4344

4445
Logger log.Logger
@@ -192,6 +193,7 @@ func Implementations(ctx context.Context, cfg ImplementationsConfig) (opcm.Deplo
192193
L1ContractsRelease: cfg.L1ContractsRelease,
193194
SuperchainConfigProxy: cfg.SuperchainConfigProxy,
194195
ProtocolVersionsProxy: cfg.ProtocolVersionsProxy,
196+
UpgradeController: cfg.UpgradeController,
195197
UseInterop: cfg.UseInterop,
196198
},
197199
); err != nil {

op-deployer/pkg/deployer/bootstrap/implementations_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ func testImplementations(t *testing.T, forkRPCURL string) {
7070

7171
loc, _ := testutil.LocalArtifacts(t)
7272

73+
proxyAdminOwner, err := standard.L1ProxyAdminOwner(uint64(chainID.Uint64()))
74+
require.NoError(t, err)
7375
deploy := func() opcm.DeployImplementationsOutput {
7476
out, err := Implementations(ctx, ImplementationsConfig{
7577
L1RPCUrl: runner.RPCUrl(),
@@ -85,6 +87,7 @@ func testImplementations(t *testing.T, forkRPCURL string) {
8587
MIPSVersion: 1,
8688
SuperchainConfigProxy: common.Address(*superchain.Config.SuperchainConfigAddr),
8789
ProtocolVersionsProxy: common.Address(*superchain.Config.ProtocolVersionsAddr),
90+
UpgradeController: proxyAdminOwner,
8891
UseInterop: false,
8992
})
9093
require.NoError(t, err)

op-deployer/pkg/deployer/opcm/implementations.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ type DeployImplementationsInput struct {
2020
L1ContractsRelease string
2121
SuperchainConfigProxy common.Address
2222
ProtocolVersionsProxy common.Address
23+
UpgradeController common.Address
2324
UseInterop bool // if true, deploy Interop implementations
2425
}
2526

op-deployer/pkg/deployer/opcm/opcm.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type DeployOPCMInput struct {
1111
SuperchainConfig common.Address
1212
ProtocolVersions common.Address
1313
L1ContractsRelease string
14+
UpgradeController common.Address
1415

1516
AddressManagerBlueprint common.Address
1617
ProxyBlueprint common.Address

op-deployer/pkg/deployer/pipeline/implementations.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ func DeployImplementations(env *Env, intent *state.Intent, st *state.State) erro
5656
L1ContractsRelease: contractsRelease,
5757
SuperchainConfigProxy: st.SuperchainDeployment.SuperchainConfigProxyAddress,
5858
ProtocolVersionsProxy: st.SuperchainDeployment.ProtocolVersionsProxyAddress,
59+
UpgradeController: intent.SuperchainRoles.ProxyAdminOwner,
5960
UseInterop: intent.UseInterop,
6061
},
6162
)

packages/contracts-bedrock/interfaces/L1/IOPContractsManager.sol

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ interface IOPContractsManager {
170170
error ReservedBitsSet();
171171
error UnexpectedPreambleData(bytes data);
172172
error UnsupportedERCVersion(uint8 version);
173+
error OnlyUpgradeController();
173174

174175
/// @notice Thrown when an address is the zero address.
175176
error AddressNotFound(address who);
@@ -208,7 +209,8 @@ interface IOPContractsManager {
208209
IProtocolVersions _protocolVersions,
209210
string memory _l1ContractsRelease,
210211
Blueprints memory _blueprints,
211-
Implementations memory _implementations
212+
Implementations memory _implementations,
213+
address _upgradeController
212214
)
213215
external;
214216

@@ -234,4 +236,10 @@ interface IOPContractsManager {
234236

235237
/// @notice Returns the implementation contract addresses.
236238
function implementations() external view returns (Implementations memory);
239+
240+
function upgradeController() external view returns (address);
241+
242+
function isRC() external view returns (bool);
243+
244+
function setRC(bool _isRC) external;
237245
}

packages/contracts-bedrock/interfaces/L1/IOPContractsManagerInterop.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ interface IOPContractsManagerInterop is IOPContractsManager {
1111
IProtocolVersions _protocolVersions,
1212
string memory _l1ContractsRelease,
1313
Blueprints memory _blueprints,
14-
Implementations memory _implementations
14+
Implementations memory _implementations,
15+
address _upgradeController
1516
)
1617
external;
1718
}

packages/contracts-bedrock/scripts/deploy/Deploy.s.sol

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,10 @@ contract Deploy is Deployer {
292292
dii.set(dii.l1ContractsRelease.selector, release);
293293
dii.set(dii.superchainConfigProxy.selector, artifacts.mustGetAddress("SuperchainConfigProxy"));
294294
dii.set(dii.protocolVersionsProxy.selector, artifacts.mustGetAddress("ProtocolVersionsProxy"));
295+
dii.set(
296+
dii.upgradeController.selector,
297+
IProxyAdmin(EIP1967Helper.getAdmin(artifacts.mustGetAddress("SuperchainConfigProxy"))).owner()
298+
);
295299

296300
if (_isInterop) {
297301
di = DeployImplementations(new DeployImplementationsInterop());

packages/contracts-bedrock/scripts/deploy/DeployImplementations.s.sol

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ contract DeployImplementationsInput is BaseDeployIO {
4545
// Outputs from DeploySuperchain.s.sol.
4646
ISuperchainConfig internal _superchainConfigProxy;
4747
IProtocolVersions internal _protocolVersionsProxy;
48+
address internal _upgradeController;
4849

4950
function set(bytes4 _sel, uint256 _value) public {
5051
require(_value != 0, "DeployImplementationsInput: cannot set zero value");
@@ -77,6 +78,7 @@ contract DeployImplementationsInput is BaseDeployIO {
7778
require(_addr != address(0), "DeployImplementationsInput: cannot set zero address");
7879
if (_sel == this.superchainConfigProxy.selector) _superchainConfigProxy = ISuperchainConfig(_addr);
7980
else if (_sel == this.protocolVersionsProxy.selector) _protocolVersionsProxy = IProtocolVersions(_addr);
81+
else if (_sel == this.upgradeController.selector) _upgradeController = _addr;
8082
else revert("DeployImplementationsInput: unknown selector");
8183
}
8284

@@ -127,6 +129,11 @@ contract DeployImplementationsInput is BaseDeployIO {
127129
require(address(_protocolVersionsProxy) != address(0), "DeployImplementationsInput: not set");
128130
return _protocolVersionsProxy;
129131
}
132+
133+
function upgradeController() public view returns (address) {
134+
require(address(_upgradeController) != address(0), "DeployImplementationsInput: not set");
135+
return _upgradeController;
136+
}
130137
}
131138

132139
contract DeployImplementationsOutput is BaseDeployIO {
@@ -269,6 +276,7 @@ contract DeployImplementationsOutput is BaseDeployIO {
269276
IOPContractsManager impl = IOPContractsManager(address(opcm()));
270277
require(address(impl.superchainConfig()) == address(_dii.superchainConfigProxy()), "OPCMI-10");
271278
require(address(impl.protocolVersions()) == address(_dii.protocolVersionsProxy()), "OPCMI-20");
279+
require(impl.upgradeController() == _dii.upgradeController(), "OPCMI-30");
272280
}
273281

274282
function assertValidOptimismPortalImpl(DeployImplementationsInput) internal view {
@@ -444,6 +452,7 @@ contract DeployImplementations is Script {
444452
{
445453
ISuperchainConfig superchainConfigProxy = _dii.superchainConfigProxy();
446454
IProtocolVersions protocolVersionsProxy = _dii.protocolVersionsProxy();
455+
address upgradeController = _dii.upgradeController();
447456

448457
IOPContractsManager.Implementations memory implementations = IOPContractsManager.Implementations({
449458
l1ERC721BridgeImpl: address(_dio.l1ERC721BridgeImpl()),
@@ -465,7 +474,14 @@ contract DeployImplementations is Script {
465474
_args: DeployUtils.encodeConstructor(
466475
abi.encodeCall(
467476
IOPContractsManager.__constructor__,
468-
(superchainConfigProxy, protocolVersionsProxy, _l1ContractsRelease, _blueprints, implementations)
477+
(
478+
superchainConfigProxy,
479+
protocolVersionsProxy,
480+
_l1ContractsRelease,
481+
_blueprints,
482+
implementations,
483+
upgradeController
484+
)
469485
)
470486
),
471487
_salt: _salt
@@ -790,6 +806,7 @@ contract DeployImplementationsInterop is DeployImplementations {
790806
{
791807
ISuperchainConfig superchainConfigProxy = _dii.superchainConfigProxy();
792808
IProtocolVersions protocolVersionsProxy = _dii.protocolVersionsProxy();
809+
address upgradeController = _dii.upgradeController();
793810

794811
IOPContractsManager.Implementations memory implementations = IOPContractsManager.Implementations({
795812
l1ERC721BridgeImpl: address(_dio.l1ERC721BridgeImpl()),
@@ -811,7 +828,14 @@ contract DeployImplementationsInterop is DeployImplementations {
811828
_args: DeployUtils.encodeConstructor(
812829
abi.encodeCall(
813830
IOPContractsManagerInterop.__constructor__,
814-
(superchainConfigProxy, protocolVersionsProxy, _l1ContractsRelease, _blueprints, implementations)
831+
(
832+
superchainConfigProxy,
833+
protocolVersionsProxy,
834+
_l1ContractsRelease,
835+
_blueprints,
836+
implementations,
837+
upgradeController
838+
)
815839
)
816840
),
817841
_salt: _salt

0 commit comments

Comments
 (0)