// Settings
int64 nTransactionFee = MIN_TX_FEE;
-bool fStakeUsePooledKeys = false;
+int64 nMinimumInputValue = MIN_TX_FEE;
+
extern enum Checkpoints::CPMode CheckpointsMode;
//////////////////////////////////////////////////////////////////////////////
return DoS(100, error("CTransaction::CheckTransaction() : txout empty for user transaction"));
// NovaCoin: enforce minimum output amount for user transactions
- // (and for all transactions until 20 Sep 2013)
- if ((!IsCoinBase() || nTime < CHAINCHECKS_SWITCH_TIME)
- && (!txout.IsEmpty()) && txout.nValue < MIN_TXOUT_AMOUNT)
+ if (!IsCoinBase() && !txout.IsEmpty() && txout.nValue < MIN_TXOUT_AMOUNT)
return DoS(100, error("CTransaction::CheckTransaction() : txout.nValue below minimum"));
if (txout.nValue > MAX_MONEY)
}
int64 CTransaction::GetMinFee(unsigned int nBlockSize, bool fAllowFree,
- enum GetMinFee_mode mode) const
+ enum GetMinFee_mode mode, unsigned int nBytes) const
{
// Base fee is either MIN_TX_FEE or MIN_RELAY_TX_FEE
int64 nBaseFee = (mode == GMF_RELAY) ? MIN_RELAY_TX_FEE : MIN_TX_FEE;
- unsigned int nBytes = ::GetSerializeSize(*this, SER_NETWORK, PROTOCOL_VERSION);
unsigned int nNewBlockSize = nBlockSize + nBytes;
int64 nMinFee = (1 + (int64)nBytes / 1000) * nBaseFee;
unsigned int nSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
// Don't accept it if it can't get into a block
- int64 txMinFee = tx.GetMinFee(1000, false, GMF_RELAY);
+ int64 txMinFee = tx.GetMinFee(1000, false, GMF_RELAY, nSize);
if (nFees < txMinFee)
return error("CTxMemPool::accept() : not enough fees %s, %"PRI64d" < %"PRI64d,
hash.ToString().c_str(),
if(bCoinYearOnly)
return nRewardCoinYear;
- // Fix problem with proof-of-stake rewards calculation since 20 Sep 2013
- if(nTime < CHAINCHECKS_SWITCH_TIME)
- nSubsidy = nCoinAge * 33 / (365 * 33 + 8) * nRewardCoinYear;
- else
- nSubsidy = nCoinAge * nRewardCoinYear * 33 / (365 * 33 + 8);
+ nSubsidy = nCoinAge * nRewardCoinYear * 33 / (365 * 33 + 8);
// Set reasonable reward limit for large inputs since 20 Oct 2013
//
}
else
{
- // Coinbase fee paid until 20 Sep 2013
- int64 nFee = GetBlockTime() < CHAINCHECKS_SWITCH_TIME ? vtx[0].GetMinFee() - MIN_TX_FEE : 0;
-
+ int64 nReward = GetProofOfWorkReward(nBits);
// Check coinbase reward
- if (vtx[0].GetValueOut() > (GetProofOfWorkReward(nBits) - nFee))
+ if (vtx[0].GetValueOut() > nReward)
return DoS(50, error("CheckBlock() : coinbase reward exceeded (actual=%"PRI64d" vs calculated=%"PRI64d")",
vtx[0].GetValueOut(),
- GetProofOfWorkReward(nBits) - nFee));
+ nReward));
// Should we check proof-of-work block signature or not?
//
if(!fTestNet && fCheckSig)
{
- bool isAfterCheckpoint = (GetBlockTime() > Checkpoints::GetLastCheckpointTime());
bool checkEntropySig = (GetBlockTime() < ENTROPY_SWITCH_TIME);
- bool checkPoWSig = (isAfterCheckpoint && GetBlockTime() < CHAINCHECKS_SWITCH_TIME);
// NovaCoin: check proof-of-work block signature
- if ((checkEntropySig || checkPoWSig) && !CheckBlockSignature(false))
+ if (checkEntropySig && !CheckBlockSignature(false))
return DoS(100, error("CheckBlock() : bad proof-of-work block signature"));
}
}
if (bnTarget <= 0)
return 0;
- /* Old protocol, will be removed later */
+ /* Old protocol */
if (!fTestNet && GetBlockTime() < CHAINCHECKS_SWITCH_TIME)
return (IsProofOfStake()? ((CBigNum(1)<<256) / (bnTarget+1)).getuint256() : 1);