29
src/pow.cpp
29
src/pow.cpp
@@ -74,17 +74,25 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
|
|||||||
// Find the first block in the averaging interval
|
// Find the first block in the averaging interval
|
||||||
const CBlockIndex* pindexFirst = pindexLast;
|
const CBlockIndex* pindexFirst = pindexLast;
|
||||||
arith_uint256 bnTarget,bnTot {0};
|
arith_uint256 bnTarget,bnTot {0};
|
||||||
uint32_t nbits; int64_t diff,mult = pblock->nTime - pindexFirst->nTime - 7 * ASSETCHAINS_BLOCKTIME;
|
uint32_t nbits; int32_t diff,mult = 0;
|
||||||
|
if ( pindexFirst != 0 && pblock != 0 )
|
||||||
|
{
|
||||||
|
mult = pblock->nTime - pindexFirst->nTime - 7 * ASSETCHAINS_BLOCKTIME;
|
||||||
|
fprintf(stderr,"ht.%d mult.%d = (%u - %u - 7x)\n",pindexLast->GetHeight(),(int32_t)mult,pblock->nTime, pindexFirst->nTime);
|
||||||
|
}
|
||||||
for (int i = 0; pindexFirst && i < params.nPowAveragingWindow; i++)
|
for (int i = 0; pindexFirst && i < params.nPowAveragingWindow; i++)
|
||||||
{
|
{
|
||||||
arith_uint256 bnTmp;
|
arith_uint256 bnTmp;
|
||||||
bnTmp.SetCompact(pindexFirst->nBits);
|
bnTmp.SetCompact(pindexFirst->nBits);
|
||||||
bnTot += bnTmp;
|
bnTot += bnTmp;
|
||||||
if ( ASSETCHAINS_ADAPTIVEPOW > 0 && i < 12 )
|
if ( ASSETCHAINS_ADAPTIVEPOW > 0 && i < 12 && pblock != 0 )
|
||||||
{
|
{
|
||||||
diff = pblock->nTime - pindexFirst->nTime - (8+i)*ASSETCHAINS_BLOCKTIME;
|
diff = pblock->nTime - pindexFirst->nTime - (8+i)*ASSETCHAINS_BLOCKTIME;
|
||||||
if ( diff > mult )
|
if ( diff > mult )
|
||||||
|
{
|
||||||
|
fprintf(stderr,"i.%d diff.%d (%u - %u - %dx)\n",i,(int32_t)diff,pblock->nTime,pindexFirst->nTime,(8+i));
|
||||||
mult = diff;
|
mult = diff;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pindexFirst = pindexFirst->pprev;
|
pindexFirst = pindexFirst->pprev;
|
||||||
}
|
}
|
||||||
@@ -95,13 +103,16 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
|
|||||||
|
|
||||||
bool fNegative,fOverflow; arith_uint256 easy,origtarget,bnAvg {bnTot / params.nPowAveragingWindow};
|
bool fNegative,fOverflow; arith_uint256 easy,origtarget,bnAvg {bnTot / params.nPowAveragingWindow};
|
||||||
nbits = CalculateNextWorkRequired(bnAvg, pindexLast->GetMedianTimePast(), pindexFirst->GetMedianTimePast(), params);
|
nbits = CalculateNextWorkRequired(bnAvg, pindexLast->GetMedianTimePast(), pindexFirst->GetMedianTimePast(), params);
|
||||||
if ( ASSETCHAINS_ADAPTIVEPOW > 0 && mult > 1 )
|
if ( ASSETCHAINS_ADAPTIVEPOW > 0 && mult > 1 ) // jl777: this test of mult > 1 failed when it was int64_t???
|
||||||
{
|
{
|
||||||
origtarget = bnTarget = arith_uint256().SetCompact(nbits);
|
origtarget = bnTarget = arith_uint256().SetCompact(nbits);
|
||||||
bnTarget = bnTarget * arith_uint256(mult * mult);
|
bnTarget = bnTarget * arith_uint256(mult * mult);
|
||||||
easy.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow);
|
easy.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow);
|
||||||
if ( bnTarget < origtarget || bnTarget > easy )
|
if ( bnTarget < origtarget || bnTarget > easy )
|
||||||
|
{
|
||||||
bnTarget = easy;
|
bnTarget = easy;
|
||||||
|
fprintf(stderr,"cmp.%d mult.%d ht.%d -> easy target\n",mult>1,(int32_t)mult,(int32_t)pindexLast->GetHeight());
|
||||||
|
} else fprintf(stderr,"cmp.%d mult.%d for ht.%d\n",mult>1,(int32_t)mult,(int32_t)pindexLast->GetHeight());
|
||||||
nbits = bnTarget.GetCompact();
|
nbits = bnTarget.GetCompact();
|
||||||
}
|
}
|
||||||
return(nbits);
|
return(nbits);
|
||||||
@@ -118,11 +129,13 @@ unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg,
|
|||||||
nActualTimespan = params.AveragingWindowTimespan() + (nActualTimespan - params.AveragingWindowTimespan())/4;
|
nActualTimespan = params.AveragingWindowTimespan() + (nActualTimespan - params.AveragingWindowTimespan())/4;
|
||||||
LogPrint("pow", " nActualTimespan = %d before bounds\n", nActualTimespan);
|
LogPrint("pow", " nActualTimespan = %d before bounds\n", nActualTimespan);
|
||||||
|
|
||||||
if (nActualTimespan < params.MinActualTimespan())
|
if ( ASSETCHAINS_ADAPTIVEPOW <= 0 )
|
||||||
nActualTimespan = params.MinActualTimespan();
|
{
|
||||||
if (nActualTimespan > params.MaxActualTimespan())
|
if (nActualTimespan < params.MinActualTimespan())
|
||||||
nActualTimespan = params.MaxActualTimespan();
|
nActualTimespan = params.MinActualTimespan();
|
||||||
|
if (nActualTimespan > params.MaxActualTimespan())
|
||||||
|
nActualTimespan = params.MaxActualTimespan();
|
||||||
|
}
|
||||||
// Retarget
|
// Retarget
|
||||||
arith_uint256 bnLimit;
|
arith_uint256 bnLimit;
|
||||||
if (ASSETCHAINS_ALGO == ASSETCHAINS_EQUIHASH)
|
if (ASSETCHAINS_ALGO == ASSETCHAINS_EQUIHASH)
|
||||||
|
|||||||
Reference in New Issue
Block a user