本文整理汇总了C++中CBlockIndex::GetAlgo方法的典型用法代码示例。如果您正苦于以下问题:C++ CBlockIndex::GetAlgo方法的具体用法?C++ CBlockIndex::GetAlgo怎么用?C++ CBlockIndex::GetAlgo使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBlockIndex
的用法示例。
在下文中一共展示了CBlockIndex::GetAlgo方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetGeometricMeanPrevWork
arith_uint256 GetGeometricMeanPrevWork(const CBlockIndex& block)
{
//arith_uint256 bnRes;
arith_uint256 nBlockWork = GetBlockProofBase(block);
CBigNum bnBlockWork = CBigNum(ArithToUint256(nBlockWork));
int nAlgo = block.GetAlgo();
for (int algo = 0; algo < NUM_ALGOS; algo++)
{
if (algo != nAlgo)
{
arith_uint256 nBlockWorkAlt = GetPrevWorkForAlgoWithDecayV3(block, algo);
CBigNum bnBlockWorkAlt = CBigNum(ArithToUint256(nBlockWorkAlt));
if (bnBlockWorkAlt != 0)
bnBlockWork *= bnBlockWorkAlt;
}
}
// Compute the geometric mean
CBigNum bnRes = bnBlockWork.nthRoot(NUM_ALGOS);
// Scale to roughly match the old work calculation
bnRes <<= 8;
//return bnRes;
return UintToArith256(bnRes.getuint256());
}
示例2: GetBlockProof
arith_uint256 GetBlockProof(const CBlockIndex& block)
{
Consensus::Params params = Params().GetConsensus();
arith_uint256 bnTarget;
int nHeight = block.nHeight;
int nAlgo = block.GetAlgo();
if (nHeight > params.nGeometricAverageWork_Start)
{
bnTarget = GetGeometricMeanPrevWork(block);
}
else
{
arith_uint256 nBlockWork = GetBlockProofBase(block);
for (int algo = 0; algo < NUM_ALGOS; algo++)
{
if (algo != nAlgo)
{
if(nHeight >= params.nBlockAlgoNormalisedWorkDecayV2Start)
{
nBlockWork += GetPrevWorkForAlgoWithDecayV2(block, algo);
}
else
{
nBlockWork += GetPrevWorkForAlgoWithDecayV1(block, algo);
}
}
}
bnTarget = nBlockWork / NUM_ALGOS;
}
return bnTarget;
}
示例3: GetBlockProof
arith_uint256 GetBlockProof(const CBlockIndex& block)
{
arith_uint256 bnTarget;
bool fNegative;
bool fOverflow;
bnTarget.SetCompact(block.nBits, &fNegative, &fOverflow);
if (fNegative || fOverflow || bnTarget == 0)
return 0;
// We need to compute 2**256 / (bnTarget+1), but we can't represent 2**256
// as it's too large for an arith_uint256. However, as 2**256 is at least as large
// as bnTarget+1, it is equal to ((2**256 - bnTarget - 1) / (bnTarget+1)) + 1,
// or ~bnTarget / (bnTarget+1) + 1.
// Use weighting system for equivelant algo chainwork
return (~bnTarget / (bnTarget + 1)) * GetAlgoWeight(block.GetAlgo()) + 1;
}