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  }