如果两个区块同时完成他们的POW怎么办?

问题描述 投票:-2回答:3

让我们考虑一个场景:假设2名矿工获得2个不同的未经证实的交易并完成工作证明。如果矿工A首先将块添加到blockChain,那么矿工B生成的块将是错误/无用的,因为他使用的last_Hash现在是错误的并且他必须使用在他去之前一秒钟添加的矿工A的last_hash添加他的块。例如

 

 <b>current chian: block1--block2--block3</b>
    <table>
    	<tr>
           		<td>Miner A  </td>
          		<td>Miner B</td>
    	</tr>
    	<tr>
    		<td>LastHast=block3-hash<br>				
    		currentHast=SHA(block3's_hash,timestemp,data,nonce)		<br>
    		proof of work		<br>				
    		add---- Successfully add block4	<br>
    		</td>	
       
    		<td>LastHast=block3-hash<br>				
    		currentHast=SHA(block3's_hash,timestemp,data,nonce)	<br>
    		proof of work		<br>				
    		add---- Fail because the last hash is now block4's not block3's So currentHash is wrong so the proof of work<br>
    		</td>
    	</tr>
    </table>

**
**
blockchain bitcoin
3个回答
1
投票

通过让其他矿工验证分类账的建议变更,可以避免双重支出。在您的情况下,两名矿工验证了交易,将结果发布到网络,根据您的协议,这可能没问题,因此将对分类账进行更改。

除此之外,还有一个时间戳服务器,可确保您始终构建在一个独特的块链之上。


1
投票

有效的交易总是在最长的链上,最长的,我的意思是块数更大。

如果minerA和minerB同时完成了PoW,则会生成一个fork

在当前时间,minerA和minerB事务都存储在fullnode上,而fullnode正在等待生成下一个块。

在下一个块时间内,minerA首先完成PoW,然后minerA上的fork(数据链)被认为更长,因此minerA成为最长的链并被认为是有效的,minerB上的块被认为是无效的,并且被丢弃。


1
投票

首先,这种情况一直在发生,协议的建立是为了解决它。

让我们假设有2名矿工,A和B,他们同时为不同的交易集找到PoW。

矿工们接下来要做的就是通过网络广播他们新发现的街区。

这个广播不是即时的(光速不是瞬时的),因此A附近的矿工将首先接收来自A的广播,而B附近的矿工将首先接收来自B的广播。

在那一刻,A邻居将开始处理A块顶部的新块,而B邻居将开始在B块顶部的新块中工作。

网络刚刚分叉,网络的一部分正在处理块A上的区块链,另一部分正在处理块B上的区块链。

让我们假设现在有两个新的矿工,C和D.C是一个邻居,正在A块的顶部工作一个新的块。 D是B邻居,正在处理B块顶部的新块。

想象一下,C首先找到新块的PoW而不是D.C会将此块广播到网络。最终,D将收到这个C块并且会意识到区块链X - > A - > C有更多的PoW然后是它正在处理的那个,X - > B.

根据协议规则,D将立即丢弃它正在处理的内容,并将开始在PoW上为X - > A - > C之上的新块工作,从而解析网络分支。

© www.soinside.com 2019 - 2024. All rights reserved.