X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fmain.cpp;h=613de6b17433f441ca16fa8e4bb92a75ab1e3b4d;hp=73dade9b396a82fc33a8437bad60221b71b15da7;hb=refs%2Ftags%2Fnvc-v0.5.8;hpb=05df71c9c292877e7469884227fd3ba84d02908b diff --git a/src/main.cpp b/src/main.cpp index 73dade9..613de6b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -435,40 +435,51 @@ CTransaction::GetLegacySigOpCount() const return nSigOps; } -int CMerkleTx::SetMerkleBranch() +int CMerkleTx::SetMerkleBranch(const CBlock* pblock) { - // Load the block this tx is in - CTxIndex txindex; - if (!CTxDB("r").ReadTxIndex(GetHash(), txindex)) - return 0; - CBlock blockTmp; - if (!blockTmp.ReadFromDisk(txindex.pos.nFile, txindex.pos.nBlockPos)) - return 0; - return SetMerkleBranch(blockTmp); -} + if (fClient) + { + if (hashBlock == 0) + return 0; + } + else + { + CBlock blockTmp; -int CMerkleTx::SetMerkleBranch(const CBlock& block) -{ - // Update the tx's hashBlock - hashBlock = block.GetHash(); + if (pblock == NULL) + { + // Load the block this tx is in + CTxIndex txindex; + if (!CTxDB("r").ReadTxIndex(GetHash(), txindex)) + return 0; + if (!blockTmp.ReadFromDisk(txindex.pos.nFile, txindex.pos.nBlockPos)) + return 0; + pblock = &blockTmp; + } - // Locate the transaction - for (nIndex = 0; nIndex < (int)block.vtx.size(); nIndex++) - if (block.vtx[nIndex] == *(CTransaction*)this) - break; - if (nIndex == (int)block.vtx.size()) - { - vMerkleBranch.clear(); - nIndex = -1; - printf("ERROR: SetMerkleBranch() : couldn't find tx in block\n"); - return 0; + // Update the tx's hashBlock + hashBlock = pblock->GetHash(); + + // Locate the transaction + for (nIndex = 0; nIndex < (int)pblock->vtx.size(); nIndex++) + if (pblock->vtx[nIndex] == *(CTransaction*)this) + break; + if (nIndex == (int)pblock->vtx.size()) + { + vMerkleBranch.clear(); + nIndex = -1; + printf("ERROR: SetMerkleBranch() : couldn't find tx in block\n"); + return 0; + } + + // Fill in merkle branch + vMerkleBranch = pblock->GetMerkleBranch(nIndex); } // Is the tx in a block that's in the main chain map::iterator mi = mapBlockIndex.find(hashBlock); if (mi == mapBlockIndex.end()) return 0; - const CBlockIndex* pindex = (*mi).second; if (!pindex || !pindex->IsInMainChain()) return 0;