如果两个方块同时完成其战俘怎么办

时间:2019-02-25 10:07:45

标签: blockchain bitcoin

让我们考虑一个场景:假设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>

**
**

3 个答案:

答案 0 :(得分:1)

通过让其他矿工验证分类帐上的拟议更改来避免双重支出。 在您的情况下,两个矿工验证了交易,并将结果发布到网络上,并且根据您的协议,这可能很好,因此将在分类账上进行更改。

除此之外,该时间戳服务器可确保您始终构建在唯一的块链之上。

答案 1 :(得分:1)

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

如果 minerA minerB 同时完成了PoW,则会创建 fork

当前, minerA minerB 事务都存储在完整节点上,并且完整节点正在等待下一个区块的产生。

在下一个阻止时间内, minerA 首先完成PoW,然后认为 minerA 上的派生(数据链)较长,因此 minerA 成为最长的链并被视为有效, minerB 上的区块被视为无效并被隔离。

答案 2 :(得分:1)

首先,这一直在发生,并且建立了协议来处理它。

假设有两个矿工A和B,他们同时为一组不同的交易找到PoW。

矿工下一步要做的就是通过网络广播他们新发现的区块。

此广播不是瞬时的(光速不是瞬时的),因此A附近的矿工将首先从A接收广播,B附近的矿工将首先从B接收广播。

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

网络刚刚分叉,一部分网络正在以区块A结尾的区块链上工作,另一部分网络正在以区块B结尾的区块链上工作。

让我们假设现在有2个新矿工C和D。C是A邻居,并且正在A块之上的新块上工作。 D是B邻居,并且正在B块顶部的新块上工作。

想象一下,C比D首先找到一个新块的PoW。C将把这个块广播到网络。最终,D将收到此C块,并将意识到区块链X-> A-> C的PoW比其正在工作的X-> B还要多。

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