Skip to content
Merged
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
13 changes: 11 additions & 2 deletions op-deployer/pkg/deployer/upgrade/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand All @@ -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),
},
}
72 changes: 9 additions & 63 deletions op-deployer/pkg/deployer/upgrade/upgrader.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions op-deployer/pkg/deployer/upgrade/v2_0_0/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
25 changes: 25 additions & 0 deletions op-deployer/pkg/deployer/upgrade/v3_0_0/upgrade.go
Original file line number Diff line number Diff line change
@@ -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)