diff --git a/cmd/kaspawallet/daemon/server/address.go b/cmd/kaspawallet/daemon/server/address.go index b609e570d..621c44232 100644 --- a/cmd/kaspawallet/daemon/server/address.go +++ b/cmd/kaspawallet/daemon/server/address.go @@ -3,6 +3,7 @@ package server import ( "context" "fmt" + "github.com/kaspanet/kaspad/cmd/kaspawallet/daemon/pb" "github.com/kaspanet/kaspad/cmd/kaspawallet/libkaspawallet" "github.com/kaspanet/kaspad/util" @@ -23,7 +24,7 @@ func (s *server) changeAddress() (util.Address, error) { walletAddr := &walletAddress{ index: s.keysFile.LastUsedInternalIndex(), cosignerIndex: s.keysFile.CosignerIndex, - keyChain: internalKeychain, + keyChain: libkaspawallet.InternalKeychain, } path := s.walletAddressPath(walletAddr) return libkaspawallet.Address(s.params, s.keysFile.ExtendedPublicKeys, s.keysFile.MinimumSignatures, path, s.keysFile.ECDSA) @@ -42,7 +43,7 @@ func (s *server) ShowAddresses(_ context.Context, request *pb.ShowAddressesReque walletAddr := &walletAddress{ index: i, cosignerIndex: s.keysFile.CosignerIndex, - keyChain: externalKeychain, + keyChain: libkaspawallet.ExternalKeychain, } path := s.walletAddressPath(walletAddr) address, err := libkaspawallet.Address(s.params, s.keysFile.ExtendedPublicKeys, s.keysFile.MinimumSignatures, path, s.keysFile.ECDSA) @@ -76,7 +77,7 @@ func (s *server) NewAddress(_ context.Context, request *pb.NewAddressRequest) (* walletAddr := &walletAddress{ index: s.keysFile.LastUsedExternalIndex(), cosignerIndex: s.keysFile.CosignerIndex, - keyChain: externalKeychain, + keyChain: libkaspawallet.ExternalKeychain, } path := s.walletAddressPath(walletAddr) address, err := libkaspawallet.Address(s.params, s.keysFile.ExtendedPublicKeys, s.keysFile.MinimumSignatures, path, s.keysFile.ECDSA) diff --git a/cmd/kaspawallet/daemon/server/sync.go b/cmd/kaspawallet/daemon/server/sync.go index 653f84314..03a4dd112 100644 --- a/cmd/kaspawallet/daemon/server/sync.go +++ b/cmd/kaspawallet/daemon/server/sync.go @@ -1,20 +1,16 @@ package server import ( + "time" + + "github.com/kaspanet/kaspad/cmd/kaspawallet/libkaspawallet" + "github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/pkg/errors" - "time" ) -const ( - // externalKeychain is the key chain that is used to create receive addresses - externalKeychain = 0 - // internalKeychain is used to create change addresses - internalKeychain = 1 -) - -var keyChains = []uint8{externalKeychain, internalKeychain} +var keyChains = []uint8{libkaspawallet.ExternalKeychain, libkaspawallet.InternalKeychain} type walletAddressSet map[string]*walletAddress @@ -180,7 +176,7 @@ func (s *server) updateLastUsedIndexes(addressSet walletAddressSet, continue } - if walletAddress.keyChain == externalKeychain { + if walletAddress.keyChain == libkaspawallet.ExternalKeychain { if walletAddress.index > lastUsedExternalIndex { lastUsedExternalIndex = walletAddress.index } diff --git a/cmd/kaspawallet/keys/keys.go b/cmd/kaspawallet/keys/keys.go index bdf3a6846..25ece5595 100644 --- a/cmd/kaspawallet/keys/keys.go +++ b/cmd/kaspawallet/keys/keys.go @@ -6,12 +6,13 @@ import ( "encoding/hex" "encoding/json" "fmt" - "github.com/kaspanet/kaspad/cmd/kaspawallet/utils" "os" "path/filepath" "runtime" "strings" + "github.com/kaspanet/kaspad/cmd/kaspawallet/utils" + "github.com/kaspanet/kaspad/domain/dagconfig" "github.com/kaspanet/kaspad/util" "github.com/pkg/errors" @@ -89,6 +90,23 @@ func (d *File) toJSON() *keysFileJSON { } } +// NewFileFromMnemonic generates a new File from the given mnemonic string +func NewFileFromMnemonic(params *dagconfig.Params, mnemonic string, password string) (*File, error) { + encryptedMnemonics, extendedPublicKeys, err := + encryptedMnemonicExtendedPublicKeyPairs(params, []string{mnemonic}, password, false) + if err != nil { + return nil, err + } + return &File{ + Version: LastVersion, + NumThreads: defaultNumThreads, + EncryptedMnemonics: encryptedMnemonics, + ExtendedPublicKeys: extendedPublicKeys, + MinimumSignatures: 1, + ECDSA: false, + }, nil +} + func (d *File) fromJSON(fileJSON *keysFileJSON) error { d.Version = fileJSON.Version d.NumThreads = fileJSON.NumThreads diff --git a/cmd/kaspawallet/libkaspawallet/keychains.go b/cmd/kaspawallet/libkaspawallet/keychains.go new file mode 100644 index 000000000..3dc487e5d --- /dev/null +++ b/cmd/kaspawallet/libkaspawallet/keychains.go @@ -0,0 +1,8 @@ +package libkaspawallet + +const ( + // ExternalKeychain is the key chain that is used to create receive addresses + ExternalKeychain = 0 + // InternalKeychain is used to create change addresses + InternalKeychain = 1 +)