From ea85a08e91accfb7bedc7ff84f46f591ee86bba2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 3 Aug 2019 20:57:00 -1100 Subject: [PATCH] Tweak --- src/pow.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/pow.cpp b/src/pow.cpp index 3cc3c1b32..935252936 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -101,7 +101,7 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead // Find the first block in the averaging interval const CBlockIndex* pindexFirst = pindexLast; arith_uint256 bnTmp,bnTarget,bnPrev {0},bnSum4 {0},bnSum7 {0},bnSum12 {0},bnTot {0}; - uint32_t nbits,blocktime; int32_t diff,mult = 0,block3sum=0,block6sum=0,tipdiff = 0,block4diff=0,block7diff=0,block12diff=0; + uint32_t nbits,blocktime; int32_t diff,mult = 0,block3sum=0,block6sum=0,block11sum=0,tipdiff = 0,block4diff=0,block7diff=0,block12diff=0; if ( ASSETCHAINS_ADAPTIVEPOW > 0 && pindexFirst != 0 && pblock != 0 ) { tipdiff = (pblock->nTime - pindexFirst->nTime); @@ -166,23 +166,27 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead bnTmp = bnSum12; if ( 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 += 5; - if ( block6sum > 0 && block6sum < ASSETCHAINS_BLOCKTIME*2 ) - divisor += 2; + 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 ) { - bnTmp /= arith_uint256(divisor); - if ( 1000*tipdiff/60 < 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); - bnTmp = bnTmp * arith_uint256(1000*tipdiff/60) / arith_uint256(1000); + bnTarget = bnTarget * arith_uint256(1000*tipdiff/60) / arith_uint256(1000); } } - bnTarget = (bnTmp + bnPrev) / arith_uint256(2); flag = 1; } else if ( flag == 0 && mult > 1 ) // e^mult case, jl777: test of mult > 1 failed when it was int64_t???