我需要根据比特币工作算法算法比较sha256哈希值。所以需要通过设置一个目标难度来创建一个上限,然后创建数据+随机数的哈希值并将其与上边界进行比较。如果这个计算值小于上限,那么这是一个有效的工作证明。如何比较2 BigIntegers的十六进制表示法
因此,这意味着我们的上边界,即target
可以被定义为
var target = new BigInteger(1) << 256 - 24
当我们创建新块的哈希值,然后我们用target
进行比较。即
var hashInt = new BigInteger(hashBytes)
if (hashInt.CompareTo(target) == -1) {
//It is a valid hash
}
对于这个问题,让我们假设值会
target
:
6901746346790563787434755862277025452451108972170386555162524223799296
hashInt
:
-50765282004551092829298895592266344483300201926640276338429566691241878315064
和他们的十六进制值是(这是通过调用计算.ToString("x")
关于这些变量)
target
:
10000000000000000000000000000000000000000000000000000000000
hashInt
:
8fc3de5d792f2e6b3118697d1e5baa405400e9f8f09625d7eed1481ee0b09fc8
现在,当我们这样做hashInt.CompareTo(target) == -1
然后返回true
。我完全理解这是为什么,但我想要做的是比较它们的十六进制值,如果我们能够做到这一点,那么比较它将返回false
这正是我想要的。
你什么意思是比较十六进制值?你想达到什么目的? –
我认为你想通过模比较这个数字。如果这样的话''| b | > | a |'将是正确的。 –
重要的是要知道你试图用这个来实现什么,因为一些对固定大小的整数有意义的解决方案只能扩展到BigInteger的理想化表示,而不是实际的可变长度表示。 – Ryan