X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.h;h=2247fa68939baa7d579760f0765a773eba25e4b9;hb=33cfabf1043a43e0beada02f731b80c8975655a8;hp=574bddda0a1047483cb48e21e35a358c12e13ded;hpb=77a43545b4491b9703d803765da9059d2bdd5aaa;p=novacoin.git diff --git a/src/main.h b/src/main.h index 574bddd..2247fa6 100644 --- a/src/main.h +++ b/src/main.h @@ -13,10 +13,14 @@ #include "net.h" #include "script.h" #include "scrypt.h" +#include "ui_interface.h" +#include #include #include +using namespace std; + class CWallet; class CBlock; class CBlockIndex; @@ -42,33 +46,29 @@ static const unsigned int MAX_INV_SZ = 50000; static const int64_t MIN_TX_FEE = CENT/10; static const int64_t MIN_RELAY_TX_FEE = CENT/50; -static const int64_t MAX_MONEY = 2000000000 * COIN; +static const int64_t MAX_MONEY = numeric_limits::max(); static const int64_t MAX_MINT_PROOF_OF_WORK = 100 * COIN; static const int64_t MAX_MINT_PROOF_OF_STAKE = 1 * COIN; static const int64_t MIN_TXOUT_AMOUNT = CENT/100; + inline bool MoneyRange(int64_t nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } +inline bool MoneyRange(CBigNum nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } // Threshold for nLockTime: below this value it is interpreted as block number, otherwise as UNIX timestamp. static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC // Maximum number of script-checking threads allowed static const int MAX_SCRIPTCHECK_THREADS = 16; -#ifdef USE_UPNP -static const int fHaveUPnP = true; -#else -static const int fHaveUPnP = false; -#endif - static const uint256 hashGenesisBlock("0x00000a060336cbb72fe969666d337b87198b1add2abaa59cca226820b32933a4"); static const uint256 hashGenesisBlockTestNet("0x000c763e402f2436da9ed36c7286f62c3f6e5dbafce9ff289bd43d7459327eb"); -inline int64_t PastDrift(int64_t nTime) { return nTime - 2 * 60 * 60; } // up to 2 hours from the past -inline int64_t FutureDrift(int64_t nTime) { return nTime + 2 * 60 * 60; } // up to 2 hours from the future +inline int64_t PastDrift(int64_t nTime) { return nTime - 2 * nOneHour; } // up to 2 hours from the past +inline int64_t FutureDrift(int64_t nTime) { return nTime + 2 * nOneHour; } // up to 2 hours from the future extern CScript COINBASE_FLAGS; extern CCriticalSection cs_main; -extern std::map mapBlockIndex; -extern std::set > setStakeSeen; +extern map mapBlockIndex; +extern set > setStakeSeen; extern CBlockIndex* pindexGenesisBlock; extern unsigned int nNodeLifespan; extern unsigned int nStakeMinAge; @@ -81,20 +81,20 @@ extern CBlockIndex* pindexBest; extern unsigned int nTransactionsUpdated; extern uint64_t nLastBlockTx; extern uint64_t nLastBlockSize; -extern int64_t nLastCoinStakeSearchInterval; -extern const std::string strMessageMagic; +extern uint32_t nLastCoinStakeSearchInterval; +extern const string strMessageMagic; extern int64_t nTimeBestReceived; extern CCriticalSection cs_setpwalletRegistered; -extern std::set setpwalletRegistered; -extern unsigned char pchMessageStart[4]; -extern std::map mapOrphanBlocks; +extern set setpwalletRegistered; +extern uint32_t nNetworkID; +extern map mapOrphanBlocks; // Settings extern int64_t nTransactionFee; extern int64_t nMinimumInputValue; extern bool fUseFastIndex; -extern unsigned int nDerivationMethodIndex; extern int nScriptCheckThreads; +extern const uint256 entropyStore[38]; // Minimum disk space required - used in CheckDiskSpace() static const uint64_t nMinDiskSpace = 52428800; @@ -111,12 +111,14 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock); bool CheckDiskSpace(uint64_t nAdditionalBytes=0); FILE* OpenBlockFile(unsigned int nFile, unsigned int nBlockPos, const char* pszMode="rb"); FILE* AppendBlockFile(unsigned int& nFileRet); + +void UnloadBlockIndex(); bool LoadBlockIndex(bool fAllowNew=true); void PrintBlockTree(); CBlockIndex* FindBlockByHeight(int nHeight); bool ProcessMessages(CNode* pfrom); -bool SendMessages(CNode* pto, bool fSendTrickle); -bool LoadExternalBlockFile(FILE* fileIn); +bool SendMessages(CNode* pto); +bool LoadExternalBlockFile(FILE* fileIn, CClientUIInterface& uiInterface); // Run an instance of the script checking thread void ThreadScriptCheck(void* parg); @@ -126,19 +128,18 @@ void ThreadScriptCheckQuit(); bool CheckProofOfWork(uint256 hash, unsigned int nBits); unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfStake); int64_t GetProofOfWorkReward(unsigned int nBits, int64_t nFees=0); -int64_t GetProofOfStakeReward(int64_t nCoinAge, unsigned int nBits, unsigned int nTime, bool bCoinYearOnly=false); +int64_t GetProofOfStakeReward(int64_t nCoinAge, unsigned int nBits, int64_t nTime, bool bCoinYearOnly=false); unsigned int ComputeMinWork(unsigned int nBase, int64_t nTime); unsigned int ComputeMinStake(unsigned int nBase, int64_t nTime, unsigned int nBlockTime); int GetNumBlocksOfPeers(); bool IsInitialBlockDownload(); -std::string GetWarnings(std::string strFor); +string GetWarnings(string strFor); bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock); uint256 WantedByOrphan(const CBlock* pblockOrphan); const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfStake); -void StakeMiner(CWallet *pwallet); -void ResendWalletTransactions(); +void ResendWalletTransactions(bool fForceResend=false); -bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsigned int nIn, unsigned int flags, int nHashType); +bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, uint32_t nIn, unsigned int flags, int nHashType); @@ -146,15 +147,15 @@ bool VerifySignature(const CTransaction& txFrom, const CTransaction& txTo, unsig -bool GetWalletFile(CWallet* pwallet, std::string &strWalletFileOut); +bool GetWalletFile(CWallet* pwallet, string &strWalletFileOut); /** Position on disk for a particular transaction. */ class CDiskTxPos { public: - unsigned int nFile; - unsigned int nBlockPos; - unsigned int nTxPos; + uint32_t nFile; + uint32_t nBlockPos; + uint32_t nTxPos; CDiskTxPos() { @@ -169,8 +170,8 @@ public: } IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) - void SetNull() { nFile = (unsigned int) -1; nBlockPos = 0; nTxPos = 0; } - bool IsNull() const { return (nFile == (unsigned int) -1); } + void SetNull() { nFile = numeric_limits::max(); nBlockPos = 0; nTxPos = 0; } + bool IsNull() const { return (nFile == numeric_limits::max()); } friend bool operator==(const CDiskTxPos& a, const CDiskTxPos& b) { @@ -185,12 +186,12 @@ public: } - std::string ToString() const + string ToString() const { if (IsNull()) return "null"; else - return strprintf("(nFile=%u, nBlockPos=%u, nTxPos=%u)", nFile, nBlockPos, nTxPos); + return strprintf("(nFile=%" PRIu32 ", nBlockPos=%" PRIu32 ", nTxPos=%" PRIu32 ")", nFile, nBlockPos, nTxPos); } void print() const @@ -206,12 +207,12 @@ class CInPoint { public: CTransaction* ptx; - unsigned int n; + uint32_t n; CInPoint() { SetNull(); } - CInPoint(CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; } - void SetNull() { ptx = NULL; n = (unsigned int) -1; } - bool IsNull() const { return (ptx == NULL && n == (unsigned int) -1); } + CInPoint(CTransaction* ptxIn, uint32_t nIn) { ptx = ptxIn; n = nIn; } + void SetNull() { ptx = NULL; n = numeric_limits::max(); } + bool IsNull() const { return (ptx == NULL && n == numeric_limits::max()); } }; @@ -221,13 +222,13 @@ class COutPoint { public: uint256 hash; - unsigned int n; + uint32_t n; COutPoint() { SetNull(); } - COutPoint(uint256 hashIn, unsigned int nIn) { hash = hashIn; n = nIn; } + COutPoint(uint256 hashIn, uint32_t nIn) { hash = hashIn; n = nIn; } IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) - void SetNull() { hash = 0; n = (unsigned int) -1; } - bool IsNull() const { return (hash == 0 && n == (unsigned int) -1); } + void SetNull() { hash = 0; n = numeric_limits::max(); } + bool IsNull() const { return (hash == 0 && n == numeric_limits::max()); } friend bool operator<(const COutPoint& a, const COutPoint& b) { @@ -244,9 +245,9 @@ public: return !(a == b); } - std::string ToString() const + string ToString() const { - return strprintf("COutPoint(%s, %u)", hash.ToString().substr(0,10).c_str(), n); + return strprintf("COutPoint(%s, %" PRIu32 ")", hash.ToString().substr(0,10).c_str(), n); } void print() const @@ -267,21 +268,21 @@ class CTxIn public: COutPoint prevout; CScript scriptSig; - unsigned int nSequence; + uint32_t nSequence; CTxIn() { - nSequence = std::numeric_limits::max(); + nSequence = numeric_limits::max(); } - explicit CTxIn(COutPoint prevoutIn, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits::max()) + explicit CTxIn(COutPoint prevoutIn, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=numeric_limits::max()) { prevout = prevoutIn; scriptSig = scriptSigIn; nSequence = nSequenceIn; } - CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits::max()) + CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=numeric_limits::max()) { prevout = COutPoint(hashPrevTx, nOut); scriptSig = scriptSigIn; @@ -297,7 +298,7 @@ public: bool IsFinal() const { - return (nSequence == std::numeric_limits::max()); + return (nSequence == numeric_limits::max()); } friend bool operator==(const CTxIn& a, const CTxIn& b) @@ -312,22 +313,22 @@ public: return !(a == b); } - std::string ToStringShort() const + string ToStringShort() const { return strprintf(" %s %d", prevout.hash.ToString().c_str(), prevout.n); } - std::string ToString() const + string ToString() const { - std::string str; + string str; str += "CTxIn("; str += prevout.ToString(); if (prevout.IsNull()) str += strprintf(", coinbase %s", HexStr(scriptSig).c_str()); else str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24).c_str()); - if (nSequence != std::numeric_limits::max()) - str += strprintf(", nSequence=%u", nSequence); + if (nSequence != numeric_limits::max()) + str += strprintf(", nSequence=%" PRIu32, nSequence); str += ")"; return str; } @@ -405,12 +406,12 @@ public: return !(a == b); } - std::string ToStringShort() const + string ToStringShort() const { return strprintf(" out %s %s", FormatMoney(nValue).c_str(), scriptPubKey.ToString(true).c_str()); } - std::string ToString() const + string ToString() const { if (IsEmpty()) return "CTxOut(empty)"; if (scriptPubKey.size() < 6) @@ -431,10 +432,10 @@ enum GetMinFee_mode { GMF_BLOCK, GMF_RELAY, - GMF_SEND, + GMF_SEND }; -typedef std::map > MapPrevTx; +typedef map > MapPrevTx; /** The basic transaction that is broadcasted on the network and contained in * blocks. A transaction can contain multiple inputs and outputs. @@ -444,10 +445,10 @@ class CTransaction public: static const int CURRENT_VERSION=1; int nVersion; - unsigned int nTime; - std::vector vin; - std::vector vout; - unsigned int nLockTime; + uint32_t nTime; + vector vin; + vector vout; + uint32_t nLockTime; // Denial-of-service detection: mutable int nDoS; @@ -471,7 +472,7 @@ public: void SetNull() { nVersion = CTransaction::CURRENT_VERSION; - nTime = GetAdjustedTime(); + nTime = (uint32_t) GetAdjustedTime(); vin.clear(); vout.clear(); nLockTime = 0; @@ -499,7 +500,7 @@ public: nBlockTime = GetAdjustedTime(); if ((int64_t)nLockTime < ((int64_t)nLockTime < LOCKTIME_THRESHOLD ? (int64_t)nBlockHeight : nBlockTime)) return true; - BOOST_FOREACH(const CTxIn& txin, vin) + for(const CTxIn& txin : vin) if (!txin.IsFinal()) return false; return true; @@ -514,7 +515,7 @@ public: return false; bool fNewer = false; - unsigned int nLowest = std::numeric_limits::max(); + unsigned int nLowest = numeric_limits::max(); for (unsigned int i = 0; i < vin.size(); i++) { if (vin[i].nSequence != old.vin[i].nSequence) @@ -548,7 +549,12 @@ public: /** Check for standard transaction types @return True if all outputs (scriptPubKeys) use only standard transaction forms */ - bool IsStandard() const; + bool IsStandard(string& strReason) const; + bool IsStandard() const + { + string strReason; + return IsStandard(strReason); + } /** Check for standard transaction types @param[in] mapInputs Map of previous transactions that have outputs we're spending @@ -576,14 +582,14 @@ public: */ int64_t GetValueOut() const { - int64_t nValueOut = 0; - BOOST_FOREACH(const CTxOut& txout, vout) + CBigNum nValueOut = 0; + for(const auto& txout : vout) { nValueOut += txout.nValue; if (!MoneyRange(txout.nValue) || !MoneyRange(nValueOut)) - throw std::runtime_error("CTransaction::GetValueOut() : value out of range"); + throw runtime_error("CTransaction::GetValueOut() : value out of range"); } - return nValueOut; + return nValueOut.getint64(); } /** Amount of bitcoins coming in to this transaction @@ -607,7 +613,7 @@ public: bool ReadFromDisk(CDiskTxPos pos, FILE** pfileRet=NULL) { - CAutoFile filein = CAutoFile(OpenBlockFile(pos.nFile, 0, pfileRet ? "rb+" : "rb"), SER_DISK, CLIENT_VERSION); + auto filein = CAutoFile(OpenBlockFile(pos.nFile, 0, pfileRet ? "rb+" : "rb"), SER_DISK, CLIENT_VERSION); if (!filein) return error("CTransaction::ReadFromDisk() : OpenBlockFile failed"); @@ -618,7 +624,7 @@ public: try { filein >> *this; } - catch (std::exception &e) { + catch (const exception&) { return error("%s() : deserialize or I/O error", BOOST_CURRENT_FUNCTION); } @@ -646,16 +652,16 @@ public: return !(a == b); } - std::string ToStringShort() const + string ToStringShort() const { - std::string str; + string str; str += strprintf("%s %s", GetHash().ToString().c_str(), IsCoinBase()? "base" : (IsCoinStake()? "stake" : "user")); return str; } - std::string ToString() const + string ToString() const { - std::string str; + string str; str += IsCoinBase()? "Coinbase" : (IsCoinStake()? "Coinstake" : "CTransaction"); str += strprintf("(hash=%s, nTime=%d, ver=%d, vin.size=%" PRIszu ", vout.size=%" PRIszu ", nLockTime=%d)\n", GetHash().ToString().substr(0,10).c_str(), @@ -692,7 +698,7 @@ public: @param[out] fInvalid returns true if transaction is invalid @return Returns true if all inputs are in txdb or mapTestPool */ - bool FetchInputs(CTxDB& txdb, const std::map& mapTestPool, + bool FetchInputs(CTxDB& txdb, const map& mapTestPool, bool fBlock, bool fMiner, MapPrevTx& inputsRet, bool& fInvalid); /** Sanity check previous transactions, then, if all checks succeed, @@ -709,9 +715,9 @@ public: @param[in] pvChecks NULL If pvChecks is not NULL, script checks are pushed onto it instead of being performed inline. @return Returns true if all checks succeed */ - bool ConnectInputs(CTxDB& txdb, MapPrevTx inputs, std::map& mapTestPool, const CDiskTxPos& posThisTx, const CBlockIndex* pindexBlock, + bool ConnectInputs(CTxDB& txdb, MapPrevTx inputs, map& mapTestPool, const CDiskTxPos& posThisTx, const CBlockIndex* pindexBlock, bool fBlock, bool fMiner, bool fScriptChecks=true, - unsigned int flags=STRICT_FLAGS, std::vector *pvChecks = NULL); + unsigned int flags=STRICT_FLAGS, vector *pvChecks = NULL); bool ClientConnectInputs(); bool CheckTransaction() const; bool AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs=true, bool* pfMissingInputs=NULL); @@ -721,34 +727,6 @@ protected: const CTxOut& GetOutputFor(const CTxIn& input, const MapPrevTx& inputs) const; }; -/** Closure representing one script verification - * Note that this stores references to the spending transaction */ -class CScriptCheck -{ -private: - CScript scriptPubKey; - const CTransaction *ptxTo; - unsigned int nIn; - unsigned int nFlags; - int nHashType; - -public: - CScriptCheck() {} - CScriptCheck(const CTransaction& txFromIn, const CTransaction& txToIn, unsigned int nInIn, unsigned int nFlagsIn, int nHashTypeIn) : - scriptPubKey(txFromIn.vout[txToIn.vin[nInIn].prevout.n].scriptPubKey), - ptxTo(&txToIn), nIn(nInIn), nFlags(nFlagsIn), nHashType(nHashTypeIn) { } - - bool operator()() const; - - void swap(CScriptCheck &check) { - scriptPubKey.swap(check.scriptPubKey); - std::swap(ptxTo, check.ptxTo); - std::swap(nIn, check.nIn); - std::swap(nFlags, check.nFlags); - std::swap(nHashType, check.nHashType); - } -}; - @@ -757,8 +735,8 @@ class CMerkleTx : public CTransaction { public: uint256 hashBlock; - std::vector vMerkleBranch; - int nIndex; + vector vMerkleBranch; + int32_t nIndex; // memory only mutable bool fMerkleVerified; @@ -812,7 +790,7 @@ class CTxIndex { public: CDiskTxPos pos; - std::vector vSpent; + vector vSpent; CTxIndex() { @@ -859,9 +837,6 @@ public: }; - - - /** Nodes collect new transactions into a block, hash them into a hash tree, * and scan through nonce values to make the block's hash satisfy proof-of-work * requirements. When they solve the proof-of-work, they broadcast the block @@ -877,21 +852,21 @@ class CBlock public: // header static const int CURRENT_VERSION=6; - int nVersion; + int32_t nVersion; uint256 hashPrevBlock; uint256 hashMerkleRoot; - unsigned int nTime; - unsigned int nBits; - unsigned int nNonce; + uint32_t nTime; + uint32_t nBits; + uint32_t nNonce; // network and disk - std::vector vtx; + vector vtx; // ppcoin: block signature - signed by one of the coin base txout[N]'s owner - std::vector vchBlockSig; + vector vchBlockSig; // memory only - mutable std::vector vMerkleTree; + mutable vector vMerkleTree; // Denial-of-service detection: mutable int nDoS; @@ -946,7 +921,7 @@ public: uint256 GetHash() const { - return scrypt_blockhash(CVOIDBEGIN(nVersion)); + return scrypt_blockhash((const uint8_t*)&nVersion); } int64_t GetBlockTime() const @@ -957,25 +932,26 @@ public: void UpdateTime(const CBlockIndex* pindexPrev); // ppcoin: entropy bit for stake modifier if chosen by modifier - unsigned int GetStakeEntropyBit(unsigned int nTime) const + unsigned int GetStakeEntropyBit(unsigned int nHeight) const { // Protocol switch to support p2pool at novacoin block #9689 - if (nTime >= ENTROPY_SWITCH_TIME || fTestNet) + if (nHeight >= 9689 || fTestNet) { // Take last bit of block hash as entropy bit - unsigned int nEntropyBit = ((GetHash().Get64()) & 1ULL); + auto nEntropyBit = (GetHash().Get32()) & (uint32_t)1; if (fDebug && GetBoolArg("-printstakemodifier")) - printf("GetStakeEntropyBit: nTime=%u hashBlock=%s nEntropyBit=%u\n", nTime, GetHash().ToString().c_str(), nEntropyBit); + printf("GetStakeEntropyBit: nTime=%" PRIu32 " hashBlock=%s nEntropyBit=%" PRIu32 "\n", nTime, GetHash().ToString().c_str(), nEntropyBit); return nEntropyBit; } - // Before novacoin block #9689 - old protocol - uint160 hashSig = Hash160(vchBlockSig); - if (fDebug && GetBoolArg("-printstakemodifier")) - printf("GetStakeEntropyBit: hashSig=%s", hashSig.ToString().c_str()); - hashSig >>= 159; // take the first bit of the hash + + // Before novacoin block #9689 - get from pregenerated table + int nBitNum = nHeight & 0xFF; + int nItemNum = nHeight / 0xFF; + + auto nEntropyBit = ((entropyStore[nItemNum] & (uint256(1) << nBitNum)) >> nBitNum).Get32(); if (fDebug && GetBoolArg("-printstakemodifier")) - printf(" entropybit=%" PRId64 "\n", hashSig.Get64()); - return hashSig.Get64(); + printf("GetStakeEntropyBit: from pregenerated table, nHeight=%" PRIu32 " nEntropyBit=%" PRIu32 "\n", nHeight, nEntropyBit); + return nEntropyBit; } // ppcoin: two types of block: proof-of-work or proof-of-stake @@ -989,48 +965,50 @@ public: return !IsProofOfStake(); } - std::pair GetProofOfStake() const + pair GetProofOfStake() const { - return IsProofOfStake()? std::make_pair(vtx[1].vin[0].prevout, vtx[1].nTime) : std::make_pair(COutPoint(), (unsigned int)0); + if (IsProofOfStake()) + return { vtx[1].vin[0].prevout, vtx[1].nTime }; + return { COutPoint(), (unsigned int)0 }; } // ppcoin: get max transaction timestamp int64_t GetMaxTransactionTime() const { int64_t maxTransactionTime = 0; - BOOST_FOREACH(const CTransaction& tx, vtx) - maxTransactionTime = std::max(maxTransactionTime, (int64_t)tx.nTime); + for(const auto& tx : vtx) + maxTransactionTime = max(maxTransactionTime, (int64_t)tx.nTime); return maxTransactionTime; } uint256 BuildMerkleTree() const { vMerkleTree.clear(); - BOOST_FOREACH(const CTransaction& tx, vtx) + for(const auto& tx : vtx) vMerkleTree.push_back(tx.GetHash()); int j = 0; - for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2) + for (int nSize = (int)vtx.size(); nSize > 1; nSize = (nSize + 1) / 2) { for (int i = 0; i < nSize; i += 2) { - int i2 = std::min(i+1, nSize-1); - vMerkleTree.push_back(Hash(BEGIN(vMerkleTree[j+i]), END(vMerkleTree[j+i]), - BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2]))); + int i2 = min(i+1, nSize-1); + vMerkleTree.push_back(Hash(vMerkleTree[j+i].begin(), vMerkleTree[j+i].end(), + vMerkleTree[j+i2].begin(), vMerkleTree[j+i2].end())); } j += nSize; } return (vMerkleTree.empty() ? 0 : vMerkleTree.back()); } - std::vector GetMerkleBranch(int nIndex) const + vector GetMerkleBranch(int nIndex) const { if (vMerkleTree.empty()) BuildMerkleTree(); - std::vector vMerkleBranch; + vector vMerkleBranch; int j = 0; - for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2) + for (int nSize = (int)vtx.size(); nSize > 1; nSize = (nSize + 1) / 2) { - int i = std::min(nIndex^1, nSize-1); + int i = min(nIndex^1, nSize-1); vMerkleBranch.push_back(vMerkleTree[j+i]); nIndex >>= 1; j += nSize; @@ -1038,16 +1016,16 @@ public: return vMerkleBranch; } - static uint256 CheckMerkleBranch(uint256 hash, const std::vector& vMerkleBranch, int nIndex) + static uint256 CheckMerkleBranch(uint256 hash, const vector& vMerkleBranch, int nIndex) { if (nIndex == -1) return 0; - BOOST_FOREACH(const uint256& otherside, vMerkleBranch) + for(const uint256& otherside : vMerkleBranch) { if (nIndex & 1) - hash = Hash(BEGIN(otherside), END(otherside), BEGIN(hash), END(hash)); + hash = Hash(otherside.begin(), otherside.end(), hash.begin(), hash.end()); else - hash = Hash(BEGIN(hash), END(hash), BEGIN(otherside), END(otherside)); + hash = Hash(hash.begin(), hash.end(), otherside.begin(), otherside.end()); nIndex >>= 1; } return hash; @@ -1057,13 +1035,13 @@ public: bool WriteToDisk(unsigned int& nFileRet, unsigned int& nBlockPosRet) { // Open history file to append - CAutoFile fileout = CAutoFile(AppendBlockFile(nFileRet), SER_DISK, CLIENT_VERSION); + auto fileout = CAutoFile(AppendBlockFile(nFileRet), SER_DISK, CLIENT_VERSION); if (!fileout) return error("CBlock::WriteToDisk() : AppendBlockFile failed"); // Write index header unsigned int nSize = fileout.GetSerializeSize(*this); - fileout << FLATDATA(pchMessageStart) << nSize; + fileout << nNetworkID << nSize; // Write block long fileOutPos = ftell(fileout); @@ -1085,7 +1063,7 @@ public: SetNull(); // Open history file to read - CAutoFile filein = CAutoFile(OpenBlockFile(nFile, nBlockPos, "rb"), SER_DISK, CLIENT_VERSION); + auto filein = CAutoFile(OpenBlockFile(nFile, nBlockPos, "rb"), SER_DISK, CLIENT_VERSION); if (!filein) return error("CBlock::ReadFromDisk() : OpenBlockFile failed"); if (!fReadTransactions) @@ -1095,7 +1073,7 @@ public: try { filein >> *this; } - catch (std::exception &e) { + catch (const exception&) { return error("%s() : deserialize or I/O error", BOOST_CURRENT_FUNCTION); } @@ -1110,7 +1088,7 @@ public: void print() const { - printf("CBlock(hash=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%" PRIszu ", vchBlockSig=%s)\n", + printf("CBlock(hash=%s, ver=%" PRId32 ", hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%" PRIu32 ", nBits=%08x, nNonce=%" PRIu32 ", vtx=%" PRIszu ", vchBlockSig=%s)\n", GetHash().ToString().c_str(), nVersion, hashPrevBlock.ToString().c_str(), @@ -1138,8 +1116,7 @@ public: bool CheckBlock(bool fCheckPOW=true, bool fCheckMerkleRoot=true, bool fCheckSig=true) const; bool AcceptBlock(); bool GetCoinAge(uint64_t& nCoinAge) const; // ppcoin: calculate total coin age spent in block - bool SignBlock(CWallet& keystore); - bool CheckBlockSignature(bool fProofOfStake) const; + bool CheckBlockSignature() const; private: bool SetBestChainInner(CTxDB& txdb, CBlockIndex *pindexNew); @@ -1163,36 +1140,36 @@ public: const uint256* phashBlock; CBlockIndex* pprev; CBlockIndex* pnext; - unsigned int nFile; - unsigned int nBlockPos; + uint32_t nFile; + uint32_t nBlockPos; uint256 nChainTrust; // ppcoin: trust score of block chain - int nHeight; + int32_t nHeight; int64_t nMint; int64_t nMoneySupply; - unsigned int nFlags; // ppcoin: block index flags + uint32_t nFlags; // ppcoin: block index flags enum { BLOCK_PROOF_OF_STAKE = (1 << 0), // is proof-of-stake block BLOCK_STAKE_ENTROPY = (1 << 1), // entropy bit for stake modifier - BLOCK_STAKE_MODIFIER = (1 << 2), // regenerated stake modifier + BLOCK_STAKE_MODIFIER = (1 << 2) // regenerated stake modifier }; uint64_t nStakeModifier; // hash modifier for proof-of-stake - unsigned int nStakeModifierChecksum; // checksum of index; in-memeory only + uint32_t nStakeModifierChecksum; // checksum of index; in-memeory only // proof-of-stake specific fields COutPoint prevoutStake; - unsigned int nStakeTime; + uint32_t nStakeTime; uint256 hashProofOfStake; // block header - int nVersion; - uint256 hashMerkleRoot; - unsigned int nTime; - unsigned int nBits; - unsigned int nNonce; + int32_t nVersion; + uint256 hashMerkleRoot; + uint32_t nTime; + uint32_t nBits; + uint32_t nNonce; CBlockIndex() { @@ -1300,7 +1277,7 @@ public: for (int i = 0; i < nMedianTimeSpan && pindex; i++, pindex = pindex->pprev) *(--pbegin) = pindex->GetBlockTime(); - std::sort(pbegin, pend); + sort(pbegin, pend); return pbegin[(pend - pbegin)/2]; } @@ -1354,7 +1331,7 @@ public: bool GeneratedStakeModifier() const { - return (nFlags & BLOCK_STAKE_MODIFIER); + return (nFlags & BLOCK_STAKE_MODIFIER) != 0; } void SetStakeModifier(uint64_t nModifier, bool fGeneratedStakeModifier) @@ -1364,13 +1341,13 @@ public: nFlags |= BLOCK_STAKE_MODIFIER; } - std::string ToString() const + string ToString() const { return strprintf("CBlockIndex(nprev=%p, pnext=%p, nFile=%u, nBlockPos=%-6d nHeight=%d, nMint=%s, nMoneySupply=%s, nFlags=(%s)(%d)(%s), nStakeModifier=%016" PRIx64 ", nStakeModifierChecksum=%08x, hashProofOfStake=%s, prevoutStake=(%s), nStakeTime=%d merkle=%s, hashBlock=%s)", - pprev, pnext, nFile, nBlockPos, nHeight, + (const void*)pprev, (const void*)pnext, nFile, nBlockPos, nHeight, FormatMoney(nMint).c_str(), FormatMoney(nMoneySupply).c_str(), GeneratedStakeModifier() ? "MOD" : "-", GetStakeEntropyBit(), IsProofOfStake()? "PoS" : "PoW", - nStakeModifier, nStakeModifierChecksum, + nStakeModifier, nStakeModifierChecksum, hashProofOfStake.ToString().c_str(), prevoutStake.ToString().c_str(), nStakeTime, hashMerkleRoot.ToString().c_str(), @@ -1446,7 +1423,7 @@ public: uint256 GetBlockHash() const { - if (fUseFastIndex && (nTime < GetAdjustedTime() - 24 * 60 * 60) && blockHash != 0) + if (fUseFastIndex && blockHash != 0) return blockHash; CBlock block; @@ -1462,9 +1439,9 @@ public: return blockHash; } - std::string ToString() const + string ToString() const { - std::string str = "CDiskBlockIndex("; + string str = "CDiskBlockIndex("; str += CBlockIndex::ToString(); str += strprintf("\n hashBlock=%s, hashPrev=%s, hashNext=%s)", GetBlockHash().ToString().c_str(), @@ -1493,7 +1470,7 @@ public: class CBlockLocator { protected: - std::vector vHave; + vector vHave; public: CBlockLocator() @@ -1507,12 +1484,12 @@ public: explicit CBlockLocator(uint256 hashBlock) { - std::map::iterator mi = mapBlockIndex.find(hashBlock); + auto mi = mapBlockIndex.find(hashBlock); if (mi != mapBlockIndex.end()) Set((*mi).second); } - CBlockLocator(const std::vector& vHaveIn) + CBlockLocator(const vector& vHaveIn) { vHave = vHaveIn; } @@ -1556,12 +1533,12 @@ public: // Retrace how far back it was in the sender's branch int nDistance = 0; int nStep = 1; - BOOST_FOREACH(const uint256& hash, vHave) + for(const auto& hash : vHave) { - std::map::iterator mi = mapBlockIndex.find(hash); + auto mi = mapBlockIndex.find(hash); if (mi != mapBlockIndex.end()) { - CBlockIndex* pindex = (*mi).second; + auto pindex = (*mi).second; if (pindex->IsInMainChain()) return nDistance; } @@ -1575,12 +1552,12 @@ public: CBlockIndex* GetBlockIndex() { // Find the first block the caller has in the main chain - BOOST_FOREACH(const uint256& hash, vHave) + for(const auto& hash : vHave) { - std::map::iterator mi = mapBlockIndex.find(hash); + auto mi = mapBlockIndex.find(hash); if (mi != mapBlockIndex.end()) { - CBlockIndex* pindex = (*mi).second; + auto pindex = (*mi).second; if (pindex->IsInMainChain()) return pindex; } @@ -1591,12 +1568,12 @@ public: uint256 GetBlockHash() { // Find the first block the caller has in the main chain - BOOST_FOREACH(const uint256& hash, vHave) + for(const uint256& hash : vHave) { - std::map::iterator mi = mapBlockIndex.find(hash); + auto mi = mapBlockIndex.find(hash); if (mi != mapBlockIndex.end()) { - CBlockIndex* pindex = (*mi).second; + auto pindex = (*mi).second; if (pindex->IsInMainChain()) return hash; } @@ -1624,28 +1601,28 @@ class CTxMemPool { public: mutable CCriticalSection cs; - std::map mapTx; - std::map mapNextTx; + map mapTx; + map mapNextTx; bool accept(CTxDB& txdb, CTransaction &tx, bool fCheckInputs, bool* pfMissingInputs); bool addUnchecked(const uint256& hash, CTransaction &tx); bool remove(CTransaction &tx); void clear(); - void queryHashes(std::vector& vtxid); + void queryHashes(vector& vtxid); - unsigned long size() + size_t size() { LOCK(cs); return mapTx.size(); } - bool exists(uint256 hash) + bool exists(const uint256 &hash) { return (mapTx.count(hash) != 0); } - CTransaction& lookup(uint256 hash) + CTransaction& lookup(const uint256 &hash) { return mapTx[hash]; }