哲学|Vitalik:区块链“验证”的哲学( 三 )


本文插图

这种技术有时也被称为无状态验证:客户端可以只保留区块头 , 而不是保留完整的区块链状态数据库 , 它们可通过向其他节点请求区块验证正在访问的任何所需状态项的Merkle证明来实时验证任何区块 。

这种技术的强大之处在于 , 轻客户端只有在听到警报时才可以验证单个区块 。 因此 , 在正常情况下 , 轻客户端仍然是轻客户端 , 它们仅检查大多数矿工/验证者支持哪些区块 。 但在那些例外情况下 , 多数链包含轻客户端不会接受的区块 , 只要至少有一个诚实节点来验证欺诈区块 , 该节点就会发现它是无效的 , 然后在它广播欺诈证明后 , 网络的其余部分就会拒绝它 。
4 分片
分片是这一点的自然延伸:在分片系统中 , 系统中的事务太多 , 大多数人无法一直直接验证 , 但如果系统设计良好 , 则可以检测到任何单个无效区块 , 并用欺诈证明证明其无效 , 这个证明可以在整个网络上传播 。 一个分片网络 , 我们可概括为每个人都是一个轻客户端 。 而且只要每个分片有一定的最小阈值参与者数 , 网络就具有群体免疫性 。
此外 , 在分片系统中 , 区块生产是高度可访问的 , 甚至它可以在普通的笔记本电脑上完成 , 这一事实非常重要 。 网络核心不依赖高性能硬件 , 这使得多数人驱动的协议变更 , 更难以“默认获胜” 。
这就是可审计性在现实世界中的含义:不是每个人都一直在验证所有事情 , 而是每个特定部分都有足够的眼睛 , 如果有错误 , 它将被发现 , 以及检测到一个错误 , 则所有人都清楚可见 。

也就是说 , 从长远来看 , 区块链肯定可以在这方面有所改进 。 一个特别的改进来源是ZK-SNARKs:有效可验证的密码学证明 , 允许区块生产者向客户端证明区块满足某些任意复杂的有效性条件 。 有效性证明比欺诈证明更强大 , 因为它们不依赖于交互式游戏来捕获欺诈 。 另一重要技术是数据可用性检查 , 它可防止数据未完全发布的数据区块 。 数据可用性检查确实依赖于一个非常保守的假设 , 即在网络的某个地方至少存在少量诚实节点 , 好消息是 , 这个最小诚实阈值很低 , 并且即使存在大量攻击者也不会增长 。
5 时间和51%攻击
现在 , 让我们来了解下“默认为混乱”思维方式最糟糕的后果:自行进行51%攻击 。 目前很多社区的标准是 , 如果一次51%攻击成功 , 那么发生51%攻击的区块链必然会成为有效链 。 这一标准经常被严格遵守 , 最近发生的ETC 51%攻击就很好地说明了这一点 。 攻击者恢复了3000多个区块 , 结果是 , Geth节点使用了攻击者的区块链 , 而OpenEthereum节点仍然保留在原始链上 。
我们可以说 , 这次攻击实际上是默认混乱 。 不幸的是 , ETC社区随后选择接受攻击链作为规范链 , 这一举动被eth_classic描述为“遵循预期的工作量证明” 。 因此 , 社区规范积极帮助攻击者获胜了 。

但我们可以设想一个规则 , 一旦客户端接受了一个区块作为规范链的一部分 , 并且该区块有超过100个后续区块 , 那么客户端从此将不再接受不包含该区块的区块链 。 或者 , 在具有最终确定性的权益证明设置中 , 想象一个规则 , 一旦完成一个区块 , 就永远无法还原 。
5个区块还原限制仅用于说明目的 , 实际上 , 限制可能会更长 , 例如100-1000区块 。
明确地说 , 这对规范性的确定方式带来了一个重大改变:客户端不再只查看它们自己接收到的数据 , 客户端还会查看数据是何时收到的 。 这引发了由于网络延迟而导致客户端不同意的可能性:如果由于一次大规模攻击而同时完成两个冲突的区块A和B , 有些客户端首先看到了区块A , 而有些客户端首先看到了区块B , 该怎么办?但我会说这很好:这意味着 , 尝试恢复交易的51%攻击不会默认为胜利 , 而是默认为混乱 , 而带外应急响应 , 则可以帮助选择正确的链 。


推荐阅读