【问题标题】:Litecoin/Bitcoin how divide uint256 target value on difficulty in C++莱特币/比特币如何在 C++ 中划分难度的 uint256 目标值
【发布时间】:2014-01-23 12:40:48
【问题描述】:

我几乎完成了在 js 中实现莱特币/比特币矿工只是为了好玩,我只是不知道如何找到目标十六进制。正如文档所说,它是最大/难度,但如果难度是(例如)62,我该如何在 0x00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 和 62 之间进行除法?

所以我从莱特币钱包源获得了 unit256 类,但这个类没有除法运算符。所以我将 uint256 转换为在 uint256 类中实现的 double

double getdouble() const
{
   double ret = 0.0;
   double fact = 1.0;
   for (int i = 0; i < WIDTH; i++) {
       ret += fact * pn[i];
       fact *= 4294967296.0;
   }
   return ret;
}

但现在我需要将这个巨大的双精度转换为十六进制字符串。据我了解,这个字符串将代表矿工的目标。或者我需要这个双变量转换回 uint256 并从中获取十六进制。有什么建议吗?谢谢!

【问题讨论】:

  • 你不能那样做。难度没有足够的精度让您计算目标。你应该只从目标到困难。你的工作单位应该包括目标。
  • 好的,所以我写了使用地层协议的矿工,地层不给我十六进制格式的目标,他们只给我当前的难度。那我怎么能找到目标呢?谢谢!

标签: c++ math hex bitcoin


【解决方案1】:

所以解决方法很简单:

void setdouble(double val)
{
    double ret = val;
    double fact = 1.0;
    for (int i = 0; i < WIDTH; i++) {
        double a = ret / fact;
        pn[i] =  (uint32_t)a;
        fact *= 4294967296.0;
    }
}

【讨论】:

  • 围绕您的解决方案的一些上下文会很棒。或一些文档的链接。 WIDTH 是什么? pn 是什么? 4294967296.0 是什么?
猜你喜欢
  • 2013-11-29
  • 2022-01-24
  • 2018-06-18
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 2019-09-07
相关资源
最近更新 更多