SKALE 的差异化、共识、区块提案和生存能力:采访 SKALE 实验室首席技术官/联合创始人 Stan Kladko

前几天,我有机会和 SKALE 实验室的首席技术官/联合创始人 Stan Kladko 坐下来,了解他对 SKALE 网络设计的看法,以及它与其他以太坊扩展和第二层解决方案的不同之处。我们谈到了生产系统与研究项目的比较、数学算法、二进制共识、区块提案、模块化、自愈网络等等。

在我们的谈话过程中,他透露了区块链内部运作的一些细节,并解释了如何在不牺牲安全性的情况下使共识算法变得更快、更有能量、更加具备资源效率。

你能解释一下关于 SKALE 链的一些设计决定吗?

Stan:我们设计了与以太坊兼容的 SKALE 网络。你在以太坊上运行的一切,都可以在 SKALE 上运行,而且速度更快。此外,我们设计和构建的 SKALE 链可经数学验证,所以 SKALE 链内的每一个点都有一个算法,这个算法描述得很清楚,并且在某些假设下是可以经数学验证的。这些假设在所有特征中都是一样的。

据我们所知,这些链是目前市场上唯一可经数学证明的权益证明 (Proof of Stake) 区块链。有很多大学的学术论文研究这个领域,但我们认为这是第一个具备产出质量的系统。这种严谨性真的很重要,因为你想把你的资金储存在有数学基础的东西上。

SKALE 链与其他区块链有什么不同?

Stan:SKALE 是新一代的区块链。前几代区块链——比特币、以太坊和几乎所有其他区块链——都有一个固定的区块时间。这意味着区块是按照一定的时间顺序发布的,通常像每 10 或 15 秒。有了 SKALE,区块可以在视需要而释放。这可以节省 CPU 时间,因为如果没有交易就没有区块。如果有人出现并发出交易,那么新的区块将在几秒钟后即可出现。

请注意,在这个最新的版本中,我们仍然每 10 秒创建一个空区块,因为人们希望看到某种信号或某种证明来显示链正在运作。理论上,你可以运行一个 SKALE 链而不产生任何区块,或者每月只产生一次。这种按需分配的方法让我们有可能在同一个节点上有许多链,并为用户节省资金和资源。

通常,人们运行单个区块链并使用全节点。每个节点上的很多条链是独一无二的。我们共识算法的进步让我们可以在许多许多区块链上分割节点,这对我们的验证者来说真的很方便。另外,我们的节点没有在超级昂贵的硬件上运行。我们能够支持低价的亚马逊云服务 (AWS) 和“数字海洋”机器。一个典型的 SKALE 节点将在一个中等规模的虚拟机上运行,这可能需要每月花费几百美元。

你能描述一下 SKALE 的共识版本有何不同,以及为什么这很重要?

Stan:在区块链世界中,以产出为导向的系统和学术研究系统之间一直存在着割裂。在实践层面,你有比特币、以太坊,以及像 Cosmos 和 Tendermint 这样的权益证明系统。在学术界,有 ABBA 和其他一些经数学验证的算法。

像 Tenderment 这样的实用系统,并不使用 ABBA 共识或其他二进制共识算法。相反,他们使用由工程师建立的合理证明模型。到目前为止,Tendermint 是最好的,Polkadot 紧随其后,但它的安全性和精确性较差。然后你再去看 EOS 使用了不太先进的算法,这些算法的数学基础更差。如果你阅读他们的论文,它们都不属于研究级别,因为其中没有数学论证。

工程师们说:"这个东西正在以某种方式运行,但让我们考虑一下哪里会出错"。然后他们提供一些理由,说明他们如何能够抵御可能发生的问题。他们修复一个问题,然后另一个问题出现,他们又修复那个问题。但到目前为止,二元共识或其他一些研究算法还没有被注入产出型系统中。

如果你想要的不仅仅是一个临时的工程修复集合,那么你需要一个确切证据,证明不存在安全漏洞。SKALE 在这里所做的是弥合数学研究和现实世界之间的这种差距。我们坚信,我们能够说明,整个系统从头到尾都是可以论证的。这就是我们的主张。我们并不是说其他的生产算法不好,因为它们可能在许多情况下有效。只是我们感兴趣的是创造一些在数学上可以论证的东西。

SKALE 是如何达到两秒以内的区块时间的?

Stan:大多数权益证明算法以一种简单的方式工作。你有一个区块链,区块链需要增加区块,区块出现,然后它们会被粘在之前的区块上。如果你看看大多数权益证明算法,如 ETH2、Tendermint、EOS 和 Polkadot,它们的工作方式几乎都是一样的,都是使用单区块提案者。

在任何时候,都有某个被指定的节点是唯一可以创建区块提案的节点。如果他们的区块被其他人认为是好的,就会被添加到链上,然后选择另一个区块提案者。这种选择可以轮流进行,也可以随机或通过其他机制进行。

这个序列存在时间间隔,即有一个固定的时间段,在这个时间段内,提案者可以提出一个区块。还有一个超时期,如果指定的提案者没有创建区块提案,那么这个选择权就交给下一个提案者。例如,Eth2 有 10 到 15 秒的超时时间,这意味着每个指定的提案者有这么多时间来创建区块提案。在这个时间段结束之前,其他人不能进行区块提案。也就是说,在没有交易的情况下,提案者可能不得不提出一个空区块,以避免被认为没有反应甚至是恶意的。

SKALE 共识算法的不同之处在于,它让建立链的每个节点都提出一个区块候选者。这意味着一条链上的所有 16 个节点都可以同时提出一个候选者。在这 16 个候选者中,有一个被选中。根据该算法背后的数学原理,高比例的候选者被认为是有效的候选者,这意味着永远不会有超时现象。也就是说不需要固定的时间段。这也使得链的创建速度很快,在一个区块被添加后,节点立即提交新的候选者。

如果每个节点都同时提交一个提案,是否会产生不必要的网络流量?

Stan:在这种情况下不会。通常来说,有 16 个区块提案将很贵,因为每个节点都需要将他们的提案发送给其他各个节点。事实证明,这种低效率实际上可以较为容易得到解决。Honeybadger 使用了一种非常先进的数学算法解决了这个问题。我们则有一种更实际、更简单的解决方式。

当你有 16 个节点正在做区块提案时,每个节点都有一个待处理的交易队列,并相互讨论交易。这些队列和这种流言蜚语在以太坊、比特币都有发生,而且基本上从区块链开始就已经存在了。

每个节点都有一个待处理队列,但队列并不完全相同。存在着网络延迟、传播延迟、缓慢的网络流量等等。但即使如此,待处理队列也是大致相等的。如果一个节点在他们的队列中有一个交易,另一个节点可能会在 100 毫秒后得到它,但在大多数情况下,99% 的队列是相同的,1% 的差异来自网络延迟。

如果我发出一个提案,我不需要向你发送实际的交易,因为你也有这些交易。我唯一需要发送的是交易的哈希值或指纹,所以当我发送一个提案时,它是非常轻量级的,而不是实际的交易,它们基本上只是一些数字。

当你获得哈希值这个指纹时,查看你的待定队列,找到交易,然后重建提案。这个过程大大被压缩了,因为你不是在发送交易,而是在发送指纹。可能有几个交易没有进入你的待处理队列,但你会告诉我,"我得到了 99% 的交易,但我不知道这三个交易。" 在这种情况下,我就会只给你发送这三笔交易。这种方法导致区块提案变得非常轻量。对于每个节点来说,将他们的提案发送给其他各个节点并不是什么大问题。

在比特币、Eth1 和 Eth2 中也有使用相同机制的提议,但到目前为止,还没有实现。其他权益证明系统也在考虑这个问题,但据我所知,我们是第一个真正实现这个想法的团队。正因如此,我们的提案很小,可以说较比特币或 Eth2 的提案小一百倍。

SKALE 的快速区块时间与其他也有类似说法的链有什么区别?

Stan:这是个重要的问题。一个权益证明区块链由一组 10 到 20 个节点组成,产生一条链——下一个区块接着一个区块。术语 "确定性 (finality) "指的是当你说这个区块确认交易状态的时候。在一些区块链中,确定性需要很长的时间才能实现。

在数学文献中,众所周知,二元共识在数学上不可能快于 M 消息。如果你想有关于 100 个节点的二元共识,最好的经数学论证的算法需要每个节点发送 100 条消息。每个节点基本上都会向其他各个节点发送至少一条信息。如果你想有关于 1000 个节点的二元共识,那么你需要发送 1000 条消息。

在更少的消息中不可能做到这种二元共识。"权益证明"世界中存在的问题是,每一个新项目都要声称比其他项目有更好的性能。因此,他们声称要创造出真正超越光速的系统。

当某个区块链声称比 Tendermint 更为快速时,意味着他们引入了一些超越光速类型的论证。当你阅读这种超级伟大算法的白皮书时,你总会看到其中有一些伪数学语言,试图隐藏一些东西。

这些算法有用吗?答案是肯定的。但问题是,为什么这些算法能运作?许多的这类算法有一个内部假设,所有的验证者、所有的节点都是好的。如果你可以假设所有节点都是诚实的,那么你就可以使用更快的算法。但是,如果区块链中的安全假设被打破,人们就会失去金钱。

在 SKALE,我们明确指出,我们要在假设三分之一的验证器在某些时候可能变坏的情况下,让区块链尽可能快地运行,并仍然会以安全的方式工作。这就是性能和安全之间的权衡。可能有这样的情况,其他网络说,他们所有的验证器都是好的,然后他们可以运行一个更快的系统,但这不是我们采取的方法。

让我们来谈谈 SKALE 网络的模块化,以及在 SKALE 中做了哪些工作来实现更多的可扩展链服务。

Stan:在 SKALE,我们相信只需要尽己所能把最核心的事情做好。如果我们可以排除一些东西从而节省时间,我们会这样做的。但是我们的链并不如此,如果你扔掉一个功能,那么用户就不能运行他们的系统了。不过,我们确实相信,不是所有的事情都应该由我们来做。如果有人想在 SKALE 上开发一些东西并扩展 SKALE,我们不想阻碍他们。

对 SKALE 来说,最完美的情况是保持我们系统极其模块化的设计,几乎类似于 Linux 的方式。如果你看一下 Linux,它具备完美的模块化机制,因为 Linux 团队唯一关心的是 Linux 内核。内核的发展超级缓慢——已经开发 30 年了。所有其他的事情都由其他公司和其他团队完成。SKALE 可以像 Linux 内核一样,我们只完善核心,并为人们提供工具包等来处理新的事物。

工具包和定制将如何运作——是否将根据每条链的情况而定?

Stan:有两种不同的场景。一种是某项功能在 Solidity 中可以完全实现。通过 Eth 软件包管理器——我们认为它将很快在以太坊社区上线——他们将把它安装到 SKALE 链中,类似于 Linux 安装程序的工作方式。这将是我们采取的一个简单途径。

如果你想进一步修改你的链,那么可以使用预编译合约。如果你想在你的链上快速运行一些东西,那么可以用 Python 或 C++ 来写,因为 Solidity 可能是相当慢的。为此,我们会使用一个常规的软件包管理器,允许它作为预编译合约被安装。

以太坊主网的一个痛点是,要吸收哪些算法是一个主观的决定。我相信他们有八到十个预编译包,用于各种加密方法,但在密码学中,算法正在呈爆炸式增长。人们正在尝试各种各样的算法。以太坊主网的问题是,你必须以某种方式对要纳入的算法进行过滤。在我们的产品中,这是你的链。如果你想要特定的算法,你想运行最适合你的解决方案,你能够把它放入一个包来运行。

你能解释一下网络自我修复和生存能力是如何运作的吗?

Stan:SKALE 需要处理某条链崩溃的情况。如果你看看旧的区块链,如比特币,它的代码非常简单,运行相对缓慢,所以它不会崩溃。这是因为一个简单的系统可以做到安全、没有漏洞。对于以太坊,可能有一两次拒绝了服务攻击,结果就导致链崩溃了。

对于权益证明系统,它们需要快速运行,因此需要使用更复杂的算法。而复杂的系统就需要对崩溃和灾难进行规划。你需要解决链“死亡”的情况。如果不这样做,那你就是不肯接受现实。

有可能是软件中的错误,可能是 AWS 崩溃,或者是网络中的事件。你必须有一个解决方案来应对这个问题。在 SKALE 中,如果 16 个节点中只有不到 5 个“死亡”,权益证明算法甚至不会注意到,因此链条将继续照常运行。

如果一个节点确实“死亡”,有两种机制可以将其同步回链上——一种是短期的,一种是长期的。如果该节点已经瘫痪了几个小时,其它节点上保存了区块缓存。重启的节点可以直接下载这些区块并进行追赶。如果一个节点停机时间较长,它可以从其他节点处获得一个快照,从那里追赶直到加入链中。

如果出现了一个可怕的问题,所有东西都“死”了,那么系统就会停止。你将再次使节点重新上线,启动链,或者在最糟糕的情况下,你将从快照中重新启动。每个节点每 24 小时都会对自己进行一次快照。(我们将在未来提高速度,但在第一个版本是 24 小时。)每个节点都存储自己的副本,但任何人都可以下载副本。这样,如果一个或几个节点消失了,你已经在其他地方存好了,开发者或社区就可以来解决。

在你从事 SKALE 工作的过程中,最自豪的是什么?

Stan:在发布软件的同时,我们团队确实在成长,尤其在理解事物的运作方面。区块链是一个非常新的主题。当我们开始做的时候,没有神奇按钮。人们当时知道的东西没有我们现在知道的多。我们研究了论文,经历了漫长的学习过程。如果我们现在从头开始,我们会发展得更快。但在那时,没有办法从未来雇佣有经验的人。

区块链所处的时代,就是能做还是不能做无法确定——这意味着涉及的复杂问题比之前系统开发阶段要多得多。区块链存在于多台计算机上,其中一些计算机被认为是恶意的,有可能会做一些坏事。而这是下个阶段的问题。区块链系统处于边缘,当你开始时,你不知道某些事情是否可能,即使在当前,我们能很好运行它。

看到人们成为复杂领域的专家也是一件很棒的事情。以前对他们来说很难的问题,突然变得容易了。每个人都已经成为其特定种类子系统的专家。团队中的人都非常友好,多年后已经成为朋友。我认为这对 SKALE 来说是一个非常光明的信号,因为我们相信能够在未来快速发展。每个人都对未来有很高的期望。这是一个重要的成就。