From c0e1597ae9f2a5d5e26b94456e01811f08307e8a Mon Sep 17 00:00:00 2001 From: yperbasis Date: Mon, 14 Nov 2022 16:25:36 +0100 Subject: [PATCH] Upgrade urfave/cli to v2 --- cmd/abigen/main.go | 71 +++--- cmd/devnet/node/node.go | 7 +- cmd/erigon/main.go | 21 +- cmd/erigoncustom/main.go | 10 +- cmd/evm/compiler.go | 6 +- cmd/evm/disasm.go | 7 +- cmd/evm/internal/t8ntool/flags.go | 3 +- cmd/evm/internal/t8ntool/transition.go | 6 +- cmd/evm/main.go | 92 ++++---- cmd/evm/runner.go | 60 ++--- cmd/evm/staterunner.go | 23 +- cmd/lightclient/main.go | 14 +- cmd/observer/observer/command.go | 5 +- cmd/observer/reports/command.go | 5 +- cmd/p2psim/main.go | 79 +++---- cmd/sentinel/cli/cliSettings.go | 17 +- cmd/sentinel/cli/flags/defaultFlags.go | 20 +- cmd/sentinel/cli/flags/flags.go | 5 +- cmd/sentinel/main.go | 16 +- cmd/utils/customflags.go | 163 ++++++------- cmd/utils/flags.go | 312 ++++++++++++------------- go.mod | 3 +- go.sum | 6 +- turbo/app/import.go | 14 +- turbo/app/init.go | 9 +- turbo/app/make_app.go | 23 +- turbo/app/snapshots.go | 48 ++-- turbo/cli/default_flags.go | 286 +++++++++++------------ turbo/cli/flags.go | 128 +++++----- turbo/cli/helpers.go | 5 +- turbo/debug/flags.go | 11 +- turbo/logging/flags.go | 16 +- turbo/logging/logging.go | 2 +- turbo/node/node.go | 10 +- 34 files changed, 752 insertions(+), 751 deletions(-) diff --git a/cmd/abigen/main.go b/cmd/abigen/main.go index 97ef5405a59..4ec1035d03e 100644 --- a/cmd/abigen/main.go +++ b/cmd/abigen/main.go @@ -25,6 +25,9 @@ import ( "regexp" "strings" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/accounts/abi" "github.com/ledgerwatch/erigon/accounts/abi/bind" "github.com/ledgerwatch/erigon/cmd/utils" @@ -32,8 +35,6 @@ import ( "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/erigon/params" cli2 "github.com/ledgerwatch/erigon/turbo/cli" - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli" ) var ( @@ -100,30 +101,30 @@ var ( func init() { app = cli2.NewApp(params.GitCommit, "", "ethereum checkpoint helper tool") app.Flags = []cli.Flag{ - abiFlag, - binFlag, - typeFlag, - jsonFlag, - solFlag, - solcFlag, - vyFlag, - vyperFlag, - excFlag, - pkgFlag, - outFlag, - langFlag, - aliasFlag, + &abiFlag, + &binFlag, + &typeFlag, + &jsonFlag, + &solFlag, + &solcFlag, + &vyFlag, + &vyperFlag, + &excFlag, + &pkgFlag, + &outFlag, + &langFlag, + &aliasFlag, } app.Action = abigen } func abigen(c *cli.Context) error { utils.CheckExclusive(c, abiFlag, jsonFlag, solFlag, vyFlag) // Only one source can be selected. - if c.GlobalString(pkgFlag.Name) == "" { + if c.String(pkgFlag.Name) == "" { utils.Fatalf("No destination package specified (--pkg)") } var lang bind.Lang - switch c.GlobalString(langFlag.Name) { + switch c.String(langFlag.Name) { case "go": lang = bind.LangGo case "java": @@ -132,7 +133,7 @@ func abigen(c *cli.Context) error { lang = bind.LangObjC utils.Fatalf("Objc binding generation is uncompleted") default: - utils.Fatalf("Unsupported destination language \"%s\" (--lang)", c.GlobalString(langFlag.Name)) + utils.Fatalf("Unsupported destination language \"%s\" (--lang)", c.String(langFlag.Name)) } // If the entire solidity code was specified, build and bind based on that var ( @@ -143,13 +144,13 @@ func abigen(c *cli.Context) error { libs = make(map[string]string) aliases = make(map[string]string) ) - if c.GlobalString(abiFlag.Name) != "" { + if c.String(abiFlag.Name) != "" { // Load up the ABI, optional bytecode and type name from the parameters var ( abiBytes []byte err error ) - input := c.GlobalString(abiFlag.Name) + input := c.String(abiFlag.Name) if input == "-" { abiBytes, err = io.ReadAll(os.Stdin) } else { @@ -161,7 +162,7 @@ func abigen(c *cli.Context) error { abis = append(abis, string(abiBytes)) var bin []byte - if binFile := c.GlobalString(binFlag.Name); binFile != "" { + if binFile := c.String(binFlag.Name); binFile != "" { if bin, err = os.ReadFile(binFile); err != nil { utils.Fatalf("Failed to read input bytecode: %v", err) } @@ -171,28 +172,28 @@ func abigen(c *cli.Context) error { } bins = append(bins, string(bin)) - kind := c.GlobalString(typeFlag.Name) + kind := c.String(typeFlag.Name) if kind == "" { - kind = c.GlobalString(pkgFlag.Name) + kind = c.String(pkgFlag.Name) } types = append(types, kind) } else { // Generate the list of types to exclude from binding exclude := make(map[string]bool) - for _, kind := range strings.Split(c.GlobalString(excFlag.Name), ",") { + for _, kind := range strings.Split(c.String(excFlag.Name), ",") { exclude[strings.ToLower(kind)] = true } var err error var contracts map[string]*compiler.Contract switch { - case c.GlobalIsSet(solFlag.Name): - contracts, err = compiler.CompileSolidity(c.GlobalString(solcFlag.Name), c.GlobalString(solFlag.Name)) + case c.IsSet(solFlag.Name): + contracts, err = compiler.CompileSolidity(c.String(solcFlag.Name), c.String(solFlag.Name)) if err != nil { utils.Fatalf("Failed to build Solidity contract: %v", err) } - case c.GlobalIsSet(vyFlag.Name): - output, err := compiler.CompileVyper(c.GlobalString(vyperFlag.Name), c.GlobalString(vyFlag.Name)) + case c.IsSet(vyFlag.Name): + output, err := compiler.CompileVyper(c.String(vyperFlag.Name), c.String(vyFlag.Name)) if err != nil { utils.Fatalf("Failed to build Vyper contract: %v", err) } @@ -208,8 +209,8 @@ func abigen(c *cli.Context) error { contracts[name] = contract } - case c.GlobalIsSet(jsonFlag.Name): - jsonOutput, err := os.ReadFile(c.GlobalString(jsonFlag.Name)) + case c.IsSet(jsonFlag.Name): + jsonOutput, err := os.ReadFile(c.String(jsonFlag.Name)) if err != nil { utils.Fatalf("Failed to read combined-json from compiler: %v", err) } @@ -238,28 +239,28 @@ func abigen(c *cli.Context) error { } } // Extract all aliases from the flags - if c.GlobalIsSet(aliasFlag.Name) { + if c.IsSet(aliasFlag.Name) { // We support multi-versions for aliasing // e.g. // foo=bar,foo2=bar2 // foo:bar,foo2:bar2 re := regexp.MustCompile(`(?:(\w+)[:=](\w+))`) - submatches := re.FindAllStringSubmatch(c.GlobalString(aliasFlag.Name), -1) + submatches := re.FindAllStringSubmatch(c.String(aliasFlag.Name), -1) for _, match := range submatches { aliases[match[1]] = match[2] } } // Generate the contract binding - code, err := bind.Bind(types, abis, bins, sigs, c.GlobalString(pkgFlag.Name), lang, libs, aliases) + code, err := bind.Bind(types, abis, bins, sigs, c.String(pkgFlag.Name), lang, libs, aliases) if err != nil { utils.Fatalf("Failed to generate ABI binding: %v", err) } // Either flush it out to a file or display on the standard output - if !c.GlobalIsSet(outFlag.Name) { + if !c.IsSet(outFlag.Name) { fmt.Printf("%s\n", code) return nil } - if err := os.WriteFile(c.GlobalString(outFlag.Name), []byte(code), 0600); err != nil { + if err := os.WriteFile(c.String(outFlag.Name), []byte(code), 0600); err != nil { utils.Fatalf("Failed to write ABI binding: %v", err) } return nil diff --git a/cmd/devnet/node/node.go b/cmd/devnet/node/node.go index 955cb5a74d4..73dcab4a54f 100644 --- a/cmd/devnet/node/node.go +++ b/cmd/devnet/node/node.go @@ -6,7 +6,7 @@ import ( "sync" "time" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon/cmd/devnet/devnetutils" @@ -77,7 +77,7 @@ func StartNode(wg *sync.WaitGroup, args []string) { } // runNode configures, creates and serves an erigon node -func runNode(ctx *cli.Context) { +func runNode(ctx *cli.Context) error { logger := log.New() // Initializing the node and providing the current git commit there @@ -89,13 +89,14 @@ func runNode(ctx *cli.Context) { ethNode, err := node.New(nodeCfg, ethCfg, logger) if err != nil { log.Error("Devnet startup", "err", err) - return + return err } err = ethNode.Serve() if err != nil { log.Error("error while serving Devnet node", "err", err) } + return err } // miningNodeArgs returns custom args for starting a mining node diff --git a/cmd/erigon/main.go b/cmd/erigon/main.go index 407494521e1..118d5773c88 100644 --- a/cmd/erigon/main.go +++ b/cmd/erigon/main.go @@ -8,18 +8,18 @@ import ( "reflect" "strings" - "github.com/ledgerwatch/erigon/turbo/logging" + "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/log/v3" "github.com/pelletier/go-toml" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" "gopkg.in/yaml.v2" - "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/params" erigonapp "github.com/ledgerwatch/erigon/turbo/app" erigoncli "github.com/ledgerwatch/erigon/turbo/cli" + "github.com/ledgerwatch/erigon/turbo/logging" "github.com/ledgerwatch/erigon/turbo/node" - "github.com/ledgerwatch/log/v3" ) func main() { @@ -43,13 +43,13 @@ func main() { } } -func runErigon(cliCtx *cli.Context) { +func runErigon(cliCtx *cli.Context) error { logger := logging.GetLoggerCtx("erigon", cliCtx) // initializing the node and providing the current git commit there logger.Info("Build info", "git_branch", params.GitBranch, "git_tag", params.GitTag, "git_commit", params.GitCommit) - configFilePath := cliCtx.GlobalString(utils.ConfigFlag.Name) + configFilePath := cliCtx.String(utils.ConfigFlag.Name) if configFilePath != "" { if err := setFlagsFromConfigFile(cliCtx, configFilePath); err != nil { log.Warn("failed setting config flags from yaml/toml file", "err", err) @@ -62,12 +62,13 @@ func runErigon(cliCtx *cli.Context) { ethNode, err := node.New(nodeCfg, ethCfg, logger) if err != nil { log.Error("Erigon startup", "err", err) - return + return err } err = ethNode.Serve() if err != nil { log.Error("error while serving an Erigon node", "err", err) } + return err } func setFlagsFromConfigFile(ctx *cli.Context, filePath string) error { @@ -98,19 +99,19 @@ func setFlagsFromConfigFile(ctx *cli.Context, filePath string) error { } // sets global flags to value in yaml/toml file for key, value := range fileConfig { - if !ctx.GlobalIsSet(key) { + if !ctx.IsSet(key) { if reflect.ValueOf(value).Kind() == reflect.Slice { sliceInterface := value.([]interface{}) s := make([]string, len(sliceInterface)) for i, v := range sliceInterface { s[i] = fmt.Sprintf("%v", v) } - err := ctx.GlobalSet(key, strings.Join(s, ",")) + err := ctx.Set(key, strings.Join(s, ",")) if err != nil { return fmt.Errorf("failed setting %s flag with values=%s error=%s", key, s, err) } } else { - err := ctx.GlobalSet(key, fmt.Sprintf("%v", value)) + err := ctx.Set(key, fmt.Sprintf("%v", value)) if err != nil { return fmt.Errorf("failed setting %s flag with value=%v error=%s", key, value, err) diff --git a/cmd/erigoncustom/main.go b/cmd/erigoncustom/main.go index 0778d04a2c2..ad3ef4748b0 100644 --- a/cmd/erigoncustom/main.go +++ b/cmd/erigoncustom/main.go @@ -4,10 +4,10 @@ import ( "fmt" "os" + "github.com/urfave/cli/v2" + erigonapp "github.com/ledgerwatch/erigon/turbo/app" erigoncli "github.com/ledgerwatch/erigon/turbo/cli" - - "github.com/urfave/cli" ) // defining a custom command-line flag, a string @@ -25,7 +25,7 @@ const ( func main() { // initializing Erigon application here and providing our custom flag app := erigonapp.MakeApp(runErigon, - append(erigoncli.DefaultFlags, flag), // always use DefaultFlags, but add a new one in the end. + append(erigoncli.DefaultFlags, &flag), // always use DefaultFlags, but add a new one in the end. ) if err := app.Run(os.Args); err != nil { fmt.Fprintln(os.Stderr, err) @@ -34,7 +34,7 @@ func main() { } // Erigon main function -func runErigon(ctx *cli.Context) { +func runErigon(ctx *cli.Context) error { // running a node and initializing a custom bucket with all default settings //eri := node.New(ctx, node.Params{ // CustomBuckets: map[string]dbutils.BucketConfigItem{ @@ -46,5 +46,7 @@ func runErigon(ctx *cli.Context) { //if err != nil { // log.Error("error while serving a Erigon node", "err", err) + // return err //} + return nil } diff --git a/cmd/evm/compiler.go b/cmd/evm/compiler.go index c5f88719962..dd055b52c45 100644 --- a/cmd/evm/compiler.go +++ b/cmd/evm/compiler.go @@ -21,9 +21,9 @@ import ( "fmt" "os" - "github.com/ledgerwatch/erigon/cmd/evm/internal/compiler" + "github.com/urfave/cli/v2" - "github.com/urfave/cli" + "github.com/ledgerwatch/erigon/cmd/evm/internal/compiler" ) var compileCommand = cli.Command{ @@ -34,7 +34,7 @@ var compileCommand = cli.Command{ } func compileCmd(ctx *cli.Context) error { - debug := ctx.GlobalBool(DebugFlag.Name) + debug := ctx.Bool(DebugFlag.Name) if len(ctx.Args().First()) == 0 { return errors.New("filename required") diff --git a/cmd/evm/disasm.go b/cmd/evm/disasm.go index e944a9dcb52..f45115adbfa 100644 --- a/cmd/evm/disasm.go +++ b/cmd/evm/disasm.go @@ -22,8 +22,9 @@ import ( "os" "strings" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/core/asm" - "github.com/urfave/cli" ) var disasmCommand = cli.Command{ @@ -43,8 +44,8 @@ func disasmCmd(ctx *cli.Context) error { return err } in = string(input) - case ctx.GlobalIsSet(InputFlag.Name): - in = ctx.GlobalString(InputFlag.Name) + case ctx.IsSet(InputFlag.Name): + in = ctx.String(InputFlag.Name) default: return errors.New("missing filename or --input value") } diff --git a/cmd/evm/internal/t8ntool/flags.go b/cmd/evm/internal/t8ntool/flags.go index 4a918b048fc..bcef839dd50 100644 --- a/cmd/evm/internal/t8ntool/flags.go +++ b/cmd/evm/internal/t8ntool/flags.go @@ -20,9 +20,10 @@ import ( "fmt" "strings" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/tests" - "github.com/urfave/cli" ) var ( diff --git a/cmd/evm/internal/t8ntool/transition.go b/cmd/evm/internal/t8ntool/transition.go index a518d9e23db..0f9ebdf4a6d 100644 --- a/cmd/evm/internal/t8ntool/transition.go +++ b/cmd/evm/internal/t8ntool/transition.go @@ -30,6 +30,9 @@ import ( "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/cmd/rpcdaemon/commands" "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/erigon/common/hexutil" @@ -44,9 +47,6 @@ import ( "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/tests" "github.com/ledgerwatch/erigon/turbo/trie" - "github.com/ledgerwatch/log/v3" - - "github.com/urfave/cli" ) const ( diff --git a/cmd/evm/main.go b/cmd/evm/main.go index c9aa8f5668c..4c2a6f38094 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -22,13 +22,13 @@ import ( "math/big" "os" - cli2 "github.com/ledgerwatch/erigon/turbo/cli" "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" "github.com/ledgerwatch/erigon/cmd/evm/internal/t8ntool" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/params" - "github.com/urfave/cli" + cli2 "github.com/ledgerwatch/erigon/turbo/cli" ) var ( @@ -137,55 +137,55 @@ var stateTransitionCommand = cli.Command{ Usage: "executes a full state transition", Action: t8ntool.Main, Flags: []cli.Flag{ - t8ntool.TraceFlag, - t8ntool.TraceDisableMemoryFlag, - t8ntool.TraceDisableStackFlag, - t8ntool.TraceDisableReturnDataFlag, - t8ntool.OutputBasedir, - t8ntool.OutputAllocFlag, - t8ntool.OutputResultFlag, - t8ntool.OutputBodyFlag, - t8ntool.InputAllocFlag, - t8ntool.InputEnvFlag, - t8ntool.InputTxsFlag, - t8ntool.ForknameFlag, - t8ntool.ChainIDFlag, - t8ntool.VerbosityFlag, + &t8ntool.TraceFlag, + &t8ntool.TraceDisableMemoryFlag, + &t8ntool.TraceDisableStackFlag, + &t8ntool.TraceDisableReturnDataFlag, + &t8ntool.OutputBasedir, + &t8ntool.OutputAllocFlag, + &t8ntool.OutputResultFlag, + &t8ntool.OutputBodyFlag, + &t8ntool.InputAllocFlag, + &t8ntool.InputEnvFlag, + &t8ntool.InputTxsFlag, + &t8ntool.ForknameFlag, + &t8ntool.ChainIDFlag, + &t8ntool.VerbosityFlag, }, } func init() { app.Flags = []cli.Flag{ - BenchFlag, - CreateFlag, - DebugFlag, - VerbosityFlag, - CodeFlag, - CodeFileFlag, - GasFlag, - PriceFlag, - ValueFlag, - DumpFlag, - InputFlag, - InputFileFlag, - MemProfileFlag, - CPUProfileFlag, - StatDumpFlag, - GenesisFlag, - MachineFlag, - SenderFlag, - ReceiverFlag, - DisableMemoryFlag, - DisableStackFlag, - DisableStorageFlag, - DisableReturnDataFlag, - } - app.Commands = []cli.Command{ - compileCommand, - disasmCommand, - runCommand, - stateTestCommand, - stateTransitionCommand, + &BenchFlag, + &CreateFlag, + &DebugFlag, + &VerbosityFlag, + &CodeFlag, + &CodeFileFlag, + &GasFlag, + &PriceFlag, + &ValueFlag, + &DumpFlag, + &InputFlag, + &InputFileFlag, + &MemProfileFlag, + &CPUProfileFlag, + &StatDumpFlag, + &GenesisFlag, + &MachineFlag, + &SenderFlag, + &ReceiverFlag, + &DisableMemoryFlag, + &DisableStackFlag, + &DisableStorageFlag, + &DisableReturnDataFlag, + } + app.Commands = []*cli.Command{ + &compileCommand, + &disasmCommand, + &runCommand, + &stateTestCommand, + &stateTransitionCommand, } } diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go index 77370bec1c9..8b3397b529e 100644 --- a/cmd/evm/runner.go +++ b/cmd/evm/runner.go @@ -32,7 +32,8 @@ import ( "github.com/holiman/uint256" common2 "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv/memdb" - "github.com/urfave/cli" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" "github.com/ledgerwatch/erigon/cmd/evm/internal/compiler" "github.com/ledgerwatch/erigon/cmd/utils" @@ -42,7 +43,6 @@ import ( "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/core/vm/runtime" "github.com/ledgerwatch/erigon/params" - "github.com/ledgerwatch/log/v3" ) var runCommand = cli.Command{ @@ -118,11 +118,11 @@ func runCmd(ctx *cli.Context) error { //glogger.Verbosity(log.Lvl(ctx.GlobalInt(VerbosityFlag.Name))) //log.Root().SetHandler(glogger) logconfig := &vm.LogConfig{ - DisableMemory: ctx.GlobalBool(DisableMemoryFlag.Name), - DisableStack: ctx.GlobalBool(DisableStackFlag.Name), - DisableStorage: ctx.GlobalBool(DisableStorageFlag.Name), - DisableReturnData: ctx.GlobalBool(DisableReturnDataFlag.Name), - Debug: ctx.GlobalBool(DebugFlag.Name), + DisableMemory: ctx.Bool(DisableMemoryFlag.Name), + DisableStack: ctx.Bool(DisableStackFlag.Name), + DisableStorage: ctx.Bool(DisableStorageFlag.Name), + DisableReturnData: ctx.Bool(DisableReturnDataFlag.Name), + Debug: ctx.Bool(DebugFlag.Name), } var ( @@ -134,17 +134,17 @@ func runCmd(ctx *cli.Context) error { receiver = common.BytesToAddress([]byte("receiver")) genesisConfig *core.Genesis ) - if ctx.GlobalBool(MachineFlag.Name) { + if ctx.Bool(MachineFlag.Name) { tracer = vm.NewJSONLogger(logconfig, os.Stdout) - } else if ctx.GlobalBool(DebugFlag.Name) { + } else if ctx.Bool(DebugFlag.Name) { debugLogger = vm.NewStructLogger(logconfig) tracer = debugLogger } else { debugLogger = vm.NewStructLogger(logconfig) } db := memdb.New() - if ctx.GlobalString(GenesisFlag.Name) != "" { - gen := readGenesis(ctx.GlobalString(GenesisFlag.Name)) + if ctx.String(GenesisFlag.Name) != "" { + gen := readGenesis(ctx.String(GenesisFlag.Name)) gen.MustCommit(db) genesisConfig = gen chainConfig = gen.Config @@ -158,18 +158,18 @@ func runCmd(ctx *cli.Context) error { defer tx.Rollback() statedb = state.New(state.NewPlainStateReader(tx)) - if ctx.GlobalString(SenderFlag.Name) != "" { - sender = common.HexToAddress(ctx.GlobalString(SenderFlag.Name)) + if ctx.String(SenderFlag.Name) != "" { + sender = common.HexToAddress(ctx.String(SenderFlag.Name)) } statedb.CreateAccount(sender, true) - if ctx.GlobalString(ReceiverFlag.Name) != "" { - receiver = common.HexToAddress(ctx.GlobalString(ReceiverFlag.Name)) + if ctx.String(ReceiverFlag.Name) != "" { + receiver = common.HexToAddress(ctx.String(ReceiverFlag.Name)) } var code []byte - codeFileFlag := ctx.GlobalString(CodeFileFlag.Name) - codeFlag := ctx.GlobalString(CodeFlag.Name) + codeFileFlag := ctx.String(CodeFileFlag.Name) + codeFlag := ctx.String(CodeFlag.Name) // The '--code' or '--codefile' flag overrides code in state if codeFileFlag != "" || codeFlag != "" { @@ -211,16 +211,16 @@ func runCmd(ctx *cli.Context) error { } code = common.Hex2Bytes(bin) } - initialGas := ctx.GlobalUint64(GasFlag.Name) + initialGas := ctx.Uint64(GasFlag.Name) if genesisConfig.GasLimit != 0 { initialGas = genesisConfig.GasLimit } - value, _ := uint256.FromBig(utils.GlobalBig(ctx, ValueFlag.Name)) + value, _ := uint256.FromBig(utils.BigFlagValue(ctx, ValueFlag.Name)) runtimeConfig := runtime.Config{ Origin: sender, State: statedb, GasLimit: initialGas, - GasPrice: utils.GlobalBig(ctx, PriceFlag.Name), + GasPrice: utils.BigFlagValue(ctx, PriceFlag.Name), Value: value, Difficulty: genesisConfig.Difficulty, Time: new(big.Int).SetUint64(genesisConfig.Timestamp), @@ -228,11 +228,11 @@ func runCmd(ctx *cli.Context) error { BlockNumber: new(big.Int).SetUint64(genesisConfig.Number), EVMConfig: vm.Config{ Tracer: tracer, - Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name), + Debug: ctx.Bool(DebugFlag.Name) || ctx.Bool(MachineFlag.Name), }, } - if cpuProfilePath := ctx.GlobalString(CPUProfileFlag.Name); cpuProfilePath != "" { + if cpuProfilePath := ctx.String(CPUProfileFlag.Name); cpuProfilePath != "" { f, err := os.Create(cpuProfilePath) if err != nil { fmt.Println("could not create CPU profile: ", err) @@ -252,19 +252,19 @@ func runCmd(ctx *cli.Context) error { } var hexInput []byte - if inputFileFlag := ctx.GlobalString(InputFileFlag.Name); inputFileFlag != "" { + if inputFileFlag := ctx.String(InputFileFlag.Name); inputFileFlag != "" { var err error if hexInput, err = os.ReadFile(inputFileFlag); err != nil { fmt.Printf("could not load input from file: %v\n", err) os.Exit(1) } } else { - hexInput = []byte(ctx.GlobalString(InputFlag.Name)) + hexInput = []byte(ctx.String(InputFlag.Name)) } input := common.FromHex(string(bytes.TrimSpace(hexInput))) var execFunc func() ([]byte, uint64, error) - if ctx.GlobalBool(CreateFlag.Name) { + if ctx.Bool(CreateFlag.Name) { input = append(code, input...) execFunc = func() ([]byte, uint64, error) { output, _, gasLeft, err := runtime.Create(input, &runtimeConfig, 0) @@ -279,10 +279,10 @@ func runCmd(ctx *cli.Context) error { } } - bench := ctx.GlobalBool(BenchFlag.Name) + bench := ctx.Bool(BenchFlag.Name) output, leftOverGas, stats, err := timedExec(bench, execFunc) - if ctx.GlobalBool(DumpFlag.Name) { + if ctx.Bool(DumpFlag.Name) { rules := ¶ms.Rules{} if chainConfig != nil { rules = chainConfig.Rules(runtimeConfig.BlockNumber.Uint64()) @@ -294,7 +294,7 @@ func runCmd(ctx *cli.Context) error { fmt.Println(string(state.NewDumper(tx, 0).DefaultDump())) } - if memProfilePath := ctx.GlobalString(MemProfileFlag.Name); memProfilePath != "" { + if memProfilePath := ctx.String(MemProfileFlag.Name); memProfilePath != "" { f, err := os.Create(memProfilePath) if err != nil { fmt.Println("could not create memory profile: ", err) @@ -310,7 +310,7 @@ func runCmd(ctx *cli.Context) error { } } - if ctx.GlobalBool(DebugFlag.Name) { + if ctx.Bool(DebugFlag.Name) { if debugLogger != nil { _, printErr := fmt.Fprintln(os.Stderr, "#### TRACE ####") if printErr != nil { @@ -325,7 +325,7 @@ func runCmd(ctx *cli.Context) error { vm.WriteLogs(os.Stderr, statedb.Logs()) } - if bench || ctx.GlobalBool(StatDumpFlag.Name) { + if bench || ctx.Bool(StatDumpFlag.Name) { _, printErr := fmt.Fprintf(os.Stderr, `EVM gas used: %d execution time: %v allocations: %d diff --git a/cmd/evm/staterunner.go b/cmd/evm/staterunner.go index 815355a7f3b..a3d10c562d6 100644 --- a/cmd/evm/staterunner.go +++ b/cmd/evm/staterunner.go @@ -24,14 +24,15 @@ import ( "os" "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/tests" "github.com/ledgerwatch/erigon/turbo/trie" - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli" ) var stateTestCommand = cli.Command{ @@ -60,20 +61,20 @@ func stateTestCmd(ctx *cli.Context) error { // Configure the EVM logger config := &vm.LogConfig{ - DisableMemory: ctx.GlobalBool(DisableMemoryFlag.Name), - DisableStack: ctx.GlobalBool(DisableStackFlag.Name), - DisableStorage: ctx.GlobalBool(DisableStorageFlag.Name), - DisableReturnData: ctx.GlobalBool(DisableReturnDataFlag.Name), + DisableMemory: ctx.Bool(DisableMemoryFlag.Name), + DisableStack: ctx.Bool(DisableStackFlag.Name), + DisableStorage: ctx.Bool(DisableStorageFlag.Name), + DisableReturnData: ctx.Bool(DisableReturnDataFlag.Name), } var ( tracer vm.Tracer debugger *vm.StructLogger ) switch { - case ctx.GlobalBool(MachineFlag.Name): + case ctx.Bool(MachineFlag.Name): tracer = vm.NewJSONLogger(config, os.Stderr) - case ctx.GlobalBool(DebugFlag.Name): + case ctx.Bool(DebugFlag.Name): debugger = vm.NewStructLogger(config) tracer = debugger @@ -110,7 +111,7 @@ func aggregateResultsFromStateTests( // Iterate over all the stateTests, run them and aggregate the results cfg := vm.Config{ Tracer: tracer, - Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name), + Debug: ctx.Bool(DebugFlag.Name) || ctx.Bool(MachineFlag.Name), } db := memdb.New() defer db.Close() @@ -156,7 +157,7 @@ func aggregateResultsFromStateTests( */ // print state root for evmlab tracing - if ctx.GlobalBool(MachineFlag.Name) && statedb != nil { + if ctx.Bool(MachineFlag.Name) && statedb != nil { _, printErr := fmt.Fprintf(os.Stderr, "{\"stateRoot\": \"%x\"}\n", root.Bytes()) if printErr != nil { log.Warn("Failed to write to stderr", "err", printErr) @@ -166,7 +167,7 @@ func aggregateResultsFromStateTests( results = append(results, *result) // Print any structured logs collected - if ctx.GlobalBool(DebugFlag.Name) { + if ctx.Bool(DebugFlag.Name) { if debugger != nil { _, printErr := fmt.Fprintln(os.Stderr, "#### TRACE ####") if printErr != nil { diff --git a/cmd/lightclient/main.go b/cmd/lightclient/main.go index 922176845e2..2c1f643d67a 100644 --- a/cmd/lightclient/main.go +++ b/cmd/lightclient/main.go @@ -18,6 +18,9 @@ import ( "fmt" "os" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + clcore "github.com/ledgerwatch/erigon/cmd/erigon-cl/cl-core" "github.com/ledgerwatch/erigon/cmd/lightclient/lightclient" lcCli "github.com/ledgerwatch/erigon/cmd/sentinel/cli" @@ -25,8 +28,6 @@ import ( "github.com/ledgerwatch/erigon/cmd/sentinel/sentinel" "github.com/ledgerwatch/erigon/cmd/sentinel/sentinel/service" lightclientapp "github.com/ledgerwatch/erigon/turbo/app" - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli" ) func main() { @@ -40,14 +41,14 @@ func main() { } } -func runLightClientNode(cliCtx *cli.Context) { +func runLightClientNode(cliCtx *cli.Context) error { ctx := context.Background() lcCfg, err := lcCli.SetUpLightClientCfg(cliCtx) if err != nil { log.Error("[Lightclient] Could not initialize lightclient", "err", err) } log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(lcCfg.LogLvl), log.StderrHandler)) - log.Info("[LightClient]", "chain", cliCtx.GlobalString(flags.LightClientChain.Name)) + log.Info("[LightClient]", "chain", cliCtx.String(flags.LightClientChain.Name)) log.Info("[LightClient] Running lightclient", "cfg", lcCfg) sentinel, err := service.StartSentinelService(&sentinel.SentinelConfig{ IpAddr: lcCfg.Addr, @@ -67,7 +68,7 @@ func runLightClientNode(cliCtx *cli.Context) { if err != nil { log.Error("[Checkpoint Sync] Failed", "reason", err) - return + return err } log.Info("Finalized Checkpoint", "Epoch", bs.FinalizedCheckpoint.Epoch) lc, err := lightclient.NewLightClient(ctx, lcCfg.GenesisCfg, lcCfg.BeaconCfg, nil, sentinel, 0, true) @@ -76,7 +77,8 @@ func runLightClientNode(cliCtx *cli.Context) { } if err := lc.BootstrapCheckpoint(ctx, bs.FinalizedCheckpoint.Root); err != nil { log.Error("[Bootstrap] failed to bootstrap", "err", err) - return + return err } lc.Start() + return nil } diff --git a/cmd/observer/observer/command.go b/cmd/observer/observer/command.go index 825af48a719..56eb18a168f 100644 --- a/cmd/observer/observer/command.go +++ b/cmd/observer/observer/command.go @@ -6,11 +6,12 @@ import ( "runtime" "time" + "github.com/spf13/cobra" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/turbo/debug" "github.com/ledgerwatch/erigon/turbo/logging" - "github.com/spf13/cobra" - "github.com/urfave/cli" ) type CommandFlags struct { diff --git a/cmd/observer/reports/command.go b/cmd/observer/reports/command.go index eace18c0563..c8e6610690a 100644 --- a/cmd/observer/reports/command.go +++ b/cmd/observer/reports/command.go @@ -3,9 +3,10 @@ package reports import ( "context" - "github.com/ledgerwatch/erigon/cmd/utils" "github.com/spf13/cobra" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" + + "github.com/ledgerwatch/erigon/cmd/utils" ) type CommandFlags struct { diff --git a/cmd/p2psim/main.go b/cmd/p2psim/main.go index 0031437c10f..0dd4e5d8529 100644 --- a/cmd/p2psim/main.go +++ b/cmd/p2psim/main.go @@ -44,13 +44,14 @@ import ( "strings" "text/tabwriter" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/erigon/p2p" "github.com/ledgerwatch/erigon/p2p/enode" "github.com/ledgerwatch/erigon/p2p/simulations" "github.com/ledgerwatch/erigon/p2p/simulations/adapters" "github.com/ledgerwatch/erigon/rpc" - "github.com/urfave/cli" ) var client *simulations.Client @@ -59,18 +60,18 @@ func main() { app := cli.NewApp() app.Usage = "devp2p simulation command-line client" app.Flags = []cli.Flag{ - cli.StringFlag{ - Name: "api", - Value: "http://localhost:8888", - Usage: "simulation API URL", - EnvVar: "P2PSIM_API_URL", + &cli.StringFlag{ + Name: "api", + Value: "http://localhost:8888", + Usage: "simulation API URL", + EnvVars: []string{"P2PSIM_API_URL"}, }, } app.Before = func(ctx *cli.Context) error { - client = simulations.NewClient(ctx.GlobalString("api")) + client = simulations.NewClient(ctx.String("api")) return nil } - app.Commands = []cli.Command{ + app.Commands = []*cli.Command{ { Name: "show", Usage: "show network information", @@ -81,11 +82,11 @@ func main() { Usage: "stream network events", Action: streamNetwork, Flags: []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "current", Usage: "get existing nodes and conns first", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "filter", Value: "", Usage: "message filter", @@ -106,7 +107,7 @@ func main() { Name: "node", Usage: "manage simulation nodes", Action: listNodes, - Subcommands: []cli.Command{ + Subcommands: []*cli.Command{ { Name: "list", Usage: "list nodes", @@ -117,17 +118,17 @@ func main() { Usage: "create a node", Action: createNode, Flags: []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "name", Value: "", Usage: "node name", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "services", Value: "", Usage: "node services (comma separated)", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "key", Value: "", Usage: "node private key (hex encoded)", @@ -170,7 +171,7 @@ func main() { Usage: "call a node RPC method", Action: rpcNode, Flags: []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "subscribe", Usage: "method is a subscription", }, @@ -186,7 +187,7 @@ func main() { } func showNetwork(ctx *cli.Context) error { - if len(ctx.Args()) != 0 { + if ctx.NArg() != 0 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } network, err := client.GetNetwork() @@ -201,7 +202,7 @@ func showNetwork(ctx *cli.Context) error { } func streamNetwork(ctx *cli.Context) error { - if len(ctx.Args()) != 0 { + if ctx.NArg() != 0 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } events := make(chan *simulations.Event) @@ -227,7 +228,7 @@ func streamNetwork(ctx *cli.Context) error { } func createSnapshot(ctx *cli.Context) error { - if len(ctx.Args()) != 0 { + if ctx.NArg() != 0 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } snap, err := client.CreateSnapshot() @@ -238,7 +239,7 @@ func createSnapshot(ctx *cli.Context) error { } func loadSnapshot(ctx *cli.Context) error { - if len(ctx.Args()) != 0 { + if ctx.NArg() != 0 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } snap := &simulations.Snapshot{} @@ -249,7 +250,7 @@ func loadSnapshot(ctx *cli.Context) error { } func listNodes(ctx *cli.Context) error { - if len(ctx.Args()) != 0 { + if ctx.NArg() != 0 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } nodes, err := client.GetNodes() @@ -274,7 +275,7 @@ func protocolList(node *p2p.NodeInfo) []string { } func createNode(ctx *cli.Context) error { - if len(ctx.Args()) != 0 { + if ctx.NArg() != 0 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } config := adapters.RandomNodeConfig() @@ -300,10 +301,10 @@ func createNode(ctx *cli.Context) error { func showNode(ctx *cli.Context) error { args := ctx.Args() - if len(args) != 1 { + if args.Len() != 1 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } - nodeName := args[0] + nodeName := args.First() node, err := client.GetNode(nodeName) if err != nil { return err @@ -325,10 +326,10 @@ func showNode(ctx *cli.Context) error { func startNode(ctx *cli.Context) error { args := ctx.Args() - if len(args) != 1 { + if args.Len() != 1 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } - nodeName := args[0] + nodeName := args.First() if err := client.StartNode(nodeName); err != nil { return err } @@ -338,10 +339,10 @@ func startNode(ctx *cli.Context) error { func stopNode(ctx *cli.Context) error { args := ctx.Args() - if len(args) != 1 { + if args.Len() != 1 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } - nodeName := args[0] + nodeName := args.First() if err := client.StopNode(nodeName); err != nil { return err } @@ -351,11 +352,11 @@ func stopNode(ctx *cli.Context) error { func connectNode(ctx *cli.Context) error { args := ctx.Args() - if len(args) != 2 { + if args.Len() != 2 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } - nodeName := args[0] - peerName := args[1] + nodeName := args.Get(0) + peerName := args.Get(1) if err := client.ConnectNode(nodeName, peerName); err != nil { return err } @@ -365,11 +366,11 @@ func connectNode(ctx *cli.Context) error { func disconnectNode(ctx *cli.Context) error { args := ctx.Args() - if len(args) != 2 { + if args.Len() != 2 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } - nodeName := args[0] - peerName := args[1] + nodeName := args.Get(0) + peerName := args.Get(1) if err := client.DisconnectNode(nodeName, peerName); err != nil { return err } @@ -379,21 +380,21 @@ func disconnectNode(ctx *cli.Context) error { func rpcNode(ctx *cli.Context) error { args := ctx.Args() - if len(args) < 2 { + if args.Len() < 2 { return cli.ShowCommandHelp(ctx, ctx.Command.Name) } - nodeName := args[0] - method := args[1] + nodeName := args.Get(0) + method := args.Get(1) rpcClient, err := client.RPCClient(context.Background(), nodeName) if err != nil { return err } if ctx.Bool("subscribe") { - return rpcSubscribe(rpcClient, ctx.App.Writer, method, args[3:]...) + return rpcSubscribe(rpcClient, ctx.App.Writer, method, args.Slice()[3:]...) } var result interface{} - params := make([]interface{}, len(args[3:])) - for i, v := range args[3:] { + params := make([]interface{}, len(args.Slice()[3:])) + for i, v := range args.Slice()[3:] { params[i] = v } if err := rpcClient.Call(&result, method, params...); err != nil { diff --git a/cmd/sentinel/cli/cliSettings.go b/cmd/sentinel/cli/cliSettings.go index dc46574ee6f..fae2a778c28 100644 --- a/cmd/sentinel/cli/cliSettings.go +++ b/cmd/sentinel/cli/cliSettings.go @@ -3,9 +3,10 @@ package cli import ( "fmt" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cmd/sentinel/cli/flags" - "github.com/urfave/cli" ) type LightClientCliCfg struct { @@ -24,21 +25,21 @@ type LightClientCliCfg struct { func SetUpLightClientCfg(ctx *cli.Context) (*LightClientCliCfg, error) { cfg := &LightClientCliCfg{} - chainName := ctx.GlobalString(flags.LightClientChain.Name) + chainName := ctx.String(flags.LightClientChain.Name) var err error var network clparams.NetworkType cfg.GenesisCfg, cfg.NetworkCfg, cfg.BeaconCfg, network, err = clparams.GetConfigsByNetworkName(chainName) if err != nil { return nil, err } - cfg.ServerAddr = fmt.Sprintf("%s:%d", ctx.GlobalString(flags.LightClientServerAddr.Name), ctx.GlobalInt(flags.LightClientServerPort.Name)) - cfg.ServerProtocol = ServerProtocolFromInt(ctx.GlobalUint(flags.LightClientServerProtocol.Name)) + cfg.ServerAddr = fmt.Sprintf("%s:%d", ctx.String(flags.LightClientServerAddr.Name), ctx.Int(flags.LightClientServerPort.Name)) + cfg.ServerProtocol = ServerProtocolFromInt(ctx.Uint(flags.LightClientServerProtocol.Name)) - cfg.Port = uint(ctx.GlobalInt(flags.LightClientPort.Name)) - cfg.Addr = ctx.GlobalString(flags.LightClientAddr.Name) + cfg.Port = uint(ctx.Int(flags.LightClientPort.Name)) + cfg.Addr = ctx.String(flags.LightClientAddr.Name) - cfg.LogLvl = ctx.GlobalUint(flags.LightClientVerbosity.Name) - cfg.NoDiscovery = !ctx.GlobalBoolT(flags.LightClientDiscovery.Name) + cfg.LogLvl = ctx.Uint(flags.LightClientVerbosity.Name) + cfg.NoDiscovery = !ctx.Bool(flags.LightClientDiscovery.Name) cfg.CheckpointUri = clparams.GetCheckpointSyncEndpoint(network) return cfg, nil } diff --git a/cmd/sentinel/cli/flags/defaultFlags.go b/cmd/sentinel/cli/flags/defaultFlags.go index e8cb6e6606e..6bdb9ce6972 100644 --- a/cmd/sentinel/cli/flags/defaultFlags.go +++ b/cmd/sentinel/cli/flags/defaultFlags.go @@ -1,15 +1,15 @@ package flags -import "github.com/urfave/cli" +import "github.com/urfave/cli/v2" var LightClientDefaultFlags = []cli.Flag{ - LightClientPort, - LightClientAddr, - LightClientTcpPort, - LightClientVerbosity, - LightClientChain, - LightClientServerAddr, - LightClientServerPort, - LightClientServerProtocol, - LightClientDiscovery, + &LightClientPort, + &LightClientAddr, + &LightClientTcpPort, + &LightClientVerbosity, + &LightClientChain, + &LightClientServerAddr, + &LightClientServerPort, + &LightClientServerProtocol, + &LightClientDiscovery, } diff --git a/cmd/sentinel/cli/flags/flags.go b/cmd/sentinel/cli/flags/flags.go index 9d043cb0bfa..80e93427c92 100644 --- a/cmd/sentinel/cli/flags/flags.go +++ b/cmd/sentinel/cli/flags/flags.go @@ -1,6 +1,6 @@ package flags -import "github.com/urfave/cli" +import "github.com/urfave/cli/v2" var ( LightClientPort = cli.IntFlag{ @@ -43,8 +43,9 @@ var ( Usage: "sets the chain specs for the lightclient", Value: "mainnet", } - LightClientDiscovery = cli.BoolTFlag{ + LightClientDiscovery = cli.BoolFlag{ Name: "lc.discover", Usage: "turn off or on the lightclient finding peers", + Value: true, } ) diff --git a/cmd/sentinel/main.go b/cmd/sentinel/main.go index 19b16ed4f03..cc29efb522c 100644 --- a/cmd/sentinel/main.go +++ b/cmd/sentinel/main.go @@ -20,6 +20,10 @@ import ( "os" "time" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "go.uber.org/zap/buffer" + "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/fork" "github.com/ledgerwatch/erigon/cl/rpc/consensusrpc" @@ -31,10 +35,6 @@ import ( "github.com/ledgerwatch/erigon/cmd/sentinel/sentinel/service" "github.com/ledgerwatch/erigon/common" sentinelapp "github.com/ledgerwatch/erigon/turbo/app" - "github.com/urfave/cli" - "go.uber.org/zap/buffer" - - "github.com/ledgerwatch/log/v3" ) func main() { @@ -73,7 +73,7 @@ func constructRequest(t string, reqBody cltypes.ObjectSSZ) (*consensusrpc.Reques }, nil } -func runSentinelNode(cliCtx *cli.Context) { +func runSentinelNode(cliCtx *cli.Context) error { lcCfg, _ := lcCli.SetUpLightClientCfg(cliCtx) ctx := context.Background() @@ -90,14 +90,14 @@ func runSentinelNode(cliCtx *cli.Context) { }, &service.ServerConfig{Network: lcCfg.ServerProtocol, Addr: lcCfg.ServerAddr}, nil) if err != nil { log.Error("Could not start sentinel", "err", err) - return + return err } log.Info("Sentinel started", "addr", lcCfg.ServerAddr) digest, err := fork.ComputeForkDigest(lcCfg.BeaconCfg, lcCfg.GenesisCfg) if err != nil { log.Error("Could not compute fork digeest", "err", err) - return + return err } log.Info("Fork digest", "data", digest) @@ -159,8 +159,10 @@ func runSentinelNode(cliCtx *cli.Context) { req, err := constructRequest(handlers.StatusProtocolV1, statusReq) if err != nil { log.Error("could not construct request", "err", err) + return err } sendRequest(ctx, s, req) + return nil } func debugGossip(ctx context.Context, s consensusrpc.SentinelClient) { diff --git a/cmd/utils/customflags.go b/cmd/utils/customflags.go index 0fdb6f9e954..c50a1660293 100644 --- a/cmd/utils/customflags.go +++ b/cmd/utils/customflags.go @@ -17,7 +17,6 @@ package utils import ( - "encoding" "errors" "flag" "math/big" @@ -26,8 +25,9 @@ import ( "path" "strings" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/common/math" - "github.com/urfave/cli" ) // Custom type which is registered in the flags library which cli uses for @@ -47,100 +47,106 @@ func (s *DirectoryString) Set(value string) error { // Custom cli.Flag type which expand the received string to an absolute path. // e.g. ~/.ethereum -> /home/username/.ethereum type DirectoryFlag struct { - Name string - Value DirectoryString - Usage string - EnvVar string -} + Name string + + Category string + DefaultText string + Usage string -func (f DirectoryFlag) String() string { - return cli.FlagStringer(f) + Required bool + Hidden bool + HasBeenSet bool + + Value DirectoryString + + Aliases []string } +func (f *DirectoryFlag) Names() []string { return append([]string{f.Name}, f.Aliases...) } +func (f *DirectoryFlag) IsSet() bool { return f.HasBeenSet } +func (f *DirectoryFlag) String() string { return cli.FlagStringer(f) } + // called by cli library, grabs variable from environment (if in env) // and adds variable to flag set for parsing. -func (f DirectoryFlag) Apply(set *flag.FlagSet) { - eachName(f.Name, func(name string) { +func (f *DirectoryFlag) Apply(set *flag.FlagSet) error { + eachName(f, func(name string) { set.Var(&f.Value, f.Name, f.Usage) }) + return nil } -func (f DirectoryFlag) GetName() string { - return f.Name -} +func (f *DirectoryFlag) IsRequired() bool { return f.Required } + +func (f *DirectoryFlag) IsVisible() bool { return !f.Hidden } -func (f *DirectoryFlag) Set(value string) { - f.Value.Set(value) +func (f *DirectoryFlag) GetCategory() string { return f.Category } + +func (f *DirectoryFlag) TakesValue() bool { return true } +func (f *DirectoryFlag) GetUsage() string { return f.Usage } +func (f *DirectoryFlag) GetValue() string { return f.Value.String() } +func (f *DirectoryFlag) GetEnvVars() []string { return nil } // env not supported + +func (f *DirectoryFlag) GetDefaultText() string { + if f.DefaultText != "" { + return f.DefaultText + } + return f.GetValue() } -func eachName(longName string, fn func(string)) { - parts := strings.Split(longName, ",") - for _, name := range parts { +func eachName(f cli.Flag, fn func(string)) { + for _, name := range f.Names() { name = strings.Trim(name, " ") fn(name) } } -type TextMarshaler interface { - encoding.TextMarshaler - encoding.TextUnmarshaler -} - -// textMarshalerVal turns a TextMarshaler into a flag.Value -type textMarshalerVal struct { - v TextMarshaler -} +// BigFlag is a command line flag that accepts 256 bit big integers in decimal or +// hexadecimal syntax. +type BigFlag struct { + Name string -func (v textMarshalerVal) String() string { - if v.v == nil { - return "" - } - text, _ := v.v.MarshalText() - return string(text) -} + Category string + DefaultText string + Usage string -func (v textMarshalerVal) Set(s string) error { - return v.v.UnmarshalText([]byte(s)) -} + Required bool + Hidden bool + HasBeenSet bool -// TextMarshalerFlag wraps a TextMarshaler value. -type TextMarshalerFlag struct { - Name string - Value TextMarshaler - Usage string - EnvVar string -} + Value *big.Int -func (f TextMarshalerFlag) GetName() string { - return f.Name + Aliases []string } -func (f TextMarshalerFlag) String() string { - return cli.FlagStringer(f) -} +func (f *BigFlag) Names() []string { return append([]string{f.Name}, f.Aliases...) } +func (f *BigFlag) IsSet() bool { return f.HasBeenSet } +func (f *BigFlag) String() string { return cli.FlagStringer(f) } -func (f TextMarshalerFlag) Apply(set *flag.FlagSet) { - eachName(f.Name, func(name string) { - set.Var(textMarshalerVal{f.Value}, f.Name, f.Usage) +func (f *BigFlag) Apply(set *flag.FlagSet) error { + eachName(f, func(name string) { + f.Value = new(big.Int) + set.Var((*bigValue)(f.Value), f.Name, f.Usage) }) -} -// GlobalTextMarshaler returns the value of a TextMarshalerFlag from the global flag set. -func GlobalTextMarshaler(ctx *cli.Context, name string) TextMarshaler { - val := ctx.GlobalGeneric(name) - if val == nil { - return nil - } - return val.(textMarshalerVal).v + return nil } -// BigFlag is a command line flag that accepts 256 bit big integers in decimal or -// hexadecimal syntax. -type BigFlag struct { - Name string - Value *big.Int - Usage string - EnvVar string +func (f *BigFlag) IsRequired() bool { return f.Required } + +func (f *BigFlag) IsVisible() bool { return !f.Hidden } + +func (f *BigFlag) GetCategory() string { return f.Category } + +func (f *BigFlag) TakesValue() bool { return true } +func (f *BigFlag) GetUsage() string { return f.Usage } +func (f *BigFlag) GetValue() string { return f.Value.String() } +func (f *BigFlag) GetEnvVars() []string { return nil } // env not supported + +func (f *BigFlag) GetDefaultText() string { + if f.DefaultText != "" { + return f.DefaultText + } + return f.GetValue() } // bigValue turns *big.Int into a flag.Value @@ -162,24 +168,9 @@ func (b *bigValue) Set(s string) error { return nil } -func (f BigFlag) GetName() string { - return f.Name -} - -func (f BigFlag) String() string { - return cli.FlagStringer(f) -} - -func (f BigFlag) Apply(set *flag.FlagSet) { - eachName(f.Name, func(name string) { - f.Value = new(big.Int) - set.Var((*bigValue)(f.Value), f.Name, f.Usage) - }) -} - -// GlobalBig returns the value of a BigFlag from the global flag set. -func GlobalBig(ctx *cli.Context, name string) *big.Int { - val := ctx.GlobalGeneric(name) +// BigFlagValue returns the value of a BigFlag from the flag set. +func BigFlagValue(ctx *cli.Context, name string) *big.Int { + val := ctx.Generic(name) if val == nil { return nil } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 3dfcaa78354..5e01d344905 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -37,15 +37,9 @@ import ( "github.com/ledgerwatch/log/v3" "github.com/spf13/cobra" "github.com/spf13/pflag" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" "github.com/ledgerwatch/erigon/cmd/downloader/downloader/downloadercfg" - "github.com/ledgerwatch/erigon/node/nodecfg" - "github.com/ledgerwatch/erigon/node/nodecfg/datadir" - - "github.com/ledgerwatch/erigon/eth/protocols/eth" - "github.com/ledgerwatch/erigon/params/networkname" - "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/erigon/common/paths" "github.com/ledgerwatch/erigon/consensus/ethash" @@ -53,12 +47,16 @@ import ( "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/gasprice" + "github.com/ledgerwatch/erigon/eth/protocols/eth" "github.com/ledgerwatch/erigon/metrics" + "github.com/ledgerwatch/erigon/node/nodecfg" + "github.com/ledgerwatch/erigon/node/nodecfg/datadir" "github.com/ledgerwatch/erigon/p2p" "github.com/ledgerwatch/erigon/p2p/enode" "github.com/ledgerwatch/erigon/p2p/nat" "github.com/ledgerwatch/erigon/p2p/netutil" "github.com/ledgerwatch/erigon/params" + "github.com/ledgerwatch/erigon/params/networkname" ) func init() { @@ -159,9 +157,10 @@ var ( Name: "ethash.dagslockmmap", Usage: "Lock memory maps for recent ethash mining DAGs", } - SnapshotFlag = cli.BoolTFlag{ + SnapshotFlag = cli.BoolFlag{ Name: "snapshots", Usage: `Default: use snapshots "true" for BSC, Mainnet and Goerli. use snapshots "false" in all other cases`, + Value: true, } ExternalConsensusFlag = cli.BoolFlag{ Name: "externalcl", @@ -312,9 +311,10 @@ var ( Name: "ipcpath", Usage: "Filename for IPC socket/pipe within the datadir (explicit paths escape it)", } - HTTPEnabledFlag = cli.BoolTFlag{ + HTTPEnabledFlag = cli.BoolFlag{ Name: "http", Usage: "HTTP-RPC server (enabled by default). Use --http=false to disable it", + Value: true, } HTTPListenAddrFlag = cli.StringFlag{ Name: "http.addr", @@ -753,14 +753,14 @@ var ( } ) -var MetricFlags = []cli.Flag{MetricsEnabledFlag, MetricsEnabledExpensiveFlag, MetricsHTTPFlag, MetricsPortFlag} +var MetricFlags = []cli.Flag{&MetricsEnabledFlag, &MetricsEnabledExpensiveFlag, &MetricsHTTPFlag, &MetricsPortFlag} // setNodeKey loads a node key from command line flags if provided, // otherwise it tries to load it from datadir, // otherwise it generates a new key in datadir. func setNodeKey(ctx *cli.Context, cfg *p2p.Config, datadir string) { - file := ctx.GlobalString(NodeKeyFileFlag.Name) - hex := ctx.GlobalString(NodeKeyHexFlag.Name) + file := ctx.String(NodeKeyFileFlag.Name) + hex := ctx.String(NodeKeyHexFlag.Name) config := p2p.NodeKeyConfig{} key, err := config.LoadOrParseOrGenerateAndSave(file, hex, datadir) @@ -772,7 +772,7 @@ func setNodeKey(ctx *cli.Context, cfg *p2p.Config, datadir string) { // setNodeUserIdent creates the user identifier from CLI flags. func setNodeUserIdent(ctx *cli.Context, cfg *nodecfg.Config) { - if identity := ctx.GlobalString(IdentityFlag.Name); len(identity) > 0 { + if identity := ctx.String(IdentityFlag.Name); len(identity) > 0 { cfg.UserIdent = identity } } @@ -788,7 +788,7 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { return } - nodes, err := GetBootnodesFromFlags(ctx.GlobalString(BootnodesFlag.Name), ctx.GlobalString(ChainFlag.Name)) + nodes, err := GetBootnodesFromFlags(ctx.String(BootnodesFlag.Name), ctx.String(ChainFlag.Name)) if err != nil { Fatalf("Option %s: %v", BootnodesFlag.Name, err) } @@ -802,7 +802,7 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) { return } - nodes, err := GetBootnodesFromFlags(ctx.GlobalString(BootnodesFlag.Name), ctx.GlobalString(ChainFlag.Name)) + nodes, err := GetBootnodesFromFlags(ctx.String(BootnodesFlag.Name), ctx.String(ChainFlag.Name)) if err != nil { Fatalf("Option %s: %v", BootnodesFlag.Name, err) } @@ -825,10 +825,10 @@ func GetBootnodesFromFlags(urlsStr, chain string) ([]*enode.Node, error) { func setStaticPeers(ctx *cli.Context, cfg *p2p.Config) { var urls []string - if ctx.GlobalIsSet(StaticPeersFlag.Name) { - urls = SplitAndTrim(ctx.GlobalString(StaticPeersFlag.Name)) + if ctx.IsSet(StaticPeersFlag.Name) { + urls = SplitAndTrim(ctx.String(StaticPeersFlag.Name)) } else { - chain := ctx.GlobalString(ChainFlag.Name) + chain := ctx.String(ChainFlag.Name) urls = params.StaticPeerURLsOfChain(chain) } @@ -841,11 +841,11 @@ func setStaticPeers(ctx *cli.Context, cfg *p2p.Config) { } func setTrustedPeers(ctx *cli.Context, cfg *p2p.Config) { - if !ctx.GlobalIsSet(TrustedPeersFlag.Name) { + if !ctx.IsSet(TrustedPeersFlag.Name) { return } - urls := SplitAndTrim(ctx.GlobalString(TrustedPeersFlag.Name)) + urls := SplitAndTrim(ctx.String(TrustedPeersFlag.Name)) trustedNodes, err := ParseNodesFromURLs(urls) if err != nil { Fatalf("Option %s: %v", TrustedPeersFlag.Name, err) @@ -947,21 +947,21 @@ func nodeKey(datadir string) (*ecdsa.PrivateKey, error) { // setListenAddress creates a TCP listening address string from set command // line flags. func setListenAddress(ctx *cli.Context, cfg *p2p.Config) { - if ctx.GlobalIsSet(ListenPortFlag.Name) { - cfg.ListenAddr = fmt.Sprintf(":%d", ctx.GlobalInt(ListenPortFlag.Name)) + if ctx.IsSet(ListenPortFlag.Name) { + cfg.ListenAddr = fmt.Sprintf(":%d", ctx.Int(ListenPortFlag.Name)) } - if ctx.GlobalIsSet(P2pProtocolVersionFlag.Name) { - cfg.ProtocolVersion = uint(ctx.GlobalInt(P2pProtocolVersionFlag.Name)) + if ctx.IsSet(P2pProtocolVersionFlag.Name) { + cfg.ProtocolVersion = uint(ctx.Int(P2pProtocolVersionFlag.Name)) } - if ctx.GlobalIsSet(SentryAddrFlag.Name) { - cfg.SentryAddr = SplitAndTrim(ctx.GlobalString(SentryAddrFlag.Name)) + if ctx.IsSet(SentryAddrFlag.Name) { + cfg.SentryAddr = SplitAndTrim(ctx.String(SentryAddrFlag.Name)) } } // setNAT creates a port mapper from command line flags. func setNAT(ctx *cli.Context, cfg *p2p.Config) { - if ctx.GlobalIsSet(NATFlag.Name) { - natif, err := nat.Parse(ctx.GlobalString(NATFlag.Name)) + if ctx.IsSet(NATFlag.Name) { + natif, err := nat.Parse(ctx.String(NATFlag.Name)) if err != nil { Fatalf("Option %s: %v", NATFlag.Name, err) } @@ -985,16 +985,16 @@ func SplitAndTrim(input string) (ret []string) { // command line flags. func setEtherbase(ctx *cli.Context, cfg *ethconfig.Config) { var etherbase string - if ctx.GlobalIsSet(MinerEtherbaseFlag.Name) { - etherbase = ctx.GlobalString(MinerEtherbaseFlag.Name) + if ctx.IsSet(MinerEtherbaseFlag.Name) { + etherbase = ctx.String(MinerEtherbaseFlag.Name) if etherbase != "" { cfg.Miner.Etherbase = common.HexToAddress(etherbase) } } setSigKey := func(ctx *cli.Context, cfg *ethconfig.Config) { - if ctx.GlobalIsSet(MinerSigningKeyFileFlag.Name) { - signingKeyFileName := ctx.GlobalString(MinerSigningKeyFileFlag.Name) + if ctx.IsSet(MinerSigningKeyFileFlag.Name) { + signingKeyFileName := ctx.String(MinerSigningKeyFileFlag.Name) key, err := crypto.LoadECDSA(signingKeyFileName) if err != nil { panic(err) @@ -1003,7 +1003,7 @@ func setEtherbase(ctx *cli.Context, cfg *ethconfig.Config) { } } - if ctx.GlobalString(ChainFlag.Name) == networkname.DevChainName || ctx.GlobalString(ChainFlag.Name) == networkname.BorDevnetChainName { + if ctx.String(ChainFlag.Name) == networkname.DevChainName || ctx.String(ChainFlag.Name) == networkname.BorDevnetChainName { if etherbase == "" { cfg.Miner.SigKey = core.DevnetSignPrivateKey cfg.Miner.Etherbase = core.DevnetEtherbase @@ -1017,8 +1017,8 @@ func setEtherbase(ctx *cli.Context, cfg *ethconfig.Config) { networkname.RialtoChainName: true, networkname.ChapelChainName: true, } - if _, ok := chainsWithValidatorMode[ctx.GlobalString(ChainFlag.Name)]; ok || ctx.GlobalIsSet(MinerSigningKeyFileFlag.Name) { - if ctx.GlobalIsSet(MiningEnabledFlag.Name) && !ctx.GlobalIsSet(MinerSigningKeyFileFlag.Name) { + if _, ok := chainsWithValidatorMode[ctx.String(ChainFlag.Name)]; ok || ctx.IsSet(MinerSigningKeyFileFlag.Name) { + if ctx.IsSet(MiningEnabledFlag.Name) && !ctx.IsSet(MinerSigningKeyFileFlag.Name) { panic(fmt.Sprintf("Flag --%s is required in %s chain with --%s flag", MinerSigningKeyFileFlag.Name, ChainFlag.Name, MiningEnabledFlag.Name)) } setSigKey(ctx, cfg) @@ -1038,26 +1038,26 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config, nodeName, datadir string) { setStaticPeers(ctx, cfg) setTrustedPeers(ctx, cfg) - if ctx.GlobalIsSet(MaxPeersFlag.Name) { - cfg.MaxPeers = ctx.GlobalInt(MaxPeersFlag.Name) + if ctx.IsSet(MaxPeersFlag.Name) { + cfg.MaxPeers = ctx.Int(MaxPeersFlag.Name) } - if ctx.GlobalIsSet(MaxPendingPeersFlag.Name) { - cfg.MaxPendingPeers = ctx.GlobalInt(MaxPendingPeersFlag.Name) + if ctx.IsSet(MaxPendingPeersFlag.Name) { + cfg.MaxPendingPeers = ctx.Int(MaxPendingPeersFlag.Name) } - if ctx.GlobalIsSet(NoDiscoverFlag.Name) { + if ctx.IsSet(NoDiscoverFlag.Name) { cfg.NoDiscovery = true } - if ctx.GlobalIsSet(DiscoveryV5Flag.Name) { - cfg.DiscoveryV5 = ctx.GlobalBool(DiscoveryV5Flag.Name) + if ctx.IsSet(DiscoveryV5Flag.Name) { + cfg.DiscoveryV5 = ctx.Bool(DiscoveryV5Flag.Name) } ethPeers := cfg.MaxPeers cfg.Name = nodeName log.Info("Maximum peer count", "ETH", ethPeers, "total", cfg.MaxPeers) - if netrestrict := ctx.GlobalString(NetrestrictFlag.Name); netrestrict != "" { + if netrestrict := ctx.String(NetrestrictFlag.Name); netrestrict != "" { list, err := netutil.ParseNetlist(netrestrict) if err != nil { Fatalf("Option %q: %v", NetrestrictFlag.Name, err) @@ -1065,10 +1065,10 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config, nodeName, datadir string) { cfg.NetRestrict = list } - if ctx.GlobalString(ChainFlag.Name) == networkname.DevChainName { + if ctx.String(ChainFlag.Name) == networkname.DevChainName { // --dev mode can't use p2p networking. //cfg.MaxPeers = 0 // It can have peers otherwise local sync is not possible - if !ctx.GlobalIsSet(ListenPortFlag.Name) { + if !ctx.IsSet(ListenPortFlag.Name) { cfg.ListenAddr = ":0" } cfg.NoDiscovery = true @@ -1083,7 +1083,7 @@ func SetNodeConfig(ctx *cli.Context, cfg *nodecfg.Config) { setNodeUserIdent(ctx, cfg) SetP2PConfig(ctx, &cfg.P2P, cfg.NodeName(), cfg.Dirs.DataDir) - cfg.SentryLogPeerInfo = ctx.GlobalIsSet(SentryLogPeerInfoFlag.Name) + cfg.SentryLogPeerInfo = ctx.IsSet(SentryLogPeerInfoFlag.Name) } func SetNodeConfigCobra(cmd *cobra.Command, cfg *nodecfg.Config) { @@ -1145,14 +1145,14 @@ func networkDataDirCheckingLegacy(datadir, network string) string { } func setDataDir(ctx *cli.Context, cfg *nodecfg.Config) { - if ctx.GlobalIsSet(DataDirFlag.Name) { - cfg.Dirs.DataDir = ctx.GlobalString(DataDirFlag.Name) + if ctx.IsSet(DataDirFlag.Name) { + cfg.Dirs.DataDir = ctx.String(DataDirFlag.Name) } else { - cfg.Dirs.DataDir = DataDirForNetwork(cfg.Dirs.DataDir, ctx.GlobalString(ChainFlag.Name)) + cfg.Dirs.DataDir = DataDirForNetwork(cfg.Dirs.DataDir, ctx.String(ChainFlag.Name)) } cfg.Dirs = datadir.New(cfg.Dirs.DataDir) - if err := cfg.MdbxPageSize.UnmarshalText([]byte(ctx.GlobalString(DbPageSizeFlag.Name))); err != nil { + if err := cfg.MdbxPageSize.UnmarshalText([]byte(ctx.String(DbPageSizeFlag.Name))); err != nil { panic(err) } sz := cfg.MdbxPageSize.Bytes() @@ -1188,14 +1188,14 @@ func setDataDirCobra(f *pflag.FlagSet, cfg *nodecfg.Config) { } func setGPO(ctx *cli.Context, cfg *gasprice.Config) { - if ctx.GlobalIsSet(GpoBlocksFlag.Name) { - cfg.Blocks = ctx.GlobalInt(GpoBlocksFlag.Name) + if ctx.IsSet(GpoBlocksFlag.Name) { + cfg.Blocks = ctx.Int(GpoBlocksFlag.Name) } - if ctx.GlobalIsSet(GpoPercentileFlag.Name) { - cfg.Percentile = ctx.GlobalInt(GpoPercentileFlag.Name) + if ctx.IsSet(GpoPercentileFlag.Name) { + cfg.Percentile = ctx.Int(GpoPercentileFlag.Name) } - if ctx.GlobalIsSet(GpoMaxGasPriceFlag.Name) { - cfg.MaxPrice = big.NewInt(ctx.GlobalInt64(GpoMaxGasPriceFlag.Name)) + if ctx.IsSet(GpoMaxGasPriceFlag.Name) { + cfg.MaxPrice = big.NewInt(ctx.Int64(GpoMaxGasPriceFlag.Name)) } } @@ -1213,11 +1213,11 @@ func setGPOCobra(f *pflag.FlagSet, cfg *gasprice.Config) { } func setTxPool(ctx *cli.Context, cfg *core.TxPoolConfig) { - if ctx.GlobalIsSet(TxPoolDisableFlag.Name) { + if ctx.IsSet(TxPoolDisableFlag.Name) { cfg.Disable = true } - if ctx.GlobalIsSet(TxPoolLocalsFlag.Name) { - locals := strings.Split(ctx.GlobalString(TxPoolLocalsFlag.Name), ",") + if ctx.IsSet(TxPoolLocalsFlag.Name) { + locals := strings.Split(ctx.String(TxPoolLocalsFlag.Name), ",") for _, account := range locals { if trimmed := strings.TrimSpace(account); !common.IsHexAddress(trimmed) { Fatalf("Invalid account in --txpool.locals: %s", trimmed) @@ -1226,36 +1226,36 @@ func setTxPool(ctx *cli.Context, cfg *core.TxPoolConfig) { } } } - if ctx.GlobalIsSet(TxPoolNoLocalsFlag.Name) { - cfg.NoLocals = ctx.GlobalBool(TxPoolNoLocalsFlag.Name) + if ctx.IsSet(TxPoolNoLocalsFlag.Name) { + cfg.NoLocals = ctx.Bool(TxPoolNoLocalsFlag.Name) } - if ctx.GlobalIsSet(TxPoolPriceLimitFlag.Name) { - cfg.PriceLimit = ctx.GlobalUint64(TxPoolPriceLimitFlag.Name) + if ctx.IsSet(TxPoolPriceLimitFlag.Name) { + cfg.PriceLimit = ctx.Uint64(TxPoolPriceLimitFlag.Name) } - if ctx.GlobalIsSet(TxPoolPriceBumpFlag.Name) { - cfg.PriceBump = ctx.GlobalUint64(TxPoolPriceBumpFlag.Name) + if ctx.IsSet(TxPoolPriceBumpFlag.Name) { + cfg.PriceBump = ctx.Uint64(TxPoolPriceBumpFlag.Name) } - if ctx.GlobalIsSet(TxPoolAccountSlotsFlag.Name) { - cfg.AccountSlots = ctx.GlobalUint64(TxPoolAccountSlotsFlag.Name) + if ctx.IsSet(TxPoolAccountSlotsFlag.Name) { + cfg.AccountSlots = ctx.Uint64(TxPoolAccountSlotsFlag.Name) } - if ctx.GlobalIsSet(TxPoolGlobalSlotsFlag.Name) { - cfg.GlobalSlots = ctx.GlobalUint64(TxPoolGlobalSlotsFlag.Name) + if ctx.IsSet(TxPoolGlobalSlotsFlag.Name) { + cfg.GlobalSlots = ctx.Uint64(TxPoolGlobalSlotsFlag.Name) } - if ctx.GlobalIsSet(TxPoolAccountQueueFlag.Name) { - cfg.AccountQueue = ctx.GlobalUint64(TxPoolAccountQueueFlag.Name) + if ctx.IsSet(TxPoolAccountQueueFlag.Name) { + cfg.AccountQueue = ctx.Uint64(TxPoolAccountQueueFlag.Name) } - if ctx.GlobalIsSet(TxPoolGlobalQueueFlag.Name) { - cfg.GlobalQueue = ctx.GlobalUint64(TxPoolGlobalQueueFlag.Name) + if ctx.IsSet(TxPoolGlobalQueueFlag.Name) { + cfg.GlobalQueue = ctx.Uint64(TxPoolGlobalQueueFlag.Name) } - if ctx.GlobalIsSet(TxPoolGlobalBaseFeeSlotsFlag.Name) { - cfg.GlobalBaseFeeQueue = ctx.GlobalUint64(TxPoolGlobalBaseFeeSlotsFlag.Name) + if ctx.IsSet(TxPoolGlobalBaseFeeSlotsFlag.Name) { + cfg.GlobalBaseFeeQueue = ctx.Uint64(TxPoolGlobalBaseFeeSlotsFlag.Name) } - if ctx.GlobalIsSet(TxPoolLifetimeFlag.Name) { - cfg.Lifetime = ctx.GlobalDuration(TxPoolLifetimeFlag.Name) + if ctx.IsSet(TxPoolLifetimeFlag.Name) { + cfg.Lifetime = ctx.Duration(TxPoolLifetimeFlag.Name) } - if ctx.GlobalIsSet(TxPoolTraceSendersFlag.Name) { + if ctx.IsSet(TxPoolTraceSendersFlag.Name) { // Parse the command separated flag - senderHexes := SplitAndTrim(ctx.GlobalString(TxPoolTraceSendersFlag.Name)) + senderHexes := SplitAndTrim(ctx.String(TxPoolTraceSendersFlag.Name)) cfg.TracedSenders = make([]string, len(senderHexes)) for i, senderHex := range senderHexes { sender := common.HexToAddress(senderHex) @@ -1265,22 +1265,22 @@ func setTxPool(ctx *cli.Context, cfg *core.TxPoolConfig) { } func setEthash(ctx *cli.Context, datadir string, cfg *ethconfig.Config) { - if ctx.GlobalIsSet(EthashDatasetDirFlag.Name) { - cfg.Ethash.DatasetDir = ctx.GlobalString(EthashDatasetDirFlag.Name) + if ctx.IsSet(EthashDatasetDirFlag.Name) { + cfg.Ethash.DatasetDir = ctx.String(EthashDatasetDirFlag.Name) } else { cfg.Ethash.DatasetDir = filepath.Join(datadir, "ethash-dags") } - if ctx.GlobalIsSet(EthashCachesInMemoryFlag.Name) { - cfg.Ethash.CachesInMem = ctx.GlobalInt(EthashCachesInMemoryFlag.Name) + if ctx.IsSet(EthashCachesInMemoryFlag.Name) { + cfg.Ethash.CachesInMem = ctx.Int(EthashCachesInMemoryFlag.Name) } - if ctx.GlobalIsSet(EthashCachesLockMmapFlag.Name) { - cfg.Ethash.CachesLockMmap = ctx.GlobalBool(EthashCachesLockMmapFlag.Name) + if ctx.IsSet(EthashCachesLockMmapFlag.Name) { + cfg.Ethash.CachesLockMmap = ctx.Bool(EthashCachesLockMmapFlag.Name) } - if ctx.GlobalIsSet(FakePoWFlag.Name) { + if ctx.IsSet(FakePoWFlag.Name) { cfg.Ethash.PowMode = ethash.ModeFake } - if ctx.GlobalIsSet(EthashDatasetsLockMmapFlag.Name) { - cfg.Ethash.DatasetsLockMmap = ctx.GlobalBool(EthashDatasetsLockMmapFlag.Name) + if ctx.IsSet(EthashDatasetsLockMmapFlag.Name) { + cfg.Ethash.DatasetsLockMmap = ctx.Bool(EthashDatasetsLockMmapFlag.Name) } } @@ -1336,11 +1336,11 @@ func SetupMinerCobra(cmd *cobra.Command, cfg *params.MiningConfig) { } func setClique(ctx *cli.Context, cfg *params.ConsensusSnapshotConfig, datadir string) { - cfg.CheckpointInterval = ctx.GlobalUint64(CliqueSnapshotCheckpointIntervalFlag.Name) - cfg.InmemorySnapshots = ctx.GlobalInt(CliqueSnapshotInmemorySnapshotsFlag.Name) - cfg.InmemorySignatures = ctx.GlobalInt(CliqueSnapshotInmemorySignaturesFlag.Name) - if ctx.GlobalIsSet(CliqueDataDirFlag.Name) { - cfg.DBPath = filepath.Join(ctx.GlobalString(CliqueDataDirFlag.Name), "clique", "db") + cfg.CheckpointInterval = ctx.Uint64(CliqueSnapshotCheckpointIntervalFlag.Name) + cfg.InmemorySnapshots = ctx.Int(CliqueSnapshotInmemorySnapshotsFlag.Name) + cfg.InmemorySignatures = ctx.Int(CliqueSnapshotInmemorySignaturesFlag.Name) + if ctx.IsSet(CliqueDataDirFlag.Name) { + cfg.DBPath = filepath.Join(ctx.String(CliqueDataDirFlag.Name), "clique", "db") } else { cfg.DBPath = filepath.Join(datadir, "clique", "db") } @@ -1355,39 +1355,39 @@ func setParlia(ctx *cli.Context, cfg *params.ParliaConfig, datadir string) { } func setBorConfig(ctx *cli.Context, cfg *ethconfig.Config) { - cfg.HeimdallURL = ctx.GlobalString(HeimdallURLFlag.Name) - cfg.WithoutHeimdall = ctx.GlobalBool(WithoutHeimdallFlag.Name) + cfg.HeimdallURL = ctx.String(HeimdallURLFlag.Name) + cfg.WithoutHeimdall = ctx.Bool(WithoutHeimdallFlag.Name) } func setMiner(ctx *cli.Context, cfg *params.MiningConfig) { - cfg.Enabled = ctx.GlobalIsSet(MiningEnabledFlag.Name) - cfg.EnabledPOS = !ctx.GlobalIsSet(ProposingDisableFlag.Name) + cfg.Enabled = ctx.IsSet(MiningEnabledFlag.Name) + cfg.EnabledPOS = !ctx.IsSet(ProposingDisableFlag.Name) if cfg.Enabled && len(cfg.Etherbase.Bytes()) == 0 { panic(fmt.Sprintf("Erigon supports only remote miners. Flag --%s or --%s is required", MinerNotifyFlag.Name, MinerSigningKeyFileFlag.Name)) } - if ctx.GlobalIsSet(MinerNotifyFlag.Name) { - cfg.Notify = strings.Split(ctx.GlobalString(MinerNotifyFlag.Name), ",") + if ctx.IsSet(MinerNotifyFlag.Name) { + cfg.Notify = strings.Split(ctx.String(MinerNotifyFlag.Name), ",") } - if ctx.GlobalIsSet(MinerExtraDataFlag.Name) { - cfg.ExtraData = []byte(ctx.GlobalString(MinerExtraDataFlag.Name)) + if ctx.IsSet(MinerExtraDataFlag.Name) { + cfg.ExtraData = []byte(ctx.String(MinerExtraDataFlag.Name)) } - if ctx.GlobalIsSet(MinerGasLimitFlag.Name) { - cfg.GasLimit = ctx.GlobalUint64(MinerGasLimitFlag.Name) + if ctx.IsSet(MinerGasLimitFlag.Name) { + cfg.GasLimit = ctx.Uint64(MinerGasLimitFlag.Name) } - if ctx.GlobalIsSet(MinerGasPriceFlag.Name) { - cfg.GasPrice = GlobalBig(ctx, MinerGasPriceFlag.Name) + if ctx.IsSet(MinerGasPriceFlag.Name) { + cfg.GasPrice = BigFlagValue(ctx, MinerGasPriceFlag.Name) } - if ctx.GlobalIsSet(MinerRecommitIntervalFlag.Name) { - cfg.Recommit = ctx.GlobalDuration(MinerRecommitIntervalFlag.Name) + if ctx.IsSet(MinerRecommitIntervalFlag.Name) { + cfg.Recommit = ctx.Duration(MinerRecommitIntervalFlag.Name) } - if ctx.GlobalIsSet(MinerNoVerfiyFlag.Name) { - cfg.Noverify = ctx.GlobalBool(MinerNoVerfiyFlag.Name) + if ctx.IsSet(MinerNoVerfiyFlag.Name) { + cfg.Noverify = ctx.Bool(MinerNoVerfiyFlag.Name) } } func setWhitelist(ctx *cli.Context, cfg *ethconfig.Config) { - whitelist := ctx.GlobalString(WhitelistFlag.Name) + whitelist := ctx.String(WhitelistFlag.Name) if whitelist == "" { return } @@ -1421,13 +1421,13 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { panic(fmt.Sprintf("invalid argument, not cli.Flag type: %T", args[i])) } // Check if next arg extends current and expand its name if so - name := flag.GetName() + name := flag.Names()[0] if i+1 < len(args) { switch option := args[i+1].(type) { case string: // Extended flag check, make sure value set doesn't conflict with passed in option - if ctx.GlobalString(flag.GetName()) == option { + if ctx.String(flag.Names()[0]) == option { name += "=" + option set = append(set, "--"+name) } @@ -1441,7 +1441,7 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { } } // Mark the flag if it's set - if ctx.GlobalIsSet(flag.GetName()) { + if ctx.IsSet(flag.Names()[0]) { set = append(set, "--"+name) } } @@ -1452,23 +1452,23 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { // SetEthConfig applies eth-related command line flags to the config. func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.Config) { - cfg.CL = ctx.GlobalBool(ExternalConsensusFlag.Name) - cfg.LightClientDiscoveryAddr = ctx.GlobalString(LightClientDiscoveryAddrFlag.Name) - cfg.LightClientDiscoveryPort = ctx.GlobalUint64(LightClientDiscoveryPortFlag.Name) - cfg.LightClientDiscoveryTCPPort = ctx.GlobalUint64(LightClientDiscoveryTCPPortFlag.Name) - cfg.SentinelAddr = ctx.GlobalString(SentinelAddrFlag.Name) - cfg.SentinelPort = ctx.GlobalUint64(SentinelPortFlag.Name) - - cfg.Sync.UseSnapshots = ctx.GlobalBoolT(SnapshotFlag.Name) + cfg.CL = ctx.Bool(ExternalConsensusFlag.Name) + cfg.LightClientDiscoveryAddr = ctx.String(LightClientDiscoveryAddrFlag.Name) + cfg.LightClientDiscoveryPort = ctx.Uint64(LightClientDiscoveryPortFlag.Name) + cfg.LightClientDiscoveryTCPPort = ctx.Uint64(LightClientDiscoveryTCPPortFlag.Name) + cfg.SentinelAddr = ctx.String(SentinelAddrFlag.Name) + cfg.SentinelPort = ctx.Uint64(SentinelPortFlag.Name) + + cfg.Sync.UseSnapshots = ctx.Bool(SnapshotFlag.Name) cfg.Dirs = nodeConfig.Dirs - cfg.Snapshot.KeepBlocks = ctx.GlobalBool(SnapKeepBlocksFlag.Name) - cfg.Snapshot.Produce = !ctx.GlobalBool(SnapStopFlag.Name) - cfg.Snapshot.NoDownloader = ctx.GlobalBool(NoDownloaderFlag.Name) - cfg.Snapshot.Verify = ctx.GlobalBool(DownloaderVerifyFlag.Name) - cfg.Snapshot.DownloaderAddr = strings.TrimSpace(ctx.GlobalString(DownloaderAddrFlag.Name)) + cfg.Snapshot.KeepBlocks = ctx.Bool(SnapKeepBlocksFlag.Name) + cfg.Snapshot.Produce = !ctx.Bool(SnapStopFlag.Name) + cfg.Snapshot.NoDownloader = ctx.Bool(NoDownloaderFlag.Name) + cfg.Snapshot.Verify = ctx.Bool(DownloaderVerifyFlag.Name) + cfg.Snapshot.DownloaderAddr = strings.TrimSpace(ctx.String(DownloaderAddrFlag.Name)) if cfg.Snapshot.DownloaderAddr == "" { - downloadRateStr := ctx.GlobalString(TorrentDownloadRateFlag.Name) - uploadRateStr := ctx.GlobalString(TorrentUploadRateFlag.Name) + downloadRateStr := ctx.String(TorrentDownloadRateFlag.Name) + uploadRateStr := ctx.String(TorrentUploadRateFlag.Name) var downloadRate, uploadRate datasize.ByteSize if err := downloadRate.UnmarshalText([]byte(downloadRateStr)); err != nil { panic(err) @@ -1476,12 +1476,12 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C if err := uploadRate.UnmarshalText([]byte(uploadRateStr)); err != nil { panic(err) } - lvl, dbg, err := downloadercfg.Int2LogLevel(ctx.GlobalInt(TorrentVerbosityFlag.Name)) + lvl, dbg, err := downloadercfg.Int2LogLevel(ctx.Int(TorrentVerbosityFlag.Name)) if err != nil { panic(err) } log.Info("torrent verbosity", "level", lvl.LogString()) - cfg.Downloader, err = downloadercfg.New(cfg.Dirs.Snap, lvl, dbg, nodeConfig.P2P.NAT, downloadRate, uploadRate, ctx.GlobalInt(TorrentPortFlag.Name), ctx.GlobalInt(TorrentConnsPerFileFlag.Name), ctx.GlobalInt(TorrentDownloadSlotsFlag.Name)) + cfg.Downloader, err = downloadercfg.New(cfg.Dirs.Snap, lvl, dbg, nodeConfig.P2P.NAT, downloadRate, uploadRate, ctx.Int(TorrentPortFlag.Name), ctx.Int(TorrentConnsPerFileFlag.Name), ctx.Int(TorrentDownloadSlotsFlag.Name)) if err != nil { panic(err) } @@ -1508,29 +1508,29 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C setWhitelist(ctx, cfg) setBorConfig(ctx, cfg) - cfg.Ethstats = ctx.GlobalString(EthStatsURLFlag.Name) + cfg.Ethstats = ctx.String(EthStatsURLFlag.Name) cfg.P2PEnabled = len(nodeConfig.P2P.SentryAddr) == 0 - cfg.EnabledIssuance = ctx.GlobalBool(EnabledIssuance.Name) - cfg.HistoryV3 = ctx.GlobalBool(HistoryV3Flag.Name) - if ctx.GlobalIsSet(NetworkIdFlag.Name) { - cfg.NetworkID = ctx.GlobalUint64(NetworkIdFlag.Name) + cfg.EnabledIssuance = ctx.Bool(EnabledIssuance.Name) + cfg.HistoryV3 = ctx.Bool(HistoryV3Flag.Name) + if ctx.IsSet(NetworkIdFlag.Name) { + cfg.NetworkID = ctx.Uint64(NetworkIdFlag.Name) } - if ctx.GlobalIsSet(RPCGlobalGasCapFlag.Name) { - cfg.RPCGasCap = ctx.GlobalUint64(RPCGlobalGasCapFlag.Name) + if ctx.IsSet(RPCGlobalGasCapFlag.Name) { + cfg.RPCGasCap = ctx.Uint64(RPCGlobalGasCapFlag.Name) } if cfg.RPCGasCap != 0 { log.Info("Set global gas cap", "cap", cfg.RPCGasCap) } else { log.Info("Global gas cap disabled") } - if ctx.GlobalIsSet(RPCGlobalTxFeeCapFlag.Name) { - cfg.RPCTxFeeCap = ctx.GlobalFloat64(RPCGlobalTxFeeCapFlag.Name) + if ctx.IsSet(RPCGlobalTxFeeCapFlag.Name) { + cfg.RPCTxFeeCap = ctx.Float64(RPCGlobalTxFeeCapFlag.Name) } - if ctx.GlobalIsSet(NoDiscoverFlag.Name) { + if ctx.IsSet(NoDiscoverFlag.Name) { cfg.EthDiscoveryURLs = []string{} - } else if ctx.GlobalIsSet(DNSDiscoveryFlag.Name) { - urls := ctx.GlobalString(DNSDiscoveryFlag.Name) + } else if ctx.IsSet(DNSDiscoveryFlag.Name) { + urls := ctx.String(DNSDiscoveryFlag.Name) if urls == "" { cfg.EthDiscoveryURLs = []string{} } else { @@ -1538,7 +1538,7 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C } } // Override any default configs for hard coded networks. - chain := ctx.GlobalString(ChainFlag.Name) + chain := ctx.String(ChainFlag.Name) switch chain { default: @@ -1549,7 +1549,7 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C return } cfg.Genesis = genesis - if !ctx.GlobalIsSet(NetworkIdFlag.Name) { + if !ctx.IsSet(NetworkIdFlag.Name) { cfg.NetworkID = params.NetworkIDByChainName(chain) } SetDNSDiscoveryDefaults(cfg, *genesisHash) @@ -1558,7 +1558,7 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash) } case networkname.DevChainName: - if !ctx.GlobalIsSet(NetworkIdFlag.Name) { + if !ctx.IsSet(NetworkIdFlag.Name) { cfg.NetworkID = 1337 } @@ -1570,18 +1570,18 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C log.Info("Using developer account", "address", developer) // Create a new developer genesis block or reuse existing one - cfg.Genesis = core.DeveloperGenesisBlock(uint64(ctx.GlobalInt(DeveloperPeriodFlag.Name)), developer) + cfg.Genesis = core.DeveloperGenesisBlock(uint64(ctx.Int(DeveloperPeriodFlag.Name)), developer) log.Info("Using custom developer period", "seconds", cfg.Genesis.Config.Clique.Period) - if !ctx.GlobalIsSet(MinerGasPriceFlag.Name) { + if !ctx.IsSet(MinerGasPriceFlag.Name) { cfg.Miner.GasPrice = big.NewInt(1) } } - if ctx.GlobalIsSet(OverrideTerminalTotalDifficulty.Name) { - cfg.OverrideTerminalTotalDifficulty = GlobalBig(ctx, OverrideTerminalTotalDifficulty.Name) + if ctx.IsSet(OverrideTerminalTotalDifficulty.Name) { + cfg.OverrideTerminalTotalDifficulty = BigFlagValue(ctx, OverrideTerminalTotalDifficulty.Name) } - if ctx.GlobalIsSet(OverrideMergeNetsplitBlock.Name) { - cfg.OverrideMergeNetsplitBlock = GlobalBig(ctx, OverrideMergeNetsplitBlock.Name) + if ctx.IsSet(OverrideMergeNetsplitBlock.Name) { + cfg.OverrideMergeNetsplitBlock = BigFlagValue(ctx, OverrideMergeNetsplitBlock.Name) } } @@ -1618,11 +1618,11 @@ func SplitTagsFlag(tagsFlag string) map[string]string { // scripts to preload before starting. func MakeConsolePreloads(ctx *cli.Context) []string { // Skip preloading if there's nothing to preload - if ctx.GlobalString(PreloadJSFlag.Name) == "" { + if ctx.String(PreloadJSFlag.Name) == "" { return nil } // Otherwise resolve absolute paths and return them - files := strings.Split(ctx.GlobalString(PreloadJSFlag.Name), ",") + files := strings.Split(ctx.String(PreloadJSFlag.Name), ",") preloads := make([]string, 0, len(files)) for _, file := range files { preloads = append(preloads, strings.TrimSpace(file)) @@ -1635,11 +1635,11 @@ func CobraFlags(cmd *cobra.Command, urfaveCliFlagsLists ...[]cli.Flag) { for _, urfaveCliFlags := range urfaveCliFlagsLists { for _, flag := range urfaveCliFlags { switch f := flag.(type) { - case cli.IntFlag: + case *cli.IntFlag: flags.Int(f.Name, f.Value, f.Usage) - case cli.StringFlag: + case *cli.StringFlag: flags.String(f.Name, f.Value, f.Usage) - case cli.BoolFlag: + case *cli.BoolFlag: flags.Bool(f.Name, false, f.Usage) default: panic(fmt.Errorf("unexpected type: %T", flag)) diff --git a/go.mod b/go.mod index 4608cd80734..16ca16e7be2 100644 --- a/go.mod +++ b/go.mod @@ -69,7 +69,7 @@ require ( github.com/torquem-ch/mdbx-go v0.26.2 github.com/ugorji/go/codec v1.1.13 github.com/ugorji/go/codec/codecgen v1.1.13 - github.com/urfave/cli v1.22.9 + github.com/urfave/cli/v2 v2.23.5 github.com/valyala/fastjson v1.6.3 github.com/xsleonard/go-merkle v1.1.0 go.uber.org/atomic v1.10.0 @@ -155,6 +155,7 @@ require ( github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/supranational/blst v0.3.10 // indirect github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.opentelemetry.io/otel v1.8.0 // indirect go.opentelemetry.io/otel/trace v1.8.0 // indirect go.uber.org/multierr v1.8.0 // indirect diff --git a/go.sum b/go.sum index 0964cc3c92a..6b4b4074952 100644 --- a/go.sum +++ b/go.sum @@ -954,8 +954,8 @@ github.com/ugorji/go/codec/codecgen v1.1.13/go.mod h1:EhCxlc7Crov+HLygD4+hBCitXN github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.9 h1:cv3/KhXGBGjEXLC4bH0sLuJ9BewaAbpk5oyMOveu4pw= -github.com/urfave/cli v1.22.9/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.23.5 h1:xbrU7tAYviSpqeR3X4nEFWUdB/uDZ6DE+HxmRU7Xtyw= +github.com/urfave/cli/v2 v2.23.5/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/valyala/fastjson v1.6.3 h1:tAKFnnwmeMGPbwJ7IwxcTPCNr3uIzoIj3/Fh90ra4xc= github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/valyala/fastrand v1.1.0 h1:f+5HkLW4rsgzdNoleUOB69hyT9IlD2ZQh9GyDMfb5G8= @@ -969,6 +969,8 @@ github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1: github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/xsleonard/go-merkle v1.1.0 h1:fHe1fuhJjGH22ZzVTAH0jqHLhTGhOq3wQjJN+8P0jQg= github.com/xsleonard/go-merkle v1.1.0/go.mod h1:cW4z+UZ/4f2n9IJgIiyDCdYguchoDyDAPmpuOWGxdGg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/turbo/app/import.go b/turbo/app/import.go index 50a82ebd15b..66336cd49d7 100644 --- a/turbo/app/import.go +++ b/turbo/app/import.go @@ -12,6 +12,9 @@ import ( "syscall" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/rawdb" @@ -20,9 +23,6 @@ import ( "github.com/ledgerwatch/erigon/rlp" turboNode "github.com/ledgerwatch/erigon/turbo/node" "github.com/ledgerwatch/erigon/turbo/stages" - - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli" ) const ( @@ -30,13 +30,13 @@ const ( ) var importCommand = cli.Command{ - Action: MigrateFlags(importChain), + Action: importChain, Name: "import", Usage: "Import a blockchain file", ArgsUsage: " ( ... ) ", Flags: []cli.Flag{ - utils.DataDirFlag, - utils.ChainFlag, + &utils.DataDirFlag, + &utils.ChainFlag, }, Category: "BLOCKCHAIN COMMANDS", Description: ` @@ -48,7 +48,7 @@ processing will proceed even if an individual RLP-file import failure occurs.`, } func importChain(ctx *cli.Context) error { - if len(ctx.Args()) < 1 { + if ctx.NArg() < 1 { utils.Fatalf("This command requires an argument.") } diff --git a/turbo/app/init.go b/turbo/app/init.go index 6ff2edf5525..c4460547f4a 100644 --- a/turbo/app/init.go +++ b/turbo/app/init.go @@ -4,21 +4,22 @@ import ( "encoding/json" "os" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/node" - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli" ) var initCommand = cli.Command{ - Action: MigrateFlags(initGenesis), + Action: initGenesis, Name: "init", Usage: "Bootstrap and initialize a new genesis block", ArgsUsage: "", Flags: []cli.Flag{ - utils.DataDirFlag, + &utils.DataDirFlag, }, Category: "BLOCKCHAIN COMMANDS", Description: ` diff --git a/turbo/app/make_app.go b/turbo/app/make_app.go index 4f8652c4df8..aa0173c206d 100644 --- a/turbo/app/make_app.go +++ b/turbo/app/make_app.go @@ -2,7 +2,7 @@ package app import ( - "github.com/urfave/cli" + "github.com/urfave/cli/v2" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/node" @@ -16,9 +16,9 @@ import ( // MakeApp creates a cli application (based on `github.com/urlfave/cli` package). // The application exits when `action` returns. // Parameters: -// * action: the main function for the application. receives `*cli.Context` with parsed command-line flags. Returns no error, if some error could not be recovered from write to the log or panic. +// * action: the main function for the application. receives `*cli.Context` with parsed command-line flags. // * cliFlags: the list of flags `cli.Flag` that the app should set and parse. By default, use `DefaultFlags()`. If you want to specify your own flag, use `append(DefaultFlags(), myFlag)` for this parameter. -func MakeApp(action func(*cli.Context), cliFlags []cli.Flag) *cli.App { +func MakeApp(action cli.ActionFunc, cliFlags []cli.Flag) *cli.App { app := cli2.NewApp(params.GitCommit, "", "erigon experimental cli") app.Action = action app.Flags = append(cliFlags, debug.Flags...) // debug flags are required @@ -29,21 +29,10 @@ func MakeApp(action func(*cli.Context), cliFlags []cli.Flag) *cli.App { debug.Exit() return nil } - app.Commands = []cli.Command{initCommand, importCommand, snapshotCommand} + app.Commands = []*cli.Command{&initCommand, &importCommand, &snapshotCommand} return app } -func MigrateFlags(action func(ctx *cli.Context) error) func(*cli.Context) error { - return func(ctx *cli.Context) error { - for _, name := range ctx.FlagNames() { - if ctx.IsSet(name) { - ctx.GlobalSet(name, ctx.String(name)) - } - } - return action(ctx) - } -} - func NewNodeConfig(ctx *cli.Context) *nodecfg.Config { nodeConfig := nodecfg.DefaultConfig // see simiar changes in `cmd/geth/config.go#defaultNodeConfig` @@ -54,8 +43,8 @@ func NewNodeConfig(ctx *cli.Context) *nodecfg.Config { } nodeConfig.IPCPath = "" // force-disable IPC endpoint nodeConfig.Name = "erigon" - if ctx.GlobalIsSet(utils.DataDirFlag.Name) { - nodeConfig.Dirs = datadir.New(ctx.GlobalString(utils.DataDirFlag.Name)) + if ctx.IsSet(utils.DataDirFlag.Name) { + nodeConfig.Dirs = datadir.New(ctx.String(utils.DataDirFlag.Name)) } return &nodeConfig } diff --git a/turbo/app/snapshots.go b/turbo/app/snapshots.go index 7133103023d..0e116695815 100644 --- a/turbo/app/snapshots.go +++ b/turbo/app/snapshots.go @@ -22,7 +22,7 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/mdbx" libstate "github.com/ledgerwatch/erigon-lib/state" "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" "golang.org/x/sync/semaphore" "github.com/ledgerwatch/erigon/cmd/hack/tool/fromdb" @@ -50,17 +50,17 @@ func joinFlags(lists ...[]cli.Flag) (res []cli.Flag) { var snapshotCommand = cli.Command{ Name: "snapshots", Description: `Managing snapshots (historical data partitions)`, - Subcommands: []cli.Command{ + Subcommands: []*cli.Command{ { Name: "create", Action: doSnapshotCommand, Usage: "Create snapshots for given range of blocks", Before: func(ctx *cli.Context) error { return debug.Setup(ctx) }, Flags: joinFlags([]cli.Flag{ - utils.DataDirFlag, - SnapshotFromFlag, - SnapshotToFlag, - SnapshotSegmentSizeFlag, + &utils.DataDirFlag, + &SnapshotFromFlag, + &SnapshotToFlag, + &SnapshotSegmentSizeFlag, }, debug.Flags, logging.Flags), }, { @@ -69,9 +69,9 @@ var snapshotCommand = cli.Command{ Usage: "Create all indices for snapshots", Before: func(ctx *cli.Context) error { return debug.Setup(ctx) }, Flags: joinFlags([]cli.Flag{ - utils.DataDirFlag, - SnapshotFromFlag, - SnapshotRebuildFlag, + &utils.DataDirFlag, + &SnapshotFromFlag, + &SnapshotRebuildFlag, }, debug.Flags, logging.Flags), }, { @@ -80,10 +80,10 @@ var snapshotCommand = cli.Command{ Usage: "erigon snapshots uncompress a.seg | erigon snapshots compress b.seg", Before: func(ctx *cli.Context) error { return debug.Setup(ctx) }, Flags: joinFlags([]cli.Flag{ - utils.DataDirFlag, - SnapshotFromFlag, - SnapshotToFlag, - SnapshotEveryFlag, + &utils.DataDirFlag, + &SnapshotFromFlag, + &SnapshotToFlag, + &SnapshotEveryFlag, }, debug.Flags, logging.Flags), }, { @@ -97,19 +97,19 @@ var snapshotCommand = cli.Command{ Name: "compress", Action: doCompress, Before: func(ctx *cli.Context) error { return debug.Setup(ctx) }, - Flags: joinFlags([]cli.Flag{utils.DataDirFlag}, debug.Flags, logging.Flags), + Flags: joinFlags([]cli.Flag{&utils.DataDirFlag}, debug.Flags, logging.Flags), }, { Name: "ram", Action: doRam, Before: func(ctx *cli.Context) error { return debug.Setup(ctx) }, - Flags: joinFlags([]cli.Flag{utils.DataDirFlag}, debug.Flags, logging.Flags), + Flags: joinFlags([]cli.Flag{&utils.DataDirFlag}, debug.Flags, logging.Flags), }, { Name: "decompress_speed", Action: doDecompressSpeed, Before: func(ctx *cli.Context) error { return debug.Setup(ctx) }, - Flags: joinFlags([]cli.Flag{utils.DataDirFlag}, debug.Flags, logging.Flags), + Flags: joinFlags([]cli.Flag{&utils.DataDirFlag}, debug.Flags, logging.Flags), }, }, } @@ -150,10 +150,10 @@ func preloadFileAsync(name string) { func doDecompressSpeed(cliCtx *cli.Context) error { args := cliCtx.Args() - if len(args) != 1 { + if args.Len() != 1 { return fmt.Errorf("expecting .seg file path") } - f := args[0] + f := args.First() compress.SetDecompressionTableCondensity(9) @@ -189,10 +189,10 @@ func doDecompressSpeed(cliCtx *cli.Context) error { } func doRam(cliCtx *cli.Context) error { args := cliCtx.Args() - if len(args) != 1 { + if args.Len() != 1 { return fmt.Errorf("expecting .seg file path") } - f := args[0] + f := args.First() var m runtime.MemStats runtime.ReadMemStats(&m) runtime.ReadMemStats(&m) @@ -247,10 +247,10 @@ func doUncompress(cliCtx *cli.Context) error { ctx, cancel := common.RootContext() defer cancel() args := cliCtx.Args() - if len(args) != 1 { + if args.Len() != 1 { return fmt.Errorf("expecting .seg file path") } - f := args[0] + f := args.First() preloadFileAsync(f) @@ -296,10 +296,10 @@ func doCompress(cliCtx *cli.Context) error { ctx, cancel := common.RootContext() defer cancel() args := cliCtx.Args() - if len(args) != 1 { + if args.Len() != 1 { return fmt.Errorf("expecting .seg file path") } - f := args[0] + f := args.First() dirs := datadir.New(cliCtx.String(utils.DataDirFlag.Name)) c, err := compress.NewCompressor(ctx, "compress", f, dirs.Tmp, compress.MinPatternScore, estimate.CompressSnapshot.Workers(), log.LvlInfo) if err != nil { diff --git a/turbo/cli/default_flags.go b/turbo/cli/default_flags.go index d84016e0f8e..a125022fce3 100644 --- a/turbo/cli/default_flags.go +++ b/turbo/cli/default_flags.go @@ -1,157 +1,157 @@ package cli import ( + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/turbo/logging" - - "github.com/urfave/cli" ) // DefaultFlags contains all flags that are used and supported by Erigon binary. var DefaultFlags = []cli.Flag{ - utils.DataDirFlag, - utils.EthashDatasetDirFlag, - utils.SnapshotFlag, - utils.ExternalConsensusFlag, - utils.TxPoolDisableFlag, - utils.TxPoolLocalsFlag, - utils.TxPoolNoLocalsFlag, - utils.TxPoolPriceLimitFlag, - utils.TxPoolPriceBumpFlag, - utils.TxPoolAccountSlotsFlag, - utils.TxPoolGlobalSlotsFlag, - utils.TxPoolGlobalBaseFeeSlotsFlag, - utils.TxPoolAccountQueueFlag, - utils.TxPoolGlobalQueueFlag, - utils.TxPoolLifetimeFlag, - utils.TxPoolTraceSendersFlag, - PruneFlag, - PruneHistoryFlag, - PruneReceiptFlag, - PruneTxIndexFlag, - PruneCallTracesFlag, - PruneHistoryBeforeFlag, - PruneReceiptBeforeFlag, - PruneTxIndexBeforeFlag, - PruneCallTracesBeforeFlag, - BatchSizeFlag, - BlockDownloaderWindowFlag, - DatabaseVerbosityFlag, - PrivateApiAddr, - PrivateApiRateLimit, - EtlBufferSizeFlag, - TLSFlag, - TLSCertFlag, - TLSKeyFlag, - TLSCACertFlag, - StateStreamDisableFlag, - SyncLoopThrottleFlag, - BadBlockFlag, + &utils.DataDirFlag, + &utils.EthashDatasetDirFlag, + &utils.SnapshotFlag, + &utils.ExternalConsensusFlag, + &utils.TxPoolDisableFlag, + &utils.TxPoolLocalsFlag, + &utils.TxPoolNoLocalsFlag, + &utils.TxPoolPriceLimitFlag, + &utils.TxPoolPriceBumpFlag, + &utils.TxPoolAccountSlotsFlag, + &utils.TxPoolGlobalSlotsFlag, + &utils.TxPoolGlobalBaseFeeSlotsFlag, + &utils.TxPoolAccountQueueFlag, + &utils.TxPoolGlobalQueueFlag, + &utils.TxPoolLifetimeFlag, + &utils.TxPoolTraceSendersFlag, + &PruneFlag, + &PruneHistoryFlag, + &PruneReceiptFlag, + &PruneTxIndexFlag, + &PruneCallTracesFlag, + &PruneHistoryBeforeFlag, + &PruneReceiptBeforeFlag, + &PruneTxIndexBeforeFlag, + &PruneCallTracesBeforeFlag, + &BatchSizeFlag, + &BlockDownloaderWindowFlag, + &DatabaseVerbosityFlag, + &PrivateApiAddr, + &PrivateApiRateLimit, + &EtlBufferSizeFlag, + &TLSFlag, + &TLSCertFlag, + &TLSKeyFlag, + &TLSCACertFlag, + &StateStreamDisableFlag, + &SyncLoopThrottleFlag, + &BadBlockFlag, - utils.HTTPEnabledFlag, - utils.HTTPListenAddrFlag, - utils.HTTPPortFlag, - utils.AuthRpcAddr, - utils.AuthRpcPort, - utils.JWTSecretPath, - utils.HttpCompressionFlag, - utils.HTTPCORSDomainFlag, - utils.HTTPVirtualHostsFlag, - utils.AuthRpcVirtualHostsFlag, - utils.HTTPApiFlag, - utils.WSEnabledFlag, - utils.WsCompressionFlag, - utils.HTTPTraceFlag, - utils.StateCacheFlag, - utils.RpcBatchConcurrencyFlag, - utils.RpcStreamingDisableFlag, - utils.DBReadConcurrencyFlag, - utils.RpcAccessListFlag, - utils.RpcTraceCompatFlag, - utils.RpcGasCapFlag, - utils.TxpoolApiAddrFlag, - utils.TraceMaxtracesFlag, - HTTPReadTimeoutFlag, - HTTPWriteTimeoutFlag, - HTTPIdleTimeoutFlag, - AuthRpcReadTimeoutFlag, - AuthRpcWriteTimeoutFlag, - AuthRpcIdleTimeoutFlag, - EvmCallTimeoutFlag, + &utils.HTTPEnabledFlag, + &utils.HTTPListenAddrFlag, + &utils.HTTPPortFlag, + &utils.AuthRpcAddr, + &utils.AuthRpcPort, + &utils.JWTSecretPath, + &utils.HttpCompressionFlag, + &utils.HTTPCORSDomainFlag, + &utils.HTTPVirtualHostsFlag, + &utils.AuthRpcVirtualHostsFlag, + &utils.HTTPApiFlag, + &utils.WSEnabledFlag, + &utils.WsCompressionFlag, + &utils.HTTPTraceFlag, + &utils.StateCacheFlag, + &utils.RpcBatchConcurrencyFlag, + &utils.RpcStreamingDisableFlag, + &utils.DBReadConcurrencyFlag, + &utils.RpcAccessListFlag, + &utils.RpcTraceCompatFlag, + &utils.RpcGasCapFlag, + &utils.TxpoolApiAddrFlag, + &utils.TraceMaxtracesFlag, + &HTTPReadTimeoutFlag, + &HTTPWriteTimeoutFlag, + &HTTPIdleTimeoutFlag, + &AuthRpcReadTimeoutFlag, + &AuthRpcWriteTimeoutFlag, + &AuthRpcIdleTimeoutFlag, + &EvmCallTimeoutFlag, - utils.SnapKeepBlocksFlag, - utils.SnapStopFlag, - utils.DbPageSizeFlag, - utils.TorrentPortFlag, - utils.TorrentMaxPeersFlag, - utils.TorrentConnsPerFileFlag, - utils.TorrentDownloadSlotsFlag, - utils.TorrentUploadRateFlag, - utils.TorrentDownloadRateFlag, - utils.TorrentVerbosityFlag, - utils.ListenPortFlag, - utils.P2pProtocolVersionFlag, - utils.NATFlag, - utils.NoDiscoverFlag, - utils.DiscoveryV5Flag, - utils.NetrestrictFlag, - utils.NodeKeyFileFlag, - utils.NodeKeyHexFlag, - utils.DNSDiscoveryFlag, - utils.BootnodesFlag, - utils.StaticPeersFlag, - utils.TrustedPeersFlag, - utils.MaxPeersFlag, - utils.ChainFlag, - utils.DeveloperPeriodFlag, - utils.VMEnableDebugFlag, - utils.NetworkIdFlag, - utils.FakePoWFlag, - utils.GpoBlocksFlag, - utils.GpoPercentileFlag, - utils.InsecureUnlockAllowedFlag, - utils.MetricsEnabledFlag, - utils.MetricsEnabledExpensiveFlag, - utils.MetricsHTTPFlag, - utils.MetricsPortFlag, - utils.HistoryV3Flag, - utils.IdentityFlag, - utils.CliqueSnapshotCheckpointIntervalFlag, - utils.CliqueSnapshotInmemorySnapshotsFlag, - utils.CliqueSnapshotInmemorySignaturesFlag, - utils.CliqueDataDirFlag, - utils.EnabledIssuance, - utils.MiningEnabledFlag, - utils.ProposingDisableFlag, - utils.MinerNotifyFlag, - utils.MinerGasLimitFlag, - utils.MinerEtherbaseFlag, - utils.MinerExtraDataFlag, - utils.MinerNoVerfiyFlag, - utils.MinerSigningKeyFileFlag, - utils.SentryAddrFlag, - utils.SentryLogPeerInfoFlag, - utils.DownloaderAddrFlag, - utils.NoDownloaderFlag, - utils.DownloaderVerifyFlag, - HealthCheckFlag, - utils.HeimdallURLFlag, - utils.WithoutHeimdallFlag, - utils.EthStatsURLFlag, - utils.OverrideTerminalTotalDifficulty, - utils.OverrideMergeNetsplitBlock, + &utils.SnapKeepBlocksFlag, + &utils.SnapStopFlag, + &utils.DbPageSizeFlag, + &utils.TorrentPortFlag, + &utils.TorrentMaxPeersFlag, + &utils.TorrentConnsPerFileFlag, + &utils.TorrentDownloadSlotsFlag, + &utils.TorrentUploadRateFlag, + &utils.TorrentDownloadRateFlag, + &utils.TorrentVerbosityFlag, + &utils.ListenPortFlag, + &utils.P2pProtocolVersionFlag, + &utils.NATFlag, + &utils.NoDiscoverFlag, + &utils.DiscoveryV5Flag, + &utils.NetrestrictFlag, + &utils.NodeKeyFileFlag, + &utils.NodeKeyHexFlag, + &utils.DNSDiscoveryFlag, + &utils.BootnodesFlag, + &utils.StaticPeersFlag, + &utils.TrustedPeersFlag, + &utils.MaxPeersFlag, + &utils.ChainFlag, + &utils.DeveloperPeriodFlag, + &utils.VMEnableDebugFlag, + &utils.NetworkIdFlag, + &utils.FakePoWFlag, + &utils.GpoBlocksFlag, + &utils.GpoPercentileFlag, + &utils.InsecureUnlockAllowedFlag, + &utils.MetricsEnabledFlag, + &utils.MetricsEnabledExpensiveFlag, + &utils.MetricsHTTPFlag, + &utils.MetricsPortFlag, + &utils.HistoryV3Flag, + &utils.IdentityFlag, + &utils.CliqueSnapshotCheckpointIntervalFlag, + &utils.CliqueSnapshotInmemorySnapshotsFlag, + &utils.CliqueSnapshotInmemorySignaturesFlag, + &utils.CliqueDataDirFlag, + &utils.EnabledIssuance, + &utils.MiningEnabledFlag, + &utils.ProposingDisableFlag, + &utils.MinerNotifyFlag, + &utils.MinerGasLimitFlag, + &utils.MinerEtherbaseFlag, + &utils.MinerExtraDataFlag, + &utils.MinerNoVerfiyFlag, + &utils.MinerSigningKeyFileFlag, + &utils.SentryAddrFlag, + &utils.SentryLogPeerInfoFlag, + &utils.DownloaderAddrFlag, + &utils.NoDownloaderFlag, + &utils.DownloaderVerifyFlag, + &HealthCheckFlag, + &utils.HeimdallURLFlag, + &utils.WithoutHeimdallFlag, + &utils.EthStatsURLFlag, + &utils.OverrideTerminalTotalDifficulty, + &utils.OverrideMergeNetsplitBlock, - utils.ConfigFlag, - logging.LogConsoleVerbosityFlag, - logging.LogDirVerbosityFlag, - logging.LogDirPathFlag, - logging.LogConsoleJsonFlag, - logging.LogJsonFlag, - logging.LogDirJsonFlag, + &utils.ConfigFlag, + &logging.LogConsoleVerbosityFlag, + &logging.LogDirVerbosityFlag, + &logging.LogDirPathFlag, + &logging.LogConsoleJsonFlag, + &logging.LogJsonFlag, + &logging.LogDirJsonFlag, - utils.LightClientDiscoveryAddrFlag, - utils.LightClientDiscoveryPortFlag, - utils.LightClientDiscoveryTCPPortFlag, - utils.SentinelAddrFlag, - utils.SentinelPortFlag, + &utils.LightClientDiscoveryAddrFlag, + &utils.LightClientDiscoveryPortFlag, + &utils.LightClientDiscoveryTCPPortFlag, + &utils.SentinelAddrFlag, + &utils.SentinelPortFlag, } diff --git a/turbo/cli/flags.go b/turbo/cli/flags.go index 965f593ddb4..83704107d1b 100644 --- a/turbo/cli/flags.go +++ b/turbo/cli/flags.go @@ -13,7 +13,7 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/kvcache" "github.com/ledgerwatch/log/v3" "github.com/spf13/pflag" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" "github.com/ledgerwatch/erigon/cmd/rpcdaemon/cli/httpcfg" "github.com/ledgerwatch/erigon/cmd/utils" @@ -198,53 +198,53 @@ var ( func ApplyFlagsForEthConfig(ctx *cli.Context, cfg *ethconfig.Config) { mode, err := prune.FromCli( cfg.Genesis.Config.ChainID.Uint64(), - ctx.GlobalString(PruneFlag.Name), - ctx.GlobalUint64(PruneHistoryFlag.Name), - ctx.GlobalUint64(PruneReceiptFlag.Name), - ctx.GlobalUint64(PruneTxIndexFlag.Name), - ctx.GlobalUint64(PruneCallTracesFlag.Name), - ctx.GlobalUint64(PruneHistoryBeforeFlag.Name), - ctx.GlobalUint64(PruneReceiptBeforeFlag.Name), - ctx.GlobalUint64(PruneTxIndexBeforeFlag.Name), - ctx.GlobalUint64(PruneCallTracesBeforeFlag.Name), - strings.Split(ctx.GlobalString(ExperimentsFlag.Name), ","), + ctx.String(PruneFlag.Name), + ctx.Uint64(PruneHistoryFlag.Name), + ctx.Uint64(PruneReceiptFlag.Name), + ctx.Uint64(PruneTxIndexFlag.Name), + ctx.Uint64(PruneCallTracesFlag.Name), + ctx.Uint64(PruneHistoryBeforeFlag.Name), + ctx.Uint64(PruneReceiptBeforeFlag.Name), + ctx.Uint64(PruneTxIndexBeforeFlag.Name), + ctx.Uint64(PruneCallTracesBeforeFlag.Name), + strings.Split(ctx.String(ExperimentsFlag.Name), ","), ) if err != nil { utils.Fatalf(fmt.Sprintf("error while parsing mode: %v", err)) } cfg.Prune = mode - if ctx.GlobalString(BatchSizeFlag.Name) != "" { - err := cfg.BatchSize.UnmarshalText([]byte(ctx.GlobalString(BatchSizeFlag.Name))) + if ctx.String(BatchSizeFlag.Name) != "" { + err := cfg.BatchSize.UnmarshalText([]byte(ctx.String(BatchSizeFlag.Name))) if err != nil { utils.Fatalf("Invalid batchSize provided: %v", err) } } - if ctx.GlobalString(EtlBufferSizeFlag.Name) != "" { + if ctx.String(EtlBufferSizeFlag.Name) != "" { sizeVal := datasize.ByteSize(0) size := &sizeVal - err := size.UnmarshalText([]byte(ctx.GlobalString(EtlBufferSizeFlag.Name))) + err := size.UnmarshalText([]byte(ctx.String(EtlBufferSizeFlag.Name))) if err != nil { utils.Fatalf("Invalid batchSize provided: %v", err) } etl.BufferOptimalSize = *size } - cfg.StateStream = !ctx.GlobalBool(StateStreamDisableFlag.Name) - cfg.Sync.BlockDownloaderWindow = ctx.GlobalInt(BlockDownloaderWindowFlag.Name) + cfg.StateStream = !ctx.Bool(StateStreamDisableFlag.Name) + cfg.Sync.BlockDownloaderWindow = ctx.Int(BlockDownloaderWindowFlag.Name) - if ctx.GlobalString(SyncLoopThrottleFlag.Name) != "" { - syncLoopThrottle, err := time.ParseDuration(ctx.GlobalString(SyncLoopThrottleFlag.Name)) + if ctx.String(SyncLoopThrottleFlag.Name) != "" { + syncLoopThrottle, err := time.ParseDuration(ctx.String(SyncLoopThrottleFlag.Name)) if err != nil { utils.Fatalf("Invalid time duration provided in %s: %v", SyncLoopThrottleFlag.Name, err) } cfg.Sync.LoopThrottle = syncLoopThrottle } - if ctx.GlobalString(BadBlockFlag.Name) != "" { - bytes, err := hexutil.Decode(ctx.GlobalString(BadBlockFlag.Name)) + if ctx.String(BadBlockFlag.Name) != "" { + bytes, err := hexutil.Decode(ctx.String(BadBlockFlag.Name)) if err != nil { - log.Warn("Error decoding block hash", "hash", ctx.GlobalString(BadBlockFlag.Name), "err", err) + log.Warn("Error decoding block hash", "hash", ctx.String(BadBlockFlag.Name), "err", err) } else { cfg.BadBlockHash = common.BytesToHash(bytes) } @@ -317,79 +317,79 @@ func ApplyFlagsForEthConfigCobra(f *pflag.FlagSet, cfg *ethconfig.Config) { func ApplyFlagsForNodeConfig(ctx *cli.Context, cfg *nodecfg.Config) { setPrivateApi(ctx, cfg) setEmbeddedRpcDaemon(ctx, cfg) - cfg.DatabaseVerbosity = kv.DBVerbosityLvl(ctx.GlobalInt(DatabaseVerbosityFlag.Name)) + cfg.DatabaseVerbosity = kv.DBVerbosityLvl(ctx.Int(DatabaseVerbosityFlag.Name)) } func setEmbeddedRpcDaemon(ctx *cli.Context, cfg *nodecfg.Config) { - jwtSecretPath := ctx.GlobalString(utils.JWTSecretPath.Name) + jwtSecretPath := ctx.String(utils.JWTSecretPath.Name) if jwtSecretPath == "" { jwtSecretPath = cfg.Dirs.DataDir + "/jwt.hex" } - apis := ctx.GlobalString(utils.HTTPApiFlag.Name) + apis := ctx.String(utils.HTTPApiFlag.Name) log.Info("starting HTTP APIs", "APIs", apis) c := &httpcfg.HttpCfg{ - Enabled: ctx.GlobalBool(utils.HTTPEnabledFlag.Name), + Enabled: ctx.Bool(utils.HTTPEnabledFlag.Name), Dirs: cfg.Dirs, TLSKeyFile: cfg.TLSKeyFile, TLSCACert: cfg.TLSCACert, TLSCertfile: cfg.TLSCertFile, - HttpListenAddress: ctx.GlobalString(utils.HTTPListenAddrFlag.Name), - HttpPort: ctx.GlobalInt(utils.HTTPPortFlag.Name), - AuthRpcHTTPListenAddress: ctx.GlobalString(utils.AuthRpcAddr.Name), - AuthRpcPort: ctx.GlobalInt(utils.AuthRpcPort.Name), + HttpListenAddress: ctx.String(utils.HTTPListenAddrFlag.Name), + HttpPort: ctx.Int(utils.HTTPPortFlag.Name), + AuthRpcHTTPListenAddress: ctx.String(utils.AuthRpcAddr.Name), + AuthRpcPort: ctx.Int(utils.AuthRpcPort.Name), JWTSecretPath: jwtSecretPath, - TraceRequests: ctx.GlobalBool(utils.HTTPTraceFlag.Name), - HttpCORSDomain: strings.Split(ctx.GlobalString(utils.HTTPCORSDomainFlag.Name), ","), - HttpVirtualHost: strings.Split(ctx.GlobalString(utils.HTTPVirtualHostsFlag.Name), ","), - AuthRpcVirtualHost: strings.Split(ctx.GlobalString(utils.AuthRpcVirtualHostsFlag.Name), ","), + TraceRequests: ctx.Bool(utils.HTTPTraceFlag.Name), + HttpCORSDomain: strings.Split(ctx.String(utils.HTTPCORSDomainFlag.Name), ","), + HttpVirtualHost: strings.Split(ctx.String(utils.HTTPVirtualHostsFlag.Name), ","), + AuthRpcVirtualHost: strings.Split(ctx.String(utils.AuthRpcVirtualHostsFlag.Name), ","), API: strings.Split(apis, ","), HTTPTimeouts: rpccfg.HTTPTimeouts{ - ReadTimeout: ctx.GlobalDuration(HTTPReadTimeoutFlag.Name), - WriteTimeout: ctx.GlobalDuration(HTTPWriteTimeoutFlag.Name), - IdleTimeout: ctx.GlobalDuration(HTTPIdleTimeoutFlag.Name), + ReadTimeout: ctx.Duration(HTTPReadTimeoutFlag.Name), + WriteTimeout: ctx.Duration(HTTPWriteTimeoutFlag.Name), + IdleTimeout: ctx.Duration(HTTPIdleTimeoutFlag.Name), }, AuthRpcTimeouts: rpccfg.HTTPTimeouts{ - ReadTimeout: ctx.GlobalDuration(AuthRpcReadTimeoutFlag.Name), - WriteTimeout: ctx.GlobalDuration(AuthRpcWriteTimeoutFlag.Name), - IdleTimeout: ctx.GlobalDuration(HTTPIdleTimeoutFlag.Name), + ReadTimeout: ctx.Duration(AuthRpcReadTimeoutFlag.Name), + WriteTimeout: ctx.Duration(AuthRpcWriteTimeoutFlag.Name), + IdleTimeout: ctx.Duration(HTTPIdleTimeoutFlag.Name), }, - EvmCallTimeout: ctx.GlobalDuration(EvmCallTimeoutFlag.Name), + EvmCallTimeout: ctx.Duration(EvmCallTimeoutFlag.Name), - WebsocketEnabled: ctx.GlobalIsSet(utils.WSEnabledFlag.Name), - RpcBatchConcurrency: ctx.GlobalUint(utils.RpcBatchConcurrencyFlag.Name), - RpcStreamingDisable: ctx.GlobalBool(utils.RpcStreamingDisableFlag.Name), - DBReadConcurrency: ctx.GlobalInt(utils.DBReadConcurrencyFlag.Name), - RpcAllowListFilePath: ctx.GlobalString(utils.RpcAccessListFlag.Name), - Gascap: ctx.GlobalUint64(utils.RpcGasCapFlag.Name), - MaxTraces: ctx.GlobalUint64(utils.TraceMaxtracesFlag.Name), - TraceCompatibility: ctx.GlobalBool(utils.RpcTraceCompatFlag.Name), + WebsocketEnabled: ctx.IsSet(utils.WSEnabledFlag.Name), + RpcBatchConcurrency: ctx.Uint(utils.RpcBatchConcurrencyFlag.Name), + RpcStreamingDisable: ctx.Bool(utils.RpcStreamingDisableFlag.Name), + DBReadConcurrency: ctx.Int(utils.DBReadConcurrencyFlag.Name), + RpcAllowListFilePath: ctx.String(utils.RpcAccessListFlag.Name), + Gascap: ctx.Uint64(utils.RpcGasCapFlag.Name), + MaxTraces: ctx.Uint64(utils.TraceMaxtracesFlag.Name), + TraceCompatibility: ctx.Bool(utils.RpcTraceCompatFlag.Name), - TxPoolApiAddr: ctx.GlobalString(utils.TxpoolApiAddrFlag.Name), + TxPoolApiAddr: ctx.String(utils.TxpoolApiAddrFlag.Name), StateCache: kvcache.DefaultCoherentConfig, - InternalCL: !ctx.GlobalBool(utils.ExternalConsensusFlag.Name), + InternalCL: !ctx.Bool(utils.ExternalConsensusFlag.Name), } - if ctx.GlobalIsSet(utils.HttpCompressionFlag.Name) { - c.HttpCompression = ctx.GlobalBool(utils.HttpCompressionFlag.Name) + if ctx.IsSet(utils.HttpCompressionFlag.Name) { + c.HttpCompression = ctx.Bool(utils.HttpCompressionFlag.Name) } else { c.HttpCompression = true } - if ctx.GlobalIsSet(utils.WsCompressionFlag.Name) { - c.WebsocketCompression = ctx.GlobalBool(utils.WsCompressionFlag.Name) + if ctx.IsSet(utils.WsCompressionFlag.Name) { + c.WebsocketCompression = ctx.Bool(utils.WsCompressionFlag.Name) } else { c.WebsocketCompression = true } - err := c.StateCache.CacheSize.UnmarshalText([]byte(ctx.GlobalString(utils.StateCacheFlag.Name))) + err := c.StateCache.CacheSize.UnmarshalText([]byte(ctx.String(utils.StateCacheFlag.Name))) if err != nil { utils.Fatalf("Invalid state.cache value provided") } - err = c.StateCache.CodeCacheSize.UnmarshalText([]byte(ctx.GlobalString(utils.StateCacheFlag.Name))) + err = c.StateCache.CodeCacheSize.UnmarshalText([]byte(ctx.String(utils.StateCacheFlag.Name))) if err != nil { utils.Fatalf("Invalid state.cache value provided") } @@ -406,16 +406,16 @@ func setEmbeddedRpcDaemon(ctx *cli.Context, cfg *nodecfg.Config) { // setPrivateApi populates configuration fields related to the remote // read-only interface to the database func setPrivateApi(ctx *cli.Context, cfg *nodecfg.Config) { - cfg.PrivateApiAddr = ctx.GlobalString(PrivateApiAddr.Name) - cfg.PrivateApiRateLimit = uint32(ctx.GlobalUint64(PrivateApiRateLimit.Name)) + cfg.PrivateApiAddr = ctx.String(PrivateApiAddr.Name) + cfg.PrivateApiRateLimit = uint32(ctx.Uint64(PrivateApiRateLimit.Name)) maxRateLimit := uint32(kv.ReadersLimit - 128) // leave some readers for P2P if cfg.PrivateApiRateLimit > maxRateLimit { log.Warn("private.api.ratelimit is too big", "force", maxRateLimit) cfg.PrivateApiRateLimit = maxRateLimit } - if ctx.GlobalBool(TLSFlag.Name) { - certFile := ctx.GlobalString(TLSCertFlag.Name) - keyFile := ctx.GlobalString(TLSKeyFlag.Name) + if ctx.Bool(TLSFlag.Name) { + certFile := ctx.String(TLSCertFlag.Name) + keyFile := ctx.String(TLSKeyFlag.Name) if certFile == "" { log.Warn("Could not establish TLS grpc: missing certificate") return @@ -426,7 +426,7 @@ func setPrivateApi(ctx *cli.Context, cfg *nodecfg.Config) { cfg.TLSConnection = true cfg.TLSCertFile = certFile cfg.TLSKeyFile = keyFile - cfg.TLSCACert = ctx.GlobalString(TLSCACertFlag.Name) + cfg.TLSCACert = ctx.String(TLSCACertFlag.Name) } - cfg.HealthCheck = ctx.GlobalBool(HealthCheckFlag.Name) + cfg.HealthCheck = ctx.Bool(HealthCheckFlag.Name) } diff --git a/turbo/cli/helpers.go b/turbo/cli/helpers.go index 0bd76c34860..9542a3435a6 100644 --- a/turbo/cli/helpers.go +++ b/turbo/cli/helpers.go @@ -20,8 +20,9 @@ import ( "os" "path/filepath" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/params" - "github.com/urfave/cli" ) // HelpData is a one shot struct to pass to the usage template @@ -62,8 +63,6 @@ func (a ByCategory) Less(i, j int) bool { func NewApp(gitCommit, gitDate, usage string) *cli.App { app := cli.NewApp() app.Name = filepath.Base(os.Args[0]) - app.Author = "" - app.Email = "" app.Version = params.VersionWithCommit(gitCommit, gitDate) app.Usage = usage return app diff --git a/turbo/debug/flags.go b/turbo/debug/flags.go index 2b53fd06d0e..84ca3e665c6 100644 --- a/turbo/debug/flags.go +++ b/turbo/debug/flags.go @@ -22,13 +22,14 @@ import ( _ "net/http/pprof" //nolint:gosec metrics2 "github.com/VictoriaMetrics/metrics" + "github.com/ledgerwatch/log/v3" + "github.com/spf13/cobra" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/common/fdlimit" "github.com/ledgerwatch/erigon/metrics" "github.com/ledgerwatch/erigon/metrics/exp" "github.com/ledgerwatch/erigon/turbo/logging" - "github.com/ledgerwatch/log/v3" - "github.com/spf13/cobra" - "github.com/urfave/cli" ) var ( @@ -71,8 +72,8 @@ var ( // Flags holds all command-line flags required for debugging. var Flags = []cli.Flag{ - pprofFlag, pprofAddrFlag, pprofPortFlag, - cpuprofileFlag, traceFlag, + &pprofFlag, &pprofAddrFlag, &pprofPortFlag, + &cpuprofileFlag, &traceFlag, } func SetupCobra(cmd *cobra.Command) error { diff --git a/turbo/logging/flags.go b/turbo/logging/flags.go index 67d0fd967b6..a5ce6658118 100644 --- a/turbo/logging/flags.go +++ b/turbo/logging/flags.go @@ -2,7 +2,7 @@ package logging import ( "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) var ( @@ -46,11 +46,11 @@ var ( ) var Flags = []cli.Flag{ - LogJsonFlag, - LogConsoleJsonFlag, - LogDirJsonFlag, - LogVerbosityFlag, - LogConsoleVerbosityFlag, - LogDirPathFlag, - LogDirVerbosityFlag, + &LogJsonFlag, + &LogConsoleJsonFlag, + &LogDirJsonFlag, + &LogVerbosityFlag, + &LogConsoleVerbosityFlag, + &LogDirPathFlag, + &LogDirVerbosityFlag, } diff --git a/turbo/logging/logging.go b/turbo/logging/logging.go index 7c83c2b2009..597a1263610 100644 --- a/turbo/logging/logging.go +++ b/turbo/logging/logging.go @@ -8,7 +8,7 @@ import ( "github.com/ledgerwatch/log/v3" "github.com/spf13/cobra" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) func GetLoggerCtx(filePrefix string, ctx *cli.Context) log.Logger { diff --git a/turbo/node/node.go b/turbo/node/node.go index dfb29bbd358..6594b708e79 100644 --- a/turbo/node/node.go +++ b/turbo/node/node.go @@ -3,6 +3,9 @@ package node import ( "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/eth" "github.com/ledgerwatch/erigon/eth/ethconfig" @@ -11,9 +14,6 @@ import ( "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/params/networkname" erigoncli "github.com/ledgerwatch/erigon/turbo/cli" - "github.com/ledgerwatch/log/v3" - - "github.com/urfave/cli" ) // ErigonNode represents a single node, that runs sync and p2p network. @@ -52,7 +52,7 @@ type Params struct { func NewNodConfigUrfave(ctx *cli.Context) *nodecfg.Config { // If we're running a known preset, log it for convenience. - chain := ctx.GlobalString(utils.ChainFlag.Name) + chain := ctx.String(utils.ChainFlag.Name) switch chain { case networkname.SepoliaChainName: log.Info("Starting Erigon on Sepolia testnet...") @@ -77,7 +77,7 @@ func NewNodConfigUrfave(ctx *cli.Context) *nodecfg.Config { case networkname.BorDevnetChainName: log.Info("Starting Erigon on Bor Devnet...") case "", networkname.MainnetChainName: - if !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { + if !ctx.IsSet(utils.NetworkIdFlag.Name) { log.Info("Starting Erigon on Ethereum mainnet...") } default: