From 656fde53a3a0d88a1e3c1aef7ae99083e4b06a7d Mon Sep 17 00:00:00 2001 From: MeshCollider Date: Wed, 20 Dec 2017 19:01:05 +1300 Subject: [PATCH] Add script birthtime metadata to dump and import wallet --- src/wallet/rpcdump.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index 92c3bd080cb..41179ebd4a6 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -545,6 +545,11 @@ UniValue importwallet(const JSONRPCRequest& request) fGood = false; 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(); @@ -653,6 +658,7 @@ UniValue dumpwallet(const JSONRPCRequest& request) pwallet->GetKeyBirthTimes(mapKeyBirth); std::set scripts = pwallet->GetCScripts(); + // TODO: include scripts in GetKeyBirthTimes() output instead of separate // sort time/key pairs std::vector > vKeyBirth; @@ -710,9 +716,15 @@ UniValue dumpwallet(const JSONRPCRequest& request) file << "\n"; for (const CScriptID &scriptid : scripts) { CScript script; + std::string create_time = "0"; 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)) { - 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); } }