Hash 我们如何证明比特币块始终是可解的?
我正在尝试实现一种类似于比特币的简单加密货币,只是为了深入了解它的代码层次 我知道比特币块包含前一块的散列、许多交易和解算器的奖励交易 矿工基本上在这个候选块上运行SHA256,并结合一个随机数。只要散列结果的前几个数字是零,我们就说这个块被解决了,然后我们将结果广播到整个网络以获得奖励 但我从未见过有人证明一个块是可解的。我猜这是由SHA256保证的?因为解决方案的大小是固定的,在尝试了足够的输入之后,您保证命中每个哈希结果?但是,如何证明块的解分布是均匀的(均匀的),从而可以覆盖所有哈希结果呢 现在,假设一个块确实总是可解的,我能假设对随机整数使用64位就足以解决它吗?32位怎么样?或者我必须使用一个无限位整数 例如,在basiccoin项目中: 工作证明的代码如下:Hash 我们如何证明比特币块始终是可解的?,hash,bitcoin,sha256,Hash,Bitcoin,Sha256,我正在尝试实现一种类似于比特币的简单加密货币,只是为了深入了解它的代码层次 我知道比特币块包含前一块的散列、许多交易和解算器的奖励交易 矿工基本上在这个候选块上运行SHA256,并结合一个随机数。只要散列结果的前几个数字是零,我们就说这个块被解决了,然后我们将结果广播到整个网络以获得奖励 但我从未见过有人证明一个块是可解的。我猜这是由SHA256保证的?因为解决方案的大小是固定的,在尝试了足够的输入之后,您保证命中每个哈希结果?但是,如何证明块的解分布是均匀的(均匀的),从而可以覆盖所有哈希结果
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完全的。