X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.cpp;h=c36665171538c067e6c38b259b26d4b00f0879e0;hb=5b1f0a0a62474909ea2c798bbd440d2790d042c5;hp=1b435d57c10b9fcf928d0bcd9d326a550437950a;hpb=193076d3a965c11ab7c811f249ceaa9e54714920;p=novacoin.git diff --git a/src/main.cpp b/src/main.cpp index 1b435d5..c366651 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -551,13 +551,9 @@ bool CTransaction::CheckTransaction() const int64_t CTransaction::GetMinFee(unsigned int nBlockSize, bool fAllowFree, enum GetMinFee_mode mode, unsigned int nBytes) const { - // Use new fees approach if we are on test network or - // switch date has been reached - bool fNewApproach = fTestNet || nTime > FEE_SWITCH_TIME; - int64_t nMinTxFee = MIN_TX_FEE, nMinRelayTxFee = MIN_RELAY_TX_FEE; - if(!fNewApproach || IsCoinStake()) + if(IsCoinStake()) { // Enforce 0.01 as minimum fee for old approach or coinstake nMinTxFee = CENT; @@ -570,42 +566,31 @@ int64_t CTransaction::GetMinFee(unsigned int nBlockSize, bool fAllowFree, enum G unsigned int nNewBlockSize = nBlockSize + nBytes; int64_t nMinFee = (1 + (int64_t)nBytes / 1000) * nBaseFee; - if (fNewApproach) + if (fAllowFree) { - if (fAllowFree) + if (nBlockSize == 1) { - if (nBlockSize == 1) - { - // Transactions under 1K are free - if (nBytes < 1000) - nMinFee = 0; - } - else - { - // Free transaction area - if (nNewBlockSize < 27000) - nMinFee = 0; - } + // Transactions under 1K are free + if (nBytes < 1000) + nMinFee = 0; + } + else + { + // Free transaction area + if (nNewBlockSize < 27000) + nMinFee = 0; } - - // To limit dust spam, require additional MIN_TX_FEE/MIN_RELAY_TX_FEE for - // each non empty output which is less than 0.01 - // - // It's safe to ignore empty outputs here, because these inputs are allowed - // only for coinbase and coinstake transactions. - BOOST_FOREACH(const CTxOut& txout, vout) - if (txout.nValue < CENT && !txout.IsEmpty()) - nMinFee += nBaseFee; - } - else if (nMinFee < nBaseFee) - { - // To limit dust spam, require MIN_TX_FEE/MIN_RELAY_TX_FEE if - // any output is less than 0.01 - BOOST_FOREACH(const CTxOut& txout, vout) - if (txout.nValue < CENT) - nMinFee = nBaseFee; } + // To limit dust spam, require additional MIN_TX_FEE/MIN_RELAY_TX_FEE for + // each non empty output which is less than 0.01 + // + // It's safe to ignore empty outputs here, because these inputs are allowed + // only for coinbase and coinstake transactions. + BOOST_FOREACH(const CTxOut& txout, vout) + if (txout.nValue < CENT && !txout.IsEmpty()) + nMinFee += nBaseFee; + // Raise the price as the block approaches full if (nBlockSize != 1 && nNewBlockSize >= MAX_BLOCK_SIZE_GEN/2) { @@ -1278,13 +1263,14 @@ bool IsInitialBlockDownload() return true; static int64_t nLastUpdate; static CBlockIndex* pindexLastBest; + int64_t nCurrentTime = GetTime(); if (pindexBest != pindexLastBest) { pindexLastBest = pindexBest; - nLastUpdate = GetTime(); + nLastUpdate = nCurrentTime; } - return (GetTime() - nLastUpdate < 10 && - pindexBest->GetBlockTime() < GetTime() - 24 * 60 * 60); + return (nCurrentTime - nLastUpdate < 10 && + pindexBest->GetBlockTime() < nCurrentTime - 24 * 60 * 60); } void static InvalidChainFound(CBlockIndex* pindexNew) @@ -2228,7 +2214,9 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos) hashPrevBestCoinBase = vtx[0].GetHash(); } - uiInterface.NotifyBlocksChanged(); + static int8_t counter = 0; + if( (++counter & 0x0F) == 0 || !IsInitialBlockDownload()) // repaint every 16 blocks if not in initial block download + uiInterface.NotifyBlocksChanged(); return true; } @@ -2324,7 +2312,6 @@ bool CBlock::CheckBlock(bool fCheckPOW, bool fCheckMerkleRoot, bool fCheckSig) c if (fCheckMerkleRoot && hashMerkleRoot != BuildMerkleTree()) return DoS(100, error("CheckBlock() : hashMerkleRoot mismatch")); - return true; } @@ -2512,7 +2499,7 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) return error("ProcessBlock() : duplicate proof-of-stake (%s, %d) for block %s", pblock->GetProofOfStake().first.ToString().c_str(), pblock->GetProofOfStake().second, hash.ToString().c_str()); // Preliminary checks - if (!pblock->CheckBlock()) + if (!pblock->CheckBlock(true, true, (pblock->nTime > Checkpoints::GetLastCheckpointTime()))) return error("ProcessBlock() : CheckBlock FAILED"); // ppcoin: verify hash target and signature of coinstake tx