fix: wallet derivation paths for generated accounts , imported seed phrases and private keys

This commit is contained in:
Richard Ramos 2020-11-30 17:28:59 -04:00 committed by Iuri Matias
parent b6f362ddb5
commit c405029e37
2 changed files with 22 additions and 8 deletions

View File

@ -229,15 +229,25 @@ proc MultiAccountImportPrivateKey*(privateKey: string): GeneratedAccount =
error "Error getting account from private key", msg=e.msg
proc storeDerivedWallet*(account: GeneratedAccount, password: string, walletIndex: int) =
proc storeDerivedWallet*(account: GeneratedAccount, password: string, walletIndex: int, accountType: string): string =
let hashedPassword = hashPassword(password)
let derivationPath = (if accountType == constants.GENERATED: "m/" else: "m/44'/60'/0'/0/") & $walletIndex
let multiAccount = %* {
"accountID": account.id,
"paths": ["m/44'/60'/0'/0/" & $walletIndex],
"paths": [derivationPath],
"password": hashedPassword
}
let response = parseJson($nim_status.multiAccountStoreDerivedAccounts($multiAccount));
let error = response{"error"}.getStr
if error == "":
debug "Wallet stored succesfully"
return "m/44'/60'/0'/0/" & $walletIndex
raise newException(StatusGoException, "Error storing wallet: " & error)
proc storePrivateKeyAccount*(account: GeneratedAccount, password: string) =
let hashedPassword = hashPassword(password)
let response = parseJson($nim_status.multiAccountStoreAccount($(%*{"accountID": account.id, "password": hashedPassword})));
let error = response{"error"}.getStr
if error == "":
debug "Wallet stored succesfully"
return
@ -245,9 +255,12 @@ proc storeDerivedWallet*(account: GeneratedAccount, password: string, walletInde
proc saveAccount*(account: GeneratedAccount, password: string, color: string, accountType: string, isADerivedAccount = true, walletIndex: int = 0 ): DerivedAccount =
try:
# Only store derived accounts. Private key accounts are not multiaccounts
var derivationPath = "m/44'/60'/0'/0/0"
if (isADerivedAccount):
storeDerivedWallet(account, password, walletIndex)
# Only store derived accounts. Private key accounts are not multiaccounts
derivationPath = storeDerivedWallet(account, password, walletIndex, accountType)
elif accountType == constants.KEY:
storePrivateKeyAccount(account, password)
var address = account.derived.defaultWallet.address
var publicKey = account.derived.defaultWallet.publicKey
@ -256,14 +269,15 @@ proc saveAccount*(account: GeneratedAccount, password: string, color: string, ac
address = account.address
publicKey = account.publicKey
discard callPrivateRPC("accounts_saveAccounts", %* [
echo "SAVING ACCOUNT"
echo callPrivateRPC("accounts_saveAccounts", %* [
[{
"color": color,
"name": account.name,
"address": address,
"public-key": publicKey,
"type": accountType,
"path": "m/44'/60'/0'/0/" & $walletIndex
"path": derivationPath
}]
])
@ -280,7 +294,7 @@ proc changeAccount*(account: WalletAccount): string =
"address": account.address,
"public-key": account.publicKey,
"type": account.walletType,
"path": "m/44'/60'/0'/0/1"
"path": "m/44'/60'/0'/0/1" # <--- TODO: fix this. Derivation path is not supposed to change
}]
])

View File

@ -122,7 +122,7 @@ ModalPopup {
return loading = false
}
const error = walletModel.addAccountsFromPrivateKey(accountPKeyInput.text, passwordInput.text, accountNameInput.text, selectedColor)
const error = walletModel.addAccountsFromPrivateKey(accountPKeyInput.text, passwordInput.text, accountNameInput.text, accountColorInput.selectedColor)
loading = false
if (error) {
errorSound.play()