X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.cpp;h=db2239f883764db0692b927c23a9b7c2d9b421f4;hb=ef17ac0211ddd486127e1f94756fbb3fd704a9b4;hp=73dade9b396a82fc33a8437bad60221b71b15da7;hpb=a56c152bd0619d8befeb07b6d6e7428d3cc0fcd3;p=novacoin.git diff --git a/src/main.cpp b/src/main.cpp index 73dade9..db2239f 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; @@ -1735,8 +1746,10 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) if (tx.nTime >= CHECKLOCKTIMEVERIFY_SWITCH_TIME) { nFlags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY; - // OP_CHECKSEQUENCEVERIFY is senseless without BIP68, so we're going disable it for now. - // nFlags |= SCRIPT_VERIFY_CHECKSEQUENCEVERIFY; + } + + if (tx.nTime >= CHECKSEQUENCEVERIFY_SWITCH_TIME) { + nFlags |= SCRIPT_VERIFY_CHECKSEQUENCEVERIFY; } std::vector vChecks; @@ -2651,7 +2664,7 @@ bool CBlock::CheckBlockSignature() const bool CheckDiskSpace(uint64_t nAdditionalBytes) { - uint64_t nFreeBytesAvailable = filesystem::space(GetDataDir()).available; + uint64_t nFreeBytesAvailable = boost::filesystem::space(GetDataDir()).available; // Check for nMinDiskSpace bytes (currently 50MB) if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes) @@ -2667,7 +2680,7 @@ bool CheckDiskSpace(uint64_t nAdditionalBytes) return true; } -static filesystem::path BlockFilePath(unsigned int nFile) +static boost::filesystem::path BlockFilePath(unsigned int nFile) { string strBlockFn = strprintf("blk%04u.dat", nFile); return GetDataDir() / strBlockFn;