diff --git a/src/pow.cpp b/src/pow.cpp index 1a4e82a21..d2d71e1f4 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -95,9 +95,36 @@ bnTarget = RT_CST_RST (bnTarget, ts, cw, numerator, denominator, W, T, past); #define T ASSETCHAINS_BLOCKTIME #define K ((int64_t)1000000) -arith_uint256 oldRT_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) +arith_uint256 RT_CST_RST_outer(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) { - + int64_t outerK; + if ( (ts[0] - ts[W]) < (T * numerator)/denominator ) + { + outerK = (K * (nTime-ts[0]) * (ts[0]-ts[W]) * denominator) / (numerator * (T * T)); + fprintf(stderr,"ht.%d initial outerK.%lld %d * %d * %d / %d\n",height,(long long)outerK,(nTime-ts[0]),(ts[0]-ts[W]),denominator,numerator); + if ( outerK < K ) + { + bnTarget = ct[0] / arith_uint256(K); + bnTarget *= arith_uint256(outerK); + } + } + return(bnTarget); +} + +arith_uint256 RT_CST_RST_inner(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,int32_t outeri) +{ + int64_t innerK; int32_t i; + if ( (ts[0] - ts[outeri+W]) < (outeri+W)*T ) + { + bnTarget = ct[0]; + for (i=1; i