|
|
@ -1155,33 +1155,6 @@ void CWallet::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const
|
|
|
|
for (size_t i = 0; i < pblock->vtx.size(); i++) {
|
|
|
|
for (size_t i = 0; i < pblock->vtx.size(); i++) {
|
|
|
|
SyncTransaction(pblock->vtx[i], pindex, 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) {
|
|
|
|
void CWallet::BlockDisconnected(const std::shared_ptr<const CBlock>& pblock) {
|
|
|
|