Merge #9818: Save watch only key timestamps when reimporting keys
7759aa2
Save watch only key timestamps when reimporting keys (Russell Yanofsky)
Tree-SHA512: 433b5a78e5626fb2f3166e6c84c22eabd5239d451dc82694da95af237e034612a24f1a8bc959b7d2f2e576ce0b679be1fa4af929ebfae758c7e832056ab67061
This commit is contained in:
commit
3d857f307b
2 changed files with 24 additions and 5 deletions
|
@ -314,6 +314,7 @@ class ImportMultiTest (BitcoinTestFramework):
|
||||||
self.nodes[1].generate(100)
|
self.nodes[1].generate(100)
|
||||||
transactionid = self.nodes[1].sendtoaddress(multi_sig_script['address'], 10.00)
|
transactionid = self.nodes[1].sendtoaddress(multi_sig_script['address'], 10.00)
|
||||||
self.nodes[1].generate(1)
|
self.nodes[1].generate(1)
|
||||||
|
timestamp = self.nodes[1].getblock(self.nodes[1].getbestblockhash())['mediantime']
|
||||||
transaction = self.nodes[1].gettransaction(transactionid)
|
transaction = self.nodes[1].gettransaction(transactionid)
|
||||||
|
|
||||||
self.log.info("Should import a p2sh with respective redeem script and private keys")
|
self.log.info("Should import a p2sh with respective redeem script and private keys")
|
||||||
|
@ -409,6 +410,24 @@ class ImportMultiTest (BitcoinTestFramework):
|
||||||
assert_equal(address_assert['ismine'], False)
|
assert_equal(address_assert['ismine'], False)
|
||||||
assert_equal('timestamp' in address_assert, False)
|
assert_equal('timestamp' in address_assert, False)
|
||||||
|
|
||||||
|
|
||||||
|
# Importing existing watch only address with new timestamp should replace saved timestamp.
|
||||||
|
assert_greater_than(timestamp, watchonly_timestamp)
|
||||||
|
print("Should replace previously saved watch only timestamp.")
|
||||||
|
result = self.nodes[1].importmulti([{
|
||||||
|
"scriptPubKey": {
|
||||||
|
"address": watchonly_address,
|
||||||
|
},
|
||||||
|
"timestamp": "now",
|
||||||
|
}])
|
||||||
|
assert_equal(result[0]['success'], True)
|
||||||
|
address_assert = self.nodes[1].validateaddress(watchonly_address)
|
||||||
|
assert_equal(address_assert['iswatchonly'], True)
|
||||||
|
assert_equal(address_assert['ismine'], False)
|
||||||
|
assert_equal(address_assert['timestamp'], timestamp)
|
||||||
|
watchonly_timestamp = timestamp
|
||||||
|
|
||||||
|
|
||||||
# restart nodes to check for proper serialization/deserialization of watch only address
|
# restart nodes to check for proper serialization/deserialization of watch only address
|
||||||
stop_nodes(self.nodes)
|
stop_nodes(self.nodes)
|
||||||
self.nodes = start_nodes(2, self.options.tmpdir)
|
self.nodes = start_nodes(2, self.options.tmpdir)
|
||||||
|
|
|
@ -743,7 +743,7 @@ UniValue ProcessImport(CWallet * const pwallet, const UniValue& data, const int6
|
||||||
|
|
||||||
pwallet->MarkDirty();
|
pwallet->MarkDirty();
|
||||||
|
|
||||||
if (!pwallet->HaveWatchOnly(redeemScript) && !pwallet->AddWatchOnly(redeemScript, timestamp)) {
|
if (!pwallet->AddWatchOnly(redeemScript, timestamp)) {
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -760,7 +760,7 @@ UniValue ProcessImport(CWallet * const pwallet, const UniValue& data, const int6
|
||||||
|
|
||||||
pwallet->MarkDirty();
|
pwallet->MarkDirty();
|
||||||
|
|
||||||
if (!pwallet->HaveWatchOnly(redeemDestination) && !pwallet->AddWatchOnly(redeemDestination, timestamp)) {
|
if (!pwallet->AddWatchOnly(redeemDestination, timestamp)) {
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -853,7 +853,7 @@ UniValue ProcessImport(CWallet * const pwallet, const UniValue& data, const int6
|
||||||
|
|
||||||
pwallet->MarkDirty();
|
pwallet->MarkDirty();
|
||||||
|
|
||||||
if (!pwallet->HaveWatchOnly(pubKeyScript) && !pwallet->AddWatchOnly(pubKeyScript, timestamp)) {
|
if (!pwallet->AddWatchOnly(pubKeyScript, timestamp)) {
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -871,7 +871,7 @@ UniValue ProcessImport(CWallet * const pwallet, const UniValue& data, const int6
|
||||||
|
|
||||||
pwallet->MarkDirty();
|
pwallet->MarkDirty();
|
||||||
|
|
||||||
if (!pwallet->HaveWatchOnly(scriptRawPubKey) && !pwallet->AddWatchOnly(scriptRawPubKey, timestamp)) {
|
if (!pwallet->AddWatchOnly(scriptRawPubKey, timestamp)) {
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -945,7 +945,7 @@ UniValue ProcessImport(CWallet * const pwallet, const UniValue& data, const int6
|
||||||
|
|
||||||
pwallet->MarkDirty();
|
pwallet->MarkDirty();
|
||||||
|
|
||||||
if (!pwallet->HaveWatchOnly(script) && !pwallet->AddWatchOnly(script, timestamp)) {
|
if (!pwallet->AddWatchOnly(script, timestamp)) {
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue