Merge pull request #4787

4b0deb3 Clean up CMerkleTx::SetMerkleBranch. (Daniel Kraft)
This commit is contained in:
Wladimir J. van der Laan 2014-09-22 14:14:26 +02:00
commit 3cdae61aa2
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
2 changed files with 19 additions and 33 deletions

View File

@ -646,7 +646,7 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pbl
CWalletTx wtx(this,tx); CWalletTx wtx(this,tx);
// Get merkle branch if transaction was found in a block // Get merkle branch if transaction was found in a block
if (pblock) if (pblock)
wtx.SetMerkleBranch(pblock); wtx.SetMerkleBranch(*pblock);
return AddToWallet(wtx); return AddToWallet(wtx);
} }
} }
@ -2229,32 +2229,19 @@ CWalletKey::CWalletKey(int64_t nExpires)
nTimeExpires = nExpires; nTimeExpires = nExpires;
} }
int CMerkleTx::SetMerkleBranch(const CBlock* pblock) int CMerkleTx::SetMerkleBranch(const CBlock& block)
{ {
AssertLockHeld(cs_main); AssertLockHeld(cs_main);
CBlock blockTmp; CBlock blockTmp;
if (pblock == NULL) {
CCoins coins;
if (pcoinsTip->GetCoins(GetHash(), coins)) {
CBlockIndex *pindex = chainActive[coins.nHeight];
if (pindex) {
if (!ReadBlockFromDisk(blockTmp, pindex))
return 0;
pblock = &blockTmp;
}
}
}
if (pblock) {
// Update the tx's hashBlock // Update the tx's hashBlock
hashBlock = pblock->GetHash(); hashBlock = block.GetHash();
// Locate the transaction // Locate the transaction
for (nIndex = 0; nIndex < (int)pblock->vtx.size(); nIndex++) for (nIndex = 0; nIndex < (int)block.vtx.size(); nIndex++)
if (pblock->vtx[nIndex] == *(CTransaction*)this) if (block.vtx[nIndex] == *(CTransaction*)this)
break; break;
if (nIndex == (int)pblock->vtx.size()) if (nIndex == (int)block.vtx.size())
{ {
vMerkleBranch.clear(); vMerkleBranch.clear();
nIndex = -1; nIndex = -1;
@ -2263,14 +2250,13 @@ int CMerkleTx::SetMerkleBranch(const CBlock* pblock)
} }
// Fill in merkle branch // Fill in merkle branch
vMerkleBranch = pblock->GetMerkleBranch(nIndex); vMerkleBranch = block.GetMerkleBranch(nIndex);
}
// Is the tx in a block that's in the main chain // Is the tx in a block that's in the main chain
BlockMap::iterator mi = mapBlockIndex.find(hashBlock); BlockMap::iterator mi = mapBlockIndex.find(hashBlock);
if (mi == mapBlockIndex.end()) if (mi == mapBlockIndex.end())
return 0; return 0;
CBlockIndex* pindex = (*mi).second; const CBlockIndex* pindex = (*mi).second;
if (!pindex || !chainActive.Contains(pindex)) if (!pindex || !chainActive.Contains(pindex))
return 0; return 0;

View File

@ -504,7 +504,7 @@ public:
READWRITE(nIndex); READWRITE(nIndex);
} }
int SetMerkleBranch(const CBlock* pblock=NULL); int SetMerkleBranch(const CBlock& block);
// Return depth of transaction in blockchain: // Return depth of transaction in blockchain:
// -1 : not in blockchain, and not in memory pool (conflicted transaction) // -1 : not in blockchain, and not in memory pool (conflicted transaction)