Optionally allow ImportScripts to set script creation timestamp
Behavior changes: * scripts imported in importmulti that are not explicilty scriptPubKeys will have timestamps set for them
This commit is contained in:
parent
94bf156f39
commit
78941da5ba
3 changed files with 13 additions and 5 deletions
|
@ -194,7 +194,7 @@ UniValue importprivkey(const JSONRPCRequest& request)
|
||||||
|
|
||||||
// Add the wpkh script for this key if possible
|
// Add the wpkh script for this key if possible
|
||||||
if (pubkey.IsCompressed()) {
|
if (pubkey.IsCompressed()) {
|
||||||
pwallet->ImportScripts({GetScriptForDestination(WitnessV0KeyHash(vchAddress))});
|
pwallet->ImportScripts({GetScriptForDestination(WitnessV0KeyHash(vchAddress))}, 0 /* timestamp */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,7 +316,7 @@ UniValue importaddress(const JSONRPCRequest& request)
|
||||||
CScript redeem_script(data.begin(), data.end());
|
CScript redeem_script(data.begin(), data.end());
|
||||||
|
|
||||||
std::set<CScript> scripts = {redeem_script};
|
std::set<CScript> scripts = {redeem_script};
|
||||||
pwallet->ImportScripts(scripts);
|
pwallet->ImportScripts(scripts, 0 /* timestamp */);
|
||||||
|
|
||||||
if (fP2SH) {
|
if (fP2SH) {
|
||||||
scripts.insert(GetScriptForDestination(ScriptHash(CScriptID(redeem_script))));
|
scripts.insert(GetScriptForDestination(ScriptHash(CScriptID(redeem_script))));
|
||||||
|
@ -1251,7 +1251,7 @@ static UniValue ProcessImport(CWallet * const pwallet, const UniValue& data, con
|
||||||
|
|
||||||
// All good, time to import
|
// All good, time to import
|
||||||
pwallet->MarkDirty();
|
pwallet->MarkDirty();
|
||||||
if (!pwallet->ImportScripts(import_data.import_scripts)) {
|
if (!pwallet->ImportScripts(import_data.import_scripts, timestamp)) {
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding script to wallet");
|
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding script to wallet");
|
||||||
}
|
}
|
||||||
if (!pwallet->ImportPrivKeys(privkey_map, timestamp)) {
|
if (!pwallet->ImportPrivKeys(privkey_map, timestamp)) {
|
||||||
|
|
|
@ -1661,7 +1661,7 @@ bool CWallet::DummySignTx(CMutableTransaction &txNew, const std::vector<CTxOut>
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWallet::ImportScripts(const std::set<CScript> scripts)
|
bool CWallet::ImportScripts(const std::set<CScript> scripts, int64_t timestamp)
|
||||||
{
|
{
|
||||||
WalletBatch batch(*database);
|
WalletBatch batch(*database);
|
||||||
for (const auto& entry : scripts) {
|
for (const auto& entry : scripts) {
|
||||||
|
@ -1673,7 +1673,15 @@ bool CWallet::ImportScripts(const std::set<CScript> scripts)
|
||||||
if (!AddCScriptWithDB(batch, entry)) {
|
if (!AddCScriptWithDB(batch, entry)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (timestamp > 0) {
|
||||||
|
m_script_metadata[CScriptID(entry)].nCreateTime = timestamp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (timestamp > 0) {
|
||||||
|
UpdateTimeFirstKey(timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1092,7 +1092,7 @@ public:
|
||||||
bool DummySignTx(CMutableTransaction &txNew, const std::vector<CTxOut> &txouts, bool use_max_sig = false) const;
|
bool DummySignTx(CMutableTransaction &txNew, const std::vector<CTxOut> &txouts, bool use_max_sig = false) const;
|
||||||
bool DummySignInput(CTxIn &tx_in, const CTxOut &txout, bool use_max_sig = false) const;
|
bool DummySignInput(CTxIn &tx_in, const CTxOut &txout, bool use_max_sig = false) const;
|
||||||
|
|
||||||
bool ImportScripts(const std::set<CScript> scripts) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
bool ImportScripts(const std::set<CScript> scripts, int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
bool ImportPrivKeys(const std::map<CKeyID, CKey>& privkey_map, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
bool ImportPrivKeys(const std::map<CKeyID, CKey>& privkey_map, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
bool ImportPubKeys(const std::vector<CKeyID>& ordered_pubkeys, const std::map<CKeyID, CPubKey>& pubkey_map, const std::map<CKeyID, std::pair<CPubKey, KeyOriginInfo>>& key_origins, const bool add_keypool, const bool internal, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
bool ImportPubKeys(const std::vector<CKeyID>& ordered_pubkeys, const std::map<CKeyID, CPubKey>& pubkey_map, const std::map<CKeyID, std::pair<CPubKey, KeyOriginInfo>>& key_origins, const bool add_keypool, const bool internal, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
bool ImportScriptPubKeys(const std::string& label, const std::set<CScript>& script_pub_keys, const bool have_solving_data, const bool apply_label, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
bool ImportScriptPubKeys(const std::string& label, const std::set<CScript>& script_pub_keys, const bool have_solving_data, const bool apply_label, const int64_t timestamp) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
|
|
Loading…
Reference in a new issue