Skip to content

Commit

Permalink
address comments
Browse files Browse the repository at this point in the history
  • Loading branch information
Qi Zhou committed Oct 8, 2024
1 parent 4daac24 commit 7ab9ae1
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 44 deletions.
2 changes: 0 additions & 2 deletions op-program/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ verify-sepolia: op-program-host op-program-client
env GO111MODULE=on go run ./verify/sepolia/cmd/sepolia.go --l1 $$SEPOLIA_L1URL --l1.beacon $$SEPOLIA_BEACON_URL --l2 $$SEPOLIA_L2URL --datadir /tmp/test-sepolia

verify-devnet:
cp ../.devnet/rollup.json ./chainconfig/configs
cp ../.devnet/genesis-l2.json ./chainconfig/configs
env GO111MODULE=on go run ./verify/devnet/cmd/devnet.go --l1 http://localhost:8545 --l1.beacon http://localhost:5052 --l2 http://localhost:9545 --datadir /tmp/test-devnet

capture-mainnet-genesis: op-program-host op-program-client
Expand Down
68 changes: 30 additions & 38 deletions op-program/chainconfig/chaincfg.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,57 +19,49 @@ func OPSepoliaChainConfig() *params.ChainConfig {
//go:embed configs/*json
var customChainConfigFS embed.FS

var CustomChainConfig *params.ChainConfig
var CustomRollupConfig rollup.Config

func init() {
// Load custom l2 genesis and rollup config from embed FS
data, err := customChainConfigFS.ReadFile("configs/genesis-l2.json")
if err != nil {
panic(err)
}
var genesis core.Genesis
err = json.Unmarshal(data, &genesis)
if err != nil {
panic(err)
func RollupConfigByChainID(chainID uint64) (*rollup.Config, error) {
config, err := rollup.LoadOPStackRollupConfig(chainID)
if err == nil {
return config, err
}
CustomChainConfig = genesis.Config
return rollupConfigByChainID(chainID, customChainConfigFS)
}

file, err := customChainConfigFS.Open("configs/rollup.json")
func rollupConfigByChainID(chainID uint64, customChainFS embed.FS) (*rollup.Config, error) {
// Load custom rollup configs from embed FS
file, err := customChainFS.Open(fmt.Sprintf("configs/%d-rollup.json", chainID))
if err != nil {
panic(err)
return nil, fmt.Errorf("failed to get rollup config for chain ID %d: %w", chainID, err)
}
dec := json.NewDecoder(file)
dec.DisallowUnknownFields()
if err := dec.Decode(&CustomRollupConfig); err != nil {
panic(err)
}
// Both configs must have the same L2 chainID
if CustomChainConfig.ChainID.Uint64() != CustomRollupConfig.L2ChainID.Uint64() {
panic(fmt.Errorf("mismatched genesis-l2.json chainid %d vs rollup.json chainid %d", CustomChainConfig.ChainID.Uint64(), CustomRollupConfig.L2ChainID.Uint64()))
}
// Do not override existing superchain registered configs
if _, err := params.LoadOPStackChainConfig(CustomChainConfig.ChainID.Uint64()); err == nil {
panic(fmt.Errorf("cannot override existing superchain registered config"))
var customRollupConfig rollup.Config
if err := dec.Decode(&customRollupConfig); err != nil {
return nil, fmt.Errorf("failed to parse rollup config for chain ID %d: %w", chainID, err)
}
return &customRollupConfig, nil
}

func RollupConfigByChainID(chainID uint64) (*rollup.Config, error) {
if chainID == CustomRollupConfig.L2ChainID.Uint64() {
return &CustomRollupConfig, nil
}
config, err := rollup.LoadOPStackRollupConfig(chainID)
if err != nil {
return nil, fmt.Errorf("failed to get rollup config for chain ID %d: %w", chainID, err)
func ChainConfigByChainID(chainID uint64) (*params.ChainConfig, error) {
config, err := params.LoadOPStackChainConfig(chainID)
if err == nil {
return config, err
}
return config, nil
return chainConfigByChainID(chainID, customChainConfigFS)
}

func ChainConfigByChainID(chainID uint64) (*params.ChainConfig, error) {
if chainID == CustomChainConfig.ChainID.Uint64() {
return CustomChainConfig, nil
func chainConfigByChainID(chainID uint64, customChainFS embed.FS) (*params.ChainConfig, error) {
// Load from custom chain configs from embed FS
data, err := customChainFS.ReadFile(fmt.Sprintf("configs/%d-genesis-l2.json", chainID))
if err != nil {
return nil, fmt.Errorf("failed to get chain config for chain ID %d: %w", chainID, err)
}
var genesis core.Genesis
err = json.Unmarshal(data, &genesis)
if err != nil {
return nil, fmt.Errorf("failed to parse chain config for chain ID %d: %w", chainID, err)
}
return params.LoadOPStackChainConfig(chainID)
return genesis.Config, nil
}

func mustLoadChainConfig(name string) *params.ChainConfig {
Expand Down
29 changes: 29 additions & 0 deletions op-program/chainconfig/chaincfg_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package chainconfig

import (
"testing"

"github.com/ethereum-optimism/optimism/op-program/chainconfig/test"
"github.com/stretchr/testify/require"
)

// TestGetCustomRollupConfig tests loading the custom rollup configs from test embed FS.
func TestGetCustomRollupConfig(t *testing.T) {
config, err := rollupConfigByChainID(901, test.TestCustomChainConfigFS)
require.NoError(t, err)
require.Equal(t, config.L1ChainID.Uint64(), uint64(900))
require.Equal(t, config.L2ChainID.Uint64(), uint64(901))

_, err = rollupConfigByChainID(900, test.TestCustomChainConfigFS)
require.Error(t, err)
}

// TestGetCustomChainConfig tests loading the custom chain configs from test embed FS.
func TestGetCustomChainConfig(t *testing.T) {
config, err := chainConfigByChainID(901, test.TestCustomChainConfigFS)
require.NoError(t, err)
require.Equal(t, config.ChainID.Uint64(), uint64(901))

_, err = chainConfigByChainID(900, test.TestCustomChainConfigFS)
require.Error(t, err)
}
1 change: 1 addition & 0 deletions op-program/chainconfig/configs/placeholder.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
}
},
"nonce": "0x0",
"timestamp": "0x66ff5755",
"timestamp": "0x6704a8ae",
"extraData": "0x424544524f434b",
"gasLimit": "0x1c9c380",
"difficulty": "0x0",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"genesis": {
"l1": {
"hash": "0x79ae97c126993cda6e3beaf5724bf6f5eaf6cdc7085b20a3417a124e72d4e5ad",
"hash": "0xf39446e09aeca67452545d06a6e6a6a11184575ecf421f9306cf3602febf93ba",
"number": 1
},
"l2": {
"hash": "0x12ede0d4519d3377cd65b2b6a1f1c952392c6c110c77193f4e60dc4e34c1f4fb",
"hash": "0x2a92ff72dad302d39fa80ef81522f0ccb27dc903255b618dfc4feddb22a8f80d",
"number": 0
},
"l2_time": 1728010069,
"l2_time": 1728358574,
"system_config": {
"batcherAddr": "0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc",
"overhead": "0x0000000000000000000000000000000000000000000000000000000000000834",
Expand Down
6 changes: 6 additions & 0 deletions op-program/chainconfig/test/test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package test

import "embed"

//go:embed configs/*json
var TestCustomChainConfigFS embed.FS

0 comments on commit 7ab9ae1

Please sign in to comment.