|
|
|
@ -656,18 +656,18 @@ UniValue importwallet(const JSONRPCRequest& request)
|
|
|
|
|
CPubKey pubkey = key.GetPubKey();
|
|
|
|
|
assert(key.VerifyPubKey(pubkey));
|
|
|
|
|
CKeyID keyid = pubkey.GetID();
|
|
|
|
|
if (pwallet->HaveKey(keyid)) {
|
|
|
|
|
pwallet->WalletLogPrintf("Skipping import of %s (key already present)\n", EncodeDestination(PKHash(keyid)));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pwallet->WalletLogPrintf("Importing %s...\n", EncodeDestination(PKHash(keyid)));
|
|
|
|
|
if (!pwallet->AddKeyPubKey(key, pubkey)) {
|
|
|
|
|
|
|
|
|
|
if (!pwallet->ImportPrivKeys({{keyid, key}}, time)) {
|
|
|
|
|
pwallet->WalletLogPrintf("Error importing key for %s\n", EncodeDestination(PKHash(keyid)));
|
|
|
|
|
fGood = false;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
pwallet->mapKeyMetadata[keyid].nCreateTime = time;
|
|
|
|
|
|
|
|
|
|
if (has_label)
|
|
|
|
|
pwallet->SetAddressBook(PKHash(keyid), label, "receive");
|
|
|
|
|
|
|
|
|
|
nTimeBegin = std::min(nTimeBegin, time);
|
|
|
|
|
progress++;
|
|
|
|
|
}
|
|
|
|
@ -675,24 +675,19 @@ UniValue importwallet(const JSONRPCRequest& request)
|
|
|
|
|
pwallet->chain().showProgress("", std::max(50, std::min(75, (int)((progress / total) * 100) + 50)), false);
|
|
|
|
|
const CScript& script = script_pair.first;
|
|
|
|
|
int64_t time = script_pair.second;
|
|
|
|
|
CScriptID id(script);
|
|
|
|
|
if (pwallet->HaveCScript(id)) {
|
|
|
|
|
pwallet->WalletLogPrintf("Skipping import of %s (script already present)\n", HexStr(script));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if(!pwallet->AddCScript(script)) {
|
|
|
|
|
|
|
|
|
|
if (!pwallet->ImportScripts({script}, time)) {
|
|
|
|
|
pwallet->WalletLogPrintf("Error importing script %s\n", HexStr(script));
|
|
|
|
|
fGood = false;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (time > 0) {
|
|
|
|
|
pwallet->m_script_metadata[id].nCreateTime = time;
|
|
|
|
|
nTimeBegin = std::min(nTimeBegin, time);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
progress++;
|
|
|
|
|
}
|
|
|
|
|
pwallet->chain().showProgress("", 100, false); // hide progress dialog in GUI
|
|
|
|
|
pwallet->UpdateTimeFirstKey(nTimeBegin);
|
|
|
|
|
}
|
|
|
|
|
pwallet->chain().showProgress("", 100, false); // hide progress dialog in GUI
|
|
|
|
|
RescanWallet(*pwallet, reserver, nTimeBegin, false /* update */);
|
|
|
|
|