我们怎样才能证明比特币块总能解决?

时间:2014-10-21 23:31:20

标签: hash bitcoin sha256

我正在尝试实现类似于比特币的简单加密货币,只是为了深入了解代码级别。

我理解比特币块包含前一个块的散列,许多事务和解算器的奖励事务。

该矿工基本上在该候选区块上运行SHA256并结合随机数。只要哈希结果的第一个特定数字为零,我们就说这个块已经解决,我们将结果广播到整个网络以获得奖励。

但我从来没有见过有人证明一个块可以解决。我猜这是由SHA256保证的吗?因为解决方案大小是固定的,在尝试足够的输入后,您可以保证每个哈希结果都能达到?但是你怎么能证明一个块的解决方案分布是均匀的(统一的),所以你确实可以覆盖所有哈希结果?

现在,假设一个块确实总是可以解决的,我可以假设使用64位的随机整数足以解决它吗? 32bit怎么样?或者我必须使用无限位整数?

例如,在basiccoin项目中:

工作证明的代码如下:

    def POW(block, hashes):
    halfHash = tools.det_hash(block)
    block[u'nonce'] = random.randint(0, 10000000000000000000000000000000000000000)
    count = 0
    while tools.det_hash({u'nonce': block['nonce'],
                          u'halfHash': halfHash}) > block['target']:
        count += 1
        block[u'nonce'] += 1
        if count > hashes:
            return {'error': False}
        if restart_signal.is_set():
            restart_signal.clear()
            return {'solution_found': True}
        ''' for testing sudden loss in hashpower from miners.
        if block[u'length']>150:
        else: time.sleep(0.01)
        '''
    return block

此代码将[0,1000000000000000000000000000000000000000000]之间的数字作为起始点,然后它只是逐个增加该值:

block[u'nonce'] += 1

我不是python程序员,我不知道python如何处理整数的类型。没有处理整数溢出。

我正在尝试用c ++实现类似的东西,我不知道什么样的整数可以保证解决方案。

1 个答案:

答案 0 :(得分:0)

  

但是如何证明块的解决方案分布是均匀的(统一),以便您确实可以覆盖所有哈希结果?

SHA256是确定性的,所以如果你重新使用txns它将始终提供相同的256个哈希。 客户端节点将所有txn和哈希值保留在merkle树中,以便网络客户端传播并验证最长的块链。

merkle树是记录先前块的哈希值的基本数据结构。 从那里可以跟踪来自原点(genesis)块的哈希确认链。