diff --git a/apps/lukso-cli/cli/cli.go b/apps/lukso-cli/cli/cli.go new file mode 100644 index 0000000..1449eca --- /dev/null +++ b/apps/lukso-cli/cli/cli.go @@ -0,0 +1,88 @@ +package cli + +import ( + "log" + "os" + + "github.com/urfave/cli/v2" + + "lukso-cli/config" +) + +var Cmd string +var Arg string + +func Init() { + + app := cli.NewApp() + app.Name = "LUKSO CLI" + app.Usage = "Tool for managing LUKSO node" + app.UsageText = "lukso [argument] [--flags]" + app.Flags = getLuksoFlags() + app.EnableBashCompletion = true + + app.Commands = []*cli.Command{ + getStartCommand(), + getStopCommand(), + getVersionCommand(), + } + + err := app.Run(os.Args) + if err != nil { + log.Fatal(err) + } + +} + +func LoadFlags(LuksoSettings *config.LuksoValues) { + + networksNum := 0 + + if FlagValues.Network != "" { + networksNum++ + } + + if FlagValues.l15_prod { + networksNum++ + } + + if FlagValues.l15_staging { + networksNum++ + } + + if FlagValues.l15_dev { + networksNum++ + } + + if networksNum > 1 { + log.Fatal("ERROR: You cannot connect to multiple networks, please choose only one.") + } + + if FlagValues.Network != "" { + LuksoSettings.Network = FlagValues.Network + } + + if FlagValues.l15_prod { + LuksoSettings.Network = "l15-prod" + } + + if FlagValues.l15_staging { + LuksoSettings.Network = "l15-staging" + } + + if FlagValues.l15_dev { + LuksoSettings.Network = "l15-dev" + } + + if FlagValues.DataDir != "" { + LuksoSettings.DataDir = FlagValues.DataDir + } else { + homeDir, _ := os.UserHomeDir() + LuksoSettings.DataDir = homeDir + "/.lukso/" + LuksoSettings.Network + "/datadir" + } + + if FlagValues.Orchestrator.Verbosity != "" { + LuksoSettings.Orchestrator.Verbosity = FlagValues.Orchestrator.Verbosity + } + +} diff --git a/apps/lukso-cli/cli/luksoFlags.go b/apps/lukso-cli/cli/luksoFlags.go new file mode 100644 index 0000000..bfc6548 --- /dev/null +++ b/apps/lukso-cli/cli/luksoFlags.go @@ -0,0 +1,192 @@ +package cli + +import ( + "strconv" + + "github.com/urfave/cli/v2" + + "lukso-cli/config" +) + +var FlagValues struct { + config.LuksoValues + Config string + l15_prod bool + l15_staging bool + l15_dev bool + GUI bool + ApiServer bool +} + +var luksoFlags []cli.Flag + +func getLuksoFlags() []cli.Flag { + + var DefaultValues config.LuksoValues + config.LoadDefaults(&DefaultValues) + + luksoFlags = []cli.Flag{ + &cli.BoolFlag{ + Name: "api", + Usage: "Starts API server", + Destination: &FlagValues.ApiServer, + }, + &cli.BoolFlag{ + Name: "gui", + Usage: "Starts GUI", + Destination: &FlagValues.GUI, + }, + &cli.StringFlag{ + Name: "config", + Value: "", + Usage: "Loads config file", + TakesFile: true, + Destination: &FlagValues.Config, + }, + &cli.BoolFlag{ + Name: "l15-prod", + Usage: "Alias for --network l15-prod", + Destination: &FlagValues.l15_prod, + }, + &cli.BoolFlag{ + Name: "l15-staging", + Usage: "Alias for --network l15-staging", + Destination: &FlagValues.l15_staging, + }, + &cli.BoolFlag{ + Name: "l15-dev", + Usage: "Alias for --network l15-dev", + Destination: &FlagValues.l15_dev, + }, + &cli.BoolFlag{ + Name: "force", + Usage: "Enables force mode", + Destination: &FlagValues.Force, + }, + &cli.StringFlag{ + Name: "network", + Value: "", + Usage: "Picks which setup to use default: " + DefaultValues.Network, + Destination: &FlagValues.Network, + EnvVars: []string{"NETWORK"}, + }, + &cli.BoolFlag{ + Name: "validate", + Usage: "Starts validator", + Destination: &FlagValues.Validate, + }, + &cli.StringFlag{ + Name: "coinbase", + Usage: "Sets pandora coinbase. This is public address for block mining rewards", + Destination: &FlagValues.Coinbase, + }, + &cli.StringFlag{ + Name: "node-name", + Usage: "Name of node that's shown on pandora stats and vanguard stats", + Destination: &FlagValues.NodeName, + }, + &cli.StringFlag{ + Name: "datadir", + Usage: "Sets datadir path", + Destination: &FlagValues.DataDir, + }, + &cli.StringFlag{ + Name: "logsdir", + Usage: "Sets the logs path", + Destination: &FlagValues.LogsDir, + }, + &cli.StringFlag{ + Name: "keys-dir", + Usage: "Sets directory of lukso-deposit-cli keys (can be used with \"keygen\" or \"wallet\")", + Destination: &FlagValues.LogsDir, + }, + &cli.StringFlag{ + Name: "keys-password-file", + Usage: "Sets path to lukso-deposit-cli keys (can be used with \"keygen\" or \"wallet\")", + Destination: &FlagValues.LogsDir, + }, + &cli.StringFlag{ + Name: "wallet-dir", + Usage: "Sets directory of lukso-validator wallet", + Destination: &FlagValues.LogsDir, + }, + &cli.StringFlag{ + Name: "wallet-password-file", + Usage: "Password for lukso-validator", + Destination: &FlagValues.LogsDir, + }, + &cli.StringFlag{ + Name: "orchestrator-tag", + Aliases: []string{"orc-tag", "orchestrator"}, + Usage: "download and set orchestrator to given tag", + Destination: &FlagValues.Orchestrator.Tag, + }, + &cli.StringFlag{ + Name: "orchestrator-verbosity", + Aliases: []string{"orc-verbosity"}, + Usage: "Sets orchestrator logging depth (Default: " + DefaultValues.Orchestrator.Verbosity + ")", + Destination: &FlagValues.Orchestrator.Verbosity, + }, + &cli.StringFlag{ + Name: "orchestrator-vanguard-rpc-endpoint", + Aliases: []string{"orc-vanguard-rpc-endpoint"}, + Usage: "Enables Vanguard node RPC provider endpoint.", + Destination: &FlagValues.Orchestrator.VanguardRPCEndpoint, + }, + &cli.StringFlag{ + Name: "orchestrator-pandora-rpc-endpoint", + Aliases: []string{"orc-pandora-rpc-endpoint"}, + Usage: "Pandora node RPC provider endpoint.", + Destination: &FlagValues.Orchestrator.PandoraRPCEndpoint, + }, + &cli.StringFlag{ + Name: "pandora-tag", + Aliases: []string{"pan-tag", "pandora"}, + Usage: "download and set pandora to given tag", + Destination: &FlagValues.Pandora.Tag, + }, + &cli.StringFlag{ + Name: "pandora-verbosity", + Aliases: []string{"pan-verbosity"}, + Usage: "Sets pandora logging depth (Default: " + DefaultValues.Pandora.Verbosity + ")", + Destination: &FlagValues.Pandora.Verbosity, + }, + &cli.StringFlag{ + Name: "pandora-bootnodes", + Aliases: []string{"pan-bootnodes"}, + Usage: "Sets pandora bootnodes (Default: " + DefaultValues.Pandora.Verbosity + ")", + Destination: &FlagValues.Pandora.Bootnodes, + }, + &cli.IntFlag{ + Name: "pandora-port", + Aliases: []string{"pan-port"}, + Usage: "Pandora client TCP/UDP port exposed. (Default: " + strconv.Itoa(DefaultValues.Pandora.Port) + ")", + Destination: &FlagValues.Pandora.Port, + }, + &cli.StringFlag{ + Name: "pandora-http-addr", + Aliases: []string{"pan-http-addr"}, + Usage: "Pandora client http address exposed. (Default: " + DefaultValues.Pandora.HttpAddr + ")", + Destination: &FlagValues.Pandora.Bootnodes, + }, + &cli.IntFlag{ + Name: "pandora-http-port", + Aliases: []string{"pan-http-port"}, + Usage: "Pandora client http port exposed. (Default: " + strconv.Itoa(DefaultValues.Pandora.HttpPort) + ")", + Destination: &FlagValues.Pandora.HttpPort, + }, + &cli.StringFlag{ + Name: "pandora-ws-addr", + Aliases: []string{"pan-ws-addr"}, + Usage: "Pandora client websocket address exposed. (Default: " + DefaultValues.Pandora.WebsocketsAddr + ")", + Destination: &FlagValues.Pandora.Bootnodes, + }, + &cli.IntFlag{ + Name: "pandora-ws-port", + Aliases: []string{"pan-ws-port"}, + Usage: "Pandora client websocket port exposed. (Default: " + strconv.Itoa(DefaultValues.Pandora.WebsocketsPort) + ")", + Destination: &FlagValues.Pandora.HttpPort, + }, + } + return luksoFlags +} diff --git a/apps/lukso-cli/cli/start.go b/apps/lukso-cli/cli/start.go new file mode 100644 index 0000000..a8a510e --- /dev/null +++ b/apps/lukso-cli/cli/start.go @@ -0,0 +1,38 @@ +package cli + +import "github.com/urfave/cli/v2" + +func getStartCommand() *cli.Command { + startCommands := []*cli.Command{ + { + Name: "vanguard", + Flags: getLuksoFlags(), + Action: func(c *cli.Context) error { + Cmd, Arg = "start", "vanguard" + return nil + }, + }, + { + Name: "pandora", + Flags: getLuksoFlags(), + Action: func(c *cli.Context) error { + Cmd, Arg = "start", "pandora" + return nil + }, + }, + } + + start := cli.Command{ + Name: "start", + Usage: "Starts up all or specific client(s)", + UsageText: "lukso start [client]\n [orchestrator, pandora, vanguard, validator, eth2stats-client, lukso-status, all]", + Flags: getLuksoFlags(), + Action: func(c *cli.Context) error { + Cmd, Arg = "start", "all" + return nil + }, + Subcommands: startCommands, + } + + return &start +} diff --git a/apps/lukso-cli/cli/stop.go b/apps/lukso-cli/cli/stop.go new file mode 100644 index 0000000..93634a1 --- /dev/null +++ b/apps/lukso-cli/cli/stop.go @@ -0,0 +1,30 @@ +package cli + +import "github.com/urfave/cli/v2" + +func getStopCommand() *cli.Command { + stopSubCommands := []*cli.Command{ + { + Name: "vanguard", + Flags: getLuksoFlags(), + Action: func(c *cli.Context) error { + Cmd, Arg = "stop", "vanguard" + return nil + }, + }, + } + + stop := cli.Command{ + Name: "stop", + Usage: "Stop up all or specific client(s)", + UsageText: "lukso stop [client]\n [orchestrator, pandora, vanguard, validator, eth2stats-client, lukso-status, all]", + Flags: getLuksoFlags(), + Action: func(c *cli.Context) error { + Cmd, Arg = "stop", "all" + return nil + }, + Subcommands: stopSubCommands, + } + + return &stop +} diff --git a/apps/lukso-cli/cli/version.go b/apps/lukso-cli/cli/version.go new file mode 100644 index 0000000..97b6713 --- /dev/null +++ b/apps/lukso-cli/cli/version.go @@ -0,0 +1,38 @@ +package cli + +import "github.com/urfave/cli/v2" + +func getVersionCommand() *cli.Command { + VersionCommands := []*cli.Command{ + { + Name: "vanguard", + Flags: getLuksoFlags(), + Action: func(c *cli.Context) error { + Cmd, Arg = "version", "vanguard" + return nil + }, + }, + { + Name: "pandora", + Flags: getLuksoFlags(), + Action: func(c *cli.Context) error { + Cmd, Arg = "varsion", "pandora" + return nil + }, + }, + } + + version := cli.Command{ + Name: "version", + Usage: "Shows version of all or specific client(s)", + UsageText: "lukso version [client]\n [orchestrator, pandora, vanguard, validator, eth2stats-client, lukso-status, all]", + Flags: getLuksoFlags(), + Action: func(c *cli.Context) error { + Cmd, Arg = "version", "all" + return nil + }, + Subcommands: VersionCommands, + } + + return &version +} diff --git a/apps/lukso-cli/config/config.go b/apps/lukso-cli/config/config.go new file mode 100644 index 0000000..ca93342 --- /dev/null +++ b/apps/lukso-cli/config/config.go @@ -0,0 +1,162 @@ +package config + +import ( + "fmt" + "io/ioutil" + "os" + + "gopkg.in/yaml.v3" +) + +type LuksoValues struct { + Force bool `yaml:"FORCE"` + Network string `yaml:"NETWORK"` + Validate bool `yaml:"VALIDATE"` + Coinbase string `yaml:"COINBASE"` + NodeName string `yaml:"NODE_NAME"` + DataDir string `yaml:"DATADIR"` + LogsDir string `yaml:"LOGSDIR"` + KeysDir string `yaml:"KEYSDIR"` + KeysPasswordFile string `yaml:"KEYS_PASSWORD_FILE"` + WalletDir string `yaml:"WALLET_DIR"` + WalletPasswordFile string `yaml:"WALLET_PASSWORD_FILE"` + + Orchestrator struct { + Tag string `yaml:"TAG"` + Verbosity string `yaml:"VERBOSITY"` + VanguardRPCEndpoint string `yaml:"VanguardRPCEndpoint"` + PandoraRPCEndpoint string `yaml:"PandoraRPCEndpoint"` + } `yaml:"ORCHESTRATOR"` + + Pandora struct { + Tag string `yaml:"TAG"` + Verbosity string `yaml:"VERBOSITY"` + Bootnodes string `yaml:"BOOTNODES"` + Port int `yaml:"PORT"` + HttpAddr string `yaml:"HTTP_ADDR"` + HttpPort int `yaml:"HTTP_PORT"` + WebsocketsAddr string `yaml:"WS_ADDR"` + WebsocketsPort int `yaml:"WS_PORT"` + HTTPMinerAddr string `yaml:"HTTP_MINER_ADDR"` + WebsocketsMinerAddr string `yaml:"WS_MINER_ADDR"` + Ethstats string `yaml:"ETHSTATS"` + // TODO: find different name + UPExpose bool `yaml:"UP_EXPOSE"` + UnsafeExpose bool `yaml:"UNSAFE_EXPOSE"` + } `yaml:"PANDORA"` + + Vanguard struct { + Tag string `yaml:"TAG"` + Verbosity string `yaml:"VERBOSITY"` + Bootnodes string `yaml:"BOOTNODES"` + P2PPrivKEY string `yaml:"P2P_PRIVKEY"` + ExternalIP string `yaml:"EXTERNAL_IP"` + P2PHostDNS string `yaml:"P2PHostDNS"` + RPCHost string `yaml:"RPCHost"` + RPCPort int `yaml:"RPCPort"` + UDPPort int `yaml:"UDPPort"` + TCPPort int `yaml:"TCPPort"` + MonitoringHost string `yaml:"MONITORING_HOST"` + HTTPWeb3Provider string `yaml:"HTTP_WEB3_PROVIDER"` + GRPCGatewayPort int `yaml:"GRPC_GATEWAY_PORT"` + OrchestratorRPCProvider string `yaml:"ORCHESTRATOR_RPC_PROVIDER"` + MinSyncPeers int `yaml:"MIN_SYNC_PEERS"` + MaxP2PPeers int `yaml:"MAX_P2P_PEERS"` + Ethstats string `yaml:"ETHSTATS"` + EthstatsMetrics string `yaml:"ETHSTATS_METRICS"` + } + + Validator struct { + Tag string `yaml:"TAG"` + Verbosity string `yaml:"VERBOSITY"` + BeaconRPCProvider string `yaml:"BEACON_RPC_PROVIDER"` + PandoraHTTPProvider string `yaml:"PANDORA_HTTP_PROVIDER"` + } +} + +type NetworkValues struct { + ChainID int `yaml:"CHAIN_ID"` + NetworkID int `yaml:"NETWORK_ID"` + ForkChoice int `yaml:"FORK_CHOICE"` + PandoraBootnodes string `yaml:"PANDORA_BOOTNODES"` + VanguardBootnodes string `yaml:"VANGUARD_BOOTNODES"` +} + +func LoadNetworkConfig(Network string) (error, NetworkValues) { + var NetworkConfig NetworkValues + configFilePath := "/opt/lukso/networks/" + Network + "/config/network-config.yaml" + + buf, err := ioutil.ReadFile(configFilePath) + if err != nil { + return err, NetworkConfig + } + + c := &NetworkConfig + err = yaml.Unmarshal(buf, c) + if err != nil { + return fmt.Errorf("in file %q: %v", configFilePath, err), NetworkConfig + } + + return nil, NetworkConfig +} + +func LoadDefaults(LuksoSettings *LuksoValues) { + LuksoSettings.Force = false + LuksoSettings.Network = "l15" + LuksoSettings.Validate = false + LuksoSettings.Coinbase = "" + LuksoSettings.NodeName = "" + + homeDir, err := os.UserHomeDir() + if err != nil { + LuksoSettings.DataDir = homeDir + "/.lukso/" + LuksoSettings.Network + "/datadir" + LuksoSettings.LogsDir = homeDir + "/.lukso/" + LuksoSettings.Network + "/logs" + LuksoSettings.KeysDir = homeDir + "/.lukso/" + LuksoSettings.Network + "/validator_keys" + LuksoSettings.WalletDir = homeDir + "/.lukso/" + LuksoSettings.Network + "/wallet" + } + + LuksoSettings.KeysPasswordFile = "" + LuksoSettings.WalletPasswordFile = "" + + LuksoSettings.Orchestrator.Tag = "" + LuksoSettings.Orchestrator.Verbosity = "info" + LuksoSettings.Orchestrator.VanguardRPCEndpoint = "127.0.0.1:4000" + LuksoSettings.Orchestrator.PandoraRPCEndpoint = "ws://127.0.0.1:8546" + + LuksoSettings.Pandora.Tag = "" + LuksoSettings.Pandora.Verbosity = "info" + LuksoSettings.Pandora.Bootnodes = "" + LuksoSettings.Pandora.Port = 30303 + LuksoSettings.Pandora.HttpAddr = "127.0.0.1" + LuksoSettings.Pandora.HttpPort = 8545 + LuksoSettings.Pandora.WebsocketsAddr = "127.0.0.1" + LuksoSettings.Pandora.WebsocketsPort = 8546 + LuksoSettings.Pandora.Ethstats = "" + LuksoSettings.Pandora.UPExpose = false + LuksoSettings.Pandora.UnsafeExpose = false + + LuksoSettings.Vanguard.Tag = "" + LuksoSettings.Vanguard.Verbosity = "info" + LuksoSettings.Vanguard.Bootnodes = "" + LuksoSettings.Vanguard.P2PPrivKEY = "" + LuksoSettings.Vanguard.ExternalIP = "" + LuksoSettings.Vanguard.P2PHostDNS = "" + LuksoSettings.Vanguard.RPCHost = "127.0.0.1" + LuksoSettings.Vanguard.RPCPort = 4000 + LuksoSettings.Vanguard.UDPPort = 12000 + LuksoSettings.Vanguard.TCPPort = 13000 + LuksoSettings.Vanguard.MonitoringHost = "127.0.0.1" + LuksoSettings.Vanguard.HTTPWeb3Provider = "http://127.0.0.1:8545" + LuksoSettings.Vanguard.GRPCGatewayPort = 3500 + LuksoSettings.Vanguard.OrchestratorRPCProvider = "http://127.0.0.1:7877" + LuksoSettings.Vanguard.MinSyncPeers = 2 + LuksoSettings.Vanguard.MaxP2PPeers = 50 + LuksoSettings.Vanguard.Ethstats = "" + LuksoSettings.Vanguard.EthstatsMetrics = "" + + LuksoSettings.Validator.Tag = "" + LuksoSettings.Validator.Verbosity = "info" + LuksoSettings.Validator.BeaconRPCProvider = "127.0.0.1:4000" + LuksoSettings.Validator.PandoraHTTPProvider = "http://127.0.0.1:8545" + +} diff --git a/apps/lukso-cli/config/configFile.go b/apps/lukso-cli/config/configFile.go new file mode 100644 index 0000000..525df4d --- /dev/null +++ b/apps/lukso-cli/config/configFile.go @@ -0,0 +1,25 @@ +package config + +import ( + "fmt" + "io/ioutil" + + "gopkg.in/yaml.v3" +) + +var ConfigValues LuksoValues + +func LoadConfig(LuksoSettings *LuksoValues, configFilePath string) error { + buf, err := ioutil.ReadFile(configFilePath) + if err != nil { + return err + } + + c := &LuksoSettings + err = yaml.Unmarshal(buf, c) + if err != nil { + return fmt.Errorf("in file %q: %v", configFilePath, err) + } + + return nil +} \ No newline at end of file diff --git a/apps/lukso-cli/config/defaultConfig.yaml b/apps/lukso-cli/config/defaultConfig.yaml new file mode 100644 index 0000000..01d33fd --- /dev/null +++ b/apps/lukso-cli/config/defaultConfig.yaml @@ -0,0 +1 @@ +FORCE: false \ No newline at end of file diff --git a/apps/lukso-cli/go.mod b/apps/lukso-cli/go.mod new file mode 100644 index 0000000..9b2950d --- /dev/null +++ b/apps/lukso-cli/go.mod @@ -0,0 +1,8 @@ +module lukso-cli + +go 1.16 + +require ( + github.com/urfave/cli/v2 v2.3.0 + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b +) diff --git a/apps/lukso-cli/go.sum b/apps/lukso-cli/go.sum new file mode 100644 index 0000000..1b2baa6 --- /dev/null +++ b/apps/lukso-cli/go.sum @@ -0,0 +1,16 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/apps/lukso-cli/lukso-cli.go b/apps/lukso-cli/lukso-cli.go new file mode 100644 index 0000000..4b84b24 --- /dev/null +++ b/apps/lukso-cli/lukso-cli.go @@ -0,0 +1,48 @@ +package main + +import ( + "lukso-cli/cli" + "lukso-cli/config" + "lukso-cli/runner" +) + +var LuksoSettings config.LuksoValues + +func main() { + + // Initialize CLI, read values from flags + cli.Init() + + // Build Settings + + //Load from default first + config.LoadDefaults(&LuksoSettings) + + //Overwrite with config + if cli.FlagValues.Config != "" { + config.LoadConfig(&LuksoSettings, cli.FlagValues.Config) + } + + //Overwrite with flags + cli.LoadFlags(&LuksoSettings) + + //Download binaries if missing + + if LuksoSettings.Orchestrator.Tag != "" { + //runner.Action("download", "orchestrator", &LuksoSettings) + } + + // RUN + runner.Action(cli.Cmd, cli.Arg, &LuksoSettings) + + if cli.FlagValues.ApiServer || cli.FlagValues.GUI { + //Start API server + //HTTPApi.Start() + } + + if cli.FlagValues.GUI { + // Start Frontend Server + // gui.Start() + } + +} diff --git a/apps/lukso-cli/runner/orchestrator/orchestrator.go b/apps/lukso-cli/runner/orchestrator/orchestrator.go new file mode 100644 index 0000000..f8103c6 --- /dev/null +++ b/apps/lukso-cli/runner/orchestrator/orchestrator.go @@ -0,0 +1,13 @@ +package orchestrator + +import "lukso-cli/config" + +func Start(LuksoSettings *config.LuksoValues) { + println("Starting Orchestrator") +} + +func Stop(LuksoSettings *config.LuksoValues) { + println("Stopping Orchestrator") +} + + diff --git a/apps/lukso-cli/runner/pandora/pandora.go b/apps/lukso-cli/runner/pandora/pandora.go new file mode 100644 index 0000000..89a64d0 --- /dev/null +++ b/apps/lukso-cli/runner/pandora/pandora.go @@ -0,0 +1,50 @@ +package pandora + +import ( + "log" + "lukso-cli/config" + "os" + "os/exec" + "strconv" + "strings" +) + +func Prepare(LuksoSettings *config.LuksoValues) { + + if _, err := os.Stat(LuksoSettings.LogsDir); err != nil { + if os.IsNotExist(err) { + // file does not exist + } else { + // other error + } + } + +} + +func Start(LuksoSettings *config.LuksoValues) { + Prepare(LuksoSettings) + println("Starting Pandora") + + err, NetworkConfig := config.LoadNetworkConfig(LuksoSettings.Network) + if err != nil { + log.Fatal("Config not loaded") + } + + args := []string{ + "--datadir=" + LuksoSettings.DataDir + "/pandora", + "--chainid=" + strconv.Itoa(NetworkConfig.ChainID), + "--port=" + strconv.Itoa(LuksoSettings.Pandora.Port), + } + + command := exec.Command("pandora" + strings.Join(args, " ")) + if startError := command.Start(); startError != nil { + log.Fatal(startError) + return + } + + // command.Wait() +} + +func Stop(LuksoSettings *config.LuksoValues) { + println("Stopping Pandora") +} diff --git a/apps/lukso-cli/runner/runner.go b/apps/lukso-cli/runner/runner.go new file mode 100644 index 0000000..f4fb786 --- /dev/null +++ b/apps/lukso-cli/runner/runner.go @@ -0,0 +1,61 @@ +package runner + +import ( + "fmt" + "lukso-cli/config" + "lukso-cli/runner/orchestrator" + "lukso-cli/runner/pandora" + "lukso-cli/runner/validator" + "lukso-cli/runner/vanguard" +) + +func Start(arg string, LuksoSettings *config.LuksoValues) { + + switch arg { + case "all": + orchestrator.Start(LuksoSettings) + pandora.Start(LuksoSettings) + vanguard.Start(LuksoSettings) + if LuksoSettings.Validate { + validator.Start(LuksoSettings) + } + + case "orchestrator": + orchestrator.Start(LuksoSettings) + + case "pandora": + pandora.Start(LuksoSettings) + + case "vanguard": + vanguard.Start(LuksoSettings) + + case "validator": + validator.Start(LuksoSettings) + } +} + +func Stop(arg string, LuksoSettings *config.LuksoValues) error { + return nil +} + +func Reset(arg string, LuksoSettings *config.LuksoValues) error { + return nil +} + +func Version() { + fmt.Println("v0.0.1") +} + +func Action(cmd string, arg string, LuksoSettings *config.LuksoValues) { + switch cmd { + case "start": + Start(arg, LuksoSettings) + case "stop": + Stop(arg, LuksoSettings) + case "reset": + Reset(arg, LuksoSettings) + case "version": + Version() + } + +} diff --git a/apps/lukso-cli/runner/validator/validator.go b/apps/lukso-cli/runner/validator/validator.go new file mode 100644 index 0000000..8cbd7b7 --- /dev/null +++ b/apps/lukso-cli/runner/validator/validator.go @@ -0,0 +1,15 @@ +package validator + +import "lukso-cli/config" + +func CheckValidatorRequirements(LuksoSettings config.LuksoValues) { + println("checking") +} + +func Start(LuksoSettings *config.LuksoValues) { + println("Starting Validator") +} + +func Stop(LuksoSettings *config.LuksoValues) { + println("Stopping Validator") +} diff --git a/apps/lukso-cli/runner/vanguard/vanguard.go b/apps/lukso-cli/runner/vanguard/vanguard.go new file mode 100644 index 0000000..70c280a --- /dev/null +++ b/apps/lukso-cli/runner/vanguard/vanguard.go @@ -0,0 +1,40 @@ +package vanguard + +import ( + "fmt" + "lukso-cli/config" + "os" +) + +func prepare(LuksoSettings *config.LuksoValues) error { + + println(LuksoSettings.Network) + + err := os.MkdirAll(LuksoSettings.DataDir+"/vanguard", 0755) + + if err != nil { + println(err.Error()) + return err + } + + return nil + +} + +func Start(LuksoSettings *config.LuksoValues) { + + err := prepare(LuksoSettings) + + if err != nil { + println(err) + fmt.Println("Cannot start vanguard") + // os.Exit(1) + } + + println("Starting Vanguard...") + +} + +func Stop(LuksoSettings *config.LuksoValues) { + println("Stopping Pandora") +}