implementations.go 3.5 KB
Newer Older
1 2 3 4 5 6
package pipeline

import (
	"fmt"
	"math/big"

7 8
	"github.com/ethereum-optimism/optimism/op-service/jsonutil"

9
	"github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/opcm"
10
	"github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/standard"
11
	"github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/state"
12 13
)

14
func DeployImplementations(env *Env, intent *state.Intent, st *state.State) error {
15 16 17 18 19 20 21 22 23
	lgr := env.Logger.New("stage", "deploy-implementations")

	if !shouldDeployImplementations(intent, st) {
		lgr.Info("implementations deployment not needed")
		return nil
	}

	lgr.Info("deploying implementations")

24
	var contractsRelease string
25
	var err error
26
	if intent.L1ContractsLocator.IsTag() {
27
		contractsRelease = intent.L1ContractsLocator.Tag
28 29
	} else {
		contractsRelease = "dev"
30 31
	}

32
	proofParams, err := jsonutil.MergeJSON(
33
		state.SuperchainProofParams{
34 35 36 37 38 39 40 41 42 43 44 45 46
			WithdrawalDelaySeconds:          standard.WithdrawalDelaySeconds,
			MinProposalSizeBytes:            standard.MinProposalSizeBytes,
			ChallengePeriodSeconds:          standard.ChallengePeriodSeconds,
			ProofMaturityDelaySeconds:       standard.ProofMaturityDelaySeconds,
			DisputeGameFinalityDelaySeconds: standard.DisputeGameFinalityDelaySeconds,
			MIPSVersion:                     standard.MIPSVersion,
		},
		intent.GlobalDeployOverrides,
	)
	if err != nil {
		return fmt.Errorf("error merging proof params from overrides: %w", err)
	}

47 48 49
	dio, err := opcm.DeployImplementations(
		env.L1ScriptHost,
		opcm.DeployImplementationsInput{
50 51 52 53 54 55
			WithdrawalDelaySeconds:          new(big.Int).SetUint64(proofParams.WithdrawalDelaySeconds),
			MinProposalSizeBytes:            new(big.Int).SetUint64(proofParams.MinProposalSizeBytes),
			ChallengePeriodSeconds:          new(big.Int).SetUint64(proofParams.ChallengePeriodSeconds),
			ProofMaturityDelaySeconds:       new(big.Int).SetUint64(proofParams.ProofMaturityDelaySeconds),
			DisputeGameFinalityDelaySeconds: new(big.Int).SetUint64(proofParams.DisputeGameFinalityDelaySeconds),
			MipsVersion:                     new(big.Int).SetUint64(proofParams.MIPSVersion),
56
			L1ContractsRelease:              contractsRelease,
57 58
			SuperchainConfigProxy:           st.SuperchainDeployment.SuperchainConfigProxyAddress,
			ProtocolVersionsProxy:           st.SuperchainDeployment.ProtocolVersionsProxyAddress,
59
			UpgradeController:               intent.SuperchainRoles.ProxyAdminOwner,
60
			UseInterop:                      intent.UseInterop,
61 62 63 64 65 66 67
		},
	)
	if err != nil {
		return fmt.Errorf("error deploying implementations: %w", err)
	}

	st.ImplementationsDeployment = &state.ImplementationsDeployment{
68
		OpcmAddress:                             dio.Opcm,
69 70 71 72 73 74 75 76 77 78
		DelayedWETHImplAddress:                  dio.DelayedWETHImpl,
		OptimismPortalImplAddress:               dio.OptimismPortalImpl,
		PreimageOracleSingletonAddress:          dio.PreimageOracleSingleton,
		MipsSingletonAddress:                    dio.MipsSingleton,
		SystemConfigImplAddress:                 dio.SystemConfigImpl,
		L1CrossDomainMessengerImplAddress:       dio.L1CrossDomainMessengerImpl,
		L1ERC721BridgeImplAddress:               dio.L1ERC721BridgeImpl,
		L1StandardBridgeImplAddress:             dio.L1StandardBridgeImpl,
		OptimismMintableERC20FactoryImplAddress: dio.OptimismMintableERC20FactoryImpl,
		DisputeGameFactoryImplAddress:           dio.DisputeGameFactoryImpl,
79
		AnchorStateRegistryImplAddress:          dio.AnchorStateRegistryImpl,
80 81 82 83 84 85 86 87
	}

	return nil
}

func shouldDeployImplementations(intent *state.Intent, st *state.State) bool {
	return st.ImplementationsDeployment == nil
}