Encode bits

This commit is contained in:
jl777
2019-08-05 11:13:07 -11:00
parent fb0c1cdafa
commit 5f017849fd

View File

@@ -229,7 +229,7 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
for (i=0; pindexFirst != 0 && i<(int32_t)(sizeof(ct)/sizeof(*ct)); i++) for (i=0; pindexFirst != 0 && i<(int32_t)(sizeof(ct)/sizeof(*ct)); i++)
{ {
ct[i].SetCompact(pindexFirst->nBits); ct[i].SetCompact(pindexFirst->nBits);
if ( pindexLast->GetHeight()+1 >= 330 ) if ( pindexLast->GetHeight()+1 >= 330 && (pindexLast->GetHeight()+1 < 450 || (pindexFirst->nBits&1) != 0) )
ct[i] /= arith_uint256(2); ct[i] /= arith_uint256(2);
ts[i] = pindexFirst->nTime; ts[i] = pindexFirst->nTime;
pindexFirst = pindexFirst->pprev; pindexFirst = pindexFirst->pprev;
@@ -239,7 +239,6 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
for (i = 0; pindexFirst && i < params.nPowAveragingWindow; i++) for (i = 0; pindexFirst && i < params.nPowAveragingWindow; i++)
{ {
bnTmp.SetCompact(pindexFirst->nBits); bnTmp.SetCompact(pindexFirst->nBits);
bnTot += bnTmp;
if ( ASSETCHAINS_ADAPTIVEPOW > 0 && pblock != 0 ) if ( ASSETCHAINS_ADAPTIVEPOW > 0 && pblock != 0 )
{ {
blocktime = pindexFirst->nTime; blocktime = pindexFirst->nTime;
@@ -254,7 +253,10 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
mult = diff; mult = diff;
} }
} }
if ( pindexLast->GetHeight()+1 >= 330 && (pindexLast->GetHeight()+1 < 450 || (pindexFirst->nBits&1) != 0) )
bnTmp /= arith_uint256(2); // check against ct[i]
} }
bnTot += bnTmp;
pindexFirst = pindexFirst->pprev; pindexFirst = pindexFirst->pprev;
} }
//fprintf(stderr,"diffs %d\n",(int32_t) pindexLast->GetHeight()); //fprintf(stderr,"diffs %d\n",(int32_t) pindexLast->GetHeight());
@@ -262,9 +264,7 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
if (pindexFirst == NULL) if (pindexFirst == NULL)
return nProofOfWorkLimit; return nProofOfWorkLimit;
bool fNegative,fOverflow; arith_uint256 easy,origtarget,bnAvg {bnTot / params.nPowAveragingWindow}; bool fNegative,fOverflow; int32_t zawyflag = 0; arith_uint256 easy,origtarget,bnAvg {bnTot / params.nPowAveragingWindow};
if ( ASSETCHAINS_ADAPTIVEPOW > 0 && pindexLast->GetHeight()+1 >= 330 )
bnTot /= arith_uint256(2);
nbits = CalculateNextWorkRequired(bnAvg, pindexLast->GetMedianTimePast(), pindexFirst->GetMedianTimePast(), params); nbits = CalculateNextWorkRequired(bnAvg, pindexLast->GetMedianTimePast(), pindexFirst->GetMedianTimePast(), params);
if ( ASSETCHAINS_ADAPTIVEPOW > 0 )//&& block12diff != 0 && block7diff != 0 && block4diff != 0 ) if ( ASSETCHAINS_ADAPTIVEPOW > 0 )//&& block12diff != 0 && block7diff != 0 && block4diff != 0 )
{ {
@@ -318,7 +318,7 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
bnTarget = (origtarget + bnTarget + bnPrev) / arith_uint256(3); bnTarget = (origtarget + bnTarget + bnPrev) / arith_uint256(3);
else bnTarget = origtarget; else bnTarget = origtarget;
} }
else if ( pindexLast->GetHeight()+1 < 310 || pindexLast->GetHeight()+1 >= 380 ) else if ( pindexLast->GetHeight()+1 < 310 || (pindexLast->GetHeight()+1 >= 380 && pindexLast->GetHeight()+1 < 450) )
{ {
bnTarget /= arith_uint256(2); bnTarget /= arith_uint256(2);
if ( bnTarget < origtarget ) if ( bnTarget < origtarget )
@@ -328,13 +328,18 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
else if ( pindexLast->GetHeight()+1 >= 350 ) else if ( pindexLast->GetHeight()+1 >= 350 )
{ {
if ( bnTarget < origtarget ) if ( bnTarget < origtarget )
{
bnTarget = (bnTarget + bnPrev) / arith_uint256(2); bnTarget = (bnTarget + bnPrev) / arith_uint256(2);
zawyflag = 1;
}
else bnTarget = origtarget; else bnTarget = origtarget;
} }
} }
} }
nbits = bnTarget.GetCompact(); nbits = bnTarget.GetCompact();
} }
if ( ASSETCHAINS_ADAPTIVEPOW > 0 && pindexLast->GetHeight()+1 >= 450 )
nbits = (nbits & 0xfffffffe) | zawyflag;
return(nbits); return(nbits);
} }