欢迎光临
我们一直在努力

Symbol:什么是最终性(Finality),为什么它很重要

在NEM社区有很多人想更好的了解最终性(Finality),为什么最终性(Finality)很重要,以及在为Symbol做什么的过程背后的一些更详细的信息。这篇文章试图把其中的一些东西整合起来作为一种信息资源。

在进入这个领域之前,我个人最近对这个领域有了更深入的了解,感谢@jaguar0625和@gimer的耐心、外部安全公司的帮助以及网上的一些阅读,我可以从表面上为大家解释。坦白地说,为了了解最终性(Finality)概念,它让我费解和痛苦,开发人员正在做的是复杂的,而不是心生畏惧。

在可能的情况下,我尽量不涉及技术细节,为了便于阅读,在某些地方故意将其过度简化。这篇文章也将被翻译并发布在官方博客上。

请先花几秒钟了解以下内容:

  • 最终性(Finality)很重要,因为没有它,任何交易理论上都可以回滚
  • 有两种方式-显式(确定性)和隐式(概率性)
  • 在没有确定性的Finality的情况下,区块链的用户需要建立检查来管理风险,直到他们认为一个交易是最终的,比如6个BTC确认(约1个小时)
  • 较新的链有增加确定性最终性(Finality)的方法,这意味着它们更安全、更健壮、需要更少的变通方法,但也存在折衷,例如更容易受到DDoS攻击。这些链条是Symbol的竞争对手或同行。
  • 在与交易所、托管人、受监管实体和所有权转让解决方案讨论时,最终性(Finality)很重要,至少有一家一级交易所就XYM上币进行了沟通。
  • 核心开发人员基于领先的方法和前沿的研究,已经完成了几个解决方案的设计。这是一个很难解决的问题,我们已经在适当的时候聘请了外部援助来支持和帮助。设计进展顺利,但有一些领域需要完全确定,这比估计的时间要长。
  • 在这一阶段,启动日期可能会推迟,开发人员继续开发并同时设计,但现在正处于一个进展停滞的阶段,设计没有得到充分同意。它的长度很可能是几周而不是几个月,但直到设计完成后才能知道。

对于那些想了解更多细节的人,请继续阅读并提出任何问题。

Blockchain 101

阅读本文的大多数人都会知道,区块链是一种被连续链接的区块,节点网络同意将这些区块链接在一起,形成一个所有节点都有其副本的可加密可验证链的账本。有几个基本术语值得定义:

  • 共识:一个网络上的节点都同意一个单块链是有效和可验证的链的机制,以及它们如何处理分歧、恶意节点、节点进入/离线状态等。NEM使用修改后的POS共识。增加了重要/声誉评分和VRF哈希,有助于确保收获的随机性
  • 安全:如何确保诚实的一方不会在相互冲突的事情上达成一致
  • 活跃性:如何确保诚实的当事人就某件事达成协议
  • 可验证随机函数(VRF, Verifiable Random Function):一种可以公开加密验证其输出是真伪随机的函数。在Symbol wallet(和“选择加入”)中,您将看到VRF密钥作为任何想要收获的人的一个选项……请确保您留下了它的票证,否则您将没有资格收获(不要担心,它会出现在后续的指南中)
  • 分区(Partitioning):当网络分裂/不一致时
    • 一致性和分区容差:如果发生网络分区,那么在状态被纠正(活动性受到影响)之前,不会添加任何区块,区块链会有效地停止
    • 可用性和分区容忍度:如果一个网络分区发生,那么所有分区将独立进行,独立链将分别增长,当分区被解析时,竞争链将需要被解析(通常但不总是这是最大的分区)
  • 最终性(Finality):区块链的用户如何“知道”一个交易是最终的并且不会改变,或者可以在区块链上回滚。
    • 拜占庭容错(BFT):一个网络如何应对任何给定的参与者变得恶意/敌对或不诚实行事。最后,这通常是PBFT(实际BFT)或DBFT(委托BFT)

什么是最终性(Finality)

区块链空间中的最终性(Finality)是指人们可以判断链上的交易或区块是否存在未来发生变化的风险。

所有区块链都有微分叉,它们经常从这种状态恢复到单个链。在这些微分叉中,有些节点认为区块A是下一个有效区块,有些认为区块B是下一个有效区块,网络分叉为几个区块创建2个并行链,这些链可以持续1个或多个区块。

网络需要一种方法来就哪个并行链是正确的达成共识,并回滚不正确的链,以便所有节点都回到同一个链上(因此是公共账本),如果链能够按照约定(最终的)标记给定的区块,则在该过程中也是有用的。

最终性(Finality)是一个过程,通过这个过程,给定链中的交易可以被认为是最终的,因此一个交易不会或极不可能被回滚,并且可以被信任为永久的。

存在什么类型的最终性(Finality)

这里有两种主要的实现方式-概率或确定性。

  • 概率依赖于足够多的区块传递,故意启动一个并行链并尝试回滚真正的链是非常昂贵/不切实际的,这可能是最终的
  • 确定性意味着网络同意(通常以某种方式标记)一个区块或交易为链上的最终交易——它被确定为最终交易

BTC和大多数其他PoW链使用的是“概率”的方式,而更现代的PoS链倾向于“确定性”的方式,主要是因为安全性更好,它们具有更快的块时间和/或针对特定的用例或行为。最终,这意味着他们的交易和余额可以更容易、更安全、更迅速地得到信任。

例如,概率最终性(Probabilistic Finality)解释了为什么Binance需要6个确认来贷记您的BTC存款…他们需等待链增长足够长的时间,以降低他们的交易对手风险。人们普遍认为,这需要6次确认(约1小时),因此发生51%的重大攻击以使链回滚的可能性较小,因此这可能是最终的,尽管从技术上讲,这是不可能的。

最终性(Finality)为什么重要

使用任何区块链的任何人都不应信任给定区块中的交易,除非它们被标记为最终交易,或者链足够长,以至于它们在概率上是最终的。非常简单的答案是,这一点很重要,因为否则人们需要“猜测”一个交易何时可以被信任,不管是价值转移、多信号设置、消息中的信息——任何链上的交易。

举个例子说明没有最终性(Finality)会发生什么:

  • 我转100BTC到Binance,他们在确认后给我
  • 我把BTC换成ETH,然后立即提现到另一个钱包(需要10-20分钟)
  • 在4个确认(40分钟)后,由于处于“错误链”上,BTC交易被回滚

以上的最终结果是,“我转BTC到Binance”这件事从未发生过,我的100BTC仍然在我的钱包中,但是我的ETH交易和随后的提现导致了我的钱包里也有ETH……Binance没了100BTC。这虽然是一个过于简单化的例子,但说明了概念。

另一个例子是,如果使用BTC,大多数加密支付系统必须解决的双重开销(双花)问题。顾客不会等1个小时去买咖啡,咖啡店也不想在我离开后因交易回滚而损失资金。这是“闪电网络”在BTC上所做的一部分,另一个解决方案是支付提供商承担风险并从收入中冲销损失,因此最终费用会增加;提供商创建链外风险管理解决方案。

还有其他的例子,如转让艺术品的所有权、证券型代币或收藏品等。在旧链中处理的方式是等待一段时间,直到它最终确定,并将其编码到使用链等待的解决方案中。较新的链已经开始通过转向确定性的最终性(Finality)来解决这个问题,因此竞争性的链具有这种特性,这是一些用例在选择链时决策过程的一部分。

最终性(Finality)问题并不是XEM发布时经常出现的问题,但它已经从与XYM相关的交易所发展而来,因为交易所(和保管解决方案)现在知道它和它的解决方案存在挑战。当你开始谈论诸如中央银行使用、证券代币化使用、新的一级交易所上币、公有链上的跨链交换等事情时,最终性(Finality)变得很重要。对于私有链来说,这一点基本上并不重要,但在某些情况下也可能如此。

常见的最终性(Finality)方法有哪些

在确定最终性(Finality)中,有几种主要方法用于其他链:

  • Polkadot: Grandon(PBFT),验证链而不是区块,可用的分区(available partition)
  • ETH2.0:Caspar FFG(PBFT),20分钟终结(finality),可用的分区(available partition)
  • Cosmos/Tendermint:PBFT,快速终结,一致分区(consistent partition)
  • Algorand:新的,快速的终结(finality),但使用一致分区(consistent partition)并假定同步性

Cosmos/Tendermint是第一个提出生产级解决方案的公司(它依赖于验证器),Algorand通常被认为是目前比较先进的方法之一,但是它依赖于一些尚未被证实的假设以及强大的网络同步性假设。

如果要将区块或交易标记为”final“,该问题分为两个主要步骤:

  1. 谁应该被允许投票决定它是”final”
  2. 所有的选民怎么知道要信任其他选民,知道他们什么时候投票了

确定最终性(Finality)主要有两个子类型:

半去中心化

这些解决方案依赖于一个已知的节点池,这些节点被预先选择以允许投票决定给定的区块或交易是最终(final)的。这在大多数解决方案中都会用到,比如验证器(validator)或见证人(witness,EOS、Cosmos、Steem、ETH2.0、Polkado等)。常见的模型包括DBFT、PBFT、Threshold Signatures和其他一些模型。大多数解决方案都有理论上的可伸缩性限制,并没有被广泛推广到超过250个节点的投票,这主要是由于上述第2点所涉及的网络抖动。这些限制很难精确定义,因为它们还取决于消息的复杂性、最终运行的频率以及其他一些因素。

在NEM的场景中,这个选项意味着我们可能需要选择一个子集的超级节点,并讨论该选择方法的公平性和健壮性,如果它可以随机化等。随着投票节点数量的增加,最终性(Finality)开始落后。这些都是假设性的风险,因为这些问题在现实世界中没有得到广泛的处理,并且在一定程度上依赖于研究论文中的数学/桌面模型,因此它们将作为Testnet的一部分进行测试。

这些解决方案可能涉及可用或一致的分区方法。

完全去中心化

这些解决方案依赖于一个动态投票池,任何节点都可以加入或离开该池对给定的区块进行投票。所有的节点都需要有一种方法来知道谁应该投票,什么时候投票结束,而不需要与其他每个节点进行对话来确定(减少网络抖动)。

这些解决方案虽然更加复杂,但同时也更健壮、更安全和更可扩展。有几条链对这个问题有很好的记录,例如Algorand。

Algorand特别使用了一致分区(consistent partition)的方法,这意味着它将在出现网络分裂时暂停,并需要(自动)恢复。如果延迟时间较长,可能会导致可用的投票密钥用完,并且最终结果需要完全重新启动,这是自动的,并且每小时运行一次。这意味着链数据的使用者需要处理存在最终性(Finality),但预期会失败和恢复的情况,因此,如果最终性(Finality)需要长达1小时的时间进行标记,那么对final交易的任何检查都将立即需要一个edge case路径。

我们要用Symbol做什么

好消息是其他一些链已经开始解决这个问题,而且这些设计都是开源的,所以我们的设计过程在理论上稍微容易一些,但仍然很复杂。例如,这些其他的链没有一个像我们一样使用相同的共识基础+修改。

核心开发人员已经对解决方案设计进行了几个月的研究,并且完全了解问题领域。我们最近引进了一家专业的证券公司,该公司曾参与过多个类似的项目,其报告得到了各实体的认可,这些实体对上交易所进行尽职调查等决策。他们的密码专家负责人现在正积极与团队合作,早期的反馈对设计是积极的,但仍有工作要做。

类似Algorand的方法已经被考虑过,直到最近才被认为是可行的,但是在这个过程接近尾声的时候,一个特别棘手的关于“缩减(Reduction)”的问题被发现。具体地说,这种方法依赖于验证区块,但是我们(类似于Polkadot)的验证链,即前面提到的微分叉(>1个块),要协调这两者,就需要进行大量的重写,而且很可能是一个面向一致分区(consistent partition)方法的设计决策,而NEM在开发工作的早期选择了不遵循这种方法,而倾向于使用可用的分区(available partition)方法。

下一步是重新评估用于发布的PBFT解决方案,核心开发人员目前正在积极开展这方面的工作,沟通每天都在进行,涉及大量的研究和建模。这种方法以前是暂时搁置的,所以研究工作不是从头开始的,安全公司正在积极协助这一方案。

如果这种方法被证明是卓有成效的,并且通过了设计评审,那么很有可能为Symbol提供了与其竞争的链(eth2.0、Polkadot等)类似的方法。

设计过程所花费的时间比估计的要长,主要是因为这些特征集处于区块链学术研究的前沿,建立在已有多年的PBFT等解决方案之上。这是一个非常密集的领域,在业内没有明确、共同的正确答案。正确的解决方案使Symbol处于当今市场技术解决方案的前沿,并与已取得重大成功的项目并驾齐驱(包括采用率和代币价格表现),但这不是一个简单的过程。

核心开发人员一直在参与设计并同时进行编码,直到最近,当我们达到一个临界点,即没有最终设计就无法继续前进,所以进度一直在继续,但现在已经到了一个瓶颈。

接下来的步骤是完成设计,我们希望在未来1-2周内完成(这仍然是一个估计,不是一个准确的日期)。然后我们可以对完成实施所需的工作做出更坚定的估计。

在这个阶段,它看起来可能会对testnet的启动产生影响,甚至可能会影响到发布日期,但我们正在考虑一些选项,以尽量避免或尽量减少这种影响。至于上下文,我们说的是几个星期,而不是几个月,如果它发生了。

我希望以上所有的一切都有意义,任何人仍在阅读仍然是清醒的,请务必提出问题,我将为他们尽我所能回答(或来源答案)。

有用的进一步阅读

以下资源是一些帮助我了解问题和选项的内容:

评论 抢沙发