如果社区希望通过一个削弱攻击者算力的分叉来协调解决该攻击,他们可以很快做到这一点。
缺乏这种额外的安全性正是那些更加中心化的高 TPS 区块链的一个关键弱点。这样的区块链没有,也不可能会有普通用户运行节点的文化,因此其主要节点和生态参与者可以更容易地聚集起来,强制执行一项社区非常厌恶的协议更改。更糟糕的是,用户的节点将默认接受这种更改。一段时间后,用户会注意到这种更改,但到那时,这种强制的更改已经是一个既成事实:用户将承担拒绝这项更改带来的协调负担[2],他们将不得不做出痛苦的决定,逆转每个人都认为已经被敲定的一天或更多的活动。 理想情况是,我们希望有一种分片形式,避免 51% 的信任假设,并保留传统区块链通过全网验证获得的强大安全保障。这正是我们在过去几年里所做的研究。 1. 可扩展的计算验证 我们可以把防 51% 攻击的、具有可扩展性的验证分为两种情况:
验证区块链中的某个区块,涉及对「计算」和「数据可用性」同时进行检查:你需要确信,1) 该区块中包含的交易是有效的,且该区块新的状态根哈希是执行这些交易的正确结果;但你也需要确信,2) 有足够多来自该区块的数据已经被发布,这样下载该数据的用户就可以对该状态进行计算,并继续处理这条链。这第二部分是一个非常微妙但却很重要的概念,我们称之为「数据可用性问题」[3],稍后再详细介绍。 首先,以可扩展的方式验证计算是相对容易实现;有两类技术:欺诈证明 (fraud proofs) 和 ZK-SNARKs(简洁的非交互式零知识证明)。 ![]() 欺诈证明是一种具有可扩展性的计算验证方法 这两种技术可以简单地描述如下:
|