Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
b8d0fec
refactor(contracts): remove OPCMv1 from all Solidity code
smartcontracts Mar 27, 2026
6d35eae
fix(contracts): keep deprecated v1 struct fields for Go ABI compat
smartcontracts Mar 27, 2026
161c60c
fix(op-deployer): remove v1 OPCM branching to match Solidity changes
smartcontracts Mar 27, 2026
0dc1947
fix(op-deployer): populate OpcmImpl with v2 address for downstream co…
smartcontracts Mar 27, 2026
2ed262f
fix(op-devstack): remove v1 migrate path, use v2 migrator ABI
smartcontracts Mar 27, 2026
97906ad
fix(op-deployer): update test assertions for v1 OPCM removal
smartcontracts Mar 27, 2026
475e3b6
fix(op-devstack): remove unused getInteropCannonKonaAbsolutePrestate
smartcontracts Mar 27, 2026
a4488a0
fix: update tests for v1 OPCM removal
smartcontracts Mar 30, 2026
d868b52
fix(op-devstack): use V2 upgrade path for addGameType
smartcontracts Mar 30, 2026
f6a9e11
fix(op-devstack): send all 3 game configs in V2 upgrade
smartcontracts Mar 30, 2026
fc72fd3
fix: use OpcmV2 in interopgen and apply tests
smartcontracts Mar 30, 2026
b98d3af
fix: use V2 migrate input in interopgen, fix apply test
smartcontracts Mar 30, 2026
a9b68c7
fix(op-deployer): set OpcmV2Impl in init when OPCM is pre-deployed
smartcontracts Mar 30, 2026
e6c3cb3
chore: regenerate semver-lock.json after rebase
smartcontracts Mar 31, 2026
e9312d8
fix(contracts): add missing imports after rebase conflict resolution
smartcontracts Mar 31, 2026
0c60343
fix(op-devstack): send all 6 game configs for V2 upgrade
smartcontracts Mar 31, 2026
3ca3d64
fix(op-e2e): include tx value in proposer sendTx for init bond
smartcontracts Mar 31, 2026
2f65b01
fix(interopgen): register SUPER_CANNON in migrate DisputeGameConfigs
smartcontracts Mar 31, 2026
8a088a6
fix(op-devstack): register all super game types in migrate
smartcontracts Mar 31, 2026
ab7d24d
fix: goimports formatting in superroot.go
smartcontracts Mar 31, 2026
d0a920f
fix: review improvements — version guards, artifact ABI, stale bindings
smartcontracts Mar 31, 2026
451a1ee
fix(interopgen): register Super Cannon Kona game type in V2 migration
smartcontracts Apr 2, 2026
c731b04
fix(contracts): restore and migrate StandardValidator tests to V2
smartcontracts Apr 2, 2026
28f23d2
chore: remove narration comments about v1/v2 migration
smartcontracts Apr 2, 2026
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
66 changes: 42 additions & 24 deletions op-chain-ops/interopgen/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ func DeployL2ToL1(l1Host *script.Host, superCfg *SuperchainConfig, superDeployme
BasefeeScalar: cfg.GasPriceOracleBaseFeeScalar,
BlobBaseFeeScalar: cfg.GasPriceOracleBlobBaseFeeScalar,
L2ChainId: new(big.Int).SetUint64(cfg.L2ChainID),
Opcm: superDeployment.Opcm,
Opcm: superDeployment.OpcmV2,
SaltMixer: cfg.SaltMixer,
GasLimit: cfg.GasLimit,
DisputeGameType: cfg.DisputeGameType,
Expand Down Expand Up @@ -273,39 +273,57 @@ func MigrateInterop(
) (*InteropDeployment, error) {
l2ChainIDs := maps.Keys(l2Deployments)
sort.Strings(l2ChainIDs)
chainConfigs := make([]manage.OPChainConfig, len(l2Deployments))

// We don't have a super root at genesis. But stub the starting anchor root anyways to facilitate super DG testing.
startingAnchorRoot := common.Hash(opcm.PermissionedGameStartingAnchorRoot)

// Build chain system config addresses for V2 migrate input.
chainSystemConfigs := make([]common.Address, len(l2Deployments))
for i, l2ChainID := range l2ChainIDs {
l2Deployment := l2Deployments[l2ChainID]
chainConfigs[i] = manage.OPChainConfig{
SystemConfigProxy: l2Deployment.SystemConfigProxy,
CannonPrestate: l2Cfgs[l2ChainID].DisputeAbsolutePrestate,
CannonKonaPrestate: l2Cfgs[l2ChainID].DisputeKonaAbsolutePrestate,
}
chainSystemConfigs[i] = l2Deployments[l2ChainID].SystemConfigProxy
}

// For now get the fault game parameters from the first chain
// ABI-encode the cannon prestates as game args (from the first chain config).
l2ChainID := l2ChainIDs[0]
// We don't have a super root at genesis. But stub the starting anchor root anyways to facilitate super DG testing.
startingAnchorRoot := common.Hash(opcm.PermissionedGameStartingAnchorRoot)
cannonGameArgs := common.LeftPadBytes(l2Cfgs[l2ChainID].DisputeAbsolutePrestate.Bytes(), 32)
cannonKonaGameArgs := common.LeftPadBytes(l2Cfgs[l2ChainID].DisputeKonaAbsolutePrestate.Bytes(), 32)

const (
GameTypeCannon = uint32(0)
GameTypeSuperCannon = uint32(4)
GameTypeSuperCannonKona = uint32(9)
)

imi := manage.InteropMigrationInput{
Prank: superCfg.ProxyAdminOwner,
Opcm: superDeployment.Opcm,
MigrateInputV1: &manage.MigrateInputV1{
UsePermissionlessGame: true,
Opcm: superDeployment.OpcmV2,
MigrateInputV2: &manage.MigrateInputV2{
ChainSystemConfigs: chainSystemConfigs,
DisputeGameConfigs: []manage.DisputeGameConfig{
{
Enabled: true,
InitBond: big.NewInt(0),
GameType: GameTypeCannon,
GameArgs: cannonGameArgs,
},
{
Enabled: true,
InitBond: big.NewInt(0),
GameType: GameTypeSuperCannon,
GameArgs: cannonGameArgs,
},
{
Enabled: true,
InitBond: big.NewInt(0),
GameType: GameTypeSuperCannonKona,
GameArgs: cannonKonaGameArgs,
},
},
StartingAnchorRoot: manage.Proposal{
Root: startingAnchorRoot,
L2SequenceNumber: big.NewInt(int64(l1GenesisTimestamp)),
},
GameParameters: manage.GameParameters{
Proposer: l2Cfgs[l2ChainID].Proposer,
Challenger: l2Cfgs[l2ChainID].Challenger,
MaxGameDepth: l2Cfgs[l2ChainID].DisputeMaxGameDepth,
SplitDepth: l2Cfgs[l2ChainID].DisputeSplitDepth,
InitBond: big.NewInt(0),
ClockExtension: l2Cfgs[l2ChainID].DisputeClockExtension,
MaxClockDuration: l2Cfgs[l2ChainID].DisputeMaxClockDuration,
},
OpChainConfigs: chainConfigs,
StartingRespectedGameType: GameTypeSuperCannon,
},
}
output, err := manage.Migrate(l1Host, imi)
Expand Down
4 changes: 2 additions & 2 deletions op-deployer/pkg/deployer/bootstrap/implementations_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,9 @@ func testImplementations(t *testing.T, forkRPCURL string) {
// Assert that addresses stay the same between runs
t.Log("Deploying first implementation contracts bundle")
deployment1 := deploy()
require.NotEqual(t, common.Address{}, deployment1.Opcm, "Opcm address should be set")
require.NotEqual(t, common.Address{}, deployment1.OpcmV2, "OpcmV2 address should be set")
t.Log("Deploying second implementation contracts bundle")
deployment2 := deploy()
require.NotEqual(t, common.Address{}, deployment2.Opcm, "Opcm address should be set")
require.NotEqual(t, common.Address{}, deployment2.OpcmV2, "OpcmV2 address should be set")
require.Equal(t, deployment1, deployment2)
}
12 changes: 7 additions & 5 deletions op-deployer/pkg/deployer/integration_test/apply_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,8 @@ func TestEndToEndBootstrapApply(t *testing.T) {

intent, st := shared.NewIntent(t, l1ChainID, dk, l2ChainID, loc, loc, testCustomGasLimit)
intent.SuperchainRoles = nil
intent.OPCMAddress = &impls.Opcm
intent.OPCMAddress = &impls.OpcmV2
intent.SuperchainConfigProxy = &bstrap.SuperchainConfigProxy

require.NoError(t, deployer.ApplyPipeline(
ctx,
Expand Down Expand Up @@ -169,7 +170,7 @@ func TestEndToEndBootstrapApplyWithUpgrade(t *testing.T) {
name string
devFeature common.Hash
}{
{"default", common.Hash{}},
// "default" (non-V2) test case removed: v1 OPCM was deleted.
{"opcm-v2", deployer.OPCMV2DevFlag},
}
for _, tt := range tests {
Expand Down Expand Up @@ -433,8 +434,9 @@ func TestEndToEndApply(t *testing.T) {
// Verify that the dev feature bitmap is set to OPCMV2
require.Equal(t, deployer.OPCMV2DevFlag, intent.GlobalDeployOverrides["devFeatureBitmap"])

// Assert that the OPCM V1 addresses are zero
require.Equal(t, common.Address{}, st.ImplementationsDeployment.OpcmImpl, "OPCM V1 implementation should be zero")
// OpcmImpl is populated with the v2 address for downstream compat (v1 deleted)
require.Equal(t, st.ImplementationsDeployment.OpcmV2Impl, st.ImplementationsDeployment.OpcmImpl, "OpcmImpl should equal OpcmV2Impl")
// V1 sub-contract addresses are zero (v1 deleted, deprecated output fields)
require.Equal(t, common.Address{}, st.ImplementationsDeployment.OpcmContractsContainerImpl, "OPCM container implementation should be zero")
require.Equal(t, common.Address{}, st.ImplementationsDeployment.OpcmGameTypeAdderImpl, "OPCM game type adder implementation should be zero")
require.Equal(t, common.Address{}, st.ImplementationsDeployment.OpcmDeployerImpl, "OPCM deployer implementation should be zero")
Expand Down Expand Up @@ -1176,7 +1178,7 @@ func validateSuperchainDeployment(t *testing.T, st *state.State, cg codeGetter,
{"SuperchainProxyAdminImpl", st.SuperchainDeployment.SuperchainProxyAdminImpl},
{"SuperchainConfigProxy", st.SuperchainDeployment.SuperchainConfigProxy},
{"ProtocolVersionsProxy", st.SuperchainDeployment.ProtocolVersionsProxy},
{"OpcmImpl", st.ImplementationsDeployment.OpcmImpl},
{"OpcmV2Impl", st.ImplementationsDeployment.OpcmV2Impl},
{"PreimageOracleImpl", st.ImplementationsDeployment.PreimageOracleImpl},
{"MipsImpl", st.ImplementationsDeployment.MipsImpl},
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ func TestCLIBootstrapForge(t *testing.T) {
require.NoError(t, err)

// We only check specific addresses that are always set
require.NotEqual(t, common.Address{}, implsOutput.Opcm, "Opcm should be set")
require.NotEqual(t, common.Address{}, implsOutput.OpcmV2, "OpcmV2 should be set")
require.NotEqual(t, common.Address{}, implsOutput.OpcmStandardValidator, "OpcmStandardValidator should be set")
require.NotEqual(t, common.Address{}, implsOutput.DelayedWETHImpl, "DelayedWETHImpl should be set")
require.NotEqual(t, common.Address{}, implsOutput.OptimismPortalImpl, "OptimismPortalImpl should be set")
Expand Down Expand Up @@ -176,7 +176,7 @@ func TestCLIBootstrapForge(t *testing.T) {

// Verify all outputs have valid addresses
require.NoError(t, addresses.CheckNoZeroAddresses(superchainOutput))
require.NotEqual(t, common.Address{}, implsOutput.Opcm, "Opcm should be set")
require.NotEqual(t, common.Address{}, implsOutput.OpcmV2, "OpcmV2 should be set")

t.Log("✓ End-to-end bootstrap with Forge completed successfully")
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ func TestCLIBootstrap(t *testing.T) {
require.NoError(t, err)

// We only check specific addresses that are always set
require.NotEqual(t, common.Address{}, implsOutput.Opcm, "Opcm should be set")
require.NotEqual(t, common.Address{}, implsOutput.OpcmV2, "OpcmV2 should be set")
require.NotEqual(t, common.Address{}, implsOutput.OpcmStandardValidator, "OpcmStandardValidator should be set")
require.NotEqual(t, common.Address{}, implsOutput.DelayedWETHImpl, "DelayedWETHImpl should be set")
require.NotEqual(t, common.Address{}, implsOutput.OptimismPortalImpl, "OptimismPortalImpl should be set")
Expand Down
14 changes: 9 additions & 5 deletions op-deployer/pkg/deployer/integration_test/cli/migrate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,10 @@ func TestCLIMigrateRequiredFlags(t *testing.T) {
})
}

// TestCLIMigrateV1 tests the migrate-v1 CLI command for OPCM v1
// TestCLIMigrateV1 tests the migrate-v1 CLI command for OPCM v1.
// Skipped: OPCMv1 contract has been deleted. Remove this test in the Go cleanup PR.
func TestCLIMigrateV1(t *testing.T) {
t.Skip("OPCMv1 contract deleted — v1 migration path no longer functional")
lgr := testlog.Logger(t, slog.LevelDebug)

forkedL1, stopL1, err := devnet.NewForkedSepolia(lgr)
Expand Down Expand Up @@ -154,8 +156,8 @@ func TestCLIMigrateV1(t *testing.T) {

impls, err := bootstrap.Implementations(ctx, cfg)
require.NoError(t, err, "Failed to deploy implementations")
require.NotEqual(t, common.Address{}, impls.Opcm, "OPCM V1 address should be set")
require.Equal(t, common.Address{}, impls.OpcmV2, "OPCM V2 address should be zero when V1 is deployed")
require.NotEqual(t, common.Address{}, impls.OpcmV2, "OPCM V2 address should be set")
require.Equal(t, common.Address{}, impls.Opcm, "OPCM V1 address should be zero (v1 deleted)")

// Set up a test chain
l1ChainID := uint64(11155111) // Sepolia chain ID
Expand Down Expand Up @@ -219,7 +221,8 @@ func TestCLIMigrateV1(t *testing.T) {
// Set implementations deployment addresses
if st.ImplementationsDeployment == nil {
st.ImplementationsDeployment = &addresses.ImplementationsContracts{
OpcmImpl: impls.Opcm,
OpcmImpl: impls.OpcmV2, // v1 deleted; populate with v2 for downstream compat
OpcmV2Impl: impls.OpcmV2,
OptimismPortalImpl: impls.OptimismPortalImpl,
DelayedWethImpl: impls.DelayedWETHImpl,
EthLockboxImpl: impls.ETHLockboxImpl,
Expand Down Expand Up @@ -439,7 +442,8 @@ func TestCLIMigrateV2(t *testing.T) {
// Set implementations deployment addresses
if st.ImplementationsDeployment == nil {
st.ImplementationsDeployment = &addresses.ImplementationsContracts{
OpcmImpl: impls.OpcmV2,
OpcmImpl: impls.OpcmV2, // v1 deleted; populate with v2 for downstream compat
OpcmV2Impl: impls.OpcmV2,
OpcmContainerImpl: impls.OpcmContainer,
OpcmUtilsImpl: impls.OpcmUtils,
OpcmMigratorImpl: impls.OpcmMigrator,
Expand Down
61 changes: 13 additions & 48 deletions op-deployer/pkg/deployer/integration_test/cli/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@ import (
"strings"
"testing"

"github.com/ethereum-optimism/optimism/op-chain-ops/opcmregistry"
"github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/broadcaster"
"github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/standard"
"github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/upgrade/v2_0_0"
v6_0_0 "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/upgrade/v6_0_0"
"github.com/ethereum-optimism/optimism/op-service/testlog"
"github.com/ethereum-optimism/optimism/op-service/testutils/devnet"
"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -61,11 +59,8 @@ func TestCLIUpgrade(t *testing.T) {
version: "v5.0.0",
forkBlock: 9629972, // one block past the opcm deployment block
},
{
contractTag: standard.ContractsV600Tag,
version: "v6.0.0-rc.2",
forkBlock: 10101510, // one block past the opcm deployment block
},
// v6.0.0-rc.2 test case removed: it deployed a v1 OPCM on Sepolia, and the
// embedded UpgradeOPChain.s.sol script no longer supports v1 OPCM upgrades.
}

for _, tc := range testCases {
Expand All @@ -82,41 +77,18 @@ func TestCLIUpgrade(t *testing.T) {
opcm, err := standard.OPCMImplAddressFor(11155111, tc.contractTag)
require.NoError(t, err)

versionStr := strings.TrimPrefix(tc.version, "v") // Remove "v" prefix for parsing
version, err := opcmregistry.ParseSemver(versionStr)
require.NoError(t, err, "failed to parse version %s", versionStr)

v6Semver := opcmregistry.Semver{Major: 6, Minor: 0, Patch: 0}
var configData []byte
if version.Compare(v6Semver) >= 0 {
// v6.0.0+ uses a different input structure
testConfig := v6_0_0.UpgradeOPChainInput{
Prank: l1ProxyAdminOwner,
Opcm: opcm,
EncodedChainConfigs: []v6_0_0.OPChainConfig{
{
SystemConfigProxy: systemConfigProxy,
CannonPrestate: common.HexToHash("0x0abc"),
CannonKonaPrestate: common.HexToHash("0x0def"),
},
testConfig := v2_0_0.UpgradeOPChainInput{
Prank: l1ProxyAdminOwner,
Opcm: opcm,
EncodedChainConfigs: []v2_0_0.OPChainConfig{
{
SystemConfigProxy: systemConfigProxy,
ProxyAdmin: proxyAdminImpl,
AbsolutePrestate: common.HexToHash("0x0abc"),
},
}
configData, err = json.MarshalIndent(testConfig, "", " ")
} else {
// Older versions use v2_0_0 structure
testConfig := v2_0_0.UpgradeOPChainInput{
Prank: l1ProxyAdminOwner,
Opcm: opcm,
EncodedChainConfigs: []v2_0_0.OPChainConfig{
{
SystemConfigProxy: systemConfigProxy,
ProxyAdmin: proxyAdminImpl,
AbsolutePrestate: common.HexToHash("0x0abc"),
},
},
}
configData, err = json.MarshalIndent(testConfig, "", " ")
},
}
configData, err := json.MarshalIndent(testConfig, "", " ")
require.NoError(t, err)

configFile := filepath.Join(workDir, "upgrade_config_"+tc.version+".json")
Expand Down Expand Up @@ -148,14 +120,7 @@ func TestCLIUpgrade(t *testing.T) {
require.Equal(t, l1ProxyAdminOwner.Hex(), dump[0].To.Hex())
dataHex := hex.EncodeToString(dump[0].Data)

// v6.0.0+ uses a different function signature: upgrade((address,bytes32,bytes32)[])
// Older versions use: upgrade((address,address,bytes32)[])
var expectedSelector string
if version.Compare(v6Semver) >= 0 {
expectedSelector = "cbeda5a7" // upgrade((address,bytes32,bytes32)[])
} else {
expectedSelector = "ff2dd5a1" // upgrade((address,address,bytes32)[])
}
expectedSelector := "ff2dd5a1"
require.True(t, strings.HasPrefix(dataHex, expectedSelector),
"calldata should have opcm.upgrade fcn selector %s, got: %s", expectedSelector, dataHex[:8])
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ func TestCLIVerify(t *testing.T) {
"superchain_superchain_config_proxy": "Proxy.sol/Proxy.json",
"superchain_protocol_versions_proxy": "Proxy.sol/Proxy.json",
"superchain_superchain_config_impl": "SuperchainConfig.sol/SuperchainConfig.json",
"implementations_opcm_impl": "OPContractsManager.sol/OPContractsManager.json",
"implementations_opcm_impl": "OPContractsManagerV2.sol/OPContractsManagerV2.json",
"regular_contract_name": "RegularContractName.sol/RegularContractName.json",
}

Expand Down
1 change: 1 addition & 0 deletions op-deployer/pkg/deployer/manage/add_game_type_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
)

func TestAddGameType(t *testing.T) {
t.Skip("OPCMv1 contract deleted — AddGameType.s.sol no longer exists. Use TestManageAddGameTypeV2_CLI instead.")
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can just remove this entirely now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

op-deployer/pkg/deployer/opcm/add_game_type.go:119 also references AddGameType.s.sol

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will handle in follow-up PR

// Since the opcm version is not yet on sepolia, we create a fork of sepolia then deploy the opcm via deploy implementations.
lgr := testlog.Logger(t, slog.LevelDebug)
forkedL1, stopL1, err := devnet.NewForkedSepolia(lgr)
Expand Down
1 change: 0 additions & 1 deletion op-deployer/pkg/deployer/manage/migrate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ func TestInteropMigration(t *testing.T) {
name string
devFeature common.Hash
}{
{"opcm-v1", common.Hash{}},
{"opcm-v2", deployer.OPCMV2DevFlag},
}

Expand Down
2 changes: 1 addition & 1 deletion op-deployer/pkg/deployer/pipeline/implementations.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func DeployImplementations(env *Env, intent *state.Intent, st *state.State) erro
}

st.ImplementationsDeployment = &addresses.ImplementationsContracts{
OpcmImpl: dio.Opcm,
OpcmImpl: dio.OpcmV2, // v1 deleted; populate with v2 for downstream compat
OpcmGameTypeAdderImpl: dio.OpcmGameTypeAdder,
OpcmDeployerImpl: dio.OpcmDeployer,
OpcmUpgraderImpl: dio.OpcmUpgrader,
Expand Down
16 changes: 11 additions & 5 deletions op-deployer/pkg/deployer/pipeline/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,15 @@ func InitLiveStrategy(ctx context.Context, env *Env, intent *state.Intent, st *s
superchainConfigAddr = *intent.SuperchainConfigProxy
}

// The ReadSuperchainDeployment script (packages/contracts-bedrock/scripts/deploy/ReadSuperchainDeployment.s.sol)
// uses the OPCM's semver version (>= 7.0.0 indicates v2) to determine how to populate the superchain state:
// - OPCMv1 (< 7.0.0): Queries the OPCM contract to get SuperchainConfig and ProtocolVersions
// - OPCMv2 (>= 7.0.0): Uses the provided SuperchainConfigProxy address; ProtocolVersions is deprecated
// If only an OPCM address is provided, resolve SuperchainConfigProxy from it on-chain.
if superchainConfigAddr == (common.Address{}) && opcmAddr != (common.Address{}) {
opcmContract := opcm.NewContract(opcmAddr, env.L1Client)
resolved, err := opcmContract.SuperchainConfig(ctx)
if err != nil {
return fmt.Errorf("error resolving SuperchainConfig from OPCM at %s: %w", opcmAddr, err)
}
superchainConfigAddr = resolved
}
superDeployment, superRoles, err := PopulateSuperchainState(env, opcmAddr, superchainConfigAddr)
if err != nil {
return fmt.Errorf("error populating superchain state: %w", err)
Expand All @@ -57,7 +62,8 @@ func InitLiveStrategy(ctx context.Context, env *Env, intent *state.Intent, st *s

if hasPredeployedOPCM && st.ImplementationsDeployment == nil {
st.ImplementationsDeployment = &addresses.ImplementationsContracts{
OpcmImpl: opcmAddr,
OpcmImpl: opcmAddr,
OpcmV2Impl: opcmAddr,
}
}
}
Expand Down
Loading
Loading