diff --git a/src/pow.cpp b/src/pow.cpp index 935252936..d88947f36 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -154,8 +154,18 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead nbits = CalculateNextWorkRequired(bnAvg, pindexLast->GetMedianTimePast(), pindexFirst->GetMedianTimePast(), params); if ( ASSETCHAINS_ADAPTIVEPOW > 0 && block12diff != 0 && block7diff != 0 && block4diff != 0 ) { + block3sum = (block4diff - tipdiff); + block6sum = (block7diff - tipdiff); + block11sum = (block12diff - tipdiff); origtarget = bnTarget = arith_uint256().SetCompact(nbits); easy.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow); + if ( block3sum < ASSETCHAINS_BLOCKTIME/5 || block6sum < ASSETCHAINS_BLOCKTIME || block11sum < ASSETCHAINS_BLOCKTIME*5 ) + { + bnTarget /= arith_uint256(100); + fprintf(stderr,"booster triggered 100x\n"); + nbits = bnTarget.GetCompact(); + return(nbits); + } bnSum4 = zawy_targetMA(easy,bnSum4,4,block4diff * 5,1); bnSum7 = zawy_targetMA(easy,bnSum7,7,block7diff * 3,1); bnSum12 = zawy_targetMA(easy,bnSum12,12,block12diff * 2,1); @@ -164,27 +174,28 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead else bnTmp = bnSum7; if ( bnSum12 < bnTmp ) bnTmp = bnSum12; - if ( bnTmp < bnTarget ) + if ( flag == 0 && bnTmp < bnTarget ) { bnTarget = (bnTmp + bnPrev) / arith_uint256(2); fprintf(stderr,"ht.%d block12diff %d vs %d, make harder\n",(int32_t)pindexLast->GetHeight()+1,block12diff,ASSETCHAINS_BLOCKTIME*11); - block3sum = (block4diff - tipdiff); - block6sum = (block7diff - tipdiff); - block11sum = (block12diff - tipdiff); - if ( block3sum > 0 && block3sum < ASSETCHAINS_BLOCKTIME/5 ) - divisor = 15; - else if ( block6sum > 0 && block6sum < ASSETCHAINS_BLOCKTIME*2 ) - divisor = 3; - else if ( block11sum > 0 && block11sum < ASSETCHAINS_BLOCKTIME*5 ) - divisor = 2; - if ( divisor != 0 ) + if ( 0 ) { - bnTarget /= arith_uint256(divisor); - fprintf(stderr,"special booster block3sum.%d block6sum.%d tipdiff.%d -> %d, divisor.%d\n",block3sum,block6sum,tipdiff,1000*tipdiff/60,divisor); - if ( 0 && 1000*tipdiff/60 < 1000 ) + + if ( block3sum > 0 && block3sum < ASSETCHAINS_BLOCKTIME/5 ) + divisor = 15; + else if ( block6sum > 0 && block6sum < ASSETCHAINS_BLOCKTIME*2 ) + divisor = 3; + else if ( block11sum > 0 && block11sum < ASSETCHAINS_BLOCKTIME*5 ) + divisor = 2; + if ( divisor != 0 ) { - fprintf(stderr,"special booster block3sum.%d block6sum.%d tipdiff.%d -> %d\n",block3sum,block6sum,tipdiff,1000*tipdiff/60); - bnTarget = bnTarget * arith_uint256(1000*tipdiff/60) / arith_uint256(1000); + bnTarget /= arith_uint256(divisor); + fprintf(stderr,"special booster block3sum.%d block6sum.%d tipdiff.%d -> %d, divisor.%d\n",block3sum,block6sum,tipdiff,1000*tipdiff/60,divisor); + if ( 0 && 1000*tipdiff/60 < 1000 ) + { + fprintf(stderr,"special booster block3sum.%d block6sum.%d tipdiff.%d -> %d\n",block3sum,block6sum,tipdiff,1000*tipdiff/60); + bnTarget = bnTarget * arith_uint256(1000*tipdiff/60) / arith_uint256(1000); + } } } flag = 1;