Add script birthtime metadata to dump and import wallet

This commit is contained in:
MeshCollider 2017-12-20 19:01:05 +13:00
parent 1bab9b23af
commit 656fde53a3

View file

@ -545,6 +545,11 @@ UniValue importwallet(const JSONRPCRequest& request)
fGood = false; fGood = false;
continue; continue;
} }
int64_t birth_time = DecodeDumpTime(vstr[1]);
if (birth_time > 0) {
pwallet->m_script_metadata[CScriptID(script)].nCreateTime = birth_time;
nTimeBegin = std::min(nTimeBegin, birth_time);
}
} }
} }
file.close(); file.close();
@ -653,6 +658,7 @@ UniValue dumpwallet(const JSONRPCRequest& request)
pwallet->GetKeyBirthTimes(mapKeyBirth); pwallet->GetKeyBirthTimes(mapKeyBirth);
std::set<CScriptID> scripts = pwallet->GetCScripts(); std::set<CScriptID> scripts = pwallet->GetCScripts();
// TODO: include scripts in GetKeyBirthTimes() output instead of separate
// sort time/key pairs // sort time/key pairs
std::vector<std::pair<int64_t, CKeyID> > vKeyBirth; std::vector<std::pair<int64_t, CKeyID> > vKeyBirth;
@ -710,9 +716,15 @@ UniValue dumpwallet(const JSONRPCRequest& request)
file << "\n"; file << "\n";
for (const CScriptID &scriptid : scripts) { for (const CScriptID &scriptid : scripts) {
CScript script; CScript script;
std::string create_time = "0";
std::string address = EncodeDestination(scriptid); std::string address = EncodeDestination(scriptid);
// get birth times for scripts with metadata
auto it = pwallet->m_script_metadata.find(scriptid);
if (it != pwallet->m_script_metadata.end()) {
create_time = EncodeDumpTime(it->second.nCreateTime);
}
if(pwallet->GetCScript(scriptid, script)) { if(pwallet->GetCScript(scriptid, script)) {
file << strprintf("%s 0 script=1", HexStr(script.begin(), script.end())); file << strprintf("%s %s script=1", HexStr(script.begin(), script.end()), create_time);
file << strprintf(" # addr=%s\n", address); file << strprintf(" # addr=%s\n", address);
} }
} }