关于区块链:万字实录-张韧做客-Zero-Knowledge-播客畅聊共识协议安全性和-NCMax-那些事

30次阅读

共计 14856 个字符,预计需要花费 38 分钟才能阅读完成。

Zero Knowledge 是业内驰名的专一于零常识证实的英文播客,深入探讨新兴 Web 3 技术,与正在构建它的社区成员们。该播客的听众为同行开发者和心愿理解该区块链外部运作的人们。播客的创建者 Fredrik Harrysson 与 Anna Rose 示意,他们不投机,不多谈交易,更多专一于技术自身。

最近的播客邀请到了 Nervos 研究员张韧。张韧和主持人一起聊了聊他在共识算法上的钻研工作,并从 Ren 之前做的对于评估 PoW 共识协定安全性的钻研开始,探讨到了他为 Nervos 设计的共识协定 NC-Max。Nervos 中文社区为大家整顿了播客的内容文稿,供小伙伴们查看。

更多精彩内容,欢送收听残缺播客:

https://www.zeroknowledge.fm/155

播客创建者 Anna:欢送张韧做客 Zero Knowledge 播客。在往年四月份,咱们和 Ittai Abraham(注:VMware Research 研究员)有一集对于 共识的话题 。在那期节目之后,之前上过咱们节目的 Alan Szepieniec(Nervos 哈希算法的作者)分割我说:「嘿,我在 Nervos 有一位共事,如果你们正在探讨无关共识的话题,你真的应该和他聊聊。」这就是张韧。咱们早就想请你来咱们节目聊一聊共识协定这个话题,也很开心你明天终于能退出咱们的节目!
* 播客创建者 Fredrik:* 所以咱们明天有一些十分乏味的话题,深刻开掘共识的货色。然而在咱们开掘之前,让咱们先来谈谈你吧,你是怎么进入这个畛域的,是什么让你对这方面的钻研感到兴奋?
Ren: 我在读硕的时候就在做点对点网络的钻研。我在 COSIC 攻读博士学位期间,开始四处寻找乏味的课题,这个历程大概花了两年工夫,我不得不说我失败了。所以最初我筹备了几个研究课题,去问了一些组里的资深成员。比如说,你感觉哪个研究课题是最有意思的?而他们都举荐我去钻研比特币,他们说「钻研加密货币的最佳时机曾经过来了,但兴许你还是会因而失去一个 PHD:)」那是 2014 年的事了。
我从 2014 年开始从事比特币和加密货币的钻研,后果发现这个畛域比他们预期的要长久的多。
Anna:当他们说这句话的时候,他们实际上是想说最激动人心的局部曾经过来了,还是暗示说整个趋势将会隐没?
Ren:我想在那个时候,整个趋势仿佛正在隐没。比特币的价格每天都在上涨,畛域里对于比特币的论文也越来越少,但谁晓得当前会产生什么呢?
Fredrik:这是有情理的, 因为比特币其实很简略,它的概念很简略。你不会感觉对于这样一个简略的货色,有几十年的钻研要做。然而咱们当初曾经过了十年了,人们还在一直地发表论文。
Ren:特地是过后比特币网络还比拟小,大略只有 600 个节点,当网络越大,你就能在外面找到更多乏味的钻研问题。所以过后大家认为比特币网络不是一个很令人兴奋的钻研对象。之所以还是决定要钻研它,就是因为它是有些凌乱,凌乱的中央通常就有机会。
Fredrik:咱们明天要谈的第一篇论文,就是你与 Bart Preneel 合写的那篇论文《Lay Down the Common Metrics:评估 PoW 共识协定的安全性》_(https://www.chainnews.com/articles/877157649464.htm)_。我还没有读过论文,但我读了摘要,它的内容相当乏味,最有意思的是它外面谈到人们通常会如何剖析共识算法以及为什么有些剖析形式是谬误的。那你能不能谈一下这篇论文是对于什么的,你在外面发现了什么?

Ren:有一段时间我对自私挖矿攻打很着迷,所以我试图找到解决这种攻打的办法,找到一种对这种攻打免疫的共识协定。我试着设计了十几个协定来评估它们的安全性,所有的协定都不完满。我对这些计划都不称心,所以我没有颁布任何一个计划。几年后,我发现这些我认为是欺诈的想法由其他人陆续发表进去了,而且他们宣称他们的协定是平安的,比中本聪共识好,比比特币的共识协定好。我感觉这是不对的。人们须要被告知,这些想法是有缺点的。他们开拓了新的攻打载体,而设计者并没有意识到这一点。
Anna:他们并不理解你的钻研,他们并不是看到了你的钻研,而后就拿去用了,这些应该是他们本人得出的论断,对吧?
Ren:对。因为这些想法都是比较简单间接的,就是你第一眼看感觉是有情理的。然而如果你深挖一下,真正地去剖析他们的安全性,你会发现问题。

尤其让我感到怄气的是,很多论文都是通过模仿,针对某些攻打策略来论证其共识零碎的安全性。2013 年有这样一篇论文,叫《Majority is not Enough》_(https://www.cs.cornell.edu/~ie53/publications/btcProcFC.pdf)_,外面针对自私挖矿攻打剖析了其协定的安全性,并号称这个新的共识协定要优于中本聪共识。然而,我认为这并不是一个平安证实。为什么呢?兴许你的零碎、你的新设计会激发新的、专门针对你的攻打办法。

当咱们在论证一个共识协定的安全性时,通常须要找到一个更为谨严的形式:比方要么你能证实在新的共识协定下,无论攻击者采取何种攻打策略,他都不能取得更多的利润或者造成更多的损失;要么你设法剖析攻击者所有可能会采取的策略,无论该攻击者在某个策略空间内做什么,他都不能造成更多的损失。我认为这样才是正确的剖析一个共识协定安全性的形式。
Fredrik:这是一个常见的问题,人们不会老老实实、含糊其辞地议论他们的取舍,只会说,咱们创造了这个新货色,它比另一个货色更平安,然而对可能产生的新问题避而不谈。
Ren:是啊,所以我汇合了一组这类新的共识协定,通过马尔科夫(Markov)决策过程来剖析它们的安全性,而后写了这篇论文。
Anna:好的。你在论文中提到的那些新的共识协定都是曾经存在的对吗?咱们能够讨论一下。
Ren:是的,有一个协定叫 对立平局协定(Uniform tie-breaking protocol),是在 Ethereum 中实现的,然而我想所有的 Ethereum 开发者和研究者,他们都晓得这个协定的破绽。所以这不是一个很大的问题。而且还有一个协定叫作 Rootstock,是一个和我论文中提到的 Reward Spitting protocol 十分类似的协定。另外一个比拟驰名的协定是FruitChains
FruitChains 是由 Elaine Shi 设计的,宣称与激励相容,能够抵制自私挖矿攻打。然而我发现它只是比中本聪共识对自私挖矿攻打的抵抗力更强。如果每个区块都是通过 100 个区块确认的、如果你只用 6 个区块信息,和比特币的中本共识一样,那么 FruitChains 其实更容易受到自私挖矿的攻打。

所以在中本共识上的问题就像 Fredrik 问的那样,就是它没有完满的链质。也就是说,一个攻击者领有不到 50% 的挖矿能力,就能够平安地让区块链中最初几个区块生效。这也是为什么中本聪共识只能提供概率意义上的平安保障。

而对于这种号称比中本聪共识更平安的新设计,咱们认为它须要满足两个要求之一:要么它能实现更好的链品质,要么它们能更好地抵挡三种攻打:

  • 自私挖矿攻打
  • 双花攻打
  • 进一步分叉攻打(审查攻打)

相应的咱们将所有这些新的共识协定分为两组:第一组宣称能实现更好的链品质,第二组则宣称能实现更强的抗攻击能力,咱们据此剖析他们的安全性。

我采纳了 马尔科夫决策过程(Markov Decision Process)作为剖析框架,它能够让咱们在一个局部随机的环境中模仿一个策略参与者的行为。

策略玩家指的是攻击者,局部随机环境指的是环境绝对固定(它以已知的形式响应攻击者):如果攻击者这样做,在什么概率下,会产生某些状况,在什么概率下,会产生另外一些状况。攻击者能够任意抉择挖哪条链以及任意工夫公布他挖到的任意个区块。攻击者在攻打链品质或者进行我提到的这三种攻打方面能做的最好的是什么。
Anna:所以你的模型中,你实际上剖析了两种状况。
Ren:第一类叫「更好的链品质协定」。而另一个是三种抗攻打协定。
Anna:所以要么是更好的链品质,要么就是这些具体的攻打矢量,但在你的模型中,你是在做这些货色的组合,还是你总是专一于其中之一?
Ren:我感觉有两个不同的规范。你能够从两个不同的维度来思考。只有你能在其中一个维度战胜中本聪共识,就算你赢。
Anna:我明确了,然而基于新的共识协定,可能会引起一些新的攻击方式,最初你可能会有一个不太平安的链,对吧?
Ren:如果你的链品质比中本共识好, 那么你天然有更好的抗攻击能力。因为中本共识的基本问题在于,它的 Chain Quality 并不完满 。然而,如果你不能达到更好的链品质,一些协定宣称,他们依然能够比中本共识更好,因为他们更可能抵制所有已知的攻击方式。所以咱们把协定分成两组,第一组宣称他们在链品质上比基于中本聪共识的链好,所以咱们也就不须要剖析他们如何应答攻打了。
Anna: 有哪些共识协定宣称链品质更好呢?
Ren:有一些协定宣称他们更好,然而并没有宣称他们在所有方面都更为优越,为了不便,咱们把他们归为第一类协定。但第二类协定通常宣称本人采纳了新的激励机制,然而与中本聪共识领有雷同的链品质。基本上他们应用的是雷同的比特币骨干协定,然而宣称能够更好地抵挡各类攻打。所以我想看看是不是真的这样。
Anna:在这种状况下,你是在剖析他们的链品质是否雷同,还是在剖析他们是否真的能抵挡这些攻打?因为我的了解是,如果他们试图在某一个方向上改良,他们就可能面临新的攻打?
Ren:这是在抗攻打协定的范畴内。所以有两组状况:第一组是「更好的链品质协定」,第二组是「抗攻打协定」。
对于「更好的链品质协定」,他们对中本聪共识进行了批改。中本聪共识简略来说,由两个根本规定组成:第一个是矿工只认最长的链,第二个是如果矿工看到两条在竞争的、长度雷同的链,会在先收到的那条链上进行挖矿。

如果你依照这两个规定走,你会和中本聪共识有同样的链品质;如果你批改这两条根本的规定,那我就把你放在「更好的链品质协定」里。如果你不批改这两个根本规定,而是批改处分机制,你用新的机制来激励大家不做自私挖矿、不做审查攻打,那么我置信你是一个 「抗攻打协定」
Fredrik: 更具体地说,有哪些协定是能够做到改良链品质的?
Ren:我感觉最乏味的例子(对有些人来说是最反常的例子)是有一个协定,我叫它「最小的 Hash Tie-Breaking 协定」。
我起这个名字是因为我不想说出任何具体的我的项目。在这个最小哈希平局突破协定中,设计者认为 如果我总是在最新的一个区块哈希值最小的链上挖矿,那么所有诚恳的矿工都会自然而然地在同一条链上挖矿,算力永远不会被宰割,链变得更加平安。

这是他们的直觉。所以这是一个「更好的链品质协定」,因为它批改了中本聪共识中的首接策略(当两条链长度雷同时,要求矿工在他们更早接管的链上挖矿)。
Fredrik:直觉让我觉得很有情理,因为就像你一样,在编程中任何时候咱们议论工夫,都会出错。如果你说的是「更先收到」,那显然对每个人来说都会不同,因为网络提早或者什么其余的起因,它基本上只是一个随机的偏差。那么最小哈希值平分协定又有什么问题吗,或者说直觉其实就是正确的?
Ren:直觉是不对的。在一些极其的状况下,最小哈希值平分协定的体现比中本聪共识略好。然而,对于咱们剖析的大多数参数来说,它的体现其实比中本聪共识更差,因为它会面临两种新的攻打:第一个我称之为「后发赶超」,比如说,如果你是一个攻击者,你在挖一条机密链有一个区块,诚恳链有两个区块,那么在中本聪共识里,你通常会间接放弃,因为诚恳链比拟长,你没方法追上。

然而,在最小哈希值平分协定中,如果你的链比拟短,而较长的那条链尖有十分大的哈希值,那么你能够持续挖矿,因为你晓得,如果你发现你的机密链有下一个区块,你就会放出两个区块,只管你放出的工夫比诚恳链晚,但你的哈希值比诚恳链尖小的概率十分大。
所以所有的诚恳矿工都会转回你的链,他们会放弃之前的链,在你的链上挖矿。所以这个最小哈希值平分协定启用了这种新的攻击行为,攻击者能够抉择何时采纳这种行为。这就像是在攻击者的工具箱里放了一个新的工具,这也是为什么它会减弱协定安全性。
第二种攻击方式是,假如你有一个机密区块,这个区块的哈希值十分小。你是一个十分小的矿工,区块的哈希值十分小,这样你就能够确定,在 99% 的概率下,下一个诚恳区块的哈希值会比你的哈希值大。那么你能够说,好吧,当初我扣下这个区块是平安的,我会机密地进行挖矿。

另一方面,如果你是一个小矿工,你发现一个区块的哈希值比拟大,这样你晓得有十分大的概率,如果你扣下一个区块,你会输掉区块比赛,那么你可能会抉择开释区块。因为最小哈希值平分协定,你能够精确预计自私挖矿攻打的成功率。它给攻击者提供了更多的信息来抉择什么时候扣块,什么时候放块。所以这也给攻击者的工具箱里放了一个新的工具,因为攻击者领有了几个新的工具,能够更有把握地进行攻打。这就减弱了链的安全性。
Anna:我想这是一个「更好的链品质协定」的例子,但我还是有点困惑,因为你之前不是说过如果有「更好的链品质」,那么它就是平安的吗?就像你方才说的,我感觉我有点回到之前你有这两类,那些你没有剖析的,然而你始终说如果他们有更好的链品质比你没有剖析,我就很困惑。
Ren:是的。如果他们有「更好的链品质」,咱们就不去剖析他们的激励机制。
Anna:是的,咱们不剖析他们的激励机制。但在这种状况下它有什么呢?它没有更好的链品质,还是它有更好的链品质?
Ren:这个协定宣称有更好的链品质,但它失败了。
因为它通过模仿剖析了它的安全性。我明确了。有一个次要的信息,你不应该,你永远不应该通过模仿来剖析你的安全性,我想是一个特定的攻击者策略。因为你的协定可能会激发新的针对协定的攻打策略。
Fredrik:那么,第二类的例子是什么,你扭转了激励机制。
Ren:第二个我能够举出几个例子,我将议论「子链(Subchains)」。这是 Peter Rizun 博士在一个叫 The Ledger 杂志上发表的一个协定。在这个协定中,矿工被容许公布具备较小哈希值的区块。

这里有两个哈希指标,一个更大的指标和一个较小的指标。在比特币共识协定中,如果区块小于一个预约义的阈值,你能力公布你的区块,就是较小指标。然而在 Subchains 中,如果你没有找到一个区块,然而你的备选区块的哈希后果小于大指标,你也能够公布这个备选区块(咱们把它叫做「弱区块」)。这样做的益处是,他们心愿在将其纳入正式区块之前,能够更快地确认交易。
因为弱区块的退出,所以出块距离实际上变小了。正式区块能够取得所有的区块处分,而弱区块只是一个用来同步交易的工具,得不到任何区块处分。

然而每当有两条竞争链时,还是会通过比拟这两条链的长度来解决分叉问题,正式区块和弱区块都会被计算在链的长度中。这种协定咱们称之为 「处分侥幸协定」,他们并不关怀哪个区块是诚恳的、哪个区块是歹意的。他们关怀的是哪个区块是最侥幸的(哈希值更小),并且只处分那些哈希值较小的区块。尽管弱区块参加了共识协定的过程,然而得不到任何处分,这类「处分侥幸协定」的问题在于,侥幸的弱区块不肯定是好的区块。所以这种在处分发放方面的歧视产生了一种新的攻击方式。
攻打的形式是这样的:每当攻击者发现一个弱区块, 它就会扣留一个区块,心愿诚恳的矿工能够发现一个正式区块,这样我就能够用我的弱区块来使诚恳矿工开采的正式区块有效。因为反正弱区块是得不到任何处分的,所以扣下这个弱区块没有任何危险。这就好比,我有了一个新的工具来攻打零碎,而且这个工具是没有老本的。

每当攻击者发现一个区块时,如果攻击者不想承当任何经济危险,他能够作为一个诚恳的矿工公布这个区块。所以,这个协定又能够让攻击者校准成功率,抉择更正当、更精确的策略来攻打零碎。
Fredrik:有意思。在这两个例子中,就像你所说的那样,你在攻击者的工具箱中又放了一个工具,人们是如何通过引入更多的复杂性来实现的呢?他们就像,「哦,我想简化这个,或者我想让这个门路更简单。或者我想让这个门路更优化,或者我想引入这些其余的概念,让 X、Y 或 Z 更简略」。但其实通过引入这个新的货色,那其实是攻击者能够利用的另一个货色,这是一件他们能够瞒哄的事件,这是一件他们能够取得更多信息的事件。这样他们的攻打就有可能更胜利。
Ren:是的,我完全同意,简单是平安的敌人,如果你想要一个更平安的协定,通常应该做的第一件事就是尝试去简化协定,看看能够削减掉哪些货色,这就是为什么 NC-Max 是基于中本聪共识(Nakamoto Consensus)而设计的,咱们试图从最开始着手,不引入任何新的攻打变量。
Anna:创立这个评估共识协定安全性的模型过程中,你有什么其余的播种或想法吗? Ren:通过这个钻研,咱们有几点想强调:
** 第一点无关如何剖析安全性。
**
你永远不应该只通过模仿繁多攻击者的攻击方式来剖析协定的安全性,那样是很危险的。另外,不要设计一个太过简单的协定,如果连协定设计者都无奈剖析它,那状况也会变得很危险,因为简单是平安的敌人。
而无关咱们在激励机制上的测试后果,咱们发现,没有一种激励机制能够阻止这三种攻打。
如果你处分所有的区块候选人,不论他们是诚恳还是歹意的,这就会让双花行为没有危险可言。对于一个攻击者来说,既然我总会失去处分,那我为什么不尝试双花呢,即便我失败了,我也能够失去处分。
如果你没收所有可疑挖矿者的处分,比方说无论什么时候,只有他们和最长链进行竞争,就不会失去任何区块处分。这实际上是为攻击者引入了一个审查网络的工具,就是说,如果你把这些交易蕴含进区块里,我会尝试让你的区块变得有效。即便我失败了,只有我发现了点什么,我还能够通过能够没收你的处分,以迫使感性的矿工退出审查攻打,以防止经济损失。
如果你只处分侥幸区块,而侥幸区块不肯定是诚恳区块,如此一来,就给了攻击者机会,他们能够在「侥幸」的时候老老实实执行,而在「不侥幸」的时候进行作恶。
综上所述,咱们发现了一个取舍,咱们称之为 「处分坏的人还是惩办好的人」
Anna: 好的,你刚刚只是举了两个例子,但显然你曾经剖析了很多其余例子,在这篇论文外面咱们能够看到吗?或者说你是否还有应用这个模型去剖析其余共识协定的工作?
Ren:这篇通用指标论文中波及到了七个不同的协定,在这之后,这部分的工作其实还始终进行着。
有一篇论文叫 SquirRL,它基于 马尔科夫决策过程(Markov Decision Process)的办法进行了扩大 ,马尔科夫决策过程的问题是,它只能对有大量状态的协定进行建模,如果协定变得越来越简单,那么它就超出了马尔科夫决策过程的计算能力。
(注:SquirRL 论文为 SquirRL: Automating Attack Analysis on Blockchain Incentive Mechanisms with Deep Reinforcement Learning:https://arxiv.org/abs/1912.01798)
所以这些钻研人员就采纳深度学习来模仿更简单的协定,深度学习是驰名的围棋游戏 AlphaGo 应用的一种技术,它使咱们可能对更简单的协定进行建模,他们也失去了一些乏味的后果。
Anna:我意识到这是一个与 PoS 十分不同的模型,但我想晓得,你发现的这些工具或分析方法能够利用于 PoS 这种模型吗?咱们能它们归在同一类别吗?
Ren:我认为它是相干的。
一般来说,我感觉 利用马尔科夫决策过程或者深度学习来剖析 PoS 协定不存在什么艰难,但剖析 PoS 协定的问题是,你无奈间接汇合一组协定,让他们彼此竞争,晓得谁是第一,谁是第二,没有这种简略的后果。
你无奈把它们放在同一个束缚当中,对不同 PoS 协定来说,它们通常有着不同的平安假如,这意味着每个协定都在本人的规定中进行游戏,所以你不能只是对立规定,强行把它们放到同一个畛域。
所以在这方面会有一些复杂度,但总的来说,我认为在剖析 PoS 协定时,利用马尔科夫决策过程或深度学习是很有意思的一件事。
Anna:在你本人的钻研中,你是否真正摸索过这一点?
Ren:兴许当前会,但不是当初。
Fredrik:我很想深刻理解更多无关马尔科夫决策过程或深度学习方面的内容,但这样的话,咱们可能须要另外一小时的工夫了(笑)。
所以,咱们应该持续谈谈你之前预报的内容——NC-Max,这是你和其他人一起设计的一个共识算法对吧?这是咱们明天要讲的第二篇论文,能不能请你高屋建瓴的和咱们聊聊,什么是 NC-Max?它想做什么?
Ren:当然没问题,我应该从前面的故事说起。
咱们都很喜爱 「中本聪共识」(Nakamoto consensus,简称 NC),其中有三个起因。
首先,它只有一系列最低要求的平安假如 。与通常有不同很多平安假如的 PoS 协定不同,中本聪共识的平安假如非常少,而这样的益处是,协定很好了解。到目前为止,工业学术界有许多篇论文对中本聪共识进行了具体的剖析,所以咱们齐全晓得它的长处和毛病。
中本聪共识的第二个长处是,它将通信开销降到了最低 。在中本聪共识中,特地是在比特币中,如果你发现了一个新的区块,你能够把它作为一个 13 千字节左右的致密区块流传,就这样,一条音讯确认一组交易,这是实践的极限,你不可能做的比这更好,因为一条音讯来自一组交易,而其余所有的协定在通信开销方面都更贵。
咱们喜爱中本聪共识的第三点起因是,它是基于链的,也就是说所有的交易有一个全局程序,它不会像 DAG 协定那样存在反复打包的问题。如果你用的是 DAG 协定,那么很有可能区块中会同时蕴含很多反复的交易,而要想去除这些反复的交易,要么须要肯定的计算能力,要么须要肯定的通信老本。
中本聪共识的问题在于它的吞吐量非常低,这也是为什么很多协定设计者为了实现更高的吞吐量而放弃中本聪共识甚至放弃工作量证实的起因。
Anna:你说吞吐量进步,是不是指的就是,理论解决交易速度的性能扩大?
Ren:性能扩大有两个指标,第一个是 吞吐量 ,一秒钟能够确认多少笔交易;第二个是 提早 ,指的是交易广播时间和交易确认工夫之间的时间差,中本聪共识的次要问题是吞吐量。
所以从我的角度来说,在你放弃中本聪共识之前,先检查一下网络的状况。咱们来看一下低吞吐量的瓶颈是什么,咱们能不能在这个瓶颈上做一些事件,而不是齐全放弃基于链的构造。
所以我认为,我和其余共识协定设计者的次要区别在于,他们没有计算机网络的背景。当我在 Blockstream 和 Peter Wuille 以及 Gregory Maxwell 一起实习的时候,咱们探讨了很多对于比特币如何流传区块和交易的问题,而这最终导致了这个钻研的诞生。
一般而言,咱们看一个节点带宽时,能够把它分成三个不同的局部,第一局部是用来同步交易的,这其实是咱们想要的局部,咱们要把这部分最大化,咱们每秒可能同步的交易越多,吞吐量就越高。第二局部是共识自身耗费的带宽。咱们心愿把这部分降到最低,中本聪共识曾经做到了,第三局部是闲置的带宽,有一部分工夫,咱们没有传输任何交易,也没有传输任何区块。
Anna:你方才用的词是闲置,像是某个时候,什么都没产生。
Ren:对的。中本聪共识的问题在于为了维持它的安全性,孤块率必须很低,而因为所有的区块工夫距离都遵循指数分布,如果咱们想要一个非常低的孤块率,那咱们就须要很长的均匀区块间隔时间。
均匀区块间隔时间长,就会导致闲置工夫变长,所以只管网络实际上能够每秒传输 2500 笔交易,但大部分工夫网络都是闲置的,因为如果咱们缩小区块工夫距离,网络孤块率会更高,协定的安全性会变差。
Fredrik:就在最近一期的 Podcast 里,咱们谈到了这个点,不过是在以太坊语境下的。咱们谈到了 mempool(待处理、未确认的交易集)是如何工作以及交易是如何散布的,以及咱们看到理论挖矿节点时,mempool 是什么样的。
它们实际上是在推送交易,在网络方面,它们每秒推送数千笔交易,但它们并不是都被蕴含在一个区块里,就像竞争性 交易,人们在 DEX 上相互出价,诸如此类。因而,这并不是解决交易中的网络问题,它会将它们蕴含在一个区块中,并给矿工足够的工夫来解决该区块,并且心愿在下一个区块上持续。
Ren:对的,在 Ethereum 中,计算是一个瓶颈,这也是为什么 Nervos 抉择应用 UTXO 模型的起因,我前面会具体介绍。
咱们解决比特币闲置工夫过长的办法,就是要找到导致高孤块率的瓶颈所在。咱们要减速区块流传,升高区块工夫距离,减少区块大小,但这并不是说咱们要有限地减少区块大小或者升高区块工夫距离,只有咱们设法找到一个平衡点,即区块距离足够低,区块足够大,所有的节点带宽都被耗尽,那么,咱们就实现了工作。如果咱们可能把节点带宽用完,那么咱们就不必引入 DAG 协定了。
那,区块流传提早的瓶颈是什么?咱们发现,区块流传的瓶颈其实是区块中的新的交易。**「新的交易」的定义是指还没有实现流传就被蕴含到区块中的交易。
**
交易通常会在 15 秒内流传至整个网络。假如区块距离是 10 分钟,在前 9 分 45 秒内的交易,都在蕴含到区块之前,就曾经失去了流传。然而,如果有一些交易是在最初 15 秒才首次播送,并且它们被蕴含到了下一个区块中,那么这些交易中有可能有一些没有被同步到网络中。
它们必须和区块一起流传,这样做的问题是,如果我是一个节点,当我收到致密区块时(致密区块中蕴含着删减的交易哈希,能够把它看作是交易的压缩版),如果没有「新的交易」,你能够间接把这个致密区块转发给上面的节点。
然而,如果有一些「新的交易」,你必须先向之前的节点查问这个交易,只有在等到他们回复之后,你能力把这个致密区块转发给上面的节点,所以额定同步这个新的交易的往返,其实就形成了进步区块传播速度的次要阻碍。
Anna:这是业界广为流传的钻研论断了,还是说是你在钻研过程中想要弄清楚的货色?
Ren:它被比特币外围开发者所熟知,但这在比特币中并不是一个太大的问题,因为在比特币中,大多数区块都没有「新的交易」。
它被比特币外围开发者所熟知,但这在比特币中并不是一个太大的问题,因为在比特币中,大多数区块都没有「新的交易」。
在比特币里,当一个区块第一次播送时,它能够在 600 毫秒内同步到网络中 90% 的节点。这点十分好,然而,如果区块比拟大,或者区块距离比拟短,那区块中的新的交易就会比拟多。
那,咱们如何打消这些新的交易呢?
咱们的解决方案是:首先,咱们把交易同步和交易确认解耦。比如说,在每个区块外面,有一个字段,咱们叫它交易提案区,所有的交易必须先呈现在这个交易提案区外面(以删减哈希的模式)。而之前的交易区,或者咱们叫它交易承诺区。
交易必须先呈现在交易提案区,只有在两个区块之后,能力被嵌入到到交易承诺区。
因而这样做的益处是,每当你作为节点收到到新的区块时,所有提交的交易都已同步,你能够间接将致密区块转发给上面的节点,这样,同步这些新的交易的额定往返就从区块流传的要害门路中移除了。
并且,交易提案区中的交易有效性并不影响区块的有效性,交易提案区能够有缺失的交易、畸形的交易、甚至双花的交易。这些都没关系,起初的矿工能够间接跳过这些交易,只认可那些无效的交易,这样,他们收到的交易曾经是通过两步确认机制了。咱们设法打消新的交易,确保所有的区块在 600 毫秒内同步整个网络。
所以这就使得咱们可能把均匀区块距离缩短到两三秒,同时放弃一个很低的孤块率。
Fredrik:这听起来很乏味,我简略总结一下。
一个比特币的区块工夫是 10 分钟,你能够提交交易,它会被传递到整个网络,如果你的交易是在那个时间段内提交的(9 分 45 秒内),并且被包含在内,那对任何人来说,这都不是一个「新的交易」,因为在区块呈现的时候,每个人都曾经看到了它,对吧?
所以实质上你所做的是将矿工能够抉择的交易集限度在这个区域内,在这个区域内,它将被传递到整个网络中。就像在比特币的例子中,比特币矿工只容许蕴含在前 9 分 45 秒内收到的交易。
Ren:对,矿工只会认可在两个区块之前提出的交易。
Fredrik:我明确了。
还有一件事,我感觉它和 PBFT(Practical Byzantine Fault Tolerance)十分类似,在 PBFT 中,有预筹备、筹备和提交这三个阶段,听起来十分类似。
Ren:这就是为什么我说,能够把它看作是 HotStuff 的工作量证实版本,HotStuff 是一个更显著的流水线式协定,在任何共识协定中,其实有两种技术能够用来并行处理事务。第一种叫做流水线式操作,它在 NC-Max 中应用,同样,在 HotStuff 中也是如此。
第二种类型叫做 ** 并发操作。
**
流水线式操作绝对并发操作的益处是,平安剖析要简略得多,因为它没有那么多同时在挖的区块,你能够只需用以前的技术来剖析安全性,所有都不变。而且它的性能更强,因为网络依然放弃着一个全局的交易程序。
Anna:另外,有点想问问同步和异步的问题
Ren: 一般来说,所有的工作量证实协定都是同步协定。
Anna:好的,明确了。
我只是在想说,节目之前有好几期节目,咱们谈了些这部分的货色,网络范畴和局部同步,但在这个状况下,它是同步的。那么,对于 NC-Max,它是同步协定吗?鉴于你曾经对流水线式操作和并发操作有了一些钻研。
Ren:其实我最喜爱 NC -Max 的局部是有其余协定能够将交易同步和交易确认解耦,比方 Prism,Prism 是另一个将这两件事解耦的例子
(论文为 Prism: Deconstructing the Blockchain to Approach Physical Limits:https://dl.acm.org/doi/10.1145/3319535.3363213)
但 NC-Max 的益处是,交易承诺区和交易提案区被从新耦合在同一个区块构造中,这大大简化了平安剖析,因为 NC-Max 依然遵循比特币骨干协定,应用的是「最长链」准则。
所以之前所有对中本聪共识进行的平安剖析都能够间接实用于 NC-Max,不须要咱们证实其余额定的货色,所有的平安证实都是成立的。除此之外,咱们还有一个额定的平安改良,就是在 NC-Max 中,自私挖矿是不赚钱的。
但这须要一个绝对较大的平安证实,如果你感兴趣的话,能够看论文理解更多细节。
Anna:我其实是想问的是,鉴于你之前的工作都是在寻找协定新的一些威逼点,那么,你能找到 NC -Max 引入的新的威逼点吗?
我其实是想问的是,鉴于你之前的工作都是在寻找协定新的一些威逼点,那么,你能找到 NC -Max 引入的新的威逼点吗?
Ren:实际上,是有一个威逼的。
有一个被之前的工作所疏忽,但 NC-Max 可能缓解的威逼,它叫做 「交易扣留攻打」,攻打的原理是这样的,如果你是一个矿工,你想进行自私挖矿但不想让任何人发现, 你能够做一个全是新的交易的区块,你的区块实际上比其余所有的区块流传得慢,这就给了你一些工夫来进行自私挖矿,但没有人能够指摘你 ,因为你能够说:「好吧,我在区块被挖出来之后,马上就公布了,只是,交易同步的速度比其余区块慢而已」。
在 NC-Max 中,这种攻打更难发动,因为如果你想发动这种攻打,你必须先流传这些新的交易,而后在两个区块之后,你能找到一个区块蕴含这些交易。而且你还不能立刻发动攻打,只有当你在特定间隔上有两个区块被开采进去后,你能力发动攻打,这就是为什么这种攻打在 NC-Max 中比在中本聪共识中更难发动的起因。
Anna:我进一步的问题是,有没有新的攻打是你不能加重的?
Ren:我感觉不会。
因为 NC -Max 遵循比特币骨干协定,应用的是「最长链」准则,以及绝对雷同的区块构造,它合乎中本聪共识的所有平安假如。
Anna:明确了,咱们方才具体介绍了 NC-Max。
当初我想晓得的是,你在 Nervos 这个我的项目工作,这是一个网络。NC-Max 的工作和 Nervos 有什么关系?咱们过来还请了 Alan(Nervos 密码学研究员)上过节目,兴许你能够给咱们多讲讲 NC-Max 是如何和 Nervos 这个网络相整合的。
Ren:其实很简略,Nervos CKB 应用 NC-Max 作为它的共识机制。而 Alan 的工作和 Nervos CKB 之间的关系也很简略,Alan 设计了 EagleSong,它被用作工作量证实算法的哈希函数。
这就是咱们和 Nervos 的关系,但我认为共识协定是 Nervos CKB 最无聊的局部,它有一些更让人兴奋的性能。
Anna:是啊,如果你违心的话,请多通知咱们一些无关 Nervos CKB 的货色,因为咱们实际上素来没有在节目中议论过它。
Ren:当然,Nervos 的设计有三件事我感觉值得一提。
第一点是,Nervos CKB 应用的是 UTXO 模型 ,UTXO 模型对用户自定义代币来说更容易,在以太坊里,很多安全漏洞起源之一就是所有的用户自定义代币都存在 ERC20 合约外面,像是用户的所有账户余额都存储在同一个合约中,所以,如果黑客破解了这个合约,那基本上就能够任意批改用户的余额。
而 UTXO 模型能够让咱们把拜访控制权还给用户,你的资产存在你本人的 UTXO 里,你能够决定用什么签名算法来解锁这些资产,所以,在智能合约方面不存在单点故障。
Anna:等等,你能够在 Nervos CKB 上运行智能合约,但它应用的是 UTXO 模型,那还有其余我的项目能够这样做吗?
因为我次要理解的是以太坊,我始终认为你须要有一个账户模型能力做智能合约的货色,但我猜,如同不是 ……。
Ren:不,其实你不须要一个账户模型能力反对智能合约,有其余产品也能够做到这一点,但我想咱们是最早的一个。
Anna:明确了,我在想那是什么样子,智能合约到底是如何在 UTXO 上运行的?
Ren:我稍后就谈判到这部分。
在 Nervos 中 script 分为两种,第一种叫做 lock script,你能够把它设想成你公寓的锁,第二种叫做 type script。你能够把它设想成你公寓里的家具。你正在运行的理论代码是为了执行智能合约,而将 lock script 和 type script 离开的益处是,它能够打消很多安全漏洞。
在以太坊外面,基本上谁能批改智能合约,谁就能批改变量,它与执行性能的代码混合在一起,而在 Nervos CKB 中,这两种脚本是离开的,这样就很难被攻打。
另外,用户能够定义本人的 lock script,你能够说我更喜爱 Schnorr 签名,也能够说更喜爱 ECDS 签名,这些都是很灵便的,这是 Nervos 的 UTXO 模型。
Nervos 的第二个新货色是它的 经济模型,原生代币 CKB 代表了存储空间 。在以太坊外面,你只需领取一次性费用,而无论占用存储空间有多大,它都永远不收取任何链上存储的费用。
在 Nervos CKB 中,咱们应用了不同的经济模型,每个 UTXO 都有肯定数量的存储空间,所有的空间都有利息,如果你应用了这个存储空间,那么利息就归矿工所有,如果你不应用那个存储空间,那么你能够保留这个利息。
Anna:所以用户要为存储付费,对吗?
Fredrik:是的,没错,就像是状态租赁,但它不须要让我的智能合约始终沉闷,我必须一直地把合约的钱送来,而 Nervos CKB 的付款像是通过通胀来付款。
Ren:是的,而且有交易费。
有意思的是,你能够用任意一种资产来领取交易费,并没有 Gas 机制 。你可能晓得,以太坊的许多攻打就是来自于费用估算和共识机制之间的严密耦合,而咱们认为这是没有必要的,咱们把它去掉,看看它的成果如何。
Nervos 设计的第三个亮点是,它应用 RISC-V 来打造虚拟机,RISC-V 是一个硬件指令集,这意味着它十分弱小,你能够用任何你想要的编程语言来编程,包含 Solidity,你能够实现任何你想要的密码学原语,而这就不便了跨链操作和算法更新,因为在很多跨链操作中,不同的链应用不同的签名算法,但在 Nervos 中,这不是个问题,因为你能够随时从密码学库中调用。
Fredrik: 有没有一种无效的办法能够将 RISC-V 编译成 x86?或者这是否意味着你的矿工须要购买 RISC-V 的 CPU?
Ren:我不是这方面的专家,目前为止我被告知,目前它的速度比 EVM 稍慢,但他们正在优化它。
Fredrik:好的,我认为那应该是在仿真模式下跑的,因为如果在理论的硬件上运行 RISC-V,它会很快。
Ren:对,这个环境下运行的 RISC -V 预计比在硬件上运行要慢 50 倍,而且有人通知我,绝对 Web Assembly,RISC-V 指令集实现起来更简略。
Anna:总结一下,我很好奇你当初在做什么钻研?你有什么正在进行的工作吗?
Ren:有一件小事我真的很想做,就是写一篇论文,叫做 「Lay down the Common Metrics 2.0」
近些年有很多新的协定进去,但有些协定还是犯了同样的谬误,就是把模仿作为平安剖析,我想剖析它们的安全性,找出这些协定中新的攻击方式。

正文完
 0