我正在使用比特币源代码,希望将初始难度设置为1(我将bdiff,nBits字段更改为)。因此,我还需要更改pdiff。根据:
难度=难度_1_目标/当前目标(目标为256 位号)
difficulty_1_target的各种衡量方式可能有所不同 困难。传统上,它表示哈希,其中前32位 位为零,其余为1(这称为“池难度” 或“ pdiff”)。比特币协议将目标表示为自定义 精度有限的浮点型;结果,比特币 客户通常会据此估算大概的困难(这称为 “ bdiff”)。
有人知道pdiff存储在哪里吗?它是硬编码的吗?
答案 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作为初始难度。