|
|
|
@ -1025,7 +1025,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
@@ -1025,7 +1025,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
|
|
|
|
hash.ToString(), nFees, txMinFee), |
|
|
|
|
REJECT_INSUFFICIENTFEE, "insufficient fee"); |
|
|
|
|
|
|
|
|
|
// Continuously rate-limit free (really, very-low-fee)transactions
|
|
|
|
|
// Continuously rate-limit free (really, very-low-fee) transactions
|
|
|
|
|
// This mitigates 'penny-flooding' -- sending thousands of free transactions just to
|
|
|
|
|
// be annoying or make others' transactions take longer to confirm.
|
|
|
|
|
if (fLimitFree && nFees < ::minRelayTxFee.GetFee(nSize)) |
|
|
|
@ -1050,7 +1050,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
@@ -1050,7 +1050,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fRejectInsaneFee && nFees > ::minRelayTxFee.GetFee(nSize) * 10000) |
|
|
|
|
return error("AcceptToMemoryPool: : insane fees %s, %d > %d", |
|
|
|
|
return error("AcceptToMemoryPool: insane fees %s, %d > %d", |
|
|
|
|
hash.ToString(), |
|
|
|
|
nFees, ::minRelayTxFee.GetFee(nSize) * 10000); |
|
|
|
|
|
|
|
|
@ -1058,7 +1058,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
@@ -1058,7 +1058,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
|
|
|
|
// This is done last to help prevent CPU exhaustion denial-of-service attacks.
|
|
|
|
|
if (!CheckInputs(tx, state, view, true, STANDARD_SCRIPT_VERIFY_FLAGS, true)) |
|
|
|
|
{ |
|
|
|
|
return error("AcceptToMemoryPool: : ConnectInputs failed %s", hash.ToString()); |
|
|
|
|
return error("AcceptToMemoryPool: ConnectInputs failed %s", hash.ToString()); |
|
|
|
|
} |
|
|
|
|
// Store transaction in memory
|
|
|
|
|
pool.addUnchecked(hash, entry); |
|
|
|
@ -2988,7 +2988,7 @@ bool InitBlockIndex() {
@@ -2988,7 +2988,7 @@ bool InitBlockIndex() {
|
|
|
|
|
return error("LoadBlockIndex() : genesis block not accepted"); |
|
|
|
|
if (!ActivateBestChain(state, &block)) |
|
|
|
|
return error("LoadBlockIndex() : genesis block cannot be activated"); |
|
|
|
|
// Force a chainstate write so that when we VerifyDB in a moment, it doesnt check stale data
|
|
|
|
|
// Force a chainstate write so that when we VerifyDB in a moment, it doesn't check stale data
|
|
|
|
|
return FlushStateToDisk(state, FLUSH_STATE_ALWAYS); |
|
|
|
|
} catch(std::runtime_error &e) { |
|
|
|
|
return error("LoadBlockIndex() : failed to initialize block database: %s", e.what()); |
|
|
|
|