主页 > imtoken网页版 > 干货 | 了解以太坊的第 2 层扩展解决方案

干货 | 了解以太坊的第 2 层扩展解决方案

imtoken网页版 2023-01-16 23:45:43

以太坊经典和以太坊_以太坊第二层_以太经典和以太坊统一

宾夕法尼亚尼科尔森大桥的施工照片(来源)。罗马工程原理正在扩展到新用途

对于以太坊来说,2018 年是基础建设的一年。 今年是早期采用测试网络极限的一年,今年将重新关注扩展以太坊的技术。

以太坊仍处于起步阶段。 目前,它不安全且可扩展。 任何密切关注该技术的人都可以很好地理解这一点。 但在过去的一年里,ICO 驱动的炒作已经开始夸大网络的当前容量。 以太坊和 web3 希望构建的——一个安全、易于使用、受一组通用经济协议管理并可供数十亿人使用的分布式互联网——仍处于发展阶段,在关键基础设施建成之前不会实现建成。

致力于构建此基础设施和扩展以太坊容量的项目通常被称为扩展计划。 它们有许多不同的形式,并且通常相互兼容或互补。

在这篇长篇文章中,我想深入探讨一种扩展解决方案:“链下”或“第二层”解决方案。

本文侧重于为读者提供对第 2 层解决方案如何工作的全面、详细的概念性理解。 我们不会深入研究代码或具体实现,而是专注于理解用于构建这些系统的经济机制以及所有第 2 层技术的共同见解。

1、公链的扩容挑战

首先,重要的是要了解“缩放”不是一个单一的具体问题。 它指的是使以太坊对全球数十亿用户有用必须克服的一系列挑战。

最常讨论的扩展挑战是交易吞吐量。 目前,以太坊每秒可处理约 15 笔交易,而 Visa 的处理速度约为 45,000/tps。 在过去的一年里,一些应用程序(例如 Cryptokitties,或偶尔出现的 ICO)变得流行到足以“减慢”网络速度并提高 gas 价格。

像以太坊这样的公共区块链的一个核心限制是每笔交易都必须由网络中的每个节点处理。 在以太坊区块链上执行的每项操作(支付、EtherKitties 的诞生、新 ECR20 合约的部署)都必须由网络中的每个节点并行处理。 这就是区块链的设计方式,也是使公共区块链具有权威性的一部分。 一个节点不需要依赖其他节点来告诉它区块链的当前状态是什么,它会自己弄清楚。

这对以太坊交易吞吐量设置了一个基本限制:它不能高于我们对单个节点的要求。

我们可以要求每个节点做更多的工作。 如果我们将块大小(即块 gas 限制)加倍,则意味着每个节点的工作量是前一个块的两倍。 但这是以去中心化为代价的:节点做更多的工作意味着计算能力低的计算机(如消费设备)可能会退出网络,而在计算能力强的节点上挖矿变得更加昂贵。 集中。

相反,我们需要一种方法让区块链在不增加单个节点工作量的情况下做更多有用的事情。

从概念上讲,我们有两种可能的方法来解决这个问题:

一、 如果每个节点不需要并行处理每个操作怎么办?

第一种方法不符合我们的前提,如果我们可以构建一个每个节点不必处理每个操作的区块链怎么办? 相反,如果网络被分成两部分,每个部分都可以半独立运行呢?

A 部分可以处理一批交易,而 B 部分可以处理另一批交易。 这有效地使区块链的交易吞吐量翻倍,因为交易限制成为两个节点同时处理的交易总数。 如果我们可以将区块链分成很多部分,那么我们就可以成倍地增加区块链的交易吞吐量。

这就是分片背后的智慧,分片是 Vitalik 的以太坊研究小组和其他人正在研究的一种扩展解决方案。 区块链分为不同的部分,称为碎片,每个部分都可以独立处理交易。 分片通常被称为第 1 层扩展解决方案,因为它是在以太坊本身的基础层协议中实现的。 如果您想了解有关分片的更多信息,我推荐这个扩展问答和这篇博文。 (编者注:中文翻译见文末超链接“Sharding on Ethereum”和“Sharding on Ethereum: overview and finality”)

以太坊第二层_以太经典和以太坊统一_以太坊经典和以太坊

二. 如果我们可以从以太坊的现有容量中挤出更多有用的业务呢?

第二种选择是从相反的方向考虑的:与其增加以太坊区块链本身的容量,不如用我们已有的容量做更多的事情会怎样? 基础以太坊区块链的吞吐量是相同的,但我们实际上可以做更多对人和应用程序有用的操作,比如交易、游戏中的状态更新或简单的计算。

这就是状态通道、Plasma 和 Truebit 等“链下”技术背后的智慧。 虽然他们每个人都解决了不同的问题,但他们都在链下而不是在以太坊区块链上运行,同时仍然保持足够的安全性和不变性。

它们也被称为第二层解决方案,因为它们建立在以太坊主链上。 它们不需要更改底层协议,它们只是作为与链下软件交互的以太坊智能合约存在。

以太坊第二层_以太坊经典和以太坊_以太经典和以太坊统一

2. 第二层方案是加密经济方案

在深入研究特定的第 2 层解决方案之前,了解使其成为可能的基本见解非常重要。

公链的基础能力在于加密经济共识。 通过仔细调整激励措施并使用软件和加密技术保护它们,我们可以创建能够可靠地就系统内部状态达成一致的计算机网络。 这是中本聪白皮书的一个关键见解,现在应用于许多不同公链的设计中,包括比特币和以太坊。

加密经济学为我们提供了确定性的核心——我们知道,除非像 51% 攻击这样的极端情况,否则链上操作(如支付或智能合约)将按规定执行。

Layer 2 解决方案背后的智慧在于,我们可以将这个核心的确定性用作锚点——一个我们附加其他经济机制的固定点。 第二层经济机制可以向外扩展公链的效用,允许我们在链下进行交互,并在必要时仍然可靠地引用该核心内核。

这些建立在以太坊之上的层并不总是具有与链上操作相同的保证。 但它们仍然具有足够的不可变性和安全性,因此非常有用。 特别是当不可变性要求稍微降低时,我们可以更快或以更低的开销完成。

加密经济学并不以中本聪的白皮书开始和结束——它是一种我们学习应用的技术。 它不仅体现在核心协议的设计上,还体现在扩展底层区块链功能的二层系统设计上。

一、 状态通道

状态通道是一种技术,一种进行链下交易和其他状态更新的技术。 然而,状态通道内部发生的事情仍然非常安全且不可更改:如果出现任何问题,我们仍然可以选择返回到链上交易中确定的“硬核”。

大多数读者都熟悉支付渠道,这些渠道已经存在多年,最近通过闪电网络建立在比特币之上。 状态通道是更通用的支付通道,它们不仅可以用于支付,还可以用于区块链上的任意状态更新,比如更改智能合约的内部状态。 Jeff Coleman 在 2015 年首次详细描述了状态通道。

解释状态通道如何工作的最好方法是看一个例子。 请记住,这是一个概念性的解释,这意味着我们不会深入了解实际实施的技术细节。

想象一下,爱丽丝和鲍勃想玩井字游戏,赢家获得第 1 名。 最简单的方法是在以太坊上创建一个智能合约,实现井字游戏的规则并跟踪每个玩家的动作。 每次玩家做出动作时,他们都会向智能合约发起交易。 当其中一名玩家获胜时,如规则所述,智能合约将向获胜者支付 1eth。

这可行,但效率低且速度慢。 Alice 和 Bob 让整个以太坊网络处理他们的游戏,这可能超出了他们的需要。 玩家每做一个动作,都要支付gas费,还要等几个区块被挖完才能进行下一步。

相反,我们可以设计一个系统,让 Alice 和 Bob 以尽可能少的链上操作来玩井字游戏。 Alice 和 Bob 将能够在链下更新游戏状态,同时仍然充满信心地认为他们可以在必要时恢复到以太坊主链的状态。 我们称这样的系统为状态通道。

首先,我们在以太坊主链上创建一个懂井字棋的智能合约“裁判”,将爱丽丝和鲍勃初始化为两个游戏玩家。 该智能合约包含 1eth 的价格。

然后,Alice 和 Bob 开始玩游戏。 爱丽丝创建并签署了一个描述她的第一个操作的交易,并将其发送给鲍勃,鲍勃也签署了交易,发回签名版本,并为自己保留一份副本。 然后 Bob 创建并签署了一个描述他的第一个操作的交易,并将其发送给 Alice,Alice 也签署了交易,发回并为自己保留了一份副本。 每次,他们都会更新游戏的当前状态。 每个事务都包含一个语句,这意味着后续事务总是知道每个操作发生的顺序。

到目前为止,链上什么也没有发生。 Alice 和 Bob 只是通过网络互相发送交易,没有任何东西被传递到区块链。 但是,所有交易都可以发送到判断合约,换句话说,它们是有效的以太坊交易。 您可以将其视为两个人来回编写一系列经过区块链验证的支票。 实际上没有钱从银行存入或取出,但每个人都有一叠支票,可以随时存入。

当 Alice 和 Bob 结束游戏时,也许因为 Alice 赢了,他们可以将最终状态(比如一系列交易)提交给法官合约来关闭通道,这样就只需要支付一笔交易费用。 法官合约确保这个最终状态由双方签署,等待一段时间以确保任何人都无法合法更改结果,然后支付给 Alice 1eth 的奖励。

为什么我们需要等待判断契约的“挑战期”?

想象一下,Bob 没有将最终的真实状态发送给法官,而是发送了之前的状态(他之前可以击败 Alice 的状态)。 Judge 只是一个遗留合约,它本身无法知道这是否是最新状态。

挑战期让 Alice 有机会向法官合约证明 Bob 在游戏的最终状态上撒了谎。 如果 Bob 发送了一个更早的状态,那么 Alice 已经保存了一份这个状态,她可以将这个状态提交给法官合约。 通过查看声明,判断合约可以判断 Alice 发送的状态是最新的,并拒绝 Bob 的企图窃取胜利。

特点和局限性

状态通道在许多应用程序中非常有用,它们是执行链上操作的重大改进。 然而,重要的是要记住,在决定应用程序是否适合通道化时,已经做出了某些权衡:

在 L4 中,我们正在构建 Counterfactual 框架:以太坊上的通用状态通道框架。 我们的通用模块化实现将允许开发人员在他们的应用程序中使用状态通道,即使他们自己不是状态通道专家也是如此。 您可以在此处阅读有关该项目的更多信息。 我们将在 2018 年第一季度发表一篇描述我们技术的论文。

以太坊上另一个值得注意的状态通道项目是雷电网络,目前专注于以类似于闪电网络的模型构建支付通道网络。 这意味着你可以打开一个连接到更大的状态通道网络的通道,而不是与每个你想与之交易的特定人打开一个状态通道,这样你就可以向该人付款,并且没有额外的费用。

除了 Counterfactual 框架和 Raiden Network 之外,以太坊中还有几个特定于应用程序的状态通道。 例如,Funfair 为其分布式游戏平台构建了状态通道(他们称之为“游戏通道”),Spankchain 为成人参与者构建了单向支付通道(他们也为他们的 ICO 使用了状态通道),Horizo​​n Games 也是在他们的第一个基于以太坊的游戏中使用状态通道。

二. 等离子体

2017 年 8 月 11 日,Vitalik Buterin 和 Joseph Poon 发表了一篇题为“Plasma: Autonomous Smart Contracts”的文章。 本文介绍了一种新技术,可以使以太坊的每秒交易量高于目前的水平。

与状态通道一样,Plasma 是一种链下交易技术,其安全性依赖于底层以太坊。 然而,Plasma 以新的方向实施状态通道,允许创建附加到以太坊主链的子链。 这些子链反过来可以产生自己的子链,它们的子链可以产生自己的子链,依此类推。

这样一来,我们可以在子链层面进行很多复杂的操作,运行整个拥有数千用户的应用程序,只需要尽可能少地与以太坊主链进行交互。 Plasma 子链可以更快地运行并且交易费用更低,因为它的运行不需要整个以太坊区块链的副本。

以太经典和以太坊统一_以太坊经典和以太坊_以太坊第二层

plasma.io/plasma.pdf

要了解 Plasma 的工作原理,让我们看一个如何使用它的示例。

假设您正在以太坊上创建集换式纸牌游戏。 这些卡将是 ERC 721 不可替代代币(如 Cryptokitties),但这些卡具有某些特征和属性,允许用户相互对战。 示例包括《炉石传说》或《万智牌》。 在链上执行此类复杂操作的成本很高,因此您决定使用 Plasma 而不是应用程序。

首先,我们在以太坊主链上创建了一套智能合约作为 Plasma 子链的“根”。 Plasma根包含子链的基本“状态交易规则”(如“交易不能花费已经花费的资产”),记录子链状态的哈希值,起到“桥梁”的作用允许用户在以太坊主链和子链之间进行通信。 在链之间转移资产。

然后,我们创建子链。 子链可以有自己的共识算法,在这个例子中假设它使用 POA,一种依赖于可信区块生产者(又名验证者)的简单共识机制。 区块生产者类似于 POW 系统中的矿工,他们是接收交易、形成区块并收取交易费用的节点。 让我们保持示例简单,并假设您(创建游戏的公司)是唯一创建块的实体,即您的公司运行多个节点作为子链的块生产者。

一旦子链被创建并激活,区块生产者将定期对根合约进行声明。 这意味着他们实际上是在说“我声称子链中的最新区块是 X”。 这些陈述记录在 Plasma 根中的链上,作为计算发生在子链上的证据。

现在子链已准备就绪,我们可以创建集换式卡牌游戏的基本组件。 卡片本身最初是在 ERC721 中在以太坊主链上创建的,然后通过 Plasma 根移动到子链。 这就引出了一个关键点:Plasma 允许我们扩展基于区块链的数字资产的交互,但这些资产需要首先在以太坊主链上创建。 然后,我们在子链上部署包含所有游戏逻辑和规则的实际游戏应用的智能合约。

当用户想玩我们的游戏时,他们只与子链进行交互。 他们可以持有资产(ERC721 卡)来交换 Ether,并与其他用户玩游戏(无论我们的游戏允许他们做什么),而无需直接与主链交互。 因为只有极少数节点(即区块生产者)需要处理交易,所以交易费用会很低并且操作会很快。

但它安全吗?

通过将更多操作从主链转移到子链,显然我们可以做得更多。 但这有多安全? 发生在子链上的交易真的是最终的吗? 毕竟,我们刚刚描述了一个系统,其中只有一个实体控制我们子链的区块生产。 这不是中心化的吗? 公司会不会偷走你的资金,或者说它可以随时拿走你的收款卡(资产)?

简而言之,即使在单个实体控制子链上所有区块生产的情况下,Plasma 也为您提供了一个基本保证,即您始终可以将您的黄金和资产送回主链。 如果区块生产者开始恶意行事,可能发生的最糟糕的事情就是他们迫使你离开子链。

让我们看一下块生产者可以恶意行为的几种情况,看看 Plasma 如何处理这些情况。

首先,想象一个区块生产者欺骗你——通过创建一个假的新区块,你的资金直接在他们的控制之下。 他们是唯一的区块生产者,因此他们可以自由创建不遵循我们区块链规则的新区块。 就像任何其他区块一样,他们必须向包含该区块证明的根合约广播一个声明。

如上所述,用户始终有一个最终的保证:他们可以将资产归还给主链。 在这种情况下,用户(或者更确切地说是代表他们的应用程序)能够检测到盗窃企图,并在区块生产者尝试使用他们被盗的资产之前将他们的资产发回主链。

Plasma 还创建了一种防止欺诈回落到主链的机制。 Plasma 包含一种机制,任何人(包括你)都可以通过该机制向根合约发出欺诈证明,以试图表明区块的生产者是欺诈性的。 这个欺诈证明将包含前一个区块的信息,并让我们证明根据子链规则,当前区块(错误块)不是根据前一个区块的状态正确生成的。 如果欺诈被确认,则子链回滚到前一个区块的状态。 更好的是,我们建立了一个惩罚系统:任何签署错误区块的区块生产者都会失去他们的链上债券。

以太坊经典和以太坊_以太坊第二层_以太经典和以太坊统一

plasma.io/plasma.pdf

但是提交欺诈证明需要您访问基础数据——即:用于证明欺诈的区块的实际历史。 如果区块生产者为了防止 Alice 向根合约提交欺诈证明而没有共享前一个区块的信息怎么办?

在这种情况下,Alice 的解决方案是将她的资金退回主链并离开这条子链。 本质上,是爱丽丝向根合约提交“资金证明”。 在一段延迟期之后,任何人都可以质疑她的证明(例如,证明她在后来的合法区块中花费了资金),Alice 的资金将返回到以太坊主链。

以太坊经典和以太坊_以太经典和以太坊统一_以太坊第二层

plasma.io/plasma.pdf

最后,区块生产者可以审查子链的用户。 如果区块生产者愿意,区块生产者不能将某些交易包含在区块中,从而有效地阻止用户在子链上做任何事情。 如上所述,对于这种情况,对于用户来说,解决的办法很简单,就是将资产还给以太坊主链。

然而,返还资金有其自身的风险。 一个问题是,如果子链上的每个人都同时返还资金,会发生什么情况。 在大量资产被返还的情况下,以太坊主链在挑战期间可能没有足够的容量来处理每个人的交易,这意味着用户可能会损失资金。 尽管有许多技术可以防止这种情况发生,例如,通过延长挑战期以适应资金返还。

值得注意的是,并不是所有的区块生产者都需要由一个实体控制——这只是一个极端的例子。 我们可以创建子链,将区块生产者分布在不同实体之间,也就是类似公链的分布式管理方式。 在这种情况下,区块生产者以上述方式进行干预的风险较小,因此用户不得不将资产转移到主链的风险较小。

既然我们已经介绍了状态通道和 Plasma,下面的比较就值得注意了。

一个区别是,当状态通道中的各方都同意退出时,状态通道可以立即执行回滚资金。 如果 Alice 和 Bob 都同意关闭通道并归还资金,只要他们同意最终状态,他们就可以立即从状态通道中取出他们的资产。 这在 Plasma 中是不可能的,如上所述,用户必须通过挑战期才能返还资金。

状态通道每笔交易的平均交易费用比 Plasma 便宜,状态通道速度更快。 这意味着我们可以在 Plasma 上构建状态通道。 例如,在一个应用程序上构建一个状态通道,其中两个用户作为一系列小交易进行交互。 在子链级别构建状态通道比直接在子链上处理交易更快、更便宜。

最后,值得注意的是,这些只是部分描述,我们遗漏了很多细节。 Plasma 本身还处于非常早期的阶段。 如果您想了解有关 Plasma 当前状态的更多信息,请参阅 Vitalik 最近关于 Plasma 最小实现的提议(即精简的 Plasma 实现)。 有台湾团队正在实施的 Plasma,您可以在这个代码库中找到它。 OmiseGo 正在实施他们的分布式交互——他们的进展更新在这里。

三、 真比特

Truebit 是一种链下技术,可帮助以太坊执行繁重而复杂的计算。 这使得它不同于状态通道和 Plasma,后者更有利于提高以太坊区块链的整体交易吞吐量。 正如我们在开篇部分所讨论的那样,扩展是一个多方面的挑战,不仅仅是增加交易吞吐量。 Truebit 不会增加交易吞吐量,但它将允许基于以太坊的应用程序以一种仍在主链上验证的方式做更复杂的事情。

这将使我们能够执行对以太坊应用程序有用但计算量大且无法在链上完成的操作。 例如,验证来自其他区块链的简单支付验证 (SPV) 证明,该证明允许以太坊智能合约“检查”交易是否已经在另一条链(例如比特币或狗狗币)上发生。

让我们看一个例子。 想象一下,作为应用程序的一部分,您需要进行一些昂贵的计算(如 SPV 证明)。 你不能只是让它成为以太坊主链智能合约的一部分,因为 SPV 证明在计算上是昂贵的。 请记住以太坊第二层,直接在以太坊上进行任何计算都非常昂贵,因为每个节点都必须并行处理此操作。 以太坊区块有最大 gas 值限制,它对区块中所有交易可以执行的计算总量设置了上限。 一个SPV证明的计算成本非常大,即使它是区块中唯一的交易,它所需要的gas值也是单个区块gas值上限的很多倍。

取而代之的是,您需要向某人支付少量费用才能将计算转移到链下。 拿走你钱的人被称为解决者。

首先,解决者在智能合约中支付保证金。 然后,您向求解器描述他们需要执行的计算。 他们执行计算并返回结果。 如果结果正确(大部分在一秒钟内),他们的押金将被退还。 如果结果证明求解器没有正确执行计算——也就是说,他们作弊或犯了错误——那么他们就会失去联系。

但是我们如何判断返回的结果是正确的还是错误的呢? Truebit 使用一种称为“验证游戏”的经济机制。 本质上,我们为其他团队(称为挑战者)创建激励机制,以检查解决者的工作。 如果挑战者可以通过验证游戏证明解决者提交了错误的结果,那么挑战者将获得奖励,而解决者将失去他们的保证金。

由于验证游戏是在链上执行的,它不能只计算结果(这违背了系统的整个目的,如果我们挑战链上的计算,我们不需要 Truebit)。 相反以太坊第二层,我们强制解决者和挑战者验证他们不同意的特定操作。 实际上,我们把双方都逼入了死胡同——找到他们对结果不一致的实际代码行。

以太坊第二层_以太经典和以太坊统一_以太坊经典和以太坊

Truebit的简化概念图

一旦验证了特定操作,它就足够小以在以太坊主链上执行。 然后我们在以太坊上的智能合约执行这个操作。 这个智能合约可以一劳永逸地解决哪一方说真话,哪一方说谎或犯错。

如果您想了解更多关于 Truebit 的信息,可以阅读这篇文章,或者 Simon de la Rouviere 的博客。 (编者注:中文翻译见文末超链接《A Scalable Decentralized Computing Code Execution Court》)

3.结论

第 2 层解决方案都有一个共同的见解:一旦我们拥有公共链提供的确定性核心,我们就可以将其用作加密经济系统的锚点,从而扩展区块链应用程序的可用性。

现在我们已经看过一些例子,我们可以更具体地看看第 2 层解决方案如何应用这种见解。 Layer 2 解决方案使用的经济机制通常是互动游戏:它们为不同的群体创造激励,以竞争或“检查”彼此的工作。 区块链应用程序可以假设给定的声明可能是真实的,因为我们已经为另一方创造了强大的动机来证明你给了它虚假信息。

在状态通道中,这就是我们确认通道最终状态的方式——让每一方都有机会“反驳”另一方。 在 Plasma 中,这就是我们管理欺诈证明和资金返还的方式。 在 Truebit,这就是我们确保求解器说实话的方式 - 通过激励验证者证明求解器是错误的。

这些系统将帮助我们映射将以太坊扩展到庞大的全球用户群所涉及的挑战。 一些像状态通道和 Plasma 等会增加平台的交易吞吐量。 Truebit 等其他方案将在智能合约中实现更困难的计算,开辟新的用例。

这三个例子只代表了加密经济解决方案可能设计空间的一小部分。 我们甚至没有谈论像 Cosmos 或 Polkadot 这样的“跨链协议”所做的工作(尽管它们还有一些其他内容都是“第 2 层”解决方案,但那些是另一篇文章的主题)。 我们还应该期望发明新的、神奇的第 2 层系统来改进现有模型,或者在速度、不变性和开销之间提供新的权衡。

比任何特定的第二层解决方案更重要的是进一步开发底层技术和机制,如果可能的话,将加密经济设计的底层技术放在首位。

这些第 2 层扩展方案是对以太坊等可编程区块链长期价值的有力论据。 构建第 2 层解决方案的经济性只有在区块链可编程时才有可能:您需要使用脚本语言来编写执行交互式游戏的程序。 对于像比特币这样只提供有限脚本功能的区块链来说,这要困难得多(或者在某些情况下是不可能的,比如 Plasma)。

以太坊允许我们构建第 2 层解决方案,在速度、不变性和开销之间找到新的权衡。 这使得底层区块链更适合各种应用程序,因为具有不同威胁模型的不同类型的应用程序具有对不同权衡的自然偏好。 我们将主链用于我们希望保护的国家和国家的高价值交易。 对于更看重速度的数字资产交易,我们可以使用Plasma。 Layer 2 允许我们在保持去中心化、不变性和不影响底层区块链的特性的同时做出这些权衡。

此外,很难提前预测给定扩展方案需要哪些脚本功能。 设计以太坊时,Plasma 和 Truebit 还没有发明。 但由于以太坊是完全可编程的,它几乎可以实施我们发明的任何经济机制。

充分利用区块链技术价值的唯一方法是通过以太坊等可编程区块链实现这种加密经济公式创建核心的确定性。

感谢 Vitalik Buterin、Jon Choi、Matt Condon、Chris Dixon、Hudson Jameson、Denis Nazarov 和 Jesse Walden 对本文早期草稿的评论。

原文链接: