diff --git a/op-deployer/pkg/deployer/upgrade/flags.go b/op-deployer/pkg/deployer/upgrade/flags.go index 51f15aa88b53c..9be34a23f18f9 100644 --- a/op-deployer/pkg/deployer/upgrade/flags.go +++ b/op-deployer/pkg/deployer/upgrade/flags.go @@ -3,6 +3,7 @@ package upgrade import ( "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer" v200 "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/upgrade/v2_0_0" + v300 "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/upgrade/v3_0_0" oplog "github.com/ethereum-optimism/optimism/op-service/log" "github.com/urfave/cli/v2" ) @@ -24,11 +25,19 @@ var Commands = cli.Commands{ Usage: "upgrades a chain to version v2.0.0", Flags: append([]cli.Flag{ deployer.L1RPCURLFlag, - deployer.DeploymentTargetFlag, - deployer.PrivateKeyFlag, ConfigFlag, OverrideArtifactsURLFlag, }, oplog.CLIFlags(deployer.EnvVarPrefix)...), Action: UpgradeCLI(v200.DefaultUpgrader), }, + &cli.Command{ + Name: "v3.0.0", + Usage: "upgrades a chain to version v3.0.0", + Flags: append([]cli.Flag{ + deployer.L1RPCURLFlag, + ConfigFlag, + OverrideArtifactsURLFlag, + }, oplog.CLIFlags(deployer.EnvVarPrefix)...), + Action: UpgradeCLI(v300.DefaultUpgrader), + }, } diff --git a/op-deployer/pkg/deployer/upgrade/upgrader.go b/op-deployer/pkg/deployer/upgrade/upgrader.go index 89c33202f8748..2bd6edd2a889d 100644 --- a/op-deployer/pkg/deployer/upgrade/upgrader.go +++ b/op-deployer/pkg/deployer/upgrade/upgrader.go @@ -11,18 +11,14 @@ import ( "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/artifacts" "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/broadcaster" "github.com/ethereum-optimism/optimism/op-deployer/pkg/env" - opcrypto "github.com/ethereum-optimism/optimism/op-service/crypto" oplog "github.com/ethereum-optimism/optimism/op-service/log" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/rpc" "github.com/urfave/cli/v2" ) type Upgrader interface { Upgrade(host *script.Host, input json.RawMessage) error - SupportsVersion(version string) bool ArtifactsURL() string } @@ -39,10 +35,6 @@ func UpgradeCLI(upgrader Upgrader) func(*cli.Context) error { if l1RPC == "" { return fmt.Errorf("missing required flag: %s", deployer.L1RPCURLFlag.Name) } - deploymentTarget, err := deployer.NewDeploymentTarget(cliCtx.String(deployer.DeploymentTargetFlag.Name)) - if err != nil { - return fmt.Errorf("failed to parse deployment target: %w", err) - } artifactsURL := upgrader.ArtifactsURL() overrideArtifactsURL := cliCtx.String(OverrideArtifactsURLFlag.Name) @@ -58,49 +50,9 @@ func UpgradeCLI(upgrader Upgrader) func(*cli.Context) error { if err != nil { return fmt.Errorf("failed to dial RPC %s: %w", l1RPC, err) } - ethClient := ethclient.NewClient(rpcClient) - - chainID, err := ethClient.ChainID(ctx) - if err != nil { - return fmt.Errorf("failed to get chain ID: %w", err) - } - var bcaster broadcaster.Broadcaster + bcaster := new(broadcaster.CalldataBroadcaster) depAddr := common.Address{'D'} - switch deploymentTarget { - case deployer.DeploymentTargetLive: - privateKeyHex := cliCtx.String(deployer.PrivateKeyFlag.Name) - if privateKeyHex == "" { - return fmt.Errorf("%s flag is required for live deployment", deployer.PrivateKeyFlag.Name) - } - - pk, err := crypto.HexToECDSA(privateKeyHex) - if err != nil { - return fmt.Errorf("failed to parse private key: %w", err) - } - - depAddr = crypto.PubkeyToAddress(pk.PublicKey) - - bcaster, err = broadcaster.NewKeyedBroadcaster(broadcaster.KeyedBroadcasterOpts{ - Logger: lgr, - ChainID: chainID, - Client: ethClient, - Signer: opcrypto.SignerFnFromBind(opcrypto.PrivateKeySignerFn(pk, chainID)), - From: depAddr, - }) - if err != nil { - return fmt.Errorf("failed to create broadcaster: %w", err) - } - case deployer.DeploymentTargetCalldata: - bcaster = new(broadcaster.CalldataBroadcaster) - case deployer.DeploymentTargetNoop: - bcaster = broadcaster.NoopBroadcaster() - case deployer.DeploymentTargetGenesis: - return fmt.Errorf("cannot upgrade into a genesis deployment") - default: - return fmt.Errorf("unknown deployment target: %s", deploymentTarget) - } - cacheDir := cliCtx.String(deployer.CacheDirFlag.Name) artifactsFS, err := artifacts.Download(ctx, artifactsLocator, artifacts.BarProgressor(), cacheDir) @@ -132,21 +84,15 @@ func UpgradeCLI(upgrader Upgrader) func(*cli.Context) error { return fmt.Errorf("failed to upgrade: %w", err) } - if deploymentTarget == deployer.DeploymentTargetCalldata { - dump, err := bcaster.(*broadcaster.CalldataBroadcaster).Dump() - if err != nil { - return fmt.Errorf("failed to dump calldata: %w", err) - } + dump, err := bcaster.Dump() + if err != nil { + return fmt.Errorf("failed to dump calldata: %w", err) + } - enc := json.NewEncoder(os.Stdout) - enc.SetIndent("", " ") - if err := enc.Encode(dump); err != nil { - return fmt.Errorf("failed to encode calldata: %w", err) - } - } else if deploymentTarget == deployer.DeploymentTargetLive { - if _, err := bcaster.Broadcast(ctx); err != nil { - return fmt.Errorf("failed to broadcast: %w", err) - } + enc := json.NewEncoder(os.Stdout) + enc.SetIndent("", " ") + if err := enc.Encode(dump); err != nil { + return fmt.Errorf("failed to encode calldata: %w", err) } return nil diff --git a/op-deployer/pkg/deployer/upgrade/v2_0_0/upgrade.go b/op-deployer/pkg/deployer/upgrade/v2_0_0/upgrade.go index a5926899d01bf..d59326f1e4db8 100644 --- a/op-deployer/pkg/deployer/upgrade/v2_0_0/upgrade.go +++ b/op-deployer/pkg/deployer/upgrade/v2_0_0/upgrade.go @@ -52,10 +52,6 @@ func (u *Upgrader) Upgrade(host *script.Host, input json.RawMessage) error { return Upgrade(host, upgradeInput) } -func (u *Upgrader) SupportsVersion(version string) bool { - return version == "2.0.0" -} - func (u *Upgrader) ArtifactsURL() string { return "tag://" + standard.ContractsV200Tag } diff --git a/op-deployer/pkg/deployer/upgrade/v3_0_0/upgrade.go b/op-deployer/pkg/deployer/upgrade/v3_0_0/upgrade.go new file mode 100644 index 0000000000000..f99866bcfb7f3 --- /dev/null +++ b/op-deployer/pkg/deployer/upgrade/v3_0_0/upgrade.go @@ -0,0 +1,25 @@ +// Package v3_0_0 implements the upgrade to v3.0.0 (U14). The interface for the upgrade is identical +// to the upgrade for v2.0.0 (U13), so all this package does is implement the Upgrader interface and +// call into the v2.0.0 upgrade. +package v3_0_0 + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-chain-ops/script" + "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/standard" + v200 "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/upgrade/v2_0_0" +) + +type Upgrader struct { +} + +func (u *Upgrader) Upgrade(host *script.Host, input json.RawMessage) error { + return v200.DefaultUpgrader.Upgrade(host, input) +} + +func (u *Upgrader) ArtifactsURL() string { + return "tag://" + standard.ContractsV300Tag +} + +var DefaultUpgrader = new(Upgrader)