github.com/ethereum-optimism/optimism@v1.7.2/op-node/cmd/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 8 "github.com/urfave/cli/v2" 9 10 "github.com/ethereum/go-ethereum/log" 11 12 opnode "github.com/ethereum-optimism/optimism/op-node" 13 "github.com/ethereum-optimism/optimism/op-node/chaincfg" 14 "github.com/ethereum-optimism/optimism/op-node/cmd/genesis" 15 "github.com/ethereum-optimism/optimism/op-node/cmd/networks" 16 "github.com/ethereum-optimism/optimism/op-node/cmd/p2p" 17 "github.com/ethereum-optimism/optimism/op-node/flags" 18 "github.com/ethereum-optimism/optimism/op-node/metrics" 19 "github.com/ethereum-optimism/optimism/op-node/node" 20 "github.com/ethereum-optimism/optimism/op-node/version" 21 opservice "github.com/ethereum-optimism/optimism/op-service" 22 "github.com/ethereum-optimism/optimism/op-service/cliapp" 23 oplog "github.com/ethereum-optimism/optimism/op-service/log" 24 "github.com/ethereum-optimism/optimism/op-service/metrics/doc" 25 "github.com/ethereum-optimism/optimism/op-service/opio" 26 ) 27 28 var ( 29 GitCommit = "" 30 GitDate = "" 31 ) 32 33 // VersionWithMeta holds the textual version string including the metadata. 34 var VersionWithMeta = opservice.FormatVersion(version.Version, GitCommit, GitDate, version.Meta) 35 36 func main() { 37 // Set up logger with a default INFO level in case we fail to parse flags, 38 // otherwise the final critical log won't show what the parsing error was. 39 oplog.SetupDefaults() 40 41 app := cli.NewApp() 42 app.Version = VersionWithMeta 43 app.Flags = cliapp.ProtectFlags(flags.Flags) 44 app.Name = "op-node" 45 app.Usage = "Optimism Rollup Node" 46 app.Description = "The Optimism Rollup Node derives L2 block inputs from L1 data and drives an external L2 Execution Engine to build a L2 chain." 47 app.Action = cliapp.LifecycleCmd(RollupNodeMain) 48 app.Commands = []*cli.Command{ 49 { 50 Name: "p2p", 51 Subcommands: p2p.Subcommands, 52 }, 53 { 54 Name: "genesis", 55 Subcommands: genesis.Subcommands, 56 }, 57 { 58 Name: "doc", 59 Subcommands: doc.NewSubcommands(metrics.NewMetrics("default")), 60 }, 61 { 62 Name: "networks", 63 Subcommands: networks.Subcommands, 64 }, 65 } 66 67 ctx := opio.WithInterruptBlocker(context.Background()) 68 err := app.RunContext(ctx, os.Args) 69 if err != nil { 70 log.Crit("Application failed", "message", err) 71 } 72 } 73 74 func RollupNodeMain(ctx *cli.Context, closeApp context.CancelCauseFunc) (cliapp.Lifecycle, error) { 75 logCfg := oplog.ReadCLIConfig(ctx) 76 log := oplog.NewLogger(oplog.AppOut(ctx), logCfg) 77 oplog.SetGlobalLogHandler(log.Handler()) 78 opservice.ValidateEnvVars(flags.EnvVarPrefix, flags.Flags, log) 79 opservice.WarnOnDeprecatedFlags(ctx, flags.DeprecatedFlags, log) 80 m := metrics.NewMetrics("default") 81 82 cfg, err := opnode.NewConfig(ctx, log) 83 if err != nil { 84 return nil, fmt.Errorf("unable to create the rollup node config: %w", err) 85 } 86 cfg.Cancel = closeApp 87 88 snapshotLog, err := opnode.NewSnapshotLogger(ctx) 89 if err != nil { 90 return nil, fmt.Errorf("unable to create snapshot root logger: %w", err) 91 } 92 93 // Only pretty-print the banner if it is a terminal log. Other log it as key-value pairs. 94 if logCfg.Format == "terminal" { 95 log.Info("rollup config:\n" + cfg.Rollup.Description(chaincfg.L2ChainIDToNetworkDisplayName)) 96 } else { 97 cfg.Rollup.LogDescription(log, chaincfg.L2ChainIDToNetworkDisplayName) 98 } 99 100 n, err := node.New(ctx.Context, cfg, log, snapshotLog, VersionWithMeta, m) 101 if err != nil { 102 return nil, fmt.Errorf("unable to create the rollup node: %w", err) 103 } 104 105 return n, nil 106 }