updated to Dogecoin 1.6 protocol

(cherry picked from commit d6dbaf412e2331426d5012d1c10b7749b6821b82)
This commit is contained in:
Jannis Froese 2014-03-22 07:33:44 +01:00
parent 9a32384a1e
commit c5eb32a85b
2 changed files with 34 additions and 4 deletions

View file

@ -1184,9 +1184,12 @@ int64_t GetBlockValue(int nHeight, int64_t nFees, uint256 prevHash)
}
static const int64_t nTargetTimespan = 4 * 60 * 60; // DogeCoin: every 4 hours
static const int64_t nTargetTimespanNEW = 60 ; // DogeCoin: every 1 minute
static const int64_t nTargetSpacing = 60; // DogeCoin: 1 minute
static const int64_t nInterval = nTargetTimespan / nTargetSpacing;
static const int64_t nDiffChangeTarget = 145000; // Patch effective @ block 145000
//
// minimum amount of work that could possibly be required nTime after
// minimum work required was nBase
@ -1217,6 +1220,18 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
{
unsigned int nProofOfWorkLimit = Params().ProofOfWorkLimit().GetCompact();
int nHeight = pindexLast->nHeight + 1;
bool fNewDifficultyProtocol = (nHeight >= nDiffChangeTarget);
int64_t retargetTimespan = nTargetTimespan;
int64_t retargetSpacing = nTargetSpacing;
int64_t retargetInterval = nInterval;
if (fNewDifficultyProtocol) {
retargetInterval = nTargetTimespanNEW / nTargetSpacing;
retargetTimespan = nTargetTimespanNEW;
}
// Genesis block
if (pindexLast == NULL)
return nProofOfWorkLimit;
@ -1257,15 +1272,23 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
// Limit adjustment step
int64_t nActualTimespan = pindexLast->GetBlockTime() - pindexFirst->GetBlockTime();
//printf(" nActualTimespan = %"PRI64d" before bounds\n", nActualTimespan);
if(pindexLast->nHeight+1 > 10000)
LogPrintf(" nActualTimespan = %d before bounds\n", nActualTimespan);
if (fNewDifficultyProtocol) //DigiShield implementation - thanks to RealSolid & WDC for this code
{
// amplitude filter - thanks to daft27 for this code
nActualTimespan = retargetTimespan + (nActualTimespan - retargetTimespan)/8;
printf("DIGISHIELD RETARGET\n");
if (nActualTimespan < (retargetTimespan - (retargetTimespan/4)) ) nActualTimespan = (retargetTimespan - (retargetTimespan/4));
if (nActualTimespan > (retargetTimespan + (retargetTimespan/2)) ) nActualTimespan = (retargetTimespan + (retargetTimespan/2));
}
else if (pindexLast->nHeight+1 > 10000) {
if (nActualTimespan < nTargetTimespan/4)
nActualTimespan = nTargetTimespan/4;
if (nActualTimespan > nTargetTimespan*4)
nActualTimespan = nTargetTimespan*4;
}
else if(pindexLast->nHeight+1 > 5000)
else if (pindexLast->nHeight+1 > 5000)
{
if (nActualTimespan < nTargetTimespan/8)
nActualTimespan = nTargetTimespan/8;
@ -1549,7 +1572,10 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCach
// If prev is coinbase, check that it's matured
if (coins.IsCoinBase()) {
if (nSpendHeight - coins.nHeight < COINBASE_MATURITY)
int minDepth = COINBASE_MATURITY;
if(coins.nHeight >= COINBASE_MATURITY_SWITCH)
minDepth = COINBASE_MATURITY_NEW;
if (nSpendHeight - coins.nHeight < minDepth)
return state.Invalid(
error("CheckInputs() : tried to spend coinbase at depth %d", nSpendHeight - coins.nHeight),
REJECT_INVALID, "bad-txns-premature-spend-of-coinbase");

View file

@ -61,6 +61,10 @@ static const int64_t DUST_SOFT_LIMIT = 100000000;
static const int64_t DUST_HARD_LIMIT = 1000000;
/** Coinbase transaction outputs can only be spent after this number of new blocks (network rule) */
static const int COINBASE_MATURITY = 30;
/** Coinbase maturity after block 145000 **/
static const int COINBASE_MATURITY_NEW = 60*4;
/** Block at which COINBASE_MATURITY_NEW comes into effect **/
static const int COINBASE_MATURITY_SWITCH = 145000;
/** Threshold for nLockTime: below this value it is interpreted as block number, otherwise as UNIX timestamp. */
static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC
/** Maximum number of script-checking threads allowed */