Skip to content

Commit dc0842e

Browse files
authored
op-deployer: Upgrade contracts support to v3.0.0 (#14733)
1 parent 1b90c05 commit dc0842e

File tree

5 files changed

+105
-13
lines changed

5 files changed

+105
-13
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/crate-crypto/go-kzg-4844 v1.1.0
1616
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0
1717
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3
18-
github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250228185245-d4bb112dc979
18+
github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250307201638-7c3999db14c6
1919
github.com/ethereum/go-ethereum v1.15.3
2020
github.com/fatih/color v1.18.0
2121
github.com/fsnotify/fsnotify v1.8.0

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ github.com/ethereum-optimism/op-geth v1.101503.0-rc.2 h1:CHIF+1pENaamq7jq8LZOTQ1
196196
github.com/ethereum-optimism/op-geth v1.101503.0-rc.2/go.mod h1:QUo3fn+45vWqJWzJW+rIzRHUV7NmhhHLPdI87mAn1M8=
197197
github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250228185245-d4bb112dc979 h1:P37l7EFCz5KxE20+yPa3LWiH2Cg+xx6lQ4mOKYCZFPs=
198198
github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250228185245-d4bb112dc979/go.mod h1:NZ816PzLU1TLv1RdAvYAb6KWOj4Zm5aInT0YpDVml2Y=
199+
github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250307201638-7c3999db14c6 h1:EBEaI3oygl1npFpvdHghcWbKnhj2alEe4KqM2jG2XS8=
200+
github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250307201638-7c3999db14c6/go.mod h1:NZ816PzLU1TLv1RdAvYAb6KWOj4Zm5aInT0YpDVml2Y=
199201
github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA=
200202
github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0=
201203
github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8=

op-deployer/pkg/deployer/integration_test/apply_test.go

+80-8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"log/slog"
99
"math/big"
10+
"os"
1011
"strings"
1112
"testing"
1213

@@ -52,6 +53,72 @@ func (d *deployerKey) String() string {
5253
return "deployer-key"
5354
}
5455

56+
func TestLiveChain(t *testing.T) {
57+
op_e2e.InitParallel(t)
58+
59+
for _, network := range []string{"mainnet", "sepolia"} {
60+
t.Run(network, func(t *testing.T) {
61+
testLiveChainNetwork(t, network)
62+
})
63+
}
64+
}
65+
66+
func testLiveChainNetwork(t *testing.T, network string) {
67+
op_e2e.InitParallel(t)
68+
lgr := testlog.Logger(t, slog.LevelInfo)
69+
rpcURL := os.Getenv(fmt.Sprintf("%s_RPC_URL", strings.ToUpper(network)))
70+
require.NotEmpty(t, rpcURL)
71+
72+
forkedL1, cleanup, err := devnet.NewForked(lgr, rpcURL)
73+
require.NoError(t, err)
74+
t.Cleanup(func() {
75+
require.NoError(t, cleanup())
76+
})
77+
78+
l1Client, err := ethclient.Dial(forkedL1.RPCUrl())
79+
require.NoError(t, err)
80+
81+
ctx, cancel := context.WithCancel(context.Background())
82+
defer cancel()
83+
84+
l1ChainID, err := l1Client.ChainID(ctx)
85+
require.NoError(t, err)
86+
87+
pk, err := crypto.HexToECDSA("ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80")
88+
require.NoError(t, err)
89+
dk, err := devkeys.NewMnemonicDevKeys(devkeys.TestMnemonic)
90+
require.NoError(t, err)
91+
92+
testCacheDir := testutils.IsolatedTestDirWithAutoCleanup(t)
93+
94+
intent, st := newIntent(
95+
t,
96+
l1ChainID,
97+
dk,
98+
uint256.NewInt(9999),
99+
artifacts.DefaultL1ContractsLocator,
100+
artifacts.DefaultL2ContractsLocator,
101+
)
102+
cg := ethClientCodeGetter(ctx, l1Client)
103+
104+
require.NoError(t, deployer.ApplyPipeline(
105+
ctx,
106+
deployer.ApplyPipelineOpts{
107+
DeploymentTarget: deployer.DeploymentTargetLive,
108+
L1RPCUrl: forkedL1.RPCUrl(),
109+
DeployerPrivateKey: pk,
110+
Intent: intent,
111+
State: st,
112+
Logger: lgr,
113+
StateWriter: pipeline.NoopStateWriter(),
114+
CacheDir: testCacheDir,
115+
},
116+
))
117+
118+
validateSuperchainDeployment(t, st, cg, false)
119+
validateOPChainDeployment(t, cg, st, intent, false)
120+
}
121+
55122
func TestEndToEndApply(t *testing.T) {
56123
op_e2e.InitParallel(t)
57124

@@ -120,7 +187,7 @@ func TestEndToEndApply(t *testing.T) {
120187
},
121188
))
122189

123-
validateSuperchainDeployment(t, st, cg)
190+
validateSuperchainDeployment(t, st, cg, true)
124191
validateOPChainDeployment(t, cg, st, intent, false)
125192
})
126193

@@ -144,7 +211,7 @@ func TestEndToEndApply(t *testing.T) {
144211
},
145212
))
146213

147-
validateSuperchainDeployment(t, st, cg)
214+
validateSuperchainDeployment(t, st, cg, true)
148215
validateOPChainDeployment(t, cg, st, intent, false)
149216
})
150217

@@ -228,7 +295,7 @@ func TestApplyGenesisStrategy(t *testing.T) {
228295
require.NoError(t, deployer.ApplyPipeline(ctx, opts))
229296

230297
cg := stateDumpCodeGetter(st)
231-
validateSuperchainDeployment(t, st, cg)
298+
validateSuperchainDeployment(t, st, cg, true)
232299

233300
for i := range intent.Chains {
234301
t.Run(fmt.Sprintf("chain-%d", i), func(t *testing.T) {
@@ -650,20 +717,25 @@ func stateDumpCodeGetter(st *state.State) codeGetter {
650717
}
651718
}
652719

653-
func validateSuperchainDeployment(t *testing.T, st *state.State, cg codeGetter) {
654-
addrs := []struct {
720+
func validateSuperchainDeployment(t *testing.T, st *state.State, cg codeGetter, includeSuperchainImpls bool) {
721+
type addrTuple struct {
655722
name string
656723
addr common.Address
657-
}{
724+
}
725+
addrs := []addrTuple{
658726
{"SuperchainProxyAdmin", st.SuperchainDeployment.ProxyAdminAddress},
659727
{"SuperchainConfigProxy", st.SuperchainDeployment.SuperchainConfigProxyAddress},
660-
{"SuperchainConfigImpl", st.SuperchainDeployment.SuperchainConfigImplAddress},
661728
{"ProtocolVersionsProxy", st.SuperchainDeployment.ProtocolVersionsProxyAddress},
662-
{"ProtocolVersionsImpl", st.SuperchainDeployment.ProtocolVersionsImplAddress},
663729
{"Opcm", st.ImplementationsDeployment.OpcmAddress},
664730
{"PreimageOracleSingleton", st.ImplementationsDeployment.PreimageOracleSingletonAddress},
665731
{"MipsSingleton", st.ImplementationsDeployment.MipsSingletonAddress},
666732
}
733+
734+
if includeSuperchainImpls {
735+
addrs = append(addrs, addrTuple{"SuperchainConfigImpl", st.SuperchainDeployment.SuperchainConfigImplAddress})
736+
addrs = append(addrs, addrTuple{"ProtocolVersionsImpl", st.SuperchainDeployment.ProtocolVersionsImplAddress})
737+
}
738+
667739
for _, addr := range addrs {
668740
t.Run(addr.name, func(t *testing.T) {
669741
code := cg(t, addr.addr)

op-deployer/pkg/deployer/standard/standard.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ const (
3939
ContractsV180Tag = "op-contracts/v1.8.0-rc.4"
4040
ContractsV170Beta1L2Tag = "op-contracts/v1.7.0-beta.1+l2-contracts"
4141
ContractsV200Tag = "op-contracts/v2.0.0-rc.1"
42+
ContractsV300Tag = "op-contracts/v3.0.0-rc.1"
4243
)
4344

4445
var DisputeAbsolutePrestate = common.HexToHash("0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c")
4546

46-
var DefaultL1ContractsTag = ContractsV200Tag
47+
var DefaultL1ContractsTag = ContractsV300Tag
4748

48-
var DefaultL2ContractsTag = ContractsV170Beta1L2Tag
49+
var DefaultL2ContractsTag = ContractsV300Tag
4950

5051
type TaggedRelease struct {
5152
ArtifactsHash common.Hash
@@ -73,16 +74,20 @@ var taggedReleases = map[string]TaggedRelease{
7374
ArtifactsHash: common.HexToHash("32e11c96e07b83619f419595facb273368dccfe2439287549e7b436c9b522204"),
7475
ContentHash: common.HexToHash("1cec51ed629c0394b8fb17ff2c6fa45c406c30f94ebbd37d4c90ede6c29ad608"),
7576
},
77+
ContractsV300Tag: {
78+
ArtifactsHash: common.HexToHash("497e55cc6d9dfb74615d1bac0f4d05ae5ef995972689adcc036ee3adf4522677"),
79+
ContentHash: common.HexToHash("e2527ea1ddcd47bc60310baea4c3183de1520880561b6c7837213290b925a2e8"),
80+
},
7681
}
7782

7883
var _ embed.FS
7984

8085
func IsSupportedL1Version(tag string) bool {
81-
return tag == ContractsV200Tag
86+
return tag == ContractsV300Tag
8287
}
8388

8489
func IsSupportedL2Version(tag string) bool {
85-
return tag == ContractsV170Beta1L2Tag
90+
return tag == ContractsV300Tag
8691
}
8792

8893
func L1VersionsFor(chainID uint64) (validation.Versions, error) {
@@ -211,8 +216,11 @@ func DefaultHardforkScheduleForTag(tag string) *genesis.UpgradeScheduleDeployCon
211216
switch tag {
212217
case ContractsV160Tag, ContractsV170Beta1L2Tag:
213218
return sched
219+
case ContractsV180Tag, ContractsV200Tag:
220+
sched.ActivateForkAtGenesis(rollup.Holocene)
214221
default:
215222
sched.ActivateForkAtGenesis(rollup.Holocene)
223+
sched.ActivateForkAtGenesis(rollup.Isthmus)
216224
}
217225

218226
return sched

op-deployer/pkg/deployer/standard/standard_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,19 @@ import (
1414
func TestDefaultHardforkScheduleForTag(t *testing.T) {
1515
sched := DefaultHardforkScheduleForTag(ContractsV160Tag)
1616
require.Nil(t, sched.HoloceneTime(0))
17+
require.Nil(t, sched.IsthmusTime(0))
1718

1819
sched = DefaultHardforkScheduleForTag(ContractsV180Tag)
1920
require.NotNil(t, sched.HoloceneTime(0))
21+
require.Nil(t, sched.IsthmusTime(0))
22+
23+
sched = DefaultHardforkScheduleForTag(ContractsV200Tag)
24+
require.NotNil(t, sched.HoloceneTime(0))
25+
require.Nil(t, sched.IsthmusTime(0))
26+
27+
sched = DefaultHardforkScheduleForTag(ContractsV300Tag)
28+
require.NotNil(t, sched.HoloceneTime(0))
29+
require.NotNil(t, sched.IsthmusTime(0))
2030
}
2131

2232
func TestStandardAddresses(t *testing.T) {

0 commit comments

Comments
 (0)