(部分)解释的Casper CBC规范 | 作者:Barnabé Monnot | Medium

  • barnabe
  • 发布于 2018-11-16 16:42
  • 阅读 18

本文详细介绍了Casper CBC共识协议的原理和实现,包括其如何通过正确构建的方法确保协议的安全性,并阐述了协议空间、状态转换和equivocation等关键概念。

(部分)解释 Casper CBC 规范

带图片!

共识协议是一种机制,为一组通信代理提供保证,以就某事达成一致。在区块链背景下,下载新块的节点希望确保就一组交易作为规范的系统独特历史达成一致。在工作量证明(PoW)中,只要一个节点用一组交易解决了哈希难题,它就可以向其对等节点发布这组交易及解决方案的证明,并希望被包含在规范链中。

PoW 的缺点已被广泛讨论:除了极其浪费的能源消耗外,尚不清楚在保持相同安全水平的情况下其吞吐量是否可以显著提高。[1] 通过使发布新块的权利变得非常难以获得,PoW 有效地控制了主链的写入权限。是否有一种方法可以在保持完整性的同时授予这一权利?

任何替代方案都需要使产生错误的、超出共识的区块变得昂贵。在 PoW 中,如果你决定在共识商定的主链之外进行挖矿,你的损失将是挖这些非共识区块所需的工作量(解决加密难题)。这种损失可以通过浪费在难题上的能量以美元和美分来衡量。为什么不消除外部惩罚并将其内在化为框架的一部分呢?

这就是权益证明(PoS)的策略。在这种范式中,某些节点可以选择成为验证者。为此,他们必须同意锁定一定数量的资本(例如,以协议货币),并共同参与选择规范的下一个区块。如果验证者开始恶意偏离协议,其存款将被削减,这是真正的游戏理论中的奖惩机制。

但为了使这一想法可行,我们需要理解双花(equivocate)是什么意思。我们将验证者称为一组形成共识的对等节点。验证者必须就链达成共识,并努力维护协议历史的规范版本,尽管存在故障。这是 Vlad Zamfir、Nate Rush、Aditya Asgaonkar 和 Georgios Piliouras 的论文的对象。Aditya 已经给出了 对论文及其在共识研究中的地位的精辟概述。本文则是一个手把手的引导,以视觉方式展示数学背后的概念![2]

简化的 Casper CBC! \ \ 正确构造 Casper 共识机制的简化概述\ \ medium.com

什么是 CBC?

在设计系统时,尤其是价值数十亿美元的系统时,安全性是基础。彻底测试系统是确保系统按预期工作的一种方法。它的行为是否可预测?是否有输入集会导致内部不一致(例如崩溃)?

正确构造(Correct-By-Construction,CBC)方法论采取了不同的方法。我们指定一组基本原则,并从这些基本原则中通过逻辑归纳推导出正确性:这就是 CBC 的方式。为了实际有用,这些基本原则不应不一致,并且应通过一组形式规则来指定。从这些规则中,可以通过形式逻辑推导出系统的属性,并证明其始终正确。

论文中揭示的 CBC 方法还包括以下内容:系统的某些部分可能未定义,即等待进一步规范。我们可以证明某些属性 P 在某个空间 S 中的机制中成立。在 S 的子集上,比如机制的子类别 S’,我们可能会证明某些属性 P’,除了 P 之外,该属性可能对于不在 S’ 中的 S 机制不成立。例如,将 S 视为区块链共识机制的空间。将 S’ 限制为使用最长链分叉选择规则的机制空间。我们知道额外的规范(分叉选择规则)为我们提供了一致性,这是一个可能不适用于任何其他规则的属性 P’。因此,论文从一般、抽象的规范开始,任何部分都可以进一步精炼以产生额外的属性。

S 中的机制都满足某些属性 P。S’ 中的机制额外满足 P’。[3]

协议空间

CBC Casper 的优势在于定义了通用的协议空间,每个后续的细化都可以在此基础上构建并假定其正确性。这里的初始困难是理解协议空间存在于何处。机制需要一些基本元素:加权验证者,他们互相发送消息以达成共识。随着每个新消息的发送,协议状态会增长。

这些消息争论的对象是一组可能的共识值中的某个对象的真实值,它们被发送以就此值达成共识。如果可能值集合有两个元素,则是二进制共识。如果集合是一组可能的区块,则是区块链共识。消息的一般模式是:

  • 一个共识值,
  • 对验证者的引用(发送者),
  • 对某个协议状态的引用(理由)。

定义 2.7 给出了协议状态和消息集的(递归)构造规则。通过展开它们几轮迭代,可能会更好理解:

我们有两个验证者,A 和 B,他们的消息中总是发送值 1。第一组协议状态为空。任何人可以发送的唯一消息是他们的名称,值 1 和对前一状态的引用,即空集 ø。此时,网络中节点可以看到什么?要么什么都没有,ø,来自 A 的消息,来自 B 的消息,或者来自 A 和 B 的消息。验证者然后可以再次发送他们的名称,值 1,以及之前列出的任何状态。

为什么我们需要理由?在异步协议中,时间的概念并不简单。虽然两条消息可能是一个接一个地发送的,但不能保证它们在某个已知的延迟后会被任何其他节点接收。因此,我们需要每条消息证明自己,即给出它所基于的某个早期协议状态的引用。协议状态反过来只是一组消息,每条消息都引用某个先前的状态。下图给出了几个协议步骤的示例。

每条消息引用一个协议状态(虚线)并发布(实线)。B 发送第一条消息,引用 ø。A 可能没有看到 B 的消息,并发送了一条也引用 ø 的消息。B 发送另一条消息,引用其之前的消息以及 A 的消息。此时的状

  • 原文链接: medium.com/@barnabe/part...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
barnabe
barnabe
江湖只有他的大名,没有他的介绍。