X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.cpp;h=613de6b17433f441ca16fa8e4bb92a75ab1e3b4d;hb=HEAD;hp=27937eb24fb2aa91466a375384ff0844e15daacd;hpb=9c16e0ba1b6cd0ce69716a4be20313fa6e98a18f;p=novacoin.git diff --git a/src/main.cpp b/src/main.cpp index 27937eb..8b36a45 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,7 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "main.h" #include "alert.h" #include "checkpoints.h" #include "db.h" @@ -11,26 +12,26 @@ #include "interface.h" #include "checkqueue.h" #include "kernel.h" +#include "random.h" +#include "wallet.h" +#include "scrypt.h" + #include #include -#include "main.h" - #include -using namespace std; - CCriticalSection cs_setpwalletRegistered; -set setpwalletRegistered; +std::set setpwalletRegistered; CCriticalSection cs_main; CTxMemPool mempool; unsigned int nTransactionsUpdated = 0; -map mapBlockIndex; -set > setStakeSeen; +std::map mapBlockIndex; +std::set > setStakeSeen; CBigNum bnProofOfWorkLimit(~uint256(0) >> 20); // "standard" scrypt target limit for proof of work, results with 0,000244140625 proof-of-work difficulty CBigNum bnProofOfStakeLegacyLimit(~uint256(0) >> 24); // proof of stake target limit from block #15000 and until 20 June 2013, results with 0,00390625 proof of stake difficulty @@ -60,18 +61,18 @@ int nScriptCheckThreads = 0; CMedianFilter cPeerBlockCounts(5, 0); // Amount of blocks that other nodes claim to have -map mapOrphanBlocks; -multimap mapOrphanBlocksByPrev; -set > setStakeSeenOrphan; -map mapProofOfStake; +std::map mapOrphanBlocks; +std::multimap mapOrphanBlocksByPrev; +std::set > setStakeSeenOrphan; +std::map mapProofOfStake; -map mapOrphanTransactions; -map > mapOrphanTransactionsByPrev; +std::map mapOrphanTransactions; +std::map > mapOrphanTransactionsByPrev; // Constant stuff for coinbase transactions we create: CScript COINBASE_FLAGS; -const string strMessageMagic = "NovaCoin Signed Message:\n"; +const std::string strMessageMagic = "NovaCoin Signed Message:\n"; // Settings int64_t nTransactionFee = MIN_TX_FEE; @@ -239,7 +240,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) { // Evict a random orphan: uint256 randomhash = GetRandHash(); - map::iterator it = mapOrphanTransactions.lower_bound(randomhash); + std::map::iterator it = mapOrphanTransactions.lower_bound(randomhash); if (it == mapOrphanTransactions.end()) it = mapOrphanTransactions.begin(); EraseOrphanTx(it->first); @@ -287,7 +288,7 @@ bool CTransaction::ReadFromDisk(COutPoint prevout) return ReadFromDisk(txdb, prevout, txindex); } -bool CTransaction::IsStandard(string& strReason) const +bool CTransaction::IsStandard(std::string& strReason) const { if (nVersion > CTransaction::CURRENT_VERSION) { @@ -369,7 +370,7 @@ bool CTransaction::AreInputsStandard(const MapPrevTx& mapInputs) const { const CTxOut& prev = GetOutputFor(vin[i], mapInputs); - vector > vSolutions; + std::vector > vSolutions; txnouttype whichType; // get the scriptPubKey corresponding to this input: const CScript& prevScript = prev.scriptPubKey; @@ -384,7 +385,7 @@ bool CTransaction::AreInputsStandard(const MapPrevTx& mapInputs) const // be quick, because if there are any operations // beside "push data" in the scriptSig the // IsStandard() call returns false - vector > stack; + std::vector > stack; if (!EvalScript(stack, vin[i].scriptSig, *this, i, false, 0)) return false; @@ -393,7 +394,7 @@ bool CTransaction::AreInputsStandard(const MapPrevTx& mapInputs) const if (stack.empty()) return false; CScript subscript(stack.back().begin(), stack.back().end()); - vector > vSolutions2; + std::vector > vSolutions2; txnouttype whichType2; if (!Solver(subscript, whichType2, vSolutions2)) return false; @@ -476,7 +477,7 @@ int CMerkleTx::SetMerkleBranch(const CBlock* pblock) } // Is the tx in a block that's in the main chain - map::iterator mi = mapBlockIndex.find(hashBlock); + auto mi = mapBlockIndex.find(hashBlock); if (mi == mapBlockIndex.end()) return 0; const CBlockIndex* pindex = (*mi).second; @@ -515,7 +516,7 @@ bool CTransaction::CheckTransaction() const } // Check for duplicate inputs - set vInOutPoints; + std::set vInOutPoints; for (const CTxIn& txin : vin) { if (vInOutPoints.count(txin.prevout)) @@ -621,7 +622,7 @@ bool CTxMemPool::accept(CTxDB& txdb, CTransaction &tx, bool fCheckInputs, return error("CTxMemPool::accept() : not accepting nLockTime beyond 2038 yet"); // Rather not work on nonstandard transactions (unless -testnet) - string strNonStd; + std::string strNonStd; if (!fTestNet && !tx.IsStandard(strNonStd)) return error("CTxMemPool::accept() : nonstandard transaction (%s)", strNonStd.c_str()); @@ -667,7 +668,7 @@ bool CTxMemPool::accept(CTxDB& txdb, CTransaction &tx, bool fCheckInputs, if (fCheckInputs) { MapPrevTx mapInputs; - map mapUnused; + std::map mapUnused; bool fInvalid = false; if (!tx.FetchInputs(txdb, mapUnused, false, false, mapInputs, fInvalid)) { @@ -709,7 +710,7 @@ bool CTxMemPool::accept(CTxDB& txdb, CTransaction &tx, bool fCheckInputs, { LOCK(cs); // Use an exponentially decaying ~10-minute window: - dFreeCount *= pow(1.0 - 1.0/600.0, (double)(nNow - nLastTime)); + dFreeCount *= std::pow(1.0 - 1.0/600.0, (double)(nNow - nLastTime)); nLastTime = nNow; // -limitfreerelay unit is thousand-bytes-per-minute // At default rate it would take over a month to fill 1GB @@ -801,7 +802,7 @@ void CTxMemPool::queryHashes(std::vector& vtxid) LOCK(cs); vtxid.reserve(mapTx.size()); - for (map::iterator mi = mapTx.begin(); mi != mapTx.end(); ++mi) + for (auto mi = mapTx.begin(); mi != mapTx.end(); ++mi) vtxid.push_back((*mi).first); } @@ -814,7 +815,7 @@ int CMerkleTx::GetDepthInMainChain(CBlockIndex* &pindexRet) const return 0; // Find the block it claims to be in - map::iterator mi = mapBlockIndex.find(hashBlock); + auto mi = mapBlockIndex.find(hashBlock); if (mi == mapBlockIndex.end()) return 0; CBlockIndex* pindex = (*mi).second; @@ -838,7 +839,7 @@ int CMerkleTx::GetBlocksToMaturity() const { if (!(IsCoinBase() || IsCoinStake())) return 0; - return max(0, (nCoinbaseMaturity+20) - GetDepthInMainChain()); + return std::max(0, (nCoinbaseMaturity+20) - GetDepthInMainChain()); } @@ -862,34 +863,6 @@ bool CMerkleTx::AcceptToMemoryPool() return AcceptToMemoryPool(txdb); } - - -bool CWalletTx::AcceptWalletTransaction(CTxDB& txdb, bool fCheckInputs) -{ - - { - LOCK(mempool.cs); - // Add previous supporting transactions first - for (CMerkleTx& tx : vtxPrev) - { - if (!(tx.IsCoinBase() || tx.IsCoinStake())) - { - uint256 hash = tx.GetHash(); - if (!mempool.exists(hash) && !txdb.ContainsTx(hash)) - tx.AcceptToMemoryPool(txdb, fCheckInputs); - } - } - return AcceptToMemoryPool(txdb, fCheckInputs); - } - return false; -} - -bool CWalletTx::AcceptWalletTransaction() -{ - CTxDB txdb("r"); - return AcceptWalletTransaction(txdb); -} - int CTxIndex::GetDepthInMainChain() const { // Read block header @@ -897,7 +870,7 @@ int CTxIndex::GetDepthInMainChain() const if (!block.ReadFromDisk(pos.nFile, pos.nBlockPos, false)) return 0; // Find the block in the index - map::iterator mi = mapBlockIndex.find(block.GetHash()); + auto mi = mapBlockIndex.find(block.GetHash()); if (mi == mapBlockIndex.end()) return 0; CBlockIndex* pindex = (*mi).second; @@ -1009,7 +982,7 @@ CBigNum inline GetProofOfStakeLimit(int nHeight, unsigned int nTime) } // miner's coin base reward based on nBits -int64_t GetProofOfWorkReward(unsigned int nBits, int64_t nFees) +int64_t GetProofOfWorkReward(unsigned int nBits) { CBigNum bnSubsidyLimit = MAX_MINT_PROOF_OF_WORK; @@ -1044,7 +1017,7 @@ int64_t GetProofOfWorkReward(unsigned int nBits, int64_t nFees) if (fDebug && GetBoolArg("-printcreation")) printf("GetProofOfWorkReward() : create=%s nBits=0x%08x nSubsidy=%" PRId64 "\n", FormatMoney(nSubsidy).c_str(), nBits, nSubsidy); - return min(nSubsidy, MAX_MINT_PROOF_OF_WORK) + nFees; + return std::min(nSubsidy, MAX_MINT_PROOF_OF_WORK); } // miner's coin stake reward based on nBits and coin age spent (coin-days) @@ -1088,7 +1061,7 @@ int64_t GetProofOfStakeReward(int64_t nCoinAge, unsigned int nBits, int64_t nTim } nRewardCoinYear = bnUpperBound.getuint64(); - nRewardCoinYear = min((nRewardCoinYear / CENT) * CENT, MAX_MINT_PROOF_OF_STAKE); + nRewardCoinYear = std::min((nRewardCoinYear / CENT) * CENT, MAX_MINT_PROOF_OF_STAKE); if(bCoinYearOnly) return nRewardCoinYear; @@ -1102,7 +1075,7 @@ int64_t GetProofOfStakeReward(int64_t nCoinAge, unsigned int nBits, int64_t nTim if (fDebug && GetBoolArg("-printcreation") && nSubsidyLimit < nSubsidy) printf("GetProofOfStakeReward(): %s is greater than %s, coinstake reward will be truncated\n", FormatMoney(nSubsidy).c_str(), FormatMoney(nSubsidyLimit).c_str()); - nSubsidy = min(nSubsidy, nSubsidyLimit); + nSubsidy = std::min(nSubsidy, nSubsidyLimit); if (fDebug && GetBoolArg("-printcreation")) printf("GetProofOfStakeReward(): create=%s nCoinAge=%" PRId64 " nBits=%d\n", FormatMoney(nSubsidy).c_str(), nCoinAge, nBits); @@ -1190,7 +1163,7 @@ unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfS // ppcoin: retarget with exponential moving toward target spacing CBigNum bnNew; bnNew.SetCompact(pindexPrev->nBits); - int64_t nTargetSpacing = fProofOfStake? nStakeTargetSpacing : min(GetTargetSpacingWorkMax(pindexLast->nHeight, pindexLast->nTime), (int64_t) nStakeTargetSpacing * (1 + pindexLast->nHeight - pindexPrev->nHeight)); + int64_t nTargetSpacing = fProofOfStake? nStakeTargetSpacing : std::min(GetTargetSpacingWorkMax(pindexLast->nHeight, pindexLast->nTime), (int64_t) nStakeTargetSpacing * (1 + pindexLast->nHeight - pindexPrev->nHeight)); int64_t nInterval = nTargetTimespan / nTargetSpacing; bnNew *= ((nInterval - 1) * nTargetSpacing + nActualSpacing + nActualSpacing); bnNew /= ((nInterval + 1) * nTargetSpacing); @@ -1262,10 +1235,14 @@ void static InvalidChainFound(CBlockIndex* pindexNew) DateTimeStrFormat("%x %H:%M:%S", pindexBest->GetBlockTime()).c_str()); } +uint256 CBlock::GetHash() const +{ + return scrypt_blockhash((const uint8_t*)&nVersion); +} void CBlock::UpdateTime(const CBlockIndex* pindexPrev) { - nTime = max(GetBlockTime(), GetAdjustedTime()); + nTime = std::max(GetBlockTime(), GetAdjustedTime()); } @@ -1314,7 +1291,7 @@ bool CTransaction::DisconnectInputs(CTxDB& txdb) } -bool CTransaction::FetchInputs(CTxDB& txdb, const map& mapTestPool, +bool CTransaction::FetchInputs(CTxDB& txdb, const std::map& mapTestPool, bool fBlock, bool fMiner, MapPrevTx& inputsRet, bool& fInvalid) { // FetchInputs can return false either because we just haven't seen some inputs @@ -1443,7 +1420,7 @@ bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsig return CScriptCheck(txFrom, txTo, nIn, flags, nHashType)(); } -bool CTransaction::ConnectInputs(CTxDB& txdb, MapPrevTx inputs, map& mapTestPool, const CDiskTxPos& posThisTx, +bool CTransaction::ConnectInputs(CTxDB& txdb, MapPrevTx inputs, std::map& mapTestPool, const CDiskTxPos& posThisTx, const CBlockIndex* pindexBlock, bool fBlock, bool fMiner, bool fScriptChecks, unsigned int flags, std::vector *pvChecks) { // Take over previous transactions' spent pointers @@ -1690,7 +1667,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) else nTxPos = pindex->nBlockPos + ::GetSerializeSize(CBlock(), SER_DISK, CLIENT_VERSION) - (2 * GetSizeOfCompactSize(0)) + GetSizeOfCompactSize(vtx.size()); - map mapQueuedChanges; + std::map mapQueuedChanges; CCheckQueueControl control(fScriptChecks && nScriptCheckThreads ? &scriptcheckqueue : NULL); int64_t nFees = 0; @@ -1765,7 +1742,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) if (IsProofOfWork()) { - int64_t nBlockReward = GetProofOfWorkReward(nBits, nFees); + int64_t nBlockReward = GetProofOfWorkReward(nBits) + nFees; // Check coinbase reward if (vtx[0].GetValueOut() > nBlockReward) @@ -1789,7 +1766,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) return true; // Write queued txindex changes - for (map::iterator mi = mapQueuedChanges.begin(); mi != mapQueuedChanges.end(); ++mi) + for (auto mi = mapQueuedChanges.begin(); mi != mapQueuedChanges.end(); ++mi) { if (!txdb.UpdateTxIndex((*mi).first, (*mi).second)) return error("ConnectBlock() : UpdateTxIndex failed"); @@ -1832,12 +1809,12 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) } // List of what to disconnect - vector vDisconnect; + std::vector vDisconnect; for (CBlockIndex* pindex = pindexBest; pindex != pfork; pindex = pindex->pprev) vDisconnect.push_back(pindex); // List of what to connect - vector vConnect; + std::vector vConnect; for (CBlockIndex* pindex = pindexNew; pindex != pfork; pindex = pindex->pprev) vConnect.push_back(pindex); reverse(vConnect.begin(), vConnect.end()); @@ -1846,7 +1823,7 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) printf("REORGANIZE: Connect %" PRIszu " blocks; %s..%s\n", vConnect.size(), pfork->GetBlockHash().ToString().substr(0,20).c_str(), pindexNew->GetBlockHash().ToString().substr(0,20).c_str()); // Disconnect shorter branch - vector vResurrect; + std::vector vResurrect; for (CBlockIndex* pindex : vDisconnect) { CBlock block; @@ -1862,7 +1839,7 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) } // Connect longer branch - vector vDelete; + std::vector vDelete; for (unsigned int i = 0; i < vConnect.size(); i++) { CBlockIndex* pindex = vConnect[i]; @@ -2128,11 +2105,11 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos) return error("AddToBlockIndex() : %s already exists", hash.ToString().substr(0,20).c_str()); // Construct new block index object - CBlockIndex* pindexNew = new(nothrow) CBlockIndex(nFile, nBlockPos, *this); + CBlockIndex* pindexNew = new(std::nothrow) CBlockIndex(nFile, nBlockPos, *this); if (!pindexNew) return error("AddToBlockIndex() : new CBlockIndex failed"); pindexNew->phashBlock = &hash; - map::iterator miPrev = mapBlockIndex.find(hashPrevBlock); + auto miPrev = mapBlockIndex.find(hashPrevBlock); if (miPrev != mapBlockIndex.end()) { pindexNew->pprev = (*miPrev).second; @@ -2165,9 +2142,9 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos) return error("AddToBlockIndex() : Rejected by stake modifier checkpoint height=%d, modifier=0x%016" PRIx64, pindexNew->nHeight, nStakeModifier); // Add to mapBlockIndex - map::iterator mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first; + auto mi = mapBlockIndex.insert(std::make_pair(hash, pindexNew)).first; if (pindexNew->IsProofOfStake()) - setStakeSeen.insert(make_pair(pindexNew->prevoutStake, pindexNew->nStakeTime)); + setStakeSeen.insert(std::make_pair(pindexNew->prevoutStake, pindexNew->nStakeTime)); pindexNew->phashBlock = &((*mi).first); // Write to disk block index @@ -2205,7 +2182,7 @@ bool CBlock::CheckBlock(bool fCheckPOW, bool fCheckMerkleRoot, bool fCheckSig) c // These are checks that are independent of context // that can be verified before saving an orphan block. - set uniqueTx; // tx hashes + std::set uniqueTx; // tx hashes unsigned int nSigOps = 0; // total sigops // Size limits @@ -2319,7 +2296,7 @@ bool CBlock::AcceptBlock() return error("AcceptBlock() : block already in mapBlockIndex"); // Get prev block index - map::iterator mi = mapBlockIndex.find(hashPrevBlock); + auto mi = mapBlockIndex.find(hashPrevBlock); if (mi == mapBlockIndex.end()) return DoS(10, error("AcceptBlock() : prev block not found")); CBlockIndex* pindexPrev = (*mi).second; @@ -2576,8 +2553,8 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) setStakeSeenOrphan.insert(pblock->GetProofOfStake()); } CBlock* pblock2 = new CBlock(*pblock); - mapOrphanBlocks.insert(make_pair(hash, pblock2)); - mapOrphanBlocksByPrev.insert(make_pair(pblock2->hashPrevBlock, pblock2)); + mapOrphanBlocks.insert(std::make_pair(hash, pblock2)); + mapOrphanBlocksByPrev.insert(std::make_pair(pblock2->hashPrevBlock, pblock2)); // Ask this guy to fill in what we're missing if (pfrom) @@ -2608,7 +2585,7 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) // Needed for AcceptBlock() if (!mapProofOfStake.count(hash)) - mapProofOfStake.insert(make_pair(hash, hashProofOfStake)); + mapProofOfStake.insert(std::make_pair(hash, hashProofOfStake)); } // Store to disk @@ -2616,12 +2593,12 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) return error("ProcessBlock() : AcceptBlock FAILED"); // Process any orphan blocks that depended on this one - vector vWorkQueue; + std::vector vWorkQueue; vWorkQueue.push_back(hash); for (unsigned int i = 0; i < vWorkQueue.size(); i++) { uint256 hashPrev = vWorkQueue[i]; - for (multimap::iterator mi = mapOrphanBlocksByPrev.lower_bound(hashPrev); + for (auto mi = mapOrphanBlocksByPrev.lower_bound(hashPrev); mi != mapOrphanBlocksByPrev.upper_bound(hashPrev); ++mi) { @@ -2638,7 +2615,7 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) { // Needed for AcceptBlock() if (!mapProofOfStake.count(hashOrphanBlock)) - mapProofOfStake.insert(make_pair(hashOrphanBlock, hashOrphanProofOfStake)); + mapProofOfStake.insert(std::make_pair(hashOrphanBlock, hashOrphanProofOfStake)); // Finally, we're ready to run AcceptBlock() if (pblockOrphan->AcceptBlock()) @@ -2675,7 +2652,7 @@ bool CBlock::CheckBlockSignature() const return false; txnouttype whichType; - vector vSolutions; + std::vector vSolutions; if (!Solver(vtx[1].vout[1].scriptPubKey, whichType, vSolutions)) return false; @@ -2699,7 +2676,7 @@ bool CheckDiskSpace(uint64_t nAdditionalBytes) if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes) { fShutdown = true; - string strMessage = _("Warning: Disk space is low!"); + std::string strMessage = _("Warning: Disk space is low!"); strMiscWarning = strMessage; printf("*** %s\n", strMessage.c_str()); uiInterface.ThreadSafeMessageBox(strMessage, "NovaCoin", CClientUIInterface::OK | CClientUIInterface::ICON_EXCLAMATION | CClientUIInterface::MODAL); @@ -2711,7 +2688,7 @@ bool CheckDiskSpace(uint64_t nAdditionalBytes) static boost::filesystem::path BlockFilePath(unsigned int nFile) { - string strBlockFn = strprintf("blk%04u.dat", nFile); + std::string strBlockFn = strprintf("blk%04u.dat", nFile); return GetDataDir() / strBlockFn; } @@ -2817,12 +2794,12 @@ bool LoadBlockIndex(bool fAllowNew) // CTxOut(empty) // vMerkleTree: 4cb33b3b6a - const string strTimestamp = "https://bitcointalk.org/index.php?topic=134179.msg1502196#msg1502196"; + const std::string strTimestamp = "https://bitcointalk.org/index.php?topic=134179.msg1502196#msg1502196"; CTransaction txNew; txNew.nTime = 1360105017; txNew.vin.resize(1); txNew.vout.resize(1); - txNew.vin[0].scriptSig = CScript() << 486604799 << CBigNum(9999) << vector(strTimestamp.begin(), strTimestamp.end()); + txNew.vin[0].scriptSig = CScript() << 486604799 << CBigNum(9999) << std::vector(strTimestamp.begin(), strTimestamp.end()); txNew.vout[0].SetEmpty(); CBlock block; block.vtx.push_back(txNew); @@ -2861,7 +2838,7 @@ bool LoadBlockIndex(bool fAllowNew) { CTxDB txdb("r+"); - string strPubKey = ""; + std::string strPubKey = ""; if (!txdb.ReadCheckpointPubKey(strPubKey) || strPubKey != CSyncCheckpoint::strMasterPubKey) { // write checkpoint master key to db @@ -2899,8 +2876,8 @@ bool LoadBlockIndex(bool fAllowNew) void PrintBlockTree() { // pre-compute tree structure - map > mapNext; - for (map::iterator mi = mapBlockIndex.begin(); mi != mapBlockIndex.end(); ++mi) + std::map > mapNext; + for (auto mi = mapBlockIndex.begin(); mi != mapBlockIndex.end(); ++mi) { CBlockIndex* pindex = (*mi).second; mapNext[pindex->pprev].push_back(pindex); @@ -2909,8 +2886,8 @@ void PrintBlockTree() // mapNext[pindex->pprev].push_back(pindex); } - vector > vStack; - vStack.push_back(make_pair(0, pindexGenesisBlock)); + std::vector > vStack; + vStack.push_back(std::make_pair(0, pindexGenesisBlock)); int nPrevCol = 0; while (!vStack.empty()) @@ -2954,19 +2931,19 @@ void PrintBlockTree() PrintWallets(block); // put the main time-chain first - vector& vNext = mapNext[pindex]; + std::vector& vNext = mapNext[pindex]; for (unsigned int i = 0; i < vNext.size(); i++) { if (vNext[i]->pnext) { - swap(vNext[0], vNext[i]); + std::swap(vNext[0], vNext[i]); break; } } // iterate children for (unsigned int i = 0; i < vNext.size(); i++) - vStack.push_back(make_pair(nCol+i, vNext[i])); + vStack.push_back(std::make_pair(nCol+i, vNext[i])); } } @@ -3035,14 +3012,14 @@ bool LoadExternalBlockFile(FILE* fileIn) // CAlert // -extern map mapAlerts; +extern std::map mapAlerts; extern CCriticalSection cs_mapAlerts; -string GetWarnings(string strFor) +std::string GetWarnings(std::string strFor) { int nPriority = 0; - string strStatusBar; - string strRPC; + std::string strStatusBar; + std::string strRPC; if (GetBoolArg("-testsafemode")) strRPC = "test"; @@ -3138,9 +3115,8 @@ bool static AlreadyHave(CTxDB& txdb, const CInv& inv) // a large 4-byte int at any alignment. unsigned char pchMessageStart[4] = { 0xe4, 0xe8, 0xe9, 0xe5 }; -bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) +bool static ProcessMessage(CNode* pfrom, std::string strCommand, CDataStream& vRecv) { - static map mapReuseKey; RandAddSeedPerfmon(); if (fDebug) printf("received: %s (%" PRIszu " bytes)\n", strCommand.c_str(), vRecv.size()); @@ -3217,7 +3193,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // Change version pfrom->PushMessage("verack"); - pfrom->vSend.SetVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); + pfrom->vSend.SetVersion(std::min(pfrom->nVersion, PROTOCOL_VERSION)); if (!pfrom->fInbound) { @@ -3292,13 +3268,13 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "verack") { - pfrom->vRecv.SetVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); + pfrom->vRecv.SetVersion(std::min(pfrom->nVersion, PROTOCOL_VERSION)); } else if (strCommand == "addr") { - vector vAddr; + std::vector vAddr; vRecv >> vAddr; // Don't want addr from older versions unless seeding @@ -3311,7 +3287,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } // Store the new addresses - vector vAddrOk; + std::vector vAddrOk; int64_t nNow = GetAdjustedTime(); int64_t nSince = nNow - 10 * 60; for (CAddress& addr : vAddr) @@ -3335,7 +3311,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) uint64_t hashAddr = addr.GetHash(); uint256 hashRand = hashSalt ^ (hashAddr<<32) ^ ((GetTime()+hashAddr)/nOneDay); hashRand = Hash(BEGIN(hashRand), END(hashRand)); - multimap mapMix; + std::multimap mapMix; for (CNode* pnode : vNodes) { if (pnode->nVersion < CADDR_TIME_VERSION) @@ -3344,10 +3320,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) memcpy(&nPointer, &pnode, sizeof(nPointer)); uint256 hashKey = hashRand ^ nPointer; hashKey = Hash(BEGIN(hashKey), END(hashKey)); - mapMix.insert(make_pair(hashKey, pnode)); + mapMix.insert(std::make_pair(hashKey, pnode)); } int nRelayNodes = fReachable ? 2 : 1; // limited relaying of addresses outside our network(s) - for (multimap::iterator mi = mapMix.begin(); mi != mapMix.end() && nRelayNodes-- > 0; ++mi) + for (auto mi = mapMix.begin(); mi != mapMix.end() && nRelayNodes-- > 0; ++mi) ((*mi).second)->PushAddress(addr); } } @@ -3364,7 +3340,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "inv") { - vector vInv; + std::vector vInv; vRecv >> vInv; if (vInv.size() > MAX_INV_SZ) { @@ -3414,7 +3390,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "getdata") { - vector vInv; + std::vector vInv; vRecv >> vInv; if (vInv.size() > MAX_INV_SZ) { @@ -3435,7 +3411,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) if (inv.type == MSG_BLOCK) { // Send block from disk - map::iterator mi = mapBlockIndex.find(inv.hash); + auto mi = mapBlockIndex.find(inv.hash); if (mi != mapBlockIndex.end()) { CBlock block; @@ -3448,7 +3424,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // ppcoin: send latest proof-of-work block to allow the // download node to accept as orphan (proof-of-stake // block might be rejected by stake connection check) - vector vInv; + std::vector vInv; vInv.push_back(CInv(MSG_BLOCK, GetLastBlockIndex(pindexBest, false)->GetBlockHash())); pfrom->PushMessage("inv", vInv); pfrom->hashContinue = 0; @@ -3461,7 +3437,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) bool pushed = false; { LOCK(cs_mapRelay); - map::iterator mi = mapRelay.find(inv); + auto mi = mapRelay.find(inv); if (mi != mapRelay.end()) { pfrom->PushMessage(inv.GetCommand(), (*mi).second); pushed = true; @@ -3546,7 +3522,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) if (locator.IsNull()) { // If locator is null, return the hashStop block - map::iterator mi = mapBlockIndex.find(hashStop); + auto mi = mapBlockIndex.find(hashStop); if (mi == mapBlockIndex.end()) return true; pindex = (*mi).second; @@ -3559,7 +3535,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) pindex = pindex->pnext; } - vector vHeaders; + std::vector vHeaders; int nLimit = 2000; printf("getheaders %d to %s\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().substr(0,20).c_str()); for (; pindex; pindex = pindex->pnext) @@ -3574,8 +3550,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "tx") { - vector vWorkQueue; - vector vEraseQueue; + std::vector vWorkQueue; + std::vector vEraseQueue; CDataStream vMsg(vRecv); CTxDB txdb("r"); CTransaction tx; @@ -3597,7 +3573,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) for (unsigned int i = 0; i < vWorkQueue.size(); i++) { uint256 hashPrev = vWorkQueue[i]; - for (set::iterator mi = mapOrphanTransactionsByPrev[hashPrev].begin(); + for (auto mi = mapOrphanTransactionsByPrev[hashPrev].begin(); mi != mapOrphanTransactionsByPrev[hashPrev].end(); ++mi) { @@ -3667,7 +3643,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // Don't return addresses older than nCutOff timestamp int64_t nCutOff = GetTime() - (nNodeLifespan * nOneDay); pfrom->vAddrToSend.clear(); - vector vAddr = addrman.GetAddr(); + std::vector vAddr = addrman.GetAddr(); for (const CAddress &addr : vAddr) if(addr.nTime > nCutOff) pfrom->PushAddress(addr); @@ -3678,7 +3654,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { std::vector vtxid; mempool.queryHashes(vtxid); - vector vInv; + std::vector vInv; for (unsigned int i = 0; i < vtxid.size(); i++) { CInv inv(MSG_TX, vtxid[i]); vInv.push_back(inv); @@ -3690,53 +3666,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } - else if (strCommand == "checkorder") - { - uint256 hashReply; - vRecv >> hashReply; - - if (!GetBoolArg("-allowreceivebyip")) - { - pfrom->PushMessage("reply", hashReply, 2, string("")); - return true; - } - - CWalletTx order; - vRecv >> order; - - /// we have a chance to check the order here - - // Keep giving the same key to the same ip until they use it - if (!mapReuseKey.count(pfrom->addr)) - pwalletMain->GetKeyFromPool(mapReuseKey[pfrom->addr], true); - - // Send back approval of order and pubkey to use - CScript scriptPubKey; - scriptPubKey << mapReuseKey[pfrom->addr] << OP_CHECKSIG; - pfrom->PushMessage("reply", hashReply, 0, scriptPubKey); - } - - - else if (strCommand == "reply") - { - uint256 hashReply; - vRecv >> hashReply; - - CRequestTracker tracker; - { - LOCK(pfrom->cs_mapRequests); - map::iterator mi = pfrom->mapRequests.find(hashReply); - if (mi != pfrom->mapRequests.end()) - { - tracker = (*mi).second; - pfrom->mapRequests.erase(mi); - } - } - if (!tracker.IsNull()) - tracker.fn(tracker.param1, vRecv); - } - - else if (strCommand == "ping") { uint64_t nonce = 0; @@ -3842,7 +3771,7 @@ bool ProcessMessages(CNode* pfrom) vRecv.erase(vRecv.begin(), pstart); // Read header - vector vHeaderSave(vRecv.begin(), vRecv.begin() + nHeaderSize); + std::vector vHeaderSave(vRecv.begin(), vRecv.begin() + nHeaderSize); CMessageHeader hdr; vRecv >> hdr; if (!hdr.IsValid()) @@ -3850,7 +3779,7 @@ bool ProcessMessages(CNode* pfrom) printf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", hdr.GetCommand().c_str()); return false; } - string strCommand = hdr.GetCommand(); + std::string strCommand = hdr.GetCommand(); // Message size unsigned int nMessageSize = hdr.nMessageSize; @@ -3964,7 +3893,7 @@ bool SendMessages(CNode* pto) // if (pto->nNextAddrSend < nNow) { pto->nNextAddrSend = PoissonNextSend(nNow, 30); - vector vAddr; + std::vector vAddr; vAddr.reserve(pto->vAddrToSend.size()); for (const CAddress& addr : pto->vAddrToSend) { @@ -3987,8 +3916,8 @@ bool SendMessages(CNode* pto) // // Message: inventory // - vector vInv; - vector vInvWait; + std::vector vInv; + std::vector vInvWait; { bool fSendTrickle = false; if (pto->nNextInvSend < nNow) { @@ -4041,7 +3970,7 @@ bool SendMessages(CNode* pto) // // Message: getdata // - vector vGetData; + std::vector vGetData; CTxDB txdb("r"); while (!pto->mapAskFor.empty() && (*pto->mapAskFor.begin()).first <= nNow) {