假设一个简单的Ethereum块链由10个块组成,这些块分布在10个网络节点上。现在,无论出于什么原因,都发生了一个错误,它使所有节点都同意区块链是正确的,即使每个节点的分块链版本中缺少块5。
我的问题是,区块链如何解决这种假设的情况?我知道节点协商一致会解决由于存在多个版本的块链而导致的问题,但是这种情况是不同的。在这个场景中,我们知道块链的所有版本都缺少块5,因此,我们不能相信块6到10中的事务性信息是有效的。
如果我们考虑一个完全在数字域内工作的区块链,那么区块链就可以在第四块恢复到它的事务状态。这有望将数字货币退回到适当的钱包--似乎合乎逻辑--但它仍然有潜力让用户放弃他们合法交换的数字货币。此外,如果我们使用区块链作为一种转移实物资产的机制,例如资产管理系统,那么恢复到以前的状态是不太实际的--将所有资产实际返还给第一至第四块中概述的原始所有者可能非常耗费资源,在财务上不可行,我们怎么能相信它真的会发生呢?
有些交易会丢失吗?区块链是否只从第六项开始有效?它是否需要创建一个全新的区块链?如果出现这种情况,我看不出如何才能完全纠正,如何维持对制度的信任?
我从编程的角度问这个问题:我目前正在使用C++来建模块链。但是,请注意,我并不怀疑块链如何意外地向所有网络节点分发无效的块链-散列和挖掘原则不允许这种情况。我在问,假设情况发生的话,决议是什么?
发布于 2021-06-23 12:04:50
我相信答案正如加文伍德博士在他的论文“以太:一种安全、分散的通用事务分类器”中所解释的那样。
“世界状态是地址(160位标识符)和帐户状态(数据结构序列化为RLP,参见附录B)之间的映射。虽然没有存储在块链上,但假设实现将在修改后的Merkle树中维护此映射(trie,参见附录D)。trie需要一个简单的数据库后端,它维护字节数组到字节数组的映射;我们将这个底层数据库命名为状态数据库。这有许多好处;首先,该结构的根节点在密码上依赖于所有内部数据,因此它的散列可以用作整个系统状态的安全标识。其次,作为一个不变的数据结构,它允许通过相应地更改根哈希来恢复任何以前的状态(其根哈希是已知的)。由于我们将所有这样的根散列存储在块链中,所以我们能够轻微地恢复到旧状态。“
https://ethereum.stackexchange.com/questions/102301
复制相似问题