Commit fb7f306e authored by Adrian Sutton's avatar Adrian Sutton Committed by GitHub

op-program: Avoid parsing op-sepolia and op-mainnet rollup and chain configs...

op-program: Avoid parsing op-sepolia and op-mainnet rollup and chain configs in init() methods (#12307)

This was causing op-program to spend cycles parsing the config JSON files to set constants that weren't actually used.
parent 8cb56d91
...@@ -9,18 +9,17 @@ import ( ...@@ -9,18 +9,17 @@ import (
"github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup"
) )
var Mainnet, Sepolia *rollup.Config // OPSepolia loads the op-sepolia rollup config. This is intended for tests that need an arbitrary, valid rollup config.
func OPSepolia() *rollup.Config {
return mustLoadRollupConfig("op-sepolia")
}
func init() { func mustLoadRollupConfig(name string) *rollup.Config {
mustCfg := func(name string) *rollup.Config {
cfg, err := GetRollupConfig(name) cfg, err := GetRollupConfig(name)
if err != nil { if err != nil {
panic(fmt.Errorf("failed to load rollup config %q: %w", name, err)) panic(fmt.Errorf("failed to load rollup config %q: %w", name, err))
} }
return cfg return cfg
}
Mainnet = mustCfg("op-mainnet")
Sepolia = mustCfg("op-sepolia")
} }
var L2ChainIDToNetworkDisplayName = func() map[string]string { var L2ChainIDToNetworkDisplayName = func() map[string]string {
......
...@@ -43,14 +43,14 @@ func (testSuite *PeerParamsTestSuite) TestNewPeerScoreThresholds() { ...@@ -43,14 +43,14 @@ func (testSuite *PeerParamsTestSuite) TestNewPeerScoreThresholds() {
// TestGetPeerScoreParams validates the peer score parameters. // TestGetPeerScoreParams validates the peer score parameters.
func (testSuite *PeerParamsTestSuite) TestGetPeerScoreParams_None() { func (testSuite *PeerParamsTestSuite) TestGetPeerScoreParams_None() {
params, err := GetScoringParams("none", chaincfg.Sepolia) params, err := GetScoringParams("none", chaincfg.OPSepolia())
testSuite.NoError(err) testSuite.NoError(err)
testSuite.Nil(params) testSuite.Nil(params)
} }
// TestLightPeerScoreParams validates the light peer score params. // TestLightPeerScoreParams validates the light peer score params.
func (testSuite *PeerParamsTestSuite) TestGetPeerScoreParams_Light() { func (testSuite *PeerParamsTestSuite) TestGetPeerScoreParams_Light() {
cfg := chaincfg.Sepolia cfg := chaincfg.OPSepolia()
cfg.BlockTime = 1 cfg.BlockTime = 1
slot := time.Duration(cfg.BlockTime) * time.Second slot := time.Duration(cfg.BlockTime) * time.Second
epoch := 6 * slot epoch := 6 * slot
...@@ -98,7 +98,7 @@ func (testSuite *PeerParamsTestSuite) TestGetPeerScoreParams_Light() { ...@@ -98,7 +98,7 @@ func (testSuite *PeerParamsTestSuite) TestGetPeerScoreParams_Light() {
// TestParamsZeroBlockTime validates peer score params use default slot for 0 block time. // TestParamsZeroBlockTime validates peer score params use default slot for 0 block time.
func (testSuite *PeerParamsTestSuite) TestParamsZeroBlockTime() { func (testSuite *PeerParamsTestSuite) TestParamsZeroBlockTime() {
cfg := chaincfg.Sepolia cfg := chaincfg.OPSepolia()
cfg.BlockTime = 0 cfg.BlockTime = 0
slot := 2 * time.Second slot := 2 * time.Second
params, err := GetScoringParams("light", cfg) params, err := GetScoringParams("light", cfg)
......
...@@ -3,27 +3,14 @@ package chainconfig ...@@ -3,27 +3,14 @@ package chainconfig
import ( import (
"fmt" "fmt"
"github.com/ethereum-optimism/optimism/op-node/chaincfg"
"github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
) )
var OPSepoliaChainConfig, OPMainnetChainConfig *params.ChainConfig // OPSepoliaChainConfig loads the op-sepolia chain config. This is intended for tests that need an arbitrary, valid chain config.
func OPSepoliaChainConfig() *params.ChainConfig {
func init() { return mustLoadChainConfig("op-sepolia")
mustLoadConfig := func(chainID uint64) *params.ChainConfig {
cfg, err := params.LoadOPStackChainConfig(chainID)
if err != nil {
panic(err)
}
return cfg
}
OPSepoliaChainConfig = mustLoadConfig(11155420)
OPMainnetChainConfig = mustLoadConfig(10)
}
var L2ChainConfigsByChainID = map[uint64]*params.ChainConfig{
11155420: OPSepoliaChainConfig,
10: OPMainnetChainConfig,
} }
func RollupConfigByChainID(chainID uint64) (*rollup.Config, error) { func RollupConfigByChainID(chainID uint64) (*rollup.Config, error) {
...@@ -37,3 +24,15 @@ func RollupConfigByChainID(chainID uint64) (*rollup.Config, error) { ...@@ -37,3 +24,15 @@ func RollupConfigByChainID(chainID uint64) (*rollup.Config, error) {
func ChainConfigByChainID(chainID uint64) (*params.ChainConfig, error) { func ChainConfigByChainID(chainID uint64) (*params.ChainConfig, error) {
return params.LoadOPStackChainConfig(chainID) return params.LoadOPStackChainConfig(chainID)
} }
func mustLoadChainConfig(name string) *params.ChainConfig {
chainCfg := chaincfg.ChainByName(name)
if chainCfg == nil {
panic(fmt.Errorf("unknown chain config %q", name))
}
cfg, err := ChainConfigByChainID(chainCfg.ChainID)
if err != nil {
panic(fmt.Errorf("failed to load rollup config: %q: %w", name, err))
}
return cfg
}
...@@ -14,14 +14,15 @@ import ( ...@@ -14,14 +14,15 @@ import (
) )
func TestBootstrapClient(t *testing.T) { func TestBootstrapClient(t *testing.T) {
rollupCfg := chaincfg.OPSepolia()
bootInfo := &BootInfo{ bootInfo := &BootInfo{
L1Head: common.HexToHash("0x1111"), L1Head: common.HexToHash("0x1111"),
L2OutputRoot: common.HexToHash("0x2222"), L2OutputRoot: common.HexToHash("0x2222"),
L2Claim: common.HexToHash("0x3333"), L2Claim: common.HexToHash("0x3333"),
L2ClaimBlockNumber: 1, L2ClaimBlockNumber: 1,
L2ChainID: chaincfg.Sepolia.L2ChainID.Uint64(), L2ChainID: rollupCfg.L2ChainID.Uint64(),
L2ChainConfig: chainconfig.OPSepoliaChainConfig, L2ChainConfig: chainconfig.OPSepoliaChainConfig(),
RollupConfig: chaincfg.Sepolia, RollupConfig: rollupCfg,
} }
mockOracle := &mockBoostrapOracle{bootInfo, false} mockOracle := &mockBoostrapOracle{bootInfo, false}
readBootInfo := NewBootstrapClient(mockOracle).BootInfo() readBootInfo := NewBootstrapClient(mockOracle).BootInfo()
...@@ -35,8 +36,8 @@ func TestBootstrapClient_CustomChain(t *testing.T) { ...@@ -35,8 +36,8 @@ func TestBootstrapClient_CustomChain(t *testing.T) {
L2Claim: common.HexToHash("0x3333"), L2Claim: common.HexToHash("0x3333"),
L2ClaimBlockNumber: 1, L2ClaimBlockNumber: 1,
L2ChainID: CustomChainIDIndicator, L2ChainID: CustomChainIDIndicator,
L2ChainConfig: chainconfig.OPSepoliaChainConfig, L2ChainConfig: chainconfig.OPSepoliaChainConfig(),
RollupConfig: chaincfg.Sepolia, RollupConfig: chaincfg.OPSepolia(),
} }
mockOracle := &mockBoostrapOracle{bootInfo, true} mockOracle := &mockBoostrapOracle{bootInfo, true}
readBootInfo := NewBootstrapClient(mockOracle).BootInfo() readBootInfo := NewBootstrapClient(mockOracle).BootInfo()
......
...@@ -165,13 +165,13 @@ func createOracleEngine(t *testing.T) (*OracleEngine, *stubEngineBackend) { ...@@ -165,13 +165,13 @@ func createOracleEngine(t *testing.T) (*OracleEngine, *stubEngineBackend) {
} }
engine := OracleEngine{ engine := OracleEngine{
backend: backend, backend: backend,
rollupCfg: chaincfg.Sepolia, rollupCfg: chaincfg.OPSepolia(),
} }
return &engine, backend return &engine, backend
} }
func createL2Block(t *testing.T, number int) *types.Block { func createL2Block(t *testing.T, number int) *types.Block {
tx, err := derive.L1InfoDeposit(chaincfg.Sepolia, eth.SystemConfig{}, uint64(1), eth.HeaderBlockInfo(&types.Header{ tx, err := derive.L1InfoDeposit(chaincfg.OPSepolia(), eth.SystemConfig{}, uint64(1), eth.HeaderBlockInfo(&types.Header{
Number: big.NewInt(32), Number: big.NewInt(32),
BaseFee: big.NewInt(7), BaseFee: big.NewInt(7),
}), 0) }), 0)
......
...@@ -73,7 +73,7 @@ func TestDefaultCLIOptionsMatchDefaultConfig(t *testing.T) { ...@@ -73,7 +73,7 @@ func TestDefaultCLIOptionsMatchDefaultConfig(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
defaultCfg := config.NewConfig( defaultCfg := config.NewConfig(
rollupCfg, rollupCfg,
chainconfig.OPSepoliaChainConfig, chainconfig.OPSepoliaChainConfig(),
common.HexToHash(l1HeadValue), common.HexToHash(l1HeadValue),
common.HexToHash(l2HeadValue), common.HexToHash(l2HeadValue),
common.HexToHash(l2OutputRoot), common.HexToHash(l2OutputRoot),
...@@ -100,7 +100,7 @@ func TestNetwork(t *testing.T) { ...@@ -100,7 +100,7 @@ func TestNetwork(t *testing.T) {
genesisFile := writeValidGenesis(t) genesisFile := writeValidGenesis(t)
cfg := configForArgs(t, addRequiredArgsExcept("--network", "--rollup.config", configFile, "--l2.genesis", genesisFile)) cfg := configForArgs(t, addRequiredArgsExcept("--network", "--rollup.config", configFile, "--l2.genesis", genesisFile))
require.Equal(t, *chaincfg.Sepolia, *cfg.Rollup) require.Equal(t, *chaincfg.OPSepolia(), *cfg.Rollup)
}) })
for _, name := range chaincfg.AvailableNetworks() { for _, name := range chaincfg.AvailableNetworks() {
...@@ -154,9 +154,9 @@ func TestL2Genesis(t *testing.T) { ...@@ -154,9 +154,9 @@ func TestL2Genesis(t *testing.T) {
require.Equal(t, l2GenesisConfig, cfg.L2ChainConfig) require.Equal(t, l2GenesisConfig, cfg.L2ChainConfig)
}) })
t.Run("NotRequiredForGoerli", func(t *testing.T) { t.Run("NotRequiredForSepolia", func(t *testing.T) {
cfg := configForArgs(t, replaceRequiredArg("--network", "sepolia")) cfg := configForArgs(t, replaceRequiredArg("--network", "sepolia"))
require.Equal(t, chainconfig.OPSepoliaChainConfig, cfg.L2ChainConfig) require.Equal(t, chainconfig.OPSepoliaChainConfig(), cfg.L2ChainConfig)
}) })
} }
...@@ -388,7 +388,7 @@ func writeValidGenesis(t *testing.T) string { ...@@ -388,7 +388,7 @@ func writeValidGenesis(t *testing.T) string {
func writeValidRollupConfig(t *testing.T) string { func writeValidRollupConfig(t *testing.T) string {
dir := t.TempDir() dir := t.TempDir()
j, err := json.Marshal(chaincfg.Sepolia) j, err := json.Marshal(chaincfg.OPSepolia())
require.NoError(t, err) require.NoError(t, err)
cfgFile := dir + "/rollup.json" cfgFile := dir + "/rollup.json"
require.NoError(t, os.WriteFile(cfgFile, j, 0666)) require.NoError(t, os.WriteFile(cfgFile, j, 0666))
......
...@@ -15,8 +15,8 @@ import ( ...@@ -15,8 +15,8 @@ import (
) )
var ( var (
validRollupConfig = chaincfg.Sepolia validRollupConfig = chaincfg.OPSepolia()
validL2Genesis = chainconfig.OPSepoliaChainConfig validL2Genesis = chainconfig.OPSepoliaChainConfig()
validL1Head = common.Hash{0xaa} validL1Head = common.Hash{0xaa}
validL2Head = common.Hash{0xbb} validL2Head = common.Hash{0xbb}
validL2Claim = common.Hash{0xcc} validL2Claim = common.Hash{0xcc}
......
...@@ -24,7 +24,7 @@ func TestServerMode(t *testing.T) { ...@@ -24,7 +24,7 @@ func TestServerMode(t *testing.T) {
l1Head := common.Hash{0x11} l1Head := common.Hash{0x11}
l2OutputRoot := common.Hash{0x33} l2OutputRoot := common.Hash{0x33}
cfg := config.NewConfig(chaincfg.Sepolia, chainconfig.OPSepoliaChainConfig, l1Head, common.Hash{0x22}, l2OutputRoot, common.Hash{0x44}, 1000) cfg := config.NewConfig(chaincfg.OPSepolia(), chainconfig.OPSepoliaChainConfig(), l1Head, common.Hash{0x22}, l2OutputRoot, common.Hash{0x44}, 1000)
cfg.DataDir = dir cfg.DataDir = dir
cfg.ServerMode = true cfg.ServerMode = true
......
...@@ -15,7 +15,7 @@ import ( ...@@ -15,7 +15,7 @@ import (
func TestLocalPreimageSource(t *testing.T) { func TestLocalPreimageSource(t *testing.T) {
cfg := &config.Config{ cfg := &config.Config{
Rollup: chaincfg.Sepolia, Rollup: chaincfg.OPSepolia(),
L1Head: common.HexToHash("0x1111"), L1Head: common.HexToHash("0x1111"),
L2OutputRoot: common.HexToHash("0x2222"), L2OutputRoot: common.HexToHash("0x2222"),
L2Claim: common.HexToHash("0x3333"), L2Claim: common.HexToHash("0x3333"),
......
...@@ -6,11 +6,12 @@ import ( ...@@ -6,11 +6,12 @@ import (
"fmt" "fmt"
"os" "os"
"github.com/ethereum-optimism/optimism/op-program/chainconfig"
"github.com/ethereum-optimism/optimism/op-program/verify" "github.com/ethereum-optimism/optimism/op-program/verify"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
) )
const opMainnetChainID = 10
func main() { func main() {
var l1RpcUrl string var l1RpcUrl string
var l1RpcKind string var l1RpcKind string
...@@ -44,7 +45,7 @@ func main() { ...@@ -44,7 +45,7 @@ func main() {
os.Exit(2) os.Exit(2)
} }
runner, err := verify.NewRunner(l1RpcUrl, l1RpcKind, l1BeaconUrl, l2RpcUrl, dataDir, "op-mainnet", chainconfig.OPMainnetChainConfig) runner, err := verify.NewRunner(l1RpcUrl, l1RpcKind, l1BeaconUrl, l2RpcUrl, dataDir, "op-mainnet", opMainnetChainID)
if err != nil { if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "Failed to create runner: %v\n", err.Error()) _, _ = fmt.Fprintf(os.Stderr, "Failed to create runner: %v\n", err.Error())
os.Exit(1) os.Exit(1)
......
...@@ -6,11 +6,12 @@ import ( ...@@ -6,11 +6,12 @@ import (
"fmt" "fmt"
"os" "os"
"github.com/ethereum-optimism/optimism/op-program/chainconfig"
"github.com/ethereum-optimism/optimism/op-program/verify" "github.com/ethereum-optimism/optimism/op-program/verify"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
) )
const opSepoliaChainID = 11155420
func main() { func main() {
var l1RpcUrl string var l1RpcUrl string
var l1RpcKind string var l1RpcKind string
...@@ -44,7 +45,7 @@ func main() { ...@@ -44,7 +45,7 @@ func main() {
os.Exit(2) os.Exit(2)
} }
runner, err := verify.NewRunner(l1RpcUrl, l1RpcKind, l1BeaconUrl, l2RpcUrl, dataDir, "op-sepolia", chainconfig.OPSepoliaChainConfig) runner, err := verify.NewRunner(l1RpcUrl, l1RpcKind, l1BeaconUrl, l2RpcUrl, dataDir, "op-sepolia", opSepoliaChainID)
if err != nil { if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "Failed to create runner: %v\n", err.Error()) _, _ = fmt.Fprintf(os.Stderr, "Failed to create runner: %v\n", err.Error())
os.Exit(1) os.Exit(1)
......
...@@ -12,6 +12,7 @@ import ( ...@@ -12,6 +12,7 @@ import (
"time" "time"
"github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-program/chainconfig"
"github.com/ethereum-optimism/optimism/op-program/host" "github.com/ethereum-optimism/optimism/op-program/host"
"github.com/ethereum-optimism/optimism/op-program/host/config" "github.com/ethereum-optimism/optimism/op-program/host/config"
"github.com/ethereum-optimism/optimism/op-service/client" "github.com/ethereum-optimism/optimism/op-service/client"
...@@ -43,7 +44,7 @@ type Runner struct { ...@@ -43,7 +44,7 @@ type Runner struct {
rollupCfg *rollup.Config rollupCfg *rollup.Config
} }
func NewRunner(l1RpcUrl string, l1RpcKind string, l1BeaconUrl string, l2RpcUrl string, dataDir string, network string, chainCfg *params.ChainConfig) (*Runner, error) { func NewRunner(l1RpcUrl string, l1RpcKind string, l1BeaconUrl string, l2RpcUrl string, dataDir string, network string, chainID uint64) (*Runner, error) {
ctx := context.Background() ctx := context.Background()
logCfg := oplog.DefaultCLIConfig() logCfg := oplog.DefaultCLIConfig()
logCfg.Level = log.LevelDebug logCfg.Level = log.LevelDebug
...@@ -55,11 +56,16 @@ func NewRunner(l1RpcUrl string, l1RpcKind string, l1BeaconUrl string, l2RpcUrl s ...@@ -55,11 +56,16 @@ func NewRunner(l1RpcUrl string, l1RpcKind string, l1BeaconUrl string, l2RpcUrl s
return nil, fmt.Errorf("dial L2 client: %w", err) return nil, fmt.Errorf("dial L2 client: %w", err)
} }
rollupCfg, err := rollup.LoadOPStackRollupConfig(chainCfg.ChainID.Uint64()) rollupCfg, err := rollup.LoadOPStackRollupConfig(chainID)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to load rollup config: %w", err) return nil, fmt.Errorf("failed to load rollup config: %w", err)
} }
chainCfg, err := chainconfig.ChainConfigByChainID(chainID)
if err != nil {
return nil, fmt.Errorf("failed to load chain config: %w", err)
}
l2ClientCfg := sources.L2ClientDefaultConfig(rollupCfg, false) l2ClientCfg := sources.L2ClientDefaultConfig(rollupCfg, false)
l2RPC := client.NewBaseRPCClient(l2RawRpc) l2RPC := client.NewBaseRPCClient(l2RawRpc)
l2Client, err := sources.NewL2Client(l2RPC, setupLog, nil, l2ClientCfg) l2Client, err := sources.NewL2Client(l2RPC, setupLog, nil, l2ClientCfg)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment