Zawy17
This commit is contained in:
82
src/pow.cpp
82
src/pow.cpp
@@ -95,19 +95,19 @@ bnTarget = RT_CST_RST (bnTarget, ts, cw, numerator, denominator, W, T, past);
|
|||||||
#define T ASSETCHAINS_BLOCKTIME
|
#define T ASSETCHAINS_BLOCKTIME
|
||||||
#define K 1000000
|
#define K 1000000
|
||||||
|
|
||||||
arith_uint256 RT_CST_RST(uint32_t nTime,arith_uint256 bnTarget,uint32_t *ts,arith_uint256 *ct,int32_t numerator,int32_t denominator,int32_t W,int32_t past)
|
arith_uint256 RT_CST_RST(int32_t height,uint32_t nTime,arith_uint256 bnTarget,uint32_t *ts,arith_uint256 *ct,int32_t numerator,int32_t denominator,int32_t W,int32_t past)
|
||||||
{
|
{
|
||||||
//if (ts.size() < 2*W || ct.size() < 2*W ) { exit; } // error. a vector was too small
|
//if (ts.size() < 2*W || ct.size() < 2*W ) { exit; } // error. a vector was too small
|
||||||
//if (ts.size() < past+W || ct.size() < past+W ) { past = min(ct.size(), ts.size()) - W; } // past was too small, adjust
|
//if (ts.size() < past+W || ct.size() < past+W ) { past = min(ct.size(), ts.size()) - W; } // past was too small, adjust
|
||||||
int32_t altK,i,j,ii=0; // K is a scaling factor for integer divisions
|
int32_t altK,i,j,ii=0; // K is a scaling factor for integer divisions
|
||||||
if ( ts[W+past] == 0 )
|
if ( ts[W+past] == 0 )
|
||||||
return(bnTarget);
|
return(bnTarget);
|
||||||
if ( ts[1]-ts[W] < T*numerator/denominator )
|
if ( ts[0]-ts[W] < T*numerator/denominator )
|
||||||
{
|
{
|
||||||
//bnTarget = ((ct[0]-ct[1])/K) * max(K,(K*(nTime-ts[0])*(ts[0]-ts[W])*denominator/numerator)/T/T);
|
//bnTarget = ((ct[0]-ct[1])/K) * max(K,(K*(nTime-ts[0])*(ts[0]-ts[W])*denominator/numerator)/T/T);
|
||||||
bnTarget = (ct[0] - ct[1]) / arith_uint256(K);
|
bnTarget = (ct[0] - ct[1]) / arith_uint256(K);
|
||||||
altK = (K * (nTime-ts[0]) * (ts[0]-ts[W]) * denominator / numerator) / (T * T);
|
altK = (K * (nTime-ts[0]) * (ts[0]-ts[W]) * denominator / numerator) / (T * T);
|
||||||
fprintf(stderr,"initial altK.%d\n",altK);
|
fprintf(stderr,"ht.%d initial altK.%d\n",height,altK);
|
||||||
if ( altK > K )
|
if ( altK > K )
|
||||||
altK = K;
|
altK = K;
|
||||||
bnTarget *= arith_uint256(altK);
|
bnTarget *= arith_uint256(altK);
|
||||||
@@ -146,7 +146,7 @@ arith_uint256 RT_CST_RST(uint32_t nTime,arith_uint256 bnTarget,uint32_t *ts,arit
|
|||||||
//bnTarget = ((ct[0]-ct[W])/W/K) * (K*(nTime-ts[0])*(ts[0]-ts[W]))/W/T/T;
|
//bnTarget = ((ct[0]-ct[W])/W/K) * (K*(nTime-ts[0])*(ts[0]-ts[W]))/W/T/T;
|
||||||
bnTarget = (ct[0]-ct[W]) / arith_uint256(W * K);
|
bnTarget = (ct[0]-ct[W]) / arith_uint256(W * K);
|
||||||
altK = (K * (nTime-ts[0]) * (ts[0]-ts[W])) / (W * T * T);
|
altK = (K * (nTime-ts[0]) * (ts[0]-ts[W])) / (W * T * T);
|
||||||
fprintf(stderr,"made it to i == 0, j.%d ii.%d altK %d\n",j,ii,altK);
|
fprintf(stderr,"ht.%d made it to i == 0, j.%d ii.%d altK %d\n",height,j,ii,altK);
|
||||||
bnTarget *= arith_uint256(altK);
|
bnTarget *= arith_uint256(altK);
|
||||||
j = 0; // It needed adjusting, we adjusted it, we're finished, so break out of j loop.
|
j = 0; // It needed adjusting, we adjusted it, we're finished, so break out of j loop.
|
||||||
}
|
}
|
||||||
@@ -229,8 +229,8 @@ 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 && (pindexLast->GetHeight()+1 < 430 || (pindexFirst->nBits&1) != 0) )
|
if ( (pindexFirst->nBits&3) != 0 )
|
||||||
ct[i] /= arith_uint256(2);
|
ct[i] /= arith_uint256((pindexFirst->nBits&3) + 1);
|
||||||
ts[i] = pindexFirst->nTime;
|
ts[i] = pindexFirst->nTime;
|
||||||
pindexFirst = pindexFirst->pprev;
|
pindexFirst = pindexFirst->pprev;
|
||||||
}
|
}
|
||||||
@@ -253,13 +253,17 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
|
|||||||
mult = diff;
|
mult = diff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( pindexLast->GetHeight()+1 >= 330 && (pindexLast->GetHeight()+1 < 430 || (pindexFirst->nBits&1) != 0) )
|
if ( (pindexFirst->nBits&3) != 0 )
|
||||||
bnTmp /= arith_uint256(2); // check against ct[i]
|
{
|
||||||
|
bnTmp /= arith_uint256((pindexFirst->nBits&3) + 1); // check against ct[i]
|
||||||
|
if ( ct[i] != bnTmp )
|
||||||
|
fprintf(stderr,"ht.%d i.%d ct[] != bnTmp boost X%d\n",height,i,(int32_t)(pindexFirst->nBits&3) + 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
bnTot += bnTmp;
|
bnTot += bnTmp;
|
||||||
pindexFirst = pindexFirst->pprev;
|
pindexFirst = pindexFirst->pprev;
|
||||||
}
|
}
|
||||||
//fprintf(stderr,"diffs %d\n",(int32_t) pindexLast->GetHeight());
|
//fprintf(stderr,"diffs %d\n",height);
|
||||||
// Check we have enough blocks
|
// Check we have enough blocks
|
||||||
if (pindexFirst == NULL)
|
if (pindexFirst == NULL)
|
||||||
return nProofOfWorkLimit;
|
return nProofOfWorkLimit;
|
||||||
@@ -277,7 +281,7 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
|
|||||||
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());
|
fprintf(stderr,"cmp.%d mult.%d ht.%d -> easy target\n",mult>1,(int32_t)mult,height);
|
||||||
return(KOMODO_MINDIFF_NBITS);
|
return(KOMODO_MINDIFF_NBITS);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -285,61 +289,33 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
|
|||||||
for (z=31; z>=0; z--)
|
for (z=31; z>=0; z--)
|
||||||
fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[z]);
|
fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[z]);
|
||||||
}
|
}
|
||||||
fprintf(stderr," cmp.%d mult.%d for ht.%d\n",mult>1,(int32_t)mult,(int32_t)pindexLast->GetHeight()+1);
|
fprintf(stderr," cmp.%d mult.%d for ht.%d\n",mult>1,(int32_t)mult,height);
|
||||||
}
|
}
|
||||||
else if ( pblock != 0 )
|
else if ( pblock != 0 )
|
||||||
{
|
{
|
||||||
// bnTarget = RT_CST_RST (bnTarget, ts, cw, numerator, denominator, W, T, past);
|
// bnTarget = RT_CST_RST (height,nTime,bnTarget, ts, cw, numerator, denominator, W, T, past);
|
||||||
bnTarget = RT_CST_RST(pblock->nTime,bnTarget,ts,ct,1,2,3,50);
|
bnTarget = RT_CST_RST(height,pblock->nTime,bnTarget,ts,ct,1,2,3,50);
|
||||||
bnTarget6 = RT_CST_RST(pblock->nTime,bnTarget,ts,ct,7,3,6,50);
|
bnTarget6 = RT_CST_RST(height,pblock->nTime,bnTarget,ts,ct,7,3,6,50);
|
||||||
bnTarget12 = RT_CST_RST(pblock->nTime,bnTarget,ts,ct,12,7,12,50);
|
bnTarget12 = RT_CST_RST(height,pblock->nTime,bnTarget,ts,ct,12,7,12,50);
|
||||||
if ( bnTarget6 < bnTarget12 )
|
if ( bnTarget6 < bnTarget12 )
|
||||||
bnTmp = bnTarget6;
|
bnTmp = bnTarget6;
|
||||||
else bnTmp = bnTarget12;
|
else bnTmp = bnTarget12;
|
||||||
if ( 0 && bnTmp < bnTarget )
|
if ( 0 && bnTmp < bnTarget )
|
||||||
bnTarget = bnTmp;
|
bnTarget = bnTmp;
|
||||||
if ( pindexLast->GetHeight()+1 >= 230 )
|
if ( bnTarget < origtarget )
|
||||||
{
|
{
|
||||||
if ( pindexLast->GetHeight()+1 < 270 )
|
if ( bnTarget < origtarget/arith_uint256(3) )
|
||||||
{
|
zawyflag = 1;
|
||||||
if ( bnTarget < origtarget )
|
else if ( bnTarget < origtarget / arith_uint256(2) )
|
||||||
bnTarget = (origtarget + bnTarget + bnPrev) / arith_uint256(3);
|
zawyflag = 2;
|
||||||
else bnTarget = origtarget;
|
else zawyflag = 3;
|
||||||
}
|
fprintf(stderr,"ht.%d -> zawy.%d\n",height,zawyflag);
|
||||||
else if ( pindexLast->GetHeight()+1 < 290 )
|
}
|
||||||
{
|
|
||||||
if ( bnTarget < origtarget )
|
|
||||||
bnTarget = bnTarget * arith_uint256(2);
|
|
||||||
}
|
|
||||||
else if ( pindexLast->GetHeight()+1 < 310 )
|
|
||||||
{
|
|
||||||
bnTarget *= arith_uint256(2);
|
|
||||||
if ( bnTarget < origtarget )
|
|
||||||
bnTarget = (origtarget + bnTarget + bnPrev) / arith_uint256(3);
|
|
||||||
else bnTarget = origtarget;
|
|
||||||
}
|
|
||||||
else if ( pindexLast->GetHeight()+1 < 310 || (pindexLast->GetHeight()+1 >= 380 && pindexLast->GetHeight()+1 < 430) )
|
|
||||||
{
|
|
||||||
bnTarget /= arith_uint256(2);
|
|
||||||
if ( bnTarget < origtarget )
|
|
||||||
bnTarget = (bnTarget + bnPrev) / arith_uint256(2);
|
|
||||||
else bnTarget = origtarget;
|
|
||||||
}
|
|
||||||
else if ( pindexLast->GetHeight()+1 >= 350 )
|
|
||||||
{
|
|
||||||
if ( bnTarget < origtarget )
|
|
||||||
{
|
|
||||||
bnTarget = (bnTarget + bnPrev) / arith_uint256(2);
|
|
||||||
zawyflag = 1;
|
|
||||||
}
|
|
||||||
else bnTarget = origtarget;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
nbits = bnTarget.GetCompact();
|
nbits = bnTarget.GetCompact();
|
||||||
}
|
}
|
||||||
if ( ASSETCHAINS_ADAPTIVEPOW > 0 && pindexLast->GetHeight()+1 >= 430 )
|
if ( ASSETCHAINS_ADAPTIVEPOW > 0 )
|
||||||
nbits = (nbits & 0xfffffffe) | zawyflag;
|
nbits = (nbits & 0xfffffffc) | zawyflag;
|
||||||
return(nbits);
|
return(nbits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user