diff --git a/cmd/kaspawallet/daemon/server/address.go b/cmd/kaspawallet/daemon/server/address.go index d26ca3107..acd80c6b4 100644 --- a/cmd/kaspawallet/daemon/server/address.go +++ b/cmd/kaspawallet/daemon/server/address.go @@ -10,27 +10,33 @@ import ( "github.com/pkg/errors" ) -func (s *server) changeAddress(useFirst bool) (util.Address, *walletAddress, error) { - internalIndex := uint32(0) - if !useFirst { - err := s.keysFile.SetLastUsedInternalIndex(s.keysFile.LastUsedInternalIndex() + 1) - if err != nil { - return nil, nil, err +func (s *server) changeAddress(useExisting bool, fromAddresses []*walletAddress) (util.Address, *walletAddress, error) { + var walletAddr *walletAddress + if len(fromAddresses) != 0 && useExisting { + walletAddr = fromAddresses[0] + } else { + internalIndex := uint32(0) + if !useExisting { + err := s.keysFile.SetLastUsedInternalIndex(s.keysFile.LastUsedInternalIndex() + 1) + if err != nil { + return nil, nil, err + } + + err = s.keysFile.Save() + if err != nil { + return nil, nil, err + } + + internalIndex = s.keysFile.LastUsedInternalIndex() } - err = s.keysFile.Save() - if err != nil { - return nil, nil, err + walletAddr = &walletAddress{ + index: internalIndex, + cosignerIndex: s.keysFile.CosignerIndex, + keyChain: libkaspawallet.InternalKeychain, } - - internalIndex = s.keysFile.LastUsedInternalIndex() } - walletAddr := &walletAddress{ - index: internalIndex, - cosignerIndex: s.keysFile.CosignerIndex, - keyChain: libkaspawallet.InternalKeychain, - } path := s.walletAddressPath(walletAddr) address, err := libkaspawallet.Address(s.params, s.keysFile.ExtendedPublicKeys, s.keysFile.MinimumSignatures, path, s.keysFile.ECDSA) if err != nil { diff --git a/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go b/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go index 212812b4d..13ff6a955 100644 --- a/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go +++ b/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go @@ -61,7 +61,7 @@ func (s *server) createUnsignedTransactions(address string, amount uint64, fromA return nil, err } - changeAddress, changeWalletAddress, err := s.changeAddress(useExistingChangeAddress) + changeAddress, changeWalletAddress, err := s.changeAddress(useExistingChangeAddress, fromAddresses) if err != nil { return nil, err }