aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/wallet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wallet/wallet.cpp')
-rw-r--r--src/wallet/wallet.cpp38
1 files changed, 27 insertions, 11 deletions
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);