首页 文章

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

提问于
浏览
2

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

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

矿工基本上在这个候选区块上运行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

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

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

    merkle树是记录先前块的哈希值的基本数据结构 . 从那里可以跟踪哈希确认链的起源(创世纪)块 .

相关问题