X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.h;h=d42c6b4dc6874f6045757cfe118f2dd24d051312;hb=b5173fd6e5d0a2a2ea1f52540b570db035d76f3b;hp=6c4177dd4e613781d25ae4707758e55982c8a3cd;hpb=7104398524980a9fdc6d0e0d59b0dd6923e2fca5;p=novacoin.git diff --git a/src/main.h b/src/main.h index 6c4177d..d42c6b4 100644 --- a/src/main.h +++ b/src/main.h @@ -13,11 +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; @@ -43,13 +46,14 @@ 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 = std::numeric_limits::max(); +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 @@ -63,8 +67,8 @@ inline int64_t FutureDrift(int64_t nTime) { return nTime + 2 * nOneHour; } // up 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; @@ -78,12 +82,12 @@ extern unsigned int nTransactionsUpdated; extern uint64_t nLastBlockTx; extern uint64_t nLastBlockSize; extern uint32_t nLastCoinStakeSearchInterval; -extern const std::string strMessageMagic; +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; @@ -114,7 +118,7 @@ void PrintBlockTree(); CBlockIndex* FindBlockByHeight(int nHeight); bool ProcessMessages(CNode* pfrom); bool SendMessages(CNode* pto); -bool LoadExternalBlockFile(FILE* fileIn); +bool LoadExternalBlockFile(FILE* fileIn, CClientUIInterface& uiInterface); // Run an instance of the script checking thread void ThreadScriptCheck(void* parg); @@ -129,7 +133,7 @@ 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); @@ -143,7 +147,7 @@ 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 @@ -166,8 +170,8 @@ public: } IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) - void SetNull() { nFile = std::numeric_limits::max(); nBlockPos = 0; nTxPos = 0; } - bool IsNull() const { return (nFile == std::numeric_limits::max()); } + 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) { @@ -182,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 @@ -207,8 +211,8 @@ public: CInPoint() { SetNull(); } CInPoint(CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; } - void SetNull() { ptx = NULL; n = std::numeric_limits::max(); } - bool IsNull() const { return (ptx == NULL && n == std::numeric_limits::max()); } + void SetNull() { ptx = NULL; n = numeric_limits::max(); } + bool IsNull() const { return (ptx == NULL && n == numeric_limits::max()); } }; @@ -223,8 +227,8 @@ public: COutPoint() { SetNull(); } COutPoint(uint256 hashIn, unsigned int nIn) { hash = hashIn; n = nIn; } IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) - void SetNull() { hash = 0; n = std::numeric_limits::max(); } - bool IsNull() const { return (hash == 0 && n == std::numeric_limits::max()); } + 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) { @@ -241,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 @@ -268,17 +272,17 @@ public: 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; @@ -294,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) @@ -309,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; } @@ -402,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,7 +435,7 @@ enum GetMinFee_mode 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. @@ -442,8 +446,8 @@ public: static const int CURRENT_VERSION=1; int nVersion; uint32_t nTime; - std::vector vin; - std::vector vout; + vector vin; + vector vout; uint32_t nLockTime; // Denial-of-service detection: @@ -511,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) @@ -545,10 +549,10 @@ public: /** Check for standard transaction types @return True if all outputs (scriptPubKeys) use only standard transaction forms */ - bool IsStandard(std::string& strReason) const; + bool IsStandard(string& strReason) const; bool IsStandard() const { - std::string strReason; + string strReason; return IsStandard(strReason); } @@ -578,14 +582,14 @@ public: */ int64_t GetValueOut() const { - int64_t nValueOut = 0; - for(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 @@ -620,7 +624,7 @@ public: try { filein >> *this; } - catch (const std::exception&) { + catch (const exception&) { return error("%s() : deserialize or I/O error", BOOST_CURRENT_FUNCTION); } @@ -648,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(), @@ -694,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, @@ -711,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); @@ -729,10 +733,10 @@ class CScriptCheck { private: CScript scriptPubKey; - const CTransaction *ptxTo; - unsigned int nIn; - unsigned int nFlags; - int nHashType; + const CTransaction *ptxTo = nullptr; + unsigned int nIn = 0; + unsigned int nFlags = 0; + int nHashType = 0; public: CScriptCheck() {} @@ -759,7 +763,7 @@ class CMerkleTx : public CTransaction { public: uint256 hashBlock; - std::vector vMerkleBranch; + vector vMerkleBranch; int32_t nIndex; // memory only @@ -814,7 +818,7 @@ class CTxIndex { public: CDiskTxPos pos; - std::vector vSpent; + vector vSpent; CTxIndex() { @@ -884,13 +888,13 @@ public: 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; @@ -962,9 +966,9 @@ public: if (nHeight >= 9689 || fTestNet) { // Take last bit of block hash as entropy bit - unsigned int nEntropyBit = (GetHash().Get64()) & (uint64_t)1; + 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; } @@ -972,9 +976,9 @@ public: int nBitNum = nHeight & 0xFF; int nItemNum = nHeight / 0xFF; - unsigned int nEntropyBit = (unsigned int) ((entropyStore[nItemNum] & (uint256(1) << nBitNum)) >> nBitNum).Get64(); + auto nEntropyBit = ((entropyStore[nItemNum] & (uint256(1) << nBitNum)) >> nBitNum).Get32(); if (fDebug && GetBoolArg("-printstakemodifier")) - printf("GetStakeEntropyBit: from pregenerated table, nHeight=%d nEntropyBit=%u\n", nHeight, nEntropyBit); + printf("GetStakeEntropyBit: from pregenerated table, nHeight=%" PRIu32 " nEntropyBit=%" PRIu32 "\n", nHeight, nEntropyBit); return nEntropyBit; } @@ -989,17 +993,19 @@ 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; - for(const auto& tx : vtx) - maxTransactionTime = std::max(maxTransactionTime, (int64_t)tx.nTime); + for(const auto& tx : vtx) + maxTransactionTime = max(maxTransactionTime, (int64_t)tx.nTime); return maxTransactionTime; } @@ -1013,24 +1019,24 @@ public: { 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 = (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 +1044,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; 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; @@ -1063,7 +1069,7 @@ public: // Write index header unsigned int nSize = fileout.GetSerializeSize(*this); - fileout << FLATDATA(pchMessageStart) << nSize; + fileout << nNetworkID << nSize; // Write block long fileOutPos = ftell(fileout); @@ -1095,7 +1101,7 @@ public: try { filein >> *this; } - catch (const std::exception&) { + catch (const exception&) { return error("%s() : deserialize or I/O error", BOOST_CURRENT_FUNCTION); } @@ -1110,7 +1116,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(), @@ -1299,7 +1305,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]; } @@ -1363,7 +1369,7 @@ 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)", (const void*)pprev, (const void*)pnext, nFile, nBlockPos, nHeight, @@ -1445,7 +1451,7 @@ public: uint256 GetBlockHash() const { - if (fUseFastIndex && (nTime < GetAdjustedTime() - nOneDay) && blockHash != 0) + if (fUseFastIndex && blockHash != 0) return blockHash; CBlock block; @@ -1461,9 +1467,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(), @@ -1492,7 +1498,7 @@ public: class CBlockLocator { protected: - std::vector vHave; + vector vHave; public: CBlockLocator() @@ -1506,12 +1512,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; } @@ -1555,12 +1561,12 @@ public: // Retrace how far back it was in the sender's branch int nDistance = 0; int nStep = 1; - for(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; } @@ -1574,12 +1580,12 @@ public: CBlockIndex* GetBlockIndex() { // Find the first block the caller has in the main chain - for(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; } @@ -1592,10 +1598,10 @@ public: // Find the first block the caller has in the main chain 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; } @@ -1623,15 +1629,15 @@ 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); size_t size() { @@ -1639,12 +1645,12 @@ public: 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]; }