github.com/ethereum-optimism/optimism@v1.7.2/op-node/chaincfg/chains.go (about)

     1  package chaincfg
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/ethereum-optimism/superchain-registry/superchain"
     8  
     9  	"github.com/ethereum-optimism/optimism/op-node/rollup"
    10  )
    11  
    12  var Mainnet, Goerli, Sepolia *rollup.Config
    13  
    14  func init() {
    15  	mustCfg := func(name string) *rollup.Config {
    16  		cfg, err := GetRollupConfig(name)
    17  		if err != nil {
    18  			panic(fmt.Errorf("failed to load rollup config %q: %w", name, err))
    19  		}
    20  		return cfg
    21  	}
    22  	Mainnet = mustCfg("op-mainnet")
    23  	Goerli = mustCfg("op-goerli")
    24  	Sepolia = mustCfg("op-sepolia")
    25  }
    26  
    27  var L2ChainIDToNetworkDisplayName = func() map[string]string {
    28  	out := make(map[string]string)
    29  	for _, netCfg := range superchain.OPChains {
    30  		out[fmt.Sprintf("%d", netCfg.ChainID)] = netCfg.Name
    31  	}
    32  	return out
    33  }()
    34  
    35  // AvailableNetworks returns the selection of network configurations that is available by default.
    36  func AvailableNetworks() []string {
    37  	var networks []string
    38  	for _, cfg := range superchain.OPChains {
    39  		networks = append(networks, cfg.Chain+"-"+cfg.Superchain)
    40  	}
    41  	return networks
    42  }
    43  
    44  func handleLegacyName(name string) string {
    45  	switch name {
    46  	case "goerli":
    47  		return "op-goerli"
    48  	case "mainnet":
    49  		return "op-mainnet"
    50  	case "sepolia":
    51  		return "op-sepolia"
    52  	default:
    53  		return name
    54  	}
    55  }
    56  
    57  // ChainByName returns a chain, from known available configurations, by name.
    58  // ChainByName returns nil when the chain name is unknown.
    59  func ChainByName(name string) *superchain.ChainConfig {
    60  	// Handle legacy name aliases
    61  	name = handleLegacyName(name)
    62  	for _, chainCfg := range superchain.OPChains {
    63  		if strings.EqualFold(chainCfg.Chain+"-"+chainCfg.Superchain, name) {
    64  			return chainCfg
    65  		}
    66  	}
    67  	return nil
    68  }
    69  
    70  func GetRollupConfig(name string) (*rollup.Config, error) {
    71  	chainCfg := ChainByName(name)
    72  	if chainCfg == nil {
    73  		return nil, fmt.Errorf("invalid network: %q", name)
    74  	}
    75  	rollupCfg, err := rollup.LoadOPStackRollupConfig(chainCfg.ChainID)
    76  	if err != nil {
    77  		return nil, fmt.Errorf("failed to load rollup config: %w", err)
    78  	}
    79  	return rollupCfg, nil
    80  }