diff options
Diffstat (limited to 'src/wallet')
-rw-r--r-- | src/wallet/rpcdump.cpp | 2 | ||||
-rw-r--r-- | src/wallet/wallet.cpp | 38 | ||||
-rw-r--r-- | src/wallet/wallet.h | 6 |
3 files changed, 33 insertions, 13 deletions
diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index e4451bc246..82708dab26 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -95,6 +95,8 @@ UniValue importprivkey(const JSONRPCRequest& request) + HelpExampleCli("importprivkey", "\"mykey\"") + "\nImport using a label and without rescan\n" + HelpExampleCli("importprivkey", "\"mykey\" \"testing\" false") + + "\nImport using default blank label and without rescan\n" + + HelpExampleCli("importprivkey", "\"mykey\" \"\" false") + "\nAs a JSON-RPC call\n" + HelpExampleRpc("importprivkey", "\"mykey\", \"testing\", false") ); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 37e0883060..057d18f27d 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1155,6 +1155,33 @@ void CWallet::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const for (size_t i = 0; i < pblock->vtx.size(); i++) { SyncTransaction(pblock->vtx[i], pindex, i); } + + // The GUI expects a NotifyTransactionChanged when a coinbase tx + // which is in our wallet moves from in-the-best-block to + // 2-confirmations (as it only displays them at that time). + // We do that here. + if (hashPrevBestCoinbase.IsNull()) { + // Immediately after restart we have no idea what the coinbase + // transaction from the previous block is. + // For correctness we scan over the entire wallet, looking for + // the previous block's coinbase, just in case it is ours, so + // that we can notify the UI that it should now be displayed. + if (pindex->pprev) { + for (const std::pair<uint256, CWalletTx>& p : mapWallet) { + if (p.second.IsCoinBase() && p.second.hashBlock == pindex->pprev->GetBlockHash()) { + NotifyTransactionChanged(this, p.first, CT_UPDATED); + break; + } + } + } + } else { + std::map<uint256, CWalletTx>::const_iterator mi = mapWallet.find(hashPrevBestCoinbase); + if (mi != mapWallet.end()) { + NotifyTransactionChanged(this, hashPrevBestCoinbase, CT_UPDATED); + } + } + + hashPrevBestCoinbase = pblock->vtx[0]->GetHash(); } void CWallet::BlockDisconnected(const std::shared_ptr<const CBlock>& pblock) { @@ -3390,17 +3417,6 @@ void CWallet::GetAllReserveKeys(std::set<CKeyID>& setAddress) const } } -void CWallet::UpdatedTransaction(const uint256 &hashTx) -{ - { - LOCK(cs_wallet); - // Only notify UI if this transaction is in this wallet - std::map<uint256, CWalletTx>::const_iterator mi = mapWallet.find(hashTx); - if (mi != mapWallet.end()) - NotifyTransactionChanged(this, hashTx, CT_UPDATED); - } -} - void CWallet::GetScriptForMining(std::shared_ptr<CReserveScript> &script) { std::shared_ptr<CReserveKey> rKey = std::make_shared<CReserveKey>(this); diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 59aa701e1d..b3483f8308 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -715,6 +715,10 @@ private: */ bool AddWatchOnly(const CScript& dest) override; + // Used to NotifyTransactionChanged of the previous block's coinbase when + // the next block comes in + uint256 hashPrevBestCoinbase; + public: /* * Main wallet lock. @@ -989,8 +993,6 @@ public: bool DelAddressBook(const CTxDestination& address); - void UpdatedTransaction(const uint256 &hashTx) override; - void Inventory(const uint256 &hash) override { { |