From 4cdcc9880e8d3398b6009f067dfd96a8aa709724 Mon Sep 17 00:00:00 2001 From: CryptoManiac Date: Mon, 4 Apr 2016 04:46:22 +0300 Subject: [PATCH] Revert "Split CMerkleTx::SetMerkleBranch" This reverts commit 40530c08006088e6f610063f1c49428aa0b272f6. --- src/main.cpp | 63 ++++++++++++++++++++++++++++-------------------- src/main.h | 3 +- src/rpcblockchain.cpp | 2 +- src/wallet.cpp | 2 +- 4 files changed, 40 insertions(+), 30 deletions(-) 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; diff --git a/src/main.h b/src/main.h index cbec5e7..382ef1a 100644 --- a/src/main.h +++ b/src/main.h @@ -794,8 +794,7 @@ public: ) - int SetMerkleBranch(); - int SetMerkleBranch(const CBlock &block); + int SetMerkleBranch(const CBlock* pblock=NULL); int GetDepthInMainChain(CBlockIndex* &pindexRet) const; int GetDepthInMainChain() const { CBlockIndex *pindexRet; return GetDepthInMainChain(pindexRet); } bool IsInMainChain() const { return GetDepthInMainChain() > 0; } diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index d19869d..054dca2 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -104,7 +104,7 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPri Object result; result.push_back(Pair("hash", block.GetHash().GetHex())); CMerkleTx txGen(block.vtx[0]); - txGen.SetMerkleBranch(block); + txGen.SetMerkleBranch(&block); result.push_back(Pair("confirmations", (int)txGen.GetDepthInMainChain())); result.push_back(Pair("size", (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION))); result.push_back(Pair("height", blockindex->nHeight)); diff --git a/src/wallet.cpp b/src/wallet.cpp index 0d0cf99..e72c138 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -773,7 +773,7 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pbl CWalletTx wtx(this,tx); // Get merkle branch if transaction was found in a block if (pblock) - wtx.SetMerkleBranch(*pblock); + wtx.SetMerkleBranch(pblock); return AddToWallet(wtx); } else -- 1.7.1