Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blockchain 基于区块链的系统如何保证区块的不变性?_Blockchain_Immutability - Fatal编程技术网

Blockchain 基于区块链的系统如何保证区块的不变性?

Blockchain 基于区块链的系统如何保证区块的不变性?,blockchain,immutability,Blockchain,Immutability,在阅读了Grokking比特币之后,我现在对比特币的工作原理有了一个大致的了解,但我仍然怀疑,一般来说,基于区块链的系统如何保证随机块的不变性?我知道每个块都存储了前一个块的内容加上一些nonce的散列值 假设这个区块链(为了简单起见,我们使用链表样式而不是Merkle树样式)有1000个区块,一个黑客刚刚更改了第10个区块内的内容。当然,如果我们重新计算第10个块的散列,并将其与第11个块中存储的散列进行比较,很可能会有所不同 我的问题是,基于区块链的系统是否应该定期检查每个区块内的散列,以检

在阅读了Grokking比特币之后,我现在对比特币的工作原理有了一个大致的了解,但我仍然怀疑,一般来说,基于区块链的系统如何保证随机块的不变性?我知道每个块都存储了前一个块的内容加上一些nonce的散列值

假设这个区块链(为了简单起见,我们使用链表样式而不是Merkle树样式)有1000个区块,一个黑客刚刚更改了第10个区块内的内容。当然,如果我们重新计算第10个块的散列,并将其与第11个块中存储的散列进行比较,很可能会有所不同

我的问题是,基于区块链的系统是否应该定期检查每个区块内的散列,以检测区块的内容是否发生了变化?在这种情况下,如果系统没有定期重新计算第10个块的散列的函数,它将无法检测到更改,对吗?换句话说,我的问题是基于区块链的系统如何检测区块的变化


谢谢

当您更改第10个块的内容时,您必须找到哈希以满足该块的难度。这被称为“采矿”,需要时间/精力。当您最终找到该块的哈希值时,您可以将新块传播到区块链,并传播到所有其他节点


然而,他们将忽略该区块,该区块将在第9个区块创建一个新的区块链分支,因为它比当前区块链落后991个区块(在区块链中落后约7天)。矿工们将只在最长的新区块链上作业,而不是在最近收到的区块链上作业。因此,您的新第10个区块将不会被保存或使用。您计算散列的努力是白费的。此外,原来的第10个区块仍然位于每个其他节点都知道的区块链内,并且没有改变。您刚刚挖掘了其他节点不关心的第10个区块。

谢谢您的回答!以前我认为黑客可能只是改变区块内的交易,而不是提出一个新的区块并制作一个分支,但是考虑到每个完整的区块链节点都有一个完整的链副本,这是不现实的。根据你的解释,我现在也理解了51%的攻击。非常感谢你!