diff --git a/.vscode/launch.json b/.vscode/launch.json index 156923018..ddc4c28be 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -261,6 +261,22 @@ "${workspaceFolder}/.nodes/devnet/bootstrap", ] }, + { + "name": "Run faucet", + "presentation": { + "group": "20-Run" + }, + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}/cmd/accumulated-faucet", + "args": [ + "Kermit", + "--account=acc://7a6f9db5789710a6b27e0c5965e337d8fc7431075290434d/ACME", + "--key=${workspaceFolder}/.nodes/faucet/key", + "--node-key=seed:foo", + ] + }, // Services { "name": "API (mainnet)", diff --git a/cmd/accumulated-bootstrap/main.go b/cmd/accumulated-bootstrap/main.go index 22687f992..c3322603f 100644 --- a/cmd/accumulated-bootstrap/main.go +++ b/cmd/accumulated-bootstrap/main.go @@ -35,9 +35,6 @@ var flag = struct { External multiaddr.Multiaddr }{ Key: PrivateKeyFlag{Value: &TransientPrivateKey{}}, - PromListen: []multiaddr.Multiaddr{ - multiaddr.StringCast("/ip4/0.0.0.0/tcp/8081/http"), - }, } func init() { @@ -46,6 +43,12 @@ func init() { cmd.Flags().Var((*MultiaddrSliceFlag)(&flag.PromListen), "prom-listen", "Prometheus listening address(es) (default /ip4/0.0.0.0/tcp/8081/http)") cmd.Flags().VarP((*MultiaddrSliceFlag)(&flag.Peers), "peer", "p", "Peers to connect to") cmd.Flags().Var(MultiaddrFlag{Value: &flag.External}, "external", "External address to advertize") + + cmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + if !cmd.Flag("prom-listen").Changed { + flag.PromListen = []multiaddr.Multiaddr{multiaddr.StringCast("/ip4/0.0.0.0/tcp/8081/http")} + } + } } func run(*cobra.Command, []string) { diff --git a/cmd/accumulated-faucet/main.go b/cmd/accumulated-faucet/main.go index d65c766db..5f27b3c3e 100644 --- a/cmd/accumulated-faucet/main.go +++ b/cmd/accumulated-faucet/main.go @@ -9,6 +9,8 @@ package main import ( "context" "log/slog" + "os/user" + "path/filepath" "github.com/multiformats/go-multiaddr" "github.com/spf13/cobra" @@ -30,22 +32,27 @@ var cmd = &cobra.Command{ } var flag = struct { - NodeKey PrivateKeyFlag - Key PrivateKeyFlag - LogLevel string - Account UrlFlag - Listen []multiaddr.Multiaddr - PromListen []multiaddr.Multiaddr - Peers []multiaddr.Multiaddr -}{ - PromListen: []multiaddr.Multiaddr{ - multiaddr.StringCast("/ip4/0.0.0.0/tcp/8081/http"), - }, -} + NodeKey PrivateKeyFlag + Key PrivateKeyFlag + LogLevel string + Account UrlFlag + Listen []multiaddr.Multiaddr + PromListen []multiaddr.Multiaddr + Peers []multiaddr.Multiaddr + PeerDatabase string +}{} + +var cu = func() *user.User { + cu, _ := user.Current() + return cu +}() func init() { flag.Key.Value = &TransientPrivateKey{} - flag.Peers = accumulate.BootstrapServers + + if cu != nil { + flag.PeerDatabase = filepath.Join(cu.HomeDir, ".accumulate", "cache", "peerdb.json") + } cmd.Flags().Var(&flag.NodeKey, "node-key", "The node key - not required but highly recommended. The value can be a key or a file containing a key. The key must be hex, base64, or an Accumulate secret key address.") cmd.Flags().Var(&flag.Key, "key", "The key used to sign faucet transactions") @@ -53,9 +60,18 @@ func init() { cmd.Flags().Var((*MultiaddrSliceFlag)(&flag.Listen), "listen", "P2P listening address(es)") cmd.Flags().Var((*MultiaddrSliceFlag)(&flag.PromListen), "prom-listen", "Prometheus listening address(es) (default /ip4/0.0.0.0/tcp/8081/http)") cmd.Flags().VarP((*MultiaddrSliceFlag)(&flag.Peers), "peer", "p", "Peers to connect to") + cmd.Flags().StringVar(&flag.PeerDatabase, "peer-db", flag.PeerDatabase, "Track peers using a persistent database.") cmd.Flags().StringVar(&flag.LogLevel, "log-level", "error", "Log level") - _ = cmd.MarkFlagRequired("peer") + cmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + if !cmd.Flag("prom-listen").Changed { + flag.PromListen = []multiaddr.Multiaddr{multiaddr.StringCast("/ip4/0.0.0.0/tcp/8081/http")} + } + if !cmd.Flag("peer").Changed { + flag.Peers = accumulate.BootstrapServers + } + } + _ = cmd.MarkFlagRequired("account") _ = cmd.MarkFlagRequired("key") } @@ -79,9 +95,11 @@ func run(_ *cobra.Command, args []string) { }, }, P2P: &P2P{ - Key: flag.NodeKey.Value, - Listen: flag.Listen, - BootstrapPeers: flag.Peers, + Key: flag.NodeKey.Value, + Listen: flag.Listen, + BootstrapPeers: flag.Peers, + PeerDB: &flag.PeerDatabase, + EnablePeerTracking: true, }, Services: []Service{svcCfg}, } diff --git a/cmd/accumulated-http/main.go b/cmd/accumulated-http/main.go index 2d5d9f6cb..c760891ec 100644 --- a/cmd/accumulated-http/main.go +++ b/cmd/accumulated-http/main.go @@ -54,11 +54,7 @@ var flag = struct { TlsKey string PeerDatabase string Pprof string -}{ - PromListen: []multiaddr.Multiaddr{ - multiaddr.StringCast("/ip4/0.0.0.0/tcp/8081/http"), - }, -} +}{} var cu = func() *user.User { cu, _ := user.Current() @@ -67,7 +63,6 @@ var cu = func() *user.User { func init() { flag.Key.Value = &TransientPrivateKey{} - flag.Peers = accumulate.BootstrapServers if cu != nil { flag.PeerDatabase = filepath.Join(cu.HomeDir, ".accumulate", "cache", "peerdb.json") @@ -88,6 +83,15 @@ func init() { cmd.Flags().StringVar(&flag.PeerDatabase, "peer-db", flag.PeerDatabase, "Track peers using a persistent database.") cmd.Flags().BoolVar(&jsonrpc2.DebugMethodFunc, "debug", false, "Print out a stack trace if an API method fails") cmd.Flags().StringVar(&flag.Pprof, "pprof", "", "Address to run net/http/pprof on") + + cmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + if !cmd.Flag("prom-listen").Changed { + flag.PromListen = []multiaddr.Multiaddr{multiaddr.StringCast("/ip4/0.0.0.0/tcp/8081/http")} + } + if !cmd.Flag("peer").Changed { + flag.Peers = accumulate.BootstrapServers + } + } } func run(cmd *cobra.Command, args []string) { diff --git a/cmd/accumulated/run/faucet.go b/cmd/accumulated/run/faucet.go index 8678049cd..aef9242eb 100644 --- a/cmd/accumulated/run/faucet.go +++ b/cmd/accumulated/run/faucet.go @@ -66,7 +66,11 @@ func (f *FaucetService) start(inst *Instance) error { go func() { if r, ok := router.(*routing.RouterInstance); ok { inst.logger.Info("Waiting for router", "module", "run", "service", "faucet") - <-r.Ready() + if !<-r.Ready() { + inst.logger.Error("Failed to start faucet", "error", "unable to start router") + inst.Stop() + return + } } for {