diff --git a/cmd/kaspawallet/daemon/server/log.go b/cmd/kaspawallet/daemon/server/log.go index b58080a29..82a77a34a 100644 --- a/cmd/kaspawallet/daemon/server/log.go +++ b/cmd/kaspawallet/daemon/server/log.go @@ -1,6 +1,12 @@ package server import ( + "fmt" + "os" + "path/filepath" + + "github.com/kaspanet/kaspad/util" + "github.com/kaspanet/kaspad/infrastructure/logger" "github.com/kaspanet/kaspad/util/panics" ) @@ -9,4 +15,33 @@ var ( backendLog = logger.NewBackend() log = backendLog.Logger("KSWD") spawn = panics.GoroutineWrapperFunc(log) + + defaultAppDir = util.AppDir("kaspawallet", false) + defaultLogFile = filepath.Join(defaultAppDir, "daemon.log") + defaultErrLogFile = filepath.Join(defaultAppDir, "daemon_err.log") ) + +func initLog(logFile, errLogFile string) { + log.SetLevel(logger.LevelDebug) + err := backendLog.AddLogFile(logFile, logger.LevelTrace) + if err != nil { + fmt.Fprintf(os.Stderr, "Error adding log file %s as log rotator for level %s: %s", logFile, logger.LevelTrace, err) + os.Exit(1) + } + err = backendLog.AddLogFile(errLogFile, logger.LevelWarn) + if err != nil { + fmt.Fprintf(os.Stderr, "Error adding log file %s as log rotator for level %s: %s", errLogFile, logger.LevelWarn, err) + os.Exit(1) + } + err = backendLog.AddLogWriter(os.Stdout, logger.LevelInfo) + if err != nil { + fmt.Fprintf(os.Stderr, "Error adding stdout to the loggerfor level %s: %s", logger.LevelWarn, err) + os.Exit(1) + } + err = backendLog.Run() + if err != nil { + fmt.Fprintf(os.Stderr, "Error starting the logger: %s ", err) + os.Exit(1) + } + +} diff --git a/cmd/kaspawallet/daemon/server/server.go b/cmd/kaspawallet/daemon/server/server.go index bf5090161..c2cf8cbe2 100644 --- a/cmd/kaspawallet/daemon/server/server.go +++ b/cmd/kaspawallet/daemon/server/server.go @@ -2,6 +2,11 @@ package server import ( "fmt" + "net" + "os" + "sync" + "time" + "github.com/kaspanet/kaspad/cmd/kaspawallet/daemon/pb" "github.com/kaspanet/kaspad/cmd/kaspawallet/keys" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" @@ -10,10 +15,6 @@ import ( "github.com/kaspanet/kaspad/infrastructure/os/signal" "github.com/kaspanet/kaspad/util/panics" "github.com/pkg/errors" - "net" - "os" - "sync" - "time" "google.golang.org/grpc" ) @@ -33,6 +34,8 @@ type server struct { // Start starts the kaspawalletd server func Start(params *dagconfig.Params, listen, rpcServer string, keysFilePath string) error { + initLog(defaultLogFile, defaultErrLogFile) + defer panics.HandlePanic(log, "MAIN", nil) interrupt := signal.InterruptListener() @@ -40,6 +43,7 @@ func Start(params *dagconfig.Params, listen, rpcServer string, keysFilePath stri if err != nil { return (errors.Wrapf(err, "Error listening to tcp at %s", listen)) } + log.Infof("Listening on %s", listen) rpcClient, err := connectToRPC(params, rpcServer) if err != nil { diff --git a/cmd/kaspawallet/libkaspawallet/bip39.go b/cmd/kaspawallet/libkaspawallet/bip39.go index f3cac5e14..53acda51b 100644 --- a/cmd/kaspawallet/libkaspawallet/bip39.go +++ b/cmd/kaspawallet/libkaspawallet/bip39.go @@ -16,23 +16,23 @@ func CreateMnemonic() (string, error) { return bip39.NewMnemonic(entropy) } +// Purpose and CoinType constants +const ( + SingleSignerPurpose = 44 + // Note: this is not entirely compatible to BIP 45 since + // BIP 45 doesn't have a coin type in its derivation path. + MultiSigPurpose = 45 + // TODO: Register the coin type in https://github.com/satoshilabs/slips/blob/master/slip-0044.md + CoinType = 111111 +) + func defaultPath(isMultisig bool) string { - const ( - singleSignerPurpose = 44 - - // Note: this is not entirely compatible to BIP 45 since - // BIP 45 doesn't have a coin type in its derivation path. - multiSigPurpose = 45 - ) - - purpose := singleSignerPurpose + purpose := SingleSignerPurpose if isMultisig { - purpose = multiSigPurpose + purpose = MultiSigPurpose } - // TODO: Register the coin type in https://github.com/satoshilabs/slips/blob/master/slip-0044.md - const coinType = 111111 - return fmt.Sprintf("m/%d'/%d'/0'", purpose, coinType) + return fmt.Sprintf("m/%d'/%d'/0'", purpose, CoinType) } // MasterPublicKeyFromMnemonic returns the master public key with the correct derivation for the given mnemonic. diff --git a/cmd/kaspawallet/libkaspawallet/keypair.go b/cmd/kaspawallet/libkaspawallet/keypair.go index bf4b69f51..41c99de36 100644 --- a/cmd/kaspawallet/libkaspawallet/keypair.go +++ b/cmd/kaspawallet/libkaspawallet/keypair.go @@ -1,14 +1,15 @@ package libkaspawallet import ( + "math" + "sort" + "strings" + "github.com/kaspanet/go-secp256k1" "github.com/kaspanet/kaspad/cmd/kaspawallet/libkaspawallet/bip32" "github.com/kaspanet/kaspad/domain/dagconfig" "github.com/kaspanet/kaspad/util" "github.com/pkg/errors" - "math" - "sort" - "strings" ) // CreateKeyPair generates a private-public key pair diff --git a/cmd/kaspawallet/utils/readline.go b/cmd/kaspawallet/utils/readline.go index 90342edce..7b83cb0b8 100644 --- a/cmd/kaspawallet/utils/readline.go +++ b/cmd/kaspawallet/utils/readline.go @@ -3,13 +3,15 @@ package utils import ( "bufio" "strings" + + "github.com/pkg/errors" ) // ReadLine reads one line from the given reader with trimmed white space. func ReadLine(reader *bufio.Reader) (string, error) { line, err := reader.ReadBytes('\n') if err != nil { - return "", err + return "", errors.WithStack(err) } return strings.TrimSpace(string(line)), nil