Hash 我们如何证明比特币块始终是可解的?

Hash 我们如何证明比特币块始终是可解的?,hash,bitcoin,sha256,Hash,Bitcoin,Sha256,我正在尝试实现一种类似于比特币的简单加密货币,只是为了深入了解它的代码层次 我知道比特币块包含前一块的散列、许多交易和解算器的奖励交易 矿工基本上在这个候选块上运行SHA256,并结合一个随机数。只要散列结果的前几个数字是零,我们就说这个块被解决了,然后我们将结果广播到整个网络以获得奖励 但我从未见过有人证明一个块是可解的。我猜这是由SHA256保证的?因为解决方案的大小是固定的,在尝试了足够的输入之后,您保证命中每个哈希结果?但是,如何证明块的解分布是均匀的(均匀的),从而可以覆盖所有哈希结果

我正在尝试实现一种类似于比特币的简单加密货币,只是为了深入了解它的代码层次

我知道比特币块包含前一块的散列、许多交易和解算器的奖励交易

矿工基本上在这个候选块上运行SHA256,并结合一个随机数。只要散列结果的前几个数字是零,我们就说这个块被解决了,然后我们将结果广播到整个网络以获得奖励

但我从未见过有人证明一个块是可解的。我猜这是由SHA256保证的?因为解决方案的大小是固定的,在尝试了足够的输入之后,您保证命中每个哈希结果?但是,如何证明块的解分布是均匀的(均匀的),从而可以覆盖所有哈希结果呢

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

例如,在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,100000000000000000000000000000000]之间的数字随机作为起点,然后将值逐个增加:

block[u'nonce'] += 1
我不是python程序员,我不知道python如何处理整数类型。没有整数溢出的处理

<>我试图用C++实现类似的东西,我不知道什么样的整数可以保证解决方案。 但是,如何证明块的解分布是均匀的(均匀的),从而可以覆盖所有哈希结果呢

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

merkle树是记录先前块散列的基本数据结构。
从那里可以从起源(genesis)块跟踪哈希确认链。

我不确定我是否理解你的问题,但加密哈希输出中的偏差太小,因此对于实际目的来说无关紧要。所以你可以认为密码散列的任何一个有50%的可能性是0。前2位为零的概率为25%,前3位为零的概率为12.5%,等等。“块”不重要:概率不变。关于使用64位整数,我看不出它是如何工作的。如果我没有弄错的话,写这篇文章时比特币的难度已经超过了前64位都是零的要求……谢谢你的回复。关于整数,我没有询问哈希结果(是的,它大于64位)。我说的是散列函数的输入(即块加随机数)。这是一个很好的问题。据我所知,你在问:“有人能证明总是有一个nonce会导致散列吗≤ 困难在于“精疲力竭”。k-SAT是NP完全的。