Revert "Split CMerkleTx::SetMerkleBranch" nvc-v0.5.8
authorCryptoManiac <balthazar@yandex.ru>
Mon, 4 Apr 2016 01:46:22 +0000 (04:46 +0300)
committerCryptoManiac <balthazar@yandex.ru>
Mon, 4 Apr 2016 01:46:22 +0000 (04:46 +0300)
This reverts commit 40530c08006088e6f610063f1c49428aa0b272f6.

src/main.cpp
src/main.h
src/rpcblockchain.cpp
src/wallet.cpp

index 73dade9..613de6b 100644 (file)
@@ -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<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock);
     if (mi == mapBlockIndex.end())
         return 0;
-
     const CBlockIndex* pindex = (*mi).second;
     if (!pindex || !pindex->IsInMainChain())
         return 0;
index cbec5e7..382ef1a 100644 (file)
@@ -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; }
index d19869d..054dca2 100644 (file)
@@ -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));
index 0d0cf99..e72c138 100644 (file)
@@ -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