cli.go 1.42 KB
Newer Older
1 2 3 4 5 6 7
package rpc

import (
	"errors"
	"math"

	opservice "github.com/ethereum-optimism/optimism/op-service"
8
	"github.com/urfave/cli/v2"
9 10 11
)

const (
12 13 14
	ListenAddrFlagName  = "rpc.addr"
	PortFlagName        = "rpc.port"
	EnableAdminFlagName = "rpc.enable-admin"
15 16
)

17 18
var ErrInvalidPort = errors.New("invalid RPC port")

19 20
func CLIFlags(envPrefix string) []cli.Flag {
	return []cli.Flag{
21 22 23
		&cli.StringFlag{
			Name:    ListenAddrFlagName,
			Usage:   "rpc listening address",
24
			Value:   "0.0.0.0", // TODO: Switch to 127.0.0.1
25
			EnvVars: opservice.PrefixEnvVar(envPrefix, "RPC_ADDR"),
26
		},
27 28 29 30
		&cli.IntFlag{
			Name:    PortFlagName,
			Usage:   "rpc listening port",
			Value:   8545,
31
			EnvVars: opservice.PrefixEnvVar(envPrefix, "RPC_PORT"),
32
		},
33 34
		&cli.BoolFlag{
			Name:    EnableAdminFlagName,
35
			Usage:   "Enable the admin API",
36 37
			EnvVars: opservice.PrefixEnvVar(envPrefix, "RPC_ENABLE_ADMIN"),
		},
38 39 40 41
	}
}

type CLIConfig struct {
42 43 44
	ListenAddr  string
	ListenPort  int
	EnableAdmin bool
45 46
}

47 48 49 50 51 52 53 54
func DefaultCLIConfig() CLIConfig {
	return CLIConfig{
		ListenAddr:  "0.0.0.0",
		ListenPort:  8545,
		EnableAdmin: false,
	}
}

55 56
func (c CLIConfig) Check() error {
	if c.ListenPort < 0 || c.ListenPort > math.MaxUint16 {
57
		return ErrInvalidPort
58 59 60 61 62 63 64
	}

	return nil
}

func ReadCLIConfig(ctx *cli.Context) CLIConfig {
	return CLIConfig{
65 66 67
		ListenAddr:  ctx.String(ListenAddrFlagName),
		ListenPort:  ctx.Int(PortFlagName),
		EnableAdmin: ctx.Bool(EnableAdminFlagName),
68 69
	}
}