mirror of
https://github.com/status-im/status-go.git
synced 2025-01-20 19:52:42 +00:00
4536e99275
This PR refactors CLI API, removes obsolete commands and splits status code into smaller pieces: * get rid of subcommands API (no ./status <command>) * get rid of custom cli app package * use stdlib flag package for handling command line flags * move cross-compilation / mobile related code to lib/ package * move wnode command into separate binary (cmd/node-status, name is subject to discuss) * remove faucet command as obsolete * update/add docs/READMES/wikis for new command line flags It makes statusd code much simpler and smaller, separates concerns (lib, wnode and statusd are different things).
85 lines
3.0 KiB
Go
85 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/status-im/status-go/geth/api"
|
|
"github.com/status-im/status-go/geth/params"
|
|
)
|
|
|
|
var (
|
|
prodMode = flag.Bool("production", false, "Whether production settings should be loaded")
|
|
nodeKeyFile = flag.String("nodekey", "", "P2P node key file (private key)")
|
|
dataDir = flag.String("datadir", "wnode-status-data", "Data directory for the databases and keystore")
|
|
networkID = flag.Int("networkid", params.RopstenNetworkID, "Network identifier (integer, 1=Homestead, 3=Ropsten, 4=Rinkeby)")
|
|
httpEnabled = flag.Bool("http", false, "HTTP RPC enpoint enabled (default: false)")
|
|
httpPort = flag.Int("httpport", params.HTTPPort, "HTTP RPC server's listening port")
|
|
ipcEnabled = flag.Bool("ipc", false, "IPC RPC enpoint enabled")
|
|
|
|
// wnode specific flags
|
|
echo = flag.Bool("echo", true, "Echo mode, prints some arguments for diagnostics")
|
|
bootstrap = flag.Bool("bootstrap", true, "Don't actively connect to peers, wait for incoming connections")
|
|
notify = flag.Bool("notify", false, "Node is capable of sending Push Notifications")
|
|
forward = flag.Bool("forward", false, "Only forward messages, neither send nor decrypt messages")
|
|
mailserver = flag.Bool("mailserver", false, "Delivers expired messages on demand")
|
|
identity = flag.String("identity", "", "Protocol identity file (private key used for asymmetric encryption)")
|
|
password = flag.String("password", "", "Password file (password is used for symmetric encryption)")
|
|
port = flag.Int("port", params.WhisperPort, "Whisper node's listening port")
|
|
pow = flag.Float64("pow", params.WhisperMinimumPoW, "PoW for messages to be added to queue, in float format")
|
|
ttl = flag.Int("ttl", params.WhisperTTL, "Time to live for messages, in seconds")
|
|
injectAccounts = flag.Bool("injectaccounts", true, "Whether test account should be injected or not")
|
|
firebaseAuth = flag.String("firebaseauth", "", "FCM Authorization Key used for sending Push Notifications")
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
config, err := makeNodeConfig()
|
|
if err != nil {
|
|
log.Fatalf("Making config failed: %v", err)
|
|
}
|
|
|
|
printHeader(config)
|
|
|
|
if *injectAccounts {
|
|
if err := LoadTestAccounts(config.DataDir); err != nil {
|
|
log.Fatalf("Failed to load test accounts: %v", err)
|
|
}
|
|
}
|
|
|
|
backend := api.NewStatusBackend()
|
|
started, err := backend.StartNode(config)
|
|
if err != nil {
|
|
log.Fatalf("Node start failed: %v", err)
|
|
return
|
|
}
|
|
|
|
// wait till node is started
|
|
<-started
|
|
|
|
if *injectAccounts {
|
|
if err := InjectTestAccounts(backend.NodeManager()); err != nil {
|
|
log.Fatalf("Failed to inject accounts: %v", err)
|
|
}
|
|
}
|
|
|
|
// wait till node has been stopped
|
|
node, err := backend.NodeManager().Node()
|
|
if err != nil {
|
|
log.Fatalf("Getting node failed: %v", err)
|
|
return
|
|
}
|
|
|
|
node.Wait()
|
|
}
|
|
|
|
// printHeader prints command header
|
|
func printHeader(config *params.NodeConfig) {
|
|
fmt.Println("Starting Whisper/5 node..")
|
|
if config.WhisperConfig.EchoMode {
|
|
fmt.Printf("Whisper Config: %s\n", config.WhisperConfig)
|
|
}
|
|
}
|