X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.h;h=b553d6c54b4d26ec4ab8015c4eb9ac5d59a1c029;hb=532b9005ab4fc02db3db424b4631fe395e0b9071;hp=574bddda0a1047483cb48e21e35a358c12e13ded;hpb=77a43545b4491b9703d803765da9059d2bdd5aaa;p=novacoin.git diff --git a/src/main.h b/src/main.h index 574bddd..b553d6c 100644 --- a/src/main.h +++ b/src/main.h @@ -81,7 +81,7 @@ extern CBlockIndex* pindexBest; extern unsigned int nTransactionsUpdated; extern uint64_t nLastBlockTx; extern uint64_t nLastBlockSize; -extern int64_t nLastCoinStakeSearchInterval; +extern uint32_t nLastCoinStakeSearchInterval; extern const std::string strMessageMagic; extern int64_t nTimeBestReceived; extern CCriticalSection cs_setpwalletRegistered; @@ -93,8 +93,8 @@ extern std::map mapOrphanBlocks; 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; @@ -126,7 +126,7 @@ 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(); @@ -152,9 +152,9 @@ bool GetWalletFile(CWallet* pwallet, std::string &strWalletFileOut); class CDiskTxPos { public: - unsigned int nFile; - unsigned int nBlockPos; - unsigned int nTxPos; + uint32_t nFile; + uint32_t nBlockPos; + uint32_t nTxPos; CDiskTxPos() { @@ -206,7 +206,7 @@ class CInPoint { public: CTransaction* ptx; - unsigned int n; + uint32_t n; CInPoint() { SetNull(); } CInPoint(CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; } @@ -221,7 +221,7 @@ class COutPoint { public: uint256 hash; - unsigned int n; + uint32_t n; COutPoint() { SetNull(); } COutPoint(uint256 hashIn, unsigned int nIn) { hash = hashIn; n = nIn; } @@ -267,7 +267,7 @@ class CTxIn public: COutPoint prevout; CScript scriptSig; - unsigned int nSequence; + uint32_t nSequence; CTxIn() { @@ -444,10 +444,10 @@ class CTransaction public: static const int CURRENT_VERSION=1; int nVersion; - unsigned int nTime; + uint32_t nTime; std::vector vin; std::vector vout; - unsigned int nLockTime; + uint32_t nLockTime; // Denial-of-service detection: mutable int nDoS; @@ -471,7 +471,7 @@ public: void SetNull() { nVersion = CTransaction::CURRENT_VERSION; - nTime = GetAdjustedTime(); + nTime = (uint32_t) GetAdjustedTime(); vin.clear(); vout.clear(); nLockTime = 0; @@ -548,7 +548,12 @@ public: /** Check for standard transaction types @return True if all outputs (scriptPubKeys) use only standard transaction forms */ - bool IsStandard() const; + bool IsStandard(std::string& strReason) const; + bool IsStandard() const + { + std::string strReason; + return IsStandard(strReason); + } /** Check for standard transaction types @param[in] mapInputs Map of previous transactions that have outputs we're spending @@ -619,6 +624,7 @@ public: filein >> *this; } catch (std::exception &e) { + (void)e; return error("%s() : deserialize or I/O error", BOOST_CURRENT_FUNCTION); } @@ -758,7 +764,7 @@ class CMerkleTx : public CTransaction public: uint256 hashBlock; std::vector vMerkleBranch; - int nIndex; + int32_t nIndex; // memory only mutable bool fMerkleVerified; @@ -859,9 +865,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,12 +880,12 @@ 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; @@ -946,7 +949,7 @@ public: uint256 GetHash() const { - return scrypt_blockhash(CVOIDBEGIN(nVersion)); + return scrypt_blockhash((const uint8_t*)&nVersion); } int64_t GetBlockTime() const @@ -957,10 +960,10 @@ 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); @@ -968,14 +971,15 @@ public: printf("GetStakeEntropyBit: nTime=%u hashBlock=%s nEntropyBit=%u\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; + + unsigned int nEntropyBit = (unsigned int) ((entropyStore[nItemNum] & (uint256(1) << nBitNum)) >> nBitNum).Get64(); if (fDebug && GetBoolArg("-printstakemodifier")) - printf(" entropybit=%" PRId64 "\n", hashSig.Get64()); - return hashSig.Get64(); + printf("GetStakeEntropyBit: from pregenerated table, nHeight=%d nEntropyBit=%u\n", nHeight, nEntropyBit); + return nEntropyBit; } // ppcoin: two types of block: proof-of-work or proof-of-stake @@ -1009,7 +1013,7 @@ public: BOOST_FOREACH(const CTransaction& 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) { @@ -1028,7 +1032,7 @@ public: BuildMerkleTree(); std::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); vMerkleBranch.push_back(vMerkleTree[j+i]); @@ -1096,6 +1100,7 @@ public: filein >> *this; } catch (std::exception &e) { + (void)e; return error("%s() : deserialize or I/O error", BOOST_CURRENT_FUNCTION); } @@ -1139,7 +1144,7 @@ public: 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,15 +1168,15 @@ 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 @@ -1180,19 +1185,19 @@ public: }; 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() { @@ -1354,7 +1359,7 @@ public: bool GeneratedStakeModifier() const { - return (nFlags & BLOCK_STAKE_MODIFIER); + return (nFlags & BLOCK_STAKE_MODIFIER) != 0; } void SetStakeModifier(uint64_t nModifier, bool fGeneratedStakeModifier) @@ -1634,7 +1639,7 @@ public: void clear(); void queryHashes(std::vector& vtxid); - unsigned long size() + size_t size() { LOCK(cs); return mapTx.size();