X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.cpp;h=38b3ac5f839a3ad79e5896cf97afe566cb048080;hb=377ff13ab1aa46e67f75d58a4adf597350455045;hp=970dd7e8d705eb6a22c9d831a08c790ec6a9e16f;hpb=3bdc0abd5d7e262151c62426cb3006433fb21ffc;p=novacoin.git diff --git a/src/main.cpp b/src/main.cpp index 970dd7e..38b3ac5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -181,10 +181,10 @@ void static Inventory(const uint256& hash) } // ask wallets to resend their transactions -void ResendWalletTransactions() +void ResendWalletTransactions(bool fForceResend) { BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->ResendWalletTransactions(); + pwallet->ResendWalletTransactions(fForceResend); } @@ -510,10 +510,6 @@ bool CTransaction::CheckTransaction() const return DoS(10, error("CTransaction::CheckTransaction() : vin empty")); if (vout.empty()) return DoS(10, error("CTransaction::CheckTransaction() : vout empty")); - // Time (prevent mempool memory exhaustion attack) - // Comes into force since 20 December 2015. - if (nTime > 1450569600 && nTime > FutureDrift(GetAdjustedTime())) - return DoS(10, error("CTransaction::CheckTransaction() : timestamp is too far into the future")); // Size limits if (::GetSerializeSize(*this, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE) return DoS(100, error("CTransaction::CheckTransaction() : size limits failed")); @@ -622,6 +618,10 @@ bool CTxMemPool::accept(CTxDB& txdb, CTransaction &tx, bool fCheckInputs, if (pfMissingInputs) *pfMissingInputs = false; + // Time (prevent mempool memory exhaustion attack) + if (tx.nTime > FutureDrift(GetAdjustedTime())) + return tx.DoS(10, error("CTxMemPool::accept() : transaction timestamp is too far in the future")); + if (!tx.CheckTransaction()) return error("CTxMemPool::accept() : CheckTransaction failed"); @@ -1838,11 +1838,11 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) while (pfork != plonger) { while (plonger->nHeight > pfork->nHeight) - if (!(plonger = plonger->pprev)) + if ((plonger = plonger->pprev) == NULL) return error("Reorganize() : plonger->pprev is null"); if (pfork == plonger) break; - if (!(pfork = pfork->pprev)) + if ((pfork = pfork->pprev) == NULL) return error("Reorganize() : pfork->pprev is null"); } @@ -2348,8 +2348,8 @@ bool CBlock::AcceptBlock() int64_t nMedianTimePast = pindexPrev->GetMedianTimePast(); int nMaxOffset = 12 * nOneHour; // 12 hours - if (pindexPrev->nTime < 1450569600) - nMaxOffset = nOneWeek; // One week until 20 Dec, 2015 + if (fTestNet || pindexPrev->nTime < 1450569600) + nMaxOffset = 7 * nOneWeek; // One week (permanently on testNet or until 20 Dec, 2015 on mainNet) // Check timestamp against prev if (GetBlockTime() <= nMedianTimePast || FutureDrift(GetBlockTime()) < pindexPrev->GetBlockTime()) @@ -2528,6 +2528,13 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) if (mapOrphanBlocks.count(hash)) return error("ProcessBlock() : already have block (orphan) %s", hash.ToString().substr(0,20).c_str()); + // Check that block isn't listed as unconditionally banned. + if (!Checkpoints::CheckBanned(hash)) { + if (pfrom) + pfrom->Misbehaving(100); + return error("ProcessBlock() : block %s is rejected by hard-coded banlist", hash.GetHex().substr(0,20).c_str()); + } + // Check proof-of-stake // Limited duplicity on stake: prevents block flood attack // Duplicate stake allowed only when there is orphan child block @@ -2716,7 +2723,7 @@ static unsigned int nCurrentBlockFile = 1; FILE* AppendBlockFile(unsigned int& nFileRet) { nFileRet = 0; - while (true) + for ( ; ; ) { FILE* file = OpenBlockFile(nCurrentBlockFile, 0, "ab"); if (!file) @@ -3801,7 +3808,7 @@ bool ProcessMessages(CNode* pfrom) // (x) data // - while (true) + for ( ; ; ) { // Don't bother if send buffer is too full to respond anyway if (pfrom->vSend.size() >= SendBufferSize())