X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.h;h=c7f518af0976f7089f3bb7618d3d9e34177c1b8a;hb=85016efc6ded9a0b4467625a4fab047a5a4f299b;hp=b1d136f33a7002dc1c7b82e5fd25a2c3e38ba428;hpb=0561bbd1c69263dceb24ffacf850788e6e961a13;p=novacoin.git diff --git a/src/main.h b/src/main.h index b1d136f..c7f518a 100644 --- a/src/main.h +++ b/src/main.h @@ -32,11 +32,13 @@ static const unsigned int MAX_BLOCK_SIZE = 1000000; static const unsigned int MAX_BLOCK_SIZE_GEN = MAX_BLOCK_SIZE/2; static const unsigned int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE/50; static const unsigned int MAX_ORPHAN_TRANSACTIONS = MAX_BLOCK_SIZE/100; -static const int64 MIN_TX_FEE = 10000; -static const int64 MIN_RELAY_TX_FEE = 10000; +static const int64 MIN_TX_FEE = CENT; +static const int64 MIN_RELAY_TX_FEE = CENT; static const int64 MAX_MONEY = 2000000000 * COIN; +static const int64 MAX_MINT_PROOF_OF_WORK = 9999 * COIN; +static const int64 MIN_TXOUT_AMOUNT = MIN_TX_FEE; inline bool MoneyRange(int64 nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } -static const int COINBASE_MATURITY = 100; +static const int COINBASE_MATURITY = 500; // Threshold for nLockTime: below this value it is interpreted as block number, otherwise as UNIX timestamp. static const int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC #ifdef USE_UPNP @@ -45,8 +47,8 @@ static const int fHaveUPnP = true; static const int fHaveUPnP = false; #endif -static const uint256 hashGenesisBlockOfficial("0x000000007c82d1f0aa2896b01bf533a8cc26a1f44790be4ceb4ecde7bee24add"); -static const uint256 hashGenesisBlockTestNet("0x00000007199508e34a9ff81e6ec0c477a4cccff2a4767a8eee39c11db367b008"); +static const uint256 hashGenesisBlockOfficial("0x0000000032fe677166d54963b62a4677d8957e87c508eaa4fd7eb1c880cd27e3"); +static const uint256 hashGenesisBlockTestNet("0x00000001f757bb737f6596503e17cd17b0658ce630cc727c0cca81aec47c9f06"); extern CScript COINBASE_FLAGS; @@ -61,8 +63,8 @@ extern std::set > setStakeSeen; extern uint256 hashGenesisBlock; extern CBlockIndex* pindexGenesisBlock; extern int nBestHeight; -extern uint64 nBestChainTrust; -extern uint64 nBestInvalidTrust; +extern CBigNum bnBestChainTrust; +extern CBigNum bnBestInvalidTrust; extern uint256 hashBestChain; extern CBlockIndex* pindexBest; extern unsigned int nTransactionsUpdated; @@ -78,7 +80,6 @@ extern std::map mapOrphanBlocks; // Settings extern int64 nTransactionFee; -extern int64 nBalanceReserve; @@ -99,19 +100,20 @@ void PrintBlockTree(); bool ProcessMessages(CNode* pfrom); bool SendMessages(CNode* pto, bool fSendTrickle); void GenerateBitcoins(bool fGenerate, CWallet* pwallet); -CBlock* CreateNewBlock(CWallet* pwallet, bool fProofOfWorkOnly=false); +CBlock* CreateNewBlock(CWallet* pwallet, bool fProofOfStake=false); void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce); void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash1); bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey); bool CheckProofOfWork(uint256 hash, unsigned int nBits); +int64 GetProofOfWorkReward(unsigned int nBits); int64 GetProofOfStakeReward(int64 nCoinAge); unsigned int ComputeMinWork(unsigned int nBase, int64 nTime); int GetNumBlocksOfPeers(); bool IsInitialBlockDownload(); std::string GetWarnings(std::string strFor); -bool Reorganize(CTxDB& txdb, CBlockIndex* pindexNew); uint256 WantedByOrphan(const CBlock* pblockOrphan); const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfStake); +void BitcoinMiner(CWallet *pwallet, bool fProofOfStake); @@ -501,13 +503,13 @@ public: bool IsCoinBase() const { - return (vin.size() == 1 && vin[0].prevout.IsNull() && vout.size() == 1); + return (vin.size() == 1 && vin[0].prevout.IsNull() && vout.size() >= 1); } bool IsCoinStake() const { // ppcoin: the coin stake transaction is marked with the first output empty - return (vin.size() > 0 && vout.size() == 2 && vout[0].IsEmpty()); + return (vin.size() > 0 && (!vin[0].prevout.IsNull()) && vout.size() >= 2 && vout[0].IsEmpty()); } /** Check for standard transaction types @@ -1125,8 +1127,10 @@ public: CBlockIndex* pnext; unsigned int nFile; unsigned int nBlockPos; - uint64 nChainTrust;// ppcoin: trust score of chain, in the unit of coin-days + CBigNum bnChainTrust; // ppcoin: trust score of block chain int nHeight; + int64 nMint; + int64 nMoneySupply; bool fProofOfStake; // ppcoin: is the block of proof-of-stake type COutPoint prevoutStake; unsigned int nStakeTime; @@ -1147,7 +1151,9 @@ public: nFile = 0; nBlockPos = 0; nHeight = 0; - nChainTrust = 0; + bnChainTrust = 0; + nMint = 0; + nMoneySupply = 0; fProofOfStake = true; prevoutStake.SetNull(); nStakeTime = 0; @@ -1167,7 +1173,9 @@ public: nFile = nFileIn; nBlockPos = nBlockPosIn; nHeight = 0; - nChainTrust = 0; + bnChainTrust = 0; + nMint = 0; + nMoneySupply = 0; fProofOfStake = block.IsProofOfStake(); if (fProofOfStake) { @@ -1210,9 +1218,13 @@ public: return (int64)nTime; } - int64 GetBlockTrust() const + CBigNum GetBlockTrust() const { - return (nChainTrust - (pprev? pprev->nChainTrust : 0)); + CBigNum bnTarget; + bnTarget.SetCompact(nBits); + if (bnTarget <= 0) + return 0; + return (fProofOfStake? (CBigNum(1)<<256) / (bnTarget+1) : 1); } bool IsInMainChain() const @@ -1280,8 +1292,9 @@ public: std::string ToString() const { - return strprintf("CBlockIndex(nprev=%08x, pnext=%08x, nFile=%d, nBlockPos=%-6d nChainTrust=%"PRI64d" nHeight=%d, fProofOfStake=%d prevoutStake=(%s), nStakeTime=%d merkle=%s, hashBlock=%s)", - pprev, pnext, nFile, nBlockPos, nChainTrust, nHeight, + return strprintf("CBlockIndex(nprev=%08x, pnext=%08x, nFile=%d, nBlockPos=%-6d nHeight=%d, nMint=%s, nMoneySupply=%s, fProofOfStake=%d prevoutStake=(%s), nStakeTime=%d merkle=%s, hashBlock=%s)", + pprev, pnext, nFile, nBlockPos, nHeight, + FormatMoney(nMint).c_str(), FormatMoney(nMoneySupply).c_str(), fProofOfStake, prevoutStake.ToString().c_str(), nStakeTime, hashMerkleRoot.ToString().substr(0,10).c_str(), GetBlockHash().ToString().substr(0,20).c_str()); @@ -1322,8 +1335,9 @@ public: READWRITE(hashNext); READWRITE(nFile); READWRITE(nBlockPos); - READWRITE(nChainTrust); READWRITE(nHeight); + READWRITE(nMint); + READWRITE(nMoneySupply); READWRITE(fProofOfStake); if (fProofOfStake) { @@ -1703,7 +1717,7 @@ public: bool CheckSignature() { CKey key; - if (!key.SetPubKey(ParseHex("0487ca85b6ae9d311f996c7616d20d0c88a5b4f07d25e78f419019f35cce6522acf978b2d99f0e7a58db1f120439e5c1889266927854aa57c93956c2569188a539"))) + if (!key.SetPubKey(ParseHex("04a0a849dd49b113d3179a332dd77715c43be4d0076e2f19e66de23dd707e56630f792f298dfd209bf042bb3561f4af6983f3d81e439737ab0bf7f898fecd21aab"))) return error("CAlert::CheckSignature() : SetPubKey failed"); if (!key.Verify(Hash(vchMsg.begin(), vchMsg.end()), vchSig)) return error("CAlert::CheckSignature() : verify signature failed");