github.com/neatlab/neatio@v1.7.3-0.20220425043230-d903e92fcc75/chain/neatio/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"runtime"
     7  	"sort"
     8  	"time"
     9  
    10  	"github.com/neatlab/neatio/chain/log"
    11  
    12  	"github.com/neatlab/neatio/internal/debug"
    13  	"github.com/neatlab/neatio/utilities/console"
    14  	"github.com/neatlab/neatio/utilities/metrics"
    15  	"github.com/neatlab/neatio/utilities/utils"
    16  	"gopkg.in/urfave/cli.v1"
    17  )
    18  
    19  const (
    20  	clientIdentifier = "neatio"
    21  )
    22  
    23  var (
    24  	gitCommit = ""
    25  	gitDate   = ""
    26  
    27  	app = utils.NewApp(gitCommit, "the neatio command line interface")
    28  
    29  	nodeFlags = []cli.Flag{
    30  		utils.IdentityFlag,
    31  		utils.UnlockedAccountFlag,
    32  		utils.PasswordFileFlag,
    33  		utils.BootnodesFlag,
    34  		utils.BootnodesV4Flag,
    35  		utils.BootnodesV5Flag,
    36  		utils.DataDirFlag,
    37  		utils.KeyStoreDirFlag,
    38  		utils.NoUSBFlag,
    39  		utils.TxPoolNoLocalsFlag,
    40  		utils.TxPoolJournalFlag,
    41  		utils.TxPoolRejournalFlag,
    42  		utils.TxPoolPriceLimitFlag,
    43  		utils.TxPoolPriceBumpFlag,
    44  		utils.TxPoolAccountSlotsFlag,
    45  		utils.TxPoolGlobalSlotsFlag,
    46  		utils.TxPoolAccountQueueFlag,
    47  		utils.TxPoolGlobalQueueFlag,
    48  		utils.TxPoolLifetimeFlag,
    49  
    50  		utils.SyncModeFlag,
    51  		utils.GCModeFlag,
    52  		utils.CacheFlag,
    53  		utils.CacheDatabaseFlag,
    54  		utils.CacheTrieFlag,
    55  		utils.CacheGCFlag,
    56  		utils.ListenPortFlag,
    57  		utils.MaxPeersFlag,
    58  		utils.MaxPendingPeersFlag,
    59  		utils.MiningEnabledFlag,
    60  		utils.MinerThreadsFlag,
    61  		utils.MinerGasTargetFlag,
    62  		utils.MinerGasLimitFlag,
    63  		utils.MinerGasPriceFlag,
    64  		utils.MinerCoinbaseFlag,
    65  		utils.NATFlag,
    66  		utils.NoDiscoverFlag,
    67  		utils.DiscoveryV5Flag,
    68  		utils.NetrestrictFlag,
    69  		utils.NodeKeyFileFlag,
    70  		utils.NodeKeyHexFlag,
    71  		utils.TestnetFlag,
    72  		utils.VMEnableDebugFlag,
    73  		utils.NetworkIdFlag,
    74  		utils.RPCCORSDomainFlag,
    75  		utils.RPCVirtualHostsFlag,
    76  
    77  		utils.MetricsEnabledFlag,
    78  		utils.NoCompactionFlag,
    79  		utils.GpoBlocksFlag,
    80  		utils.GpoPercentileFlag,
    81  		utils.ExtraDataFlag,
    82  
    83  		utils.SideChainFlag,
    84  	}
    85  
    86  	rpcFlags = []cli.Flag{
    87  		utils.RPCEnabledFlag,
    88  		utils.RPCListenAddrFlag,
    89  		utils.RPCPortFlag,
    90  		utils.RPCApiFlag,
    91  		utils.WSEnabledFlag,
    92  		utils.WSListenAddrFlag,
    93  		utils.WSPortFlag,
    94  		utils.WSApiFlag,
    95  		utils.WSAllowedOriginsFlag,
    96  		utils.IPCDisabledFlag,
    97  		utils.IPCPathFlag,
    98  	}
    99  )
   100  
   101  func init() {
   102  
   103  	app.Action = neatchainCmd
   104  	app.HideVersion = true
   105  	app.Copyright = "Copyright 2022 Neatio Developers"
   106  	app.Commands = []cli.Command{
   107  
   108  		createValidatorCmd,
   109  		initNEATGenesisCmd,
   110  		initCommand,
   111  
   112  		importCommand,
   113  		exportCommand,
   114  		copydbCommand,
   115  		removedbCommand,
   116  		dumpCommand,
   117  
   118  		monitorCommand,
   119  
   120  		accountCommand,
   121  
   122  		consoleCommand,
   123  		attachCommand,
   124  		javascriptCommand,
   125  
   126  		bugCommand,
   127  
   128  		dumpConfigCommand,
   129  		versionCommand,
   130  	}
   131  	sort.Sort(cli.CommandsByName(app.Commands))
   132  
   133  	app.Flags = append(app.Flags, nodeFlags...)
   134  	app.Flags = append(app.Flags, rpcFlags...)
   135  	app.Flags = append(app.Flags, consoleFlags...)
   136  	app.Flags = append(app.Flags, debug.Flags...)
   137  
   138  	app.Before = func(ctx *cli.Context) error {
   139  		runtime.GOMAXPROCS(runtime.NumCPU())
   140  
   141  		log.NewLogger("", "", ctx.GlobalInt("verbosity"), ctx.GlobalBool("debug"), ctx.GlobalString("vmodule"), ctx.GlobalString("backtrace"))
   142  
   143  		if err := debug.Setup(ctx); err != nil {
   144  			return err
   145  		}
   146  
   147  		go metrics.CollectProcessMetrics(3 * time.Second)
   148  
   149  		return nil
   150  	}
   151  
   152  	app.After = func(ctx *cli.Context) error {
   153  		debug.Exit()
   154  		console.Stdin.Close()
   155  		return nil
   156  	}
   157  }
   158  
   159  func main() {
   160  	if err := app.Run(os.Args); err != nil {
   161  		fmt.Fprintln(os.Stderr, err)
   162  		os.Exit(1)
   163  	}
   164  }