比特币源代码在哪里以及如何设置池难度(pdi​​ff)?

时间:2018-10-24 15:14:28

标签: target bitcoin

我正在使用比特币源代码,希望将初始难度设置为1(我将bdiff,nBits字段更改为)。因此,我还需要更改pdiff。根据:

  

难度=难度_1_目标/当前目标(目标为256   位号)

     

difficulty_1_target的各种衡量方式可能有所不同   困难。传统上,它表示哈希,其中前32位   位为零,其余为1(这称为“池难度”   或“ pdiff”)。比特币协议将目标表示为自定义   精度有限的浮点型;结果,比特币   客户通常会据此估算大概的困难(这称为   “ bdiff”)。

有人知道pdiff存储在哪里吗?它是硬编码的吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!它不是代码中的pdiff字段,但是blockchain.cpp中有一个函数:

double GetDifficulty(const CBlockIndex* blockindex)
{
    if (blockindex == nullptr)
    {
        return 1.0;
    }

    int nShift = (blockindex->nBits >> 24) & 0xff;
    double dDiff =
        (double)0x0000ffff / (double)(blockindex->nBits & 0x00ffffff);

    while (nShift < 29)
    {
        dDiff *= 256.0;
        nShift++;
    }
    while (nShift > 29)
    {
        dDiff /= 256.0;
        nShift--;
    }
    return dDiff;
 }

对于比特币,初始nBits等于0x1d00ffff,因此上面的dDiff字段变为1,nshift等于1D。对于我的私有版本,我将nBits设置为0x1f0fffff并应像

一样计算dDiff。
double dDiff =(double)0x000ffff / (double)(blockindex->nBits & 0x00ffffff);

和我的nShift字段是0x1f,所以我将条件更改为while(nShift < 31)while (nShift > 31)。通过运行命令bitcoin-cli getdifficulty,我得到了1作为初始难度。