From c6a827424711333f6f66cf5f9d79e0e6884769de Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Thu, 27 Jun 2019 17:53:08 -0400 Subject: [PATCH] Have importprivkey use CWallet's ImportPrivKeys, ImportScripts, and ImportScriptPubKeys Behavior changes: * If we already have the key, it's wpkh script will still be added, although it should already be there --- src/wallet/rpcdump.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index 506b7c4bef6..7f192e93649 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -187,19 +187,15 @@ UniValue importprivkey(const JSONRPCRequest& request) } } - // Don't throw error in case a key is already there - if (pwallet->HaveKey(vchAddress)) { - return NullUniValue; - } - - // whenever a key is imported, we need to scan the whole chain - pwallet->UpdateTimeFirstKey(1); - pwallet->mapKeyMetadata[vchAddress].nCreateTime = 1; - - if (!pwallet->AddKeyPubKey(key, pubkey)) { + // Use timestamp of 1 to scan the whole chain + if (!pwallet->ImportPrivKeys({{vchAddress, key}}, 1)) { throw JSONRPCError(RPC_WALLET_ERROR, "Error adding key to wallet"); } - pwallet->LearnAllRelatedScripts(pubkey); + + // Add the wpkh script for this key if possible + if (pubkey.IsCompressed()) { + pwallet->ImportScripts({GetScriptForDestination(WitnessV0KeyHash(vchAddress))}); + } } } if (fRescan) {