如何将特定问题与区块链的实际关注点关联起来
扫描二维码
随时随地手机看文章
在区块链的世界里,共识协议被广泛讨论。然而,通常很难区分竞争的协议并对它们进行评估,尤其是并不清楚某个特定协议如何解决共识问题,或者该特定问题如何与区块链的实际关注点相关联(例如,我的交易何时得到确认?)我用的是什么分叉?
大致说来,协商共识协议的目的是在相互不信任的各方之间达成的协议。在比特币网络中,节点正试图就下一个区块包含什么内容达成一致。在这个网络中,块告诉我们广播了哪些事务,以及这些事务的顺序。其他的共识协议通常是相似的——它们告诉客户应该应用哪些操作,并且这些操作的顺序是什么。
作为一个共识协议的用户,你可能一开始会想“好吧,我不太关心操作的顺序和时间,只要我能保证这些操作是正确的。”的确,正确性是一个重要的属性。但是,这个属性完全与操作的顺序和时间有关。为了了解原因,让我们看一些事务示例。
T1:公钥A将代币“Z”转移到公钥B
T2:公钥A将代币“Z”转移到公钥C
T3:公钥B将代币“Z”转移到公钥D
现在,当单独检查时,确认这些事务的正确性是微不足道的。对于事务1和事务2,验证者只需要确认事务是由与A对应的私钥签名的,这在相当枯燥的密码学中是可以实现的,并且已经存在了几十年。但是单独检查这些事务并不有趣,并且不能提供有用的正确性度量。我想知道我是否“拥有”代币Z,也就是说,没有人可以在未经我允许的情况下,令人信服地转移那枚代币。共识协议对此有什么要说的?
重要的是,在一个共识协议中,网络中的客户端和节点会达成一致的世界观,而这种世界观中进行交易。一旦我们可以订购事务,我们就可以开始评估它们在特定时间点是否有效。例如,如果一个共识协议确定在时间0,代币“Z”是由公钥A拥有,并且交易排序为T1,T3,T2——显然,T1和T3是有效的,但T2是无效的(因为在T1广播之后,Z由公钥B拥有,而不再是公钥A)。但是,如果协议确定事务的顺序是T2、T1、T3,那么只有T2是有效的。显然,秩序和时机保证很重要。幸运的是,这正是共识协议试图提供的。
共识议定在秩序和时间方面提供两项保证:
· 安全性:只要协议的错误参与者不超过某个阈值,其他参与者就无法说服客户机接受错误或无效的消息。
· 灵活性:只要协议的错误参与者不超过某个阈值,其他参与者就不能无限期地延迟接受正确消息。
在区块链环境中,这些保证通常意味着什么?如前所述,在区块链上验证不正确的消息几乎是微不足道的。这是否意味着安全性是一个微不足道的目标?当涉及到事务的时间安排和事务的顺序时,为什么灵活性很重要?这些和分叉有什么关系?
为了将其映射到区块链中,我们必须首先了解区块链到底想要达成什么共识。事实证明,答案不是信息,甚至不是事务,而是历史。区块链客户端不断地尝试找出哪些事务的历史是“真实”的历史。从前面的事务示例中,客户端需要判断这两种可能的历史记录中哪一种是正确的:
历史1:事务1,事务3。
历史2:事务2。
Nakamoto consensus使用工作证明挖掘和“最长链胜出”度量来决定哪个历史是正确的历史。如果网络中的所有节点都是诚实的,那么这个历史记录应该与预期的历史记录相匹配。
有了这样的理解,我们现在可以就区块链构建我们的两个共识保证:
· 安全性: 只要协议的错误参与者的阈值不超过某个阈值,其他参与者就无法说服客户机接受错误的历史记录,
· 灵活性: 只要协议的错误参与者不超过某个阈值,其他参与者就不能阻止客户端接受某些历史记录作为正确的历史记录。
有趣的是,当涉及区块链时(尽管大多数共识协议都是如此),我们通常对正确性、有效性、顺序和时间等属性的理解需要同时保证安全性和灵活性。这就是区块链的本质。如果我希望确信自己不会受到“双重支出”的攻击,那么我需要知道,首先,事务将被及时接受,其次,一旦被接受,事务就不太可能处于孤立块中。
这就是为什么安全性和灵活性是容错协议不可分割的属性。容错协议使用技术来保证活性,而活性会影响安全性,反之亦然。例如,在实际拜占庭容错中(一个最具影响力的容错共识协议),两阶段提交副本所使用的机制是确保副本取得进展。如果这个机制有缺陷,就会影响安全性和灵活性。这些特性在没有其他特性的情况下不能得到有效的处理或证明。一项消除安全顾虑的协议总是可以取得进展的。
如果区块链将彻底改变人们在互联网上的互动方式,那么这些区块链的正常运作将是非常重要的。在评估各种平台的技术和计划时,必须记住区块链试图解决的基本问题。在基本层面上,这个问题是一个老问题:在达成共识的同时容忍一些错误或恶意行为者。无论在理论还是实践中,这都意味着提供灵活性和安全性的保障。然而,这些保障是不可分割的,因为提供一种保障的机制总是相互影响的。
现在,当评估那些试图在支持开放区块链的新机制方面取得进展的项目时,充分处理这两个问题的项目最有可能取得成果。像Stellar这样的项目在联邦模型(非开放)中使用协商共识协议,但是提供了良好的容错保证。Algorand在构建容错协议方面也取得了重大进展,尽管处理开放成员集的问题仍然悬而未决。我们自己的区块链设计工作提供了容错保证,同时通过工作证明挖掘支持开放成员之间关系。