set<pair<COutPoint, unsigned int> > setStakeSeen;
uint256 hashGenesisBlock = hashGenesisBlockOfficial;
static CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);
+static CBigNum bnInitialHashTarget(~uint256(0) >> 36);
CBlockIndex* pindexGenesisBlock = NULL;
int nBestHeight = -1;
uint64 nBestChainTrust = 0;
if (fDebug && GetBoolArg("-printcreation"))
printf("GetProofOfWorkReward() : create=%s nBits=0x%08x nSubsidy=%"PRI64d"\n", FormatMoney(nSubsidy).c_str(), nBits, nSubsidy);
- return nSubsidy;
+ return min(nSubsidy, MAX_MINT_PROOF_OF_WORK);
}
// ppcoin: miner's coin stake is rewarded based on coin age spent (coin-days)
unsigned int static GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfStake)
{
- // Genesis block and first block
- if (pindexLast == NULL || pindexLast->pprev == NULL)
- return bnProofOfWorkLimit.GetCompact();
+ if (pindexLast == NULL)
+ return bnProofOfWorkLimit.GetCompact(); // genesis block
const CBlockIndex* pindexPrev = GetLastBlockIndex(pindexLast, fProofOfStake);
- if (pindexPrev == NULL)
- return bnProofOfWorkLimit.GetCompact();
+ if (pindexPrev->pprev == NULL)
+ return bnInitialHashTarget.GetCompact(); // first block
const CBlockIndex* pindexPrevPrev = GetLastBlockIndex(pindexPrev->pprev, fProofOfStake);
- if (pindexPrevPrev == NULL)
- return bnProofOfWorkLimit.GetCompact();
+ if (pindexPrevPrev->pprev == NULL)
+ return bnInitialHashTarget.GetCompact(); // second block
+
int64 nActualSpacing = pindexPrev->GetBlockTime() - pindexPrevPrev->GetBlockTime();
// ppcoin: target change every block