- package main
-
- import (
- "flag"
- "os"
- "time"
-
- "github.com/tendermint/tendermint/crypto/ed25519"
- "github.com/tendermint/tendermint/libs/log"
- tmnet "github.com/tendermint/tendermint/libs/net"
- tmos "github.com/tendermint/tendermint/libs/os"
-
- "github.com/tendermint/tendermint/privval"
- )
-
- func main() {
- var (
- addr = flag.String("addr", ":26659", "Address of client to connect to")
- chainID = flag.String("chain-id", "mychain", "chain id")
- privValKeyPath = flag.String("priv-key", "", "priv val key file path")
- privValStatePath = flag.String("priv-state", "", "priv val state file path")
-
- logger = log.NewTMLogger(
- log.NewSyncWriter(os.Stdout),
- ).With("module", "priv_val")
- )
- flag.Parse()
-
- logger.Info(
- "Starting private validator",
- "addr", *addr,
- "chainID", *chainID,
- "privKeyPath", *privValKeyPath,
- "privStatePath", *privValStatePath,
- )
-
- pv := privval.LoadFilePV(*privValKeyPath, *privValStatePath)
-
- var dialer privval.SocketDialer
- protocol, address := tmnet.ProtocolAndAddress(*addr)
- switch protocol {
- case "unix":
- dialer = privval.DialUnixFn(address)
- case "tcp":
- connTimeout := 3 * time.Second // TODO
- dialer = privval.DialTCPFn(address, connTimeout, ed25519.GenPrivKey())
- default:
- logger.Error("Unknown protocol", "protocol", protocol)
- os.Exit(1)
- }
-
- sd := privval.NewSignerDialerEndpoint(logger, dialer)
- ss := privval.NewSignerServer(sd, *chainID, pv)
-
- err := ss.Start()
- if err != nil {
- panic(err)
- }
-
- // Stop upon receiving SIGTERM or CTRL-C.
- tmos.TrapSignal(logger, func() {
- err := ss.Stop()
- if err != nil {
- panic(err)
- }
- })
-
- // Run forever.
- select {}
- }
|