值得信赖的区块链资讯!
比推数据  |  比推终端  |  比推英文  |  比推 APP  | 

下载比推 APP

值得信赖的区块链资讯!
iPhone
Android

波卡联创 Rob:状态如何导致区块链性能瓶颈?Solana 的性能为什么高?

Polkadot

Kusamarian 的 Jay 近期采访了 Polkadot 的创始工程师 Robert Habermeier!Rob 详细解释了“状态”的含义以及它如何成为区块链行业的瓶颈。他还揭示了由 Sovereign Labs 资助的 NOMT 存储解决方案的工程细节,它在 Polkadot 中的潜力,以及他对 JAM 的看法!

查看以下 PolkaWorld 整理的专访内容!

什么是状态?

Jay:你有一段时间没有在公众视野中露面了,我想你一定是在忙一些你感兴趣的事情,结果证明你确实在忙,而且都是围绕“状态”这个概念。

Rob:是的,我现在正在做一个关于“状态”的项目。深入研究并发现事情的真相总是更有趣,然后再把这些真相带回来,而不是仅仅保持高曝光率却说一堆无关紧要的话。

Jay:欢迎回来,很高兴看到你有了新的创始人发型和新的创始人风格。

Rob:不知为何,我们几乎在同一时间内都独立决定剃光头,比如我是在去年 11 月底 12 月初剃的,而我想 Gav 是在 1 月或 2 月剃的。

图片

Jay:不错,冬天很漫长,现在是时候走出来了。

Rob:没错,我们准备好游泳,准备好深入代码,让一切更加简洁。

Jay:那么,让我们从“状态”开始吧,因为我觉得我们经常听到这个词,但也许很多人并不真正理解我们在说什么。当一个区块链工程师谈论“状态”时,他在说什么?

Rob:状态就是区块链的当前真相。所以它包含了所有账户的余额,所有智能合约的状态,比如有哪些代币存在,哪些交换存在,哪些池子存在,不管是什么,这些都被称为“状态”。而区块包含更新这些状态的交易。状态以及修改状态的交易顺序是节点需要达成共识的事情。

Jay:过去发生的交易是状态的一部分吗?

Rob:这取决于你怎么看。我认为从一种状态的定义来看,比如链的状态,你可以说它包括到目前为止发生的所有事情。但当我们说状态时,我们具体指的是当前状态,即最新区块的状态,这是行业标准的含义。

状态如何导致了区块链性能瓶颈?

Jay:这是一个棘手的问题,它影响了很多性能。你能说说状态如何导致区块链性能瓶颈吗?

Rob:好的,访问和更新状态是当今区块链性能问题的最大起因。比如你在进行一笔交易,我把一些代币从我这转给你。每个执行该交易的节点都必须从状态中加载我的余额和你的余额,而这些状态通常存储在节点的磁盘上。你有 CPU,有 RAM,RAM 是用来存储临时数据的。状态是永久的,需要存储在硬盘或 SSD 上。相比于从 RAM 读取数据或者通过网络读取数据,从 SSD 读取数据要慢很多,大约需要 100 到 1000 倍的时间。区块链节点大多数时间花在执行交易上,就像长时间等待加载状态,然后进行一点点计算。然后再等待加载另一部分状态,然后再进行一点点计算。而所有这些状态加载之后的那一点点计算的结果就是新的状态。基于用户提供的代码,智能合约,导致状态变化的结果。

Jay:在像 Polkadot 这样的网络中,你提到的节点,状态存储在这些节点中,但并不是每个节点都拥有所有的状态吧?或者说确实有节点拥有所有的状态?

Rob:这就是我们所说的全节点,这是所有状态。但在 Polkadot 的范式中,中继链有自己的状态,每个平行链有自己的状态。没有节点存储所有平行链的所有状态,但某个平行链的全节点或中继链的全节点会存储该链的所有状态。但中继链的状态包含所有平行链的状态。它包含对这些状态的承诺(commitments)。

图片

Jay:这是什么意思?

Rob:当我们说承诺时,我们指的是一个非常小的数据片段,它实际上是整个当前平行链状态的指纹。这是通过 Merkel 树完成的,这是一种大多数区块链使用的数据结构,但并不是所有区块链都将其状态数据保存在其中。所以 Polkadot 本质上保留了所有平行链当前状态的指纹,但不是全部内容。

Jay:你能从这个指纹中推导出整个状态吗?

Rob:这正是我们使用 Merkel 树的原因。

Solana 的性能为什么高?

Jay:那么让我们谈谈什么是 Merkel 树?

Rob:我认为 Merkel 树是一种压缩形式。你可以通过一个非常小的值来得到整个状态的承诺。然后有人使用这个值,我们称之为状态树的根,就可以向你证明当前状态中的任何内容。这实际上正是轻客户端所做的事情。你的轻客户端不会保存整个状态,但它可以跟踪状态树的当前根。然后有人可以找到你并说:“我要基于你拥有的状态根向你证明你的账户余额是这个值。” 它的目的是高效地检查数据而不需要拥有所有数据,这正是 Merkel 树的用途。

Jay:你说有些区块链不使用 Merkel 树。能快速谈谈这个吗?

Rob:当然。最大的一个是比特币。这其实是一个长期争议的话题。比特币运行在所谓的 UTXO(未花费交易输出)上。这是一个复杂的术语,用来表示未来可能发生的交易或交易的输入。比特币区块不包含对所有可能发生的待定交易集合(UTXO)的承诺。相反,全节点只是保存自己的列表。如果节点编码良好,所有全节点都会有相同的列表。但没有办法向非全节点用户证明某个特定的 UTXO 存在或不存在。

Jay:不使用 Merkel 树有什么优势吗,还是因为那是早期的方法?

Rob:主要的优势是速度,另一个不使用 Merkel 树状态的区块链的显著例子就是 Solana。你可以想象只是为某种数据库保留一个平面格式的状态列表,存储、计算、数据方面的成本更低,而不是尝试将所有这些放入经过认证的树结构中。所以 Solana 完全放弃了这一点。

Jay:他们不选择 Merkel 树结构是因为 Merkel 树的每个部分都是他们下面部分的哈希吗?要从树的顶部(根节点)推导回去,你需要重新计算哈希值,也就是从叶子节点开始,逐层向上计算,直到到达根节点,所以这很复杂是吗?

Rob:是的,这种树状数据结构。所有数据都位于树的底部,在计算机科学中我们总是倒着画树。根在顶部,叶子在底部。所有的数据,比如我的账户地址和账户余额都位于叶子中。想象这些数据发生变化。Merkel 树的工作方式是每个节点基于其下方节点的哈希。所以我们尝试从这里的叶子到上方的节点,我们做一次哈希,然后上升,再哈希下方的节点,然后一路哈希到根。所以这是大量的计算。同时,当你在这个树中查询时,你还需要获取所有这些节点。

Jay:这与之前你提到的关于等待状态的内容有关吗?这是我们在等待状态时发生的事情吗?

Rob:在某些系统中,是的。实际上在当前的 Substrate 中,确实是这样。现在为了提升性能,普遍采用的方法是使用两份状态副本。我认为 Geth、Penumbra 以及 Cosmos SDK 都是这样的做法,其中一份是可以快速查询的平面存储,另一份是 Merkel 化的版本。这样做的目的是,在构建区块或执行区块时,不需要进行大量的树遍历操作,也不需要频繁地从磁盘加载节点。相反,你可以进行快速查询,然后在确定交易正确后再进行所有的处理。

Jay:那么我想知道,Solana 决定使用平面存储来保存所有过去的状态。平面存储有什么缺点吗?为什么不是每个人都这样做?

Rob:Solana 的平面存储不支持轻客户端,特别是在区块链桥接方面。所以当我说轻客户端时,我可能指的是移动用户,但更重要的是无信任的区块链桥接。即使有人能获得 Solana 区块头的共识证明,他们也无法用这个共识证明来证明你的余额在 Solana 网络上是正确的。要做到这一点,必须使用整个网络的全节点,这就是为什么轻客户端不能这样做。因为你不能在以太坊或 Moonbeam 上编写一个 Solana 的全节点智能合约,这在计算上是不可行的。所以由于平面存储的结构,轻客户端无法验证某些区块链状态信息,尤其是跨链操作。因此,轻客户端无法实现像全节点那样的功能。

图片

Jay:所以我们不总是使用全节点的原因是?

Rob:有一个关键原因,就是资源限制。比如,如果你想在手机上运行节点,世界上大多数人使用的是移动设备,你不能在上面运行全节点。它会用光你的所有数据,耗尽你的所有电量。轻客户端是最适合这种情况的,也适用于这些智能合约的案例。区块链桥接也是一种轻客户端。它们运行的技术几乎与手机上的轻客户端完全相同,只是有一些小的变化。

Polkadot 如何优化性能瓶颈?

Jay:回到 Polkadot,正如你已经描述的那样,这是 Polkadot 性能中的一个瓶颈。为什么优化这些 Merkel 树或状态存储很重要?

Rob:有两个关键原因。首先是构建区块的速度。你构建的区块越多,能够进行的交易就越多。而目前,Polkadot 扩展的瓶颈在于收集人节点构建区块的速度。尤其是当你进入拥有数千万或数十亿个账户或状态项的大型数据库时,这对于全球扩展非常重要。所以目前在 Substrate 上构建区块的速度非常慢,但它可以更快。因此,这是我认为需要缓解的一个非常重要的瓶颈。

第二个原因与此相关,是关于证明大小的问题。当我们说你有一个状态根,有人想向你证明你的余额是这个值。当一个平行链区块被传送到 Polkadot 验证者时,它基本上附带了一个大的 Merkel 证明,证明了该区块中访问的所有数据。我们在数据上受到了限制。每个平行链区块只能带有 5MB 的数据。举个例子,如果你使用当前的 Substrate 树数据库,并创建一个包含 1000 万个账户的版本,并进行 25000 次转账。所以你选择 25000 个账户,将它们发送到 25000 个随机账户,获取所有这些数据并将其发送到 Polkadot 网络供验证者检查的证明大小大约是 29 MB。这只是几个千万个账户的数据,可能是 2000 万个账户,但肯定不到 1 亿个。所以我们现在谈的还远不是世界级的规模。现实是,如果你现在想要将一个平行链扩展到真正的世界级规模,瓶颈将是状态数据以及收集人节点构建区块的速度。

Jay:据你所知,现在是否有任何区块链架构能够在不牺牲去中心化或安全性的情况下扩展到世界规模?

Rob:这取决于世界上有多少交易。有不同的方法。大多数方法至少在活性(liveness)方面在去中心化上有所妥协,活性指的是链在面对故障时继续运行的能力,比如如果你只有一个节点处理所有交易或构建所有区块,如果那个节点宕机了,你就会有麻烦。但是没有交易会更糟糕。所以我认为这是很多超大规模系统现在所面临的权衡。但你知道,软件和工程项目的优化往往是一场寸土必争的战斗。并不是有一个伟大的东西能解决所有问题。更多的是你在这里提高10%,在那里提高10%,在其他地方再提高10%。你这样做了很多年,突然之间你就有了一个经过大量测试和优化的系统,可以满足世界的需求。

什么是 NOMT?

Jay:最近你提到了一些与这个新项目 “NOMT” 相关的话题,它代表什么?

Rob:新的最优 Merkel 树。这是与 Sovereign Labs 合作完成的。

Jay:这是一个 Polkadot 项目吗?

Rob:不是一个 Polkadot 项目。

Jay:他们正在为通用 rollup 构建一个 SDK。这些 rollup 是以太坊生态的吗?

Rob:不,他们实际上是跨生态系统的。所以,我相信有比特币 rollup,Citrea 作为其中一个大名字,他们将使用 Sovereign SDK。我几乎可以确定这一点,但你知道,还是需要核实。他们来自 Celestia 生态系统的一部分,但他们也在关注以太坊。他们真正感兴趣的是创建大量的rollups。Sovereign SDK 的 Preston Evans 提出了我们用于这个数据库的软件架构的大纲。我的意思是,当你真正开始工程化某个东西时,会出现成千上万的细节问题,但使我们的状态数据库在更新和证明方面非常快的核心理念最初来自 Preston,他们也在财务上支持这个项目。然而,我们对 NOMT 的目标是让它成为整个行业性能提升的驱动力。针对任何使用 Merkel 树的人!

Jay:你能简要描述一下 NOMT 的架构吗?

Rob:当然。这个想法是利用固态硬盘(SSD)的工作原理。事实证明,SSD 非常擅长随机存储和获取数据。只要你不太在意访问延迟(也就是说,每个请求的等待时间),但吞吐量可以很高。所以,如果你只是这里那里获取一个字节,这是非常低效的。但实际上 SSD 是这样的:即使你只想获取一个字节,你总是在获取一个我们称之为页面的东西,通常是 4096 字节的一个包裹。根据设备不同,这个大小可能会有所不同。所以我们做的事情是将树组织成 4096 字节的页面或略小于 4096 字节的页面。这样一来,每当我们需要加载树的某个部分时,我们可以同时向 SSD 发送所有这些请求。想象一下你有一个大文件,因为这实际上就是我们的数据库,更多的 是一个大文件,我们碰巧从中随机读取部分数据。所以你能够快速找到那个特定的信息片段,并且能够并行地快速处理很多这样的请求。我们在读取状态方面的改进大约是现有Substrate 和 Sovereign 数据库的 10 倍。

这是由于平面存储以及我们做的一些其他优化。所以这意味着你可以构建区块的速度大约是现在的 10 倍,也就是说在相同的时间内构建 10 倍数量的区块。如果你有 10 秒时间来构建一个区块,它需要 10 秒。你构建一个,如果需要 1 秒,你可以构建 10 个。这是一个很大的飞跃。而在实际更新树和证明方面的改进大约是现有 Substrate 和 Sovereign SDK 的七到八倍。所以在这方面也非常快。而在证明大小方面,将这种区块证明给零知识电路或 Polkadot 验证者所需的数据量也大幅减少,有些情况下接近 50%。

Jay:为什么证明大小会减少?

Rob:那是因为我们使用的是二叉树而不是十六叉树,听起来很复杂。对于普通人来说,这意味着树中的一个节点可以有两个子节点,而在十六叉树中,一个节点可以有零到十六个子节点之间的任何数量。所以想象一下你正在尝试证明树中某条路径下的数据。你可能需要加载一个有 16 个子节点的节点,而你只关心其中的一个,其他 15 个都是无用的数据。它是填充证明的无用数据,你不需要它。十六叉树原本要解决的问题正是一次性获取大量数据,但它并没有像使用二叉树并更好地组织节点那样有效地解决这个问题。

Jay:在节点端,硬件要求会因此改变吗?

Rob:我们的目标是能够在普通的消费级硬件上运行。我们针对的是节点操作员使用的 Linux 系统,但我们也希望它能在 Mac 上工作,Linux 将是我们的真正性能目标。没有人会在 Mac 上运行生产节点,但确实有人在 Mac 上开发。而且很少有人在 Windows 上开发,所以那部分可以忽略。你不需要超快的 CPU,也不需要顶级的 SSD,这样就可以正常工作。然而,一旦区块链开始每秒处理数万笔交易,你的 10 年前的笔记本可能会应付不过来,甚至 2 年前的笔记本也可能应付不过来。但这基本上取决于特定区块链的扩展程度。因此,Sovereign Labs 资助了这个开发。这项开发将帮助任何使用 Merkel 树的区块链。

Polkadot 2.0 和 JAM

Jay:你提到了 Substrate,那么是否有意将此引入 Polkadot?

Rob:是的,绝对有。我实际上在我的博客 rob.tech 上写了一篇关于如何将 Sovereign 创建的架构适应于 Polkadot 和 Substrate 的文章。如果你想看一些关于它会是什么样子、需要做哪些额外工作的图表以及这些工作的动机,可以去看看。问题在于我们目前构建的东西不支持对状态的迭代,比如说,在进行存储迁移时遍历这个 pallet 的所有键,这是 Substrate 中非常常见的用例。因此,为了使其支持迭代性,需要进行额外的更改,我们也计划将其构建到 Substrate 中。

Jay:这如何适应异步支持、弹性扩张以及我们谈论的 Polkadot 2.0 概念的路线图?

Rob:它借鉴了云中的动态扩展,按需使用区块空间。其一方面是灵活的核心时间,如果你只需要少量的区块空间。但我们已经看到,Polkadot 上最大的用例将使用大量的区块空间。而弹性扩展就是要确保他们能得到所需的资源。虽然我不再在 Parity 工作,但这项工作实际上是对弹性扩展的补充,因为它可以让平行链使用比 Parity 或社区预期更多的核心。所以大多数人想到弹性扩展时,认为平行链将能够使用两到三个核心。我认为我们应该尽量在可能的情况下使用更多,比如 10 或 15 个甚至更多核心。

Jay:你能将之前提到的瓶颈与弹性扩展的情况联系起来吗?

Rob:更快地访问状态意味着更快地创建区块,意味着使用更多的核心。你需要知道这些核心将要处理的所有东西,并将其放到所有这些核心上。如果你每六秒使用 10 个核心,那么你每六秒需要创建 10 个区块。而更快地访问状态是实现这一目标的方法之一。但是核心也受到它们能够接收的数据量的限制。因此,较小的证明意味着需要更少的资源。你可以想象一旦状态变得足够大,你需要更多的核心不仅仅是因为计算量大,而是因为数据量大。所以将数据大小减少一半意味着你也需要更少的核心。

Jay:你对 JAM 有什么看法?

Rob:我参与了很多关于 JAM 的早期设计讨论。我目前没有在做这个项目。我知道 Gavin 正在和一个开发团队合作推出它。Jam 采取了很多我认为非常重要的步骤。一个是碎片化。我认为我们在 Polkadot 面临的一个问题是过早的过度碎片化。当我说去中心化时,我不是指抗故障能力,我不是说应该有单点故障,而是说 Polkadot 的城市规划过于分散。就像是,会有一个商业区,人们会去那里做生意,会有一个住宅区。这真的有点像一个空荡荡的足球场。你知道,就像这里有一些东西,但并不是满满的人群。我看到 Gavin 的主要方向是通过 Jam 创建一个繁荣的社区,并消除一些关于如何使用 Polkadot 核心的意见,从而实现这一目标。这是一个长期的项目。还有很多悬而未决的问题,但这是核心理念,我认为这是直接动机。

我真的希望我们在状态方面的工作也会对 Jam 产生影响,Jam 会采用它来构建人们想在 Jam 上构建的任何东西。这就是构建状态数据库的好处,每个人都可以使用它。这将提高整个行业的性能,任何决定采用它的人都将受益。所以这几乎是双赢的。

Jay:你觉得 Jam 还有哪些方面存在大问题,或者你认为 Jam 还没有解决的问题?

Rob:我认为社区关于现有平行链系统将会发生什么,团队的迁移路径是什么等问题也非常重要。我知道这些问题在之前的问答中已经被提出来了。我认为最好由参与 Jam 工作的人来回答这些问题。但当我看 Jam 的提案和规格时,一个大的悬而未决的问题是这些工作包将来自哪里?谁会构建它们?如何确保当你有大量工作包分发给许多不同组的 Jam 验证者时,它们能够在链上正确排序?技术是否会对能够构建高性能排序器的大型实体足够低风险。

Jay:Rob,你如何定义你对区块链技术的目标?

Rob:我认为和以前一样。我非常有动力编写很多人会使用的代码。我非常喜欢开源,真正的开源方法。代码是以自由无许可的许可证发布的,任何人都可以采用。我通过开源进入了区块链领域,我真的非常喜欢这些原则。我对 Polkadot 目标,我会继续留在 Polkadot 中参与治理,在 Twitter 上讨论事情,并为周围的人提供一些评论和建议。但现在我并没有全职从事 Polkadot 的核心工作。我没有离开这个美好社区的打算。

Jay:你现在最兴奋的 Polkadot 项目是什么?

Rob:我认为 Hyperbridge 是最令人兴奋的项目,尽管我不是该项目的投资者。我认为这个项目非常有趣,因为它是一个能够利用所有核心的应用程序,并且将改变人们对 Polkadot 用途的预期。Hyperbridge 构建了一个假装是平行链的平行链,展示了在 Polkadot 1.0 上可以做一些类似 JAM 的事情。Hyperbridge 为 Polkadot 提供了一个在 ZK 的高点卖出、在加密经济计算的低点买入的机会。

当我们讨论 ZK 与加密经济时,这些是不同的技术,但人们使用它们的目的往往是相同的,就是证明一个区块或交易或某些计算是正确完成的。它们具有不同的属性。例如,在 ZK 中,计算非常昂贵,通常需要很长时间。涉及到很多非常复杂的数学,可能会出错,比如我们会看到的一些实现问题。但从经济角度来说,你需要支付更多,等待更长时间,但如果需求很大,价格不会改变。而在加密经济环境中,每个人都在竞争相同的 1000 个 Polkadot 验证者的资源,例如。来检查他们的交易。所以你会看到费用飙升。因此成本较低,但我认为 ZK 在加密经济环境中施加了一种费用的成本或价格上限。

但这不一定是坏事。我认为它在某种程度上限制了 Polkadot 的最大潜在利润或其他。但加密经济协处理器实际上可以相当盈利,因为如果 ZK 的成本是原来的 10 倍,这意味着加密经济协处理器可以以 90% 的利润率运营。在价格压力下,人们才会从 ZK 转换过来。是的,很有趣看到 ZK 何时进入 Polkadot 以及它会如何表现。但我对现状还是挺满意的。我认为这是不可避免的,因为它是我们隐私保护的最佳工具。真的非常棒。研究人员和他们所做的工作。我真的希望我们能实现私密治理,私密余额转移,真正实现 Polkadot 网络的隐私。我们将需要 ZK。


说明:比推所有文章只代表作者观点,不构成投资建议
原文链接:https://www.bitpush.news/articles/6911367

比推快讯

更多 >>

下载比推 APP

24 小时追踪区块链行业资讯、热点头条、事实报道、深度洞察。

邮件订阅

金融科技决策者们都在看的区块链简报与深度分析,「比推」帮你划重点。