扩展以太坊是一项前所未有的挑战,而 Plasma 正是一个旨在提高交易吞吐量的 Layer 2 扩展框架。本系列是 Plasma 的技术概述,其内容包括:什么是 Plasma?它的原理是什么,以及它的技术研究现状如何?本文系解释 Plasma 的系列文章的第一部分。

原文标题:《Understanding Plasma, Part 1: The 「Basics」》
原文作者:Daniel Goldman
编译:喏呗尔

简介

不知道你是否探讨过这个问题:对加密货币进行扩展很难。

2017 年 8 月,Vitalik Buterin 和 Joseph Poon 发布了 Plasma 白皮书,向全世界展示了一种全新且颇有前景的方案。该方案旨在提高加密货币交易的吞吐量,并解决困扰用户已久的拥堵问题。仿佛一夜之间,Plasma 成为了以太坊生态系统中最受欢迎的 Layer 2 扩展框架。这些炒作引发了一系列混乱的结果,并让外界以为这些混乱的结果就是我们期望从这一加密领域获得的东西:各种大胆的前景、雄心勃勃的研究,还有令人眼花缭乱的 Plasma 版本 / 提案 / 相反提案 / 优化方案等。最终,Plasma 基本上成为了一个连续的笑话。

当然,这依旧是一件非常棒且十分令人兴奋的事情。但不幸的是,Plasma 的快节奏演变及其技术复杂性,使得那些没有直接参与研究和开发的人难以掌握其要点。对于外部参与人员来说,你可能会拥有更多的疑问,而不是具体的答案:现实而言,Plasma 链具有什么样的能力?在见证 Plasma 落地并有效运作之前,我们还面临哪些阻碍?Plasma 的权衡是什么?它的工作原理是什么?

最重要的一点是:它到底是什么?

如果这些问题勾起了你的兴趣,那么你来对地方了!本系列旨在为 Plasma 技术提供一个概述 —— 它到底是什么,它的原理是什么,以及当前的技术研究状态能给我们带来什么启发。本系列的第一部分内容将涵盖:

1、Plasma 作为 Layer 2 技术的理论基础;
2、关于第一个具体的 Plasma 规范「最小可行 Plasma (MVP)」的内部工作原理的解释。

强制性免责声明:本文对于严肃的技术背景不作要求,但我们将在读者对以太坊及智能合约有一定的基本了解的前提下进行相应的内容规划。

背景概述:Layer 2

我们称之为「Plasma」的协议族实际上是关于区块链可扩展问题的 Layer 2 解决方案的一个子集。这里面的「可扩展问题」是指公开且无需准入许可的区块链所面临的交易容量有限问题。Layer 2 试图通过让(某些特定的)交易在不必触及区块链本身来达到最终化的方式来绕过这个瓶颈。

如果你愿意,你可以将 Layer 2 交易视为一种支票。这种支票的账户里面的资金可以直接得到验证,而不必将其实际存入你的银行账户。这种支票可以有效地作为纸币处理,并直接交付给另一方作为付款——前提是接收支票的下一方也有能力自我验证账户资金的有效性(只是大概打个比方,求不怼)。

Layer 2 系统的大致模式是:一开始,一定数量的资金被锁定在区块链的基础层(假设为以太坊,下同)上。紧接着,其他参与方(并不一定是进行存款的同一方)可以借助被锁定的资金通过上层系统进行链下交易,并且只偶尔与主链进行交互(如果有的话)。在任意时刻,任何资本的所有者都能够将他们拥有的所有资金撤出。

将 Layer 2 (因为我们正在使用这个术语)与其它链下支付系统区分开来的定义属性是:尽管避免了进行持续的基础层交互,但 Layer 2 交易仍然保留了我们期望的 Layer 1 所拥有的去中心化和无需信任的安全保证。通过妥善保管个人私钥,以及运行必需的软件,你可以保证:无论交易对手是否作恶,个人资金始终一定保管在自己手上,并且它在主链上是安全的——这里的「交易对手」可以是个体、机构、共识机制或其它任何你无法控制的因素。即使在一个噩梦般、充满阴谋诡诈的「楚门的世界」中,整个系统的所有其他用户都暗中串谋试图窃取你的资金,他们也会失败。

为什么把这种技术叫做 Plasma?

在过去几年的 Layer 2 研发中,逐渐出现了一种分类方式。我们依照这种分类方式巧妙地将 Layer 2 机制分为两类:「Plasma」和「通道技术」(比如「状态通道」或者「支付通道」)。虽然不是每个人都依照这种方式精确地使用这些术语 —— 并且最终无论是加密领域还是语言领域本身,都不会有官方权威来为我们厘清这些定义——我们将在此假定「Plasma」和「通道技术」的定义足够广泛,二者足以包含所有可能的 Layer 2 系统方案。

第一种区分这两种类别的方式是,判断它们所需的最小链上交易数:在通道技术中,通道交易的最终敲定不必与主链进行任何交互;而对于 Plasma 交易,其必须与主链进行一次交互(由 Plasma 运营者而不是用户进行广播,这部分内容下文会进行介绍)。Plasma 之所以被界定为 Layer 2 可扩展性方案(尽管需要进行定期的链上交易),是因为在 Plasma 中,每一笔 Layer 1 交易都可以一举有效地完成多笔交易。你可以想象一下,将一堆 Layer 2 交易压缩成一笔交易。尽管如此,这似乎就是通道技术的放大版。无需链上区块确认意味着(几乎)即时敲定,而尽可能少的链上交互通常是一件好事。

另一方面,通道技术要求所有通道参与者完全同意任意通道范围的状态更新,这意味着拥有多个政党的单一通道在实际中难以实施。当你需要与没有跟你共享同一通道的参与方进行交易时,你需要通过你的通道合作伙伴来「转发」交易。因此,你的金融活动将被局限在你可以通过通道网络图找到相应的流动性路径的人群范围内。然而,在 Plasma 中,只有交易的发送方需要表态是否同意。除此以外,所有相关参与方都不需要执行流动性锁定 / 限制来进入、退出和自由交易(事实证明,「谁需要同意状态更新」也是区分「通道技术」和「Plasma」的等效方式)。

因此,片面而言,我们可以说通道技术更适用于依赖即时敲定特性,以及拥有相对固定的会进行交互的参与者集合的应用,而 Plasma 更适用于涉及多方参与者、强调高交易吞吐量并且即时敲定特性重要性相对较低的场景。

在后续文章中,我们将会看到:有一些结构同时利用了通道技术和 Plasma 机制,并尝试尽可能地融合二者的优势。所以最终,我们所需要作出的折衷也许会更小一些。不过,这么久远的事情还是先不要想了。在我们天马行空之前,我们不妨先了解一下 Plasma 实际上是如何运作的。

最小可行 Plasma

尽管最初的白皮书仅介绍了 Plasma 的总体概念,但它的理念十分宽泛,并且雄心勃勃(老实说,还特别长)。白皮书中所提及的一些想法 —— 比如嵌套的 Plasma 链树 —— 仍旧超出了目前的 Plasma 研究的范围内,甚至有可能无法实现。

因此,获得实际工作代码的第一个重要的步骤——可以说,我们目前关于 Plasma 的思考的起点——是一种被称为最小可行 Plasma (MVP)的规范。最小可行 Plasma,顾名思义,其目标就是要过滤掉所有天马行空的功能,并将所有事物提炼为最简单的可行实现。这里的「可行」意味着它必须简单地满足上述定义的 Layer2 Plasma 系统的基本要求,并且只拥有最少的功能,即从 A 到 B 的可替换资产(假定为以太币,但对于其它符合 ERC20 标准的代币来说也是可行的)。

暂时而言(记住只是暂时的!),我们将忽略 MVP 里出现的所有缺陷,即使这些缺陷实在令人难以接受。并且事实上,MVP 确实有资格作为实用的 Plasma 解决方案!至于它的缺陷 ... 好吧,见仁见智。

正如我们之前提到的,Plasma 的关键属性是多笔交易被压缩且被最终敲定,并且只有一笔交易与主链交互。在 MVP 中,「压缩」是通过默克尔树完成的:交易被组合在一起并通过默克尔化得到一个根,然而这个根被放置在 Layer 1。交易本身遵循比特币式的 UTXO 模型。也就是说,交易花费的是经过发送者证明其所有权的输入,并创建受到新的所有者的公共地址影响的输出。这就是说:一条 Plasma 链本身就是一条区块链!通过使用必要的链下 Plasma 区块数据和链上默克尔根数据,用户可以验证自身的合法权利,并依靠以太坊的链上智能合约来执行规则且解决所有争议。

我们将负责执行上述过程(即默克尔化交易、广播根,并与用户共享数据)的实体 —— Plasma「区块创建者」 —— 称为 Plasma 运营者。值得注意的是,Plasma 机制本身完全不知道运营者的存在形式:它可以是一个单一的「中心化」实体,一条联盟侧链以及一个基于权益证明的区块认证系统等。Plasma 结构的根本目标是,一切基金管理都无需托管。并且在 Plasma 的实现中,无论谁负责创建区块,这个因素都应该保持不变。更「去中心化」的机制可能会带来与分布式对等系统相关的其他好处,比如抗审查性、容错等 —— 但无需托管的性质不会改变。因此,为了简单起见,我们不妨假设运营者只是一个单独的实体,从而更加明确地推导 Plasma 机制。

如此一来,我们就可以开始阐述典型的 Plasma 交易的生命周期,并检查在不同的场景中,不同的事情会得到怎样的处理。

首先,Alice 通过向合约发送一笔链上以太币交易,将以太币存入 Plasma 链中,运营者将该笔交易包含在 Plasma 区块中。这些以太币最初(显然)以 UTXO 的形式归属于 Alice。像往常一样,Alice 想要给 Bob 付款,(需要注意的是,Bob 不一定需要进行链上存款,或许他永远都不需要在链上存款)为此,她创建了一笔花费她的 UTXO 并为 Bob 创建一个新的 UTXO 的交易,并将此交易发送给 Plasma 运营者。运营者将这笔交易与其它(可能不相关的)交易组合成一个 Plasma 区块,并对它们「默克尔化」得到一个默克尔根,然后(并且只)将这个根发送到主链。

接着,运营者将此 Plasma 区块发送给所有用户(包括 Alice 和 Bob)。在收到最新的区块后,Alice 和 Bob 各自对其进行验证。这一验证过程旨在确保交易本身有效,并且区块与区块链上默克尔根相对应。如果一切顺利,那么 Alice,Bob 和其他用户就可以继续幸福快乐地生活了。

然而,如果这时 Alice 感觉她自己已经受够了这个疯狂的 Plasma 业务——她想把资金撤回到以太坊链上——她可以通过发送一笔链上交易来启动「提现请求」(请注意:这一提现请求不需要运营者的许可)。在这笔交易中,她需要包括她想要提现的 Plasma 链的 UTXO,以及该 UTXO 所属的 Plasma 区块编号和证明包含过程的默克尔路径。现在,在她获得资金之前,她必须等待一个「争议期」(假设它时一周)才能通过。在此期间,如果其他用户检测到请求犯规,那么这些用户可以对 Alice 的退出行为提出质疑。

这可能会导致两种情况:

皆大欢喜:每个参与者都是诚实的

在 Alice 开始退出时,其他用户会浏览各自的 Plasma 链副本以检查并确认 Alice 试图退出的 UTXO 实际上仍然属于她。他们还会以其它方式验证所有区块的有效性(尽管他们可能已经这么做了)。Plasma 的用户现在可以放心:Alice 只能带着属于她自己的钱离开,其他用户的资金是安全的。生活可以愉快地继续。

令人发指:Alice 是坏人

现在,我们不妨替换前一个场景的结局:Alice 的退出意图「足够正确」,以致于一开始被智能合约接受了。也就是说,它是一笔有效的交易,默克尔证明确实与旧的默克尔根相对应 —— 但它实际上是双重花费。这意味着,Alice 试图用她早先发送给 Bob 的相同 UTXO 来进行退出。唉,Alice 呀。

但这都不要紧!Bob (或者任何其他用户,但我们还是说 Bob 吧)有一周的时间采取行动。他会对照自己的 Plasma 链副本来检查 Alice 的 UTXO,并注意到这是一笔双重花费。为了证明 Alice 的罪行,他提交了一个「欺诈证明」。这个证明包含了 Alice 以前花费相关的 UTXO 的旧交易,以及这笔花费交易被包含在 Plasma 区块中的默克尔证明。由于 Bob 给出了 Alice 已经花费这笔资金的加密证明,因此 Alice 被逮个正着,她提现这笔资金的请求被取消了。

关于「惩罚」的说明

在这时,我们可能想要通过某种方式来进一步惩罚 Alice 的犯罪未遂:为她创造一个可信的威胁,给她带来更大的损失,从而理想地将这类行为扼杀在摇篮里。这些惩罚机制在通道结构中十分典型。比如,在 Poon-Dryja 支付通道(目前在比特币的闪电网络中使用的支付通道结构)中,试图兑现过期交易并被抓获将会导致你所有的通道资金都被转移给交易对手。虽然这种惩罚在 Plasma 或通道技术中都不是绝对必要的,但可以说,Plasma 对这种惩罚措施有更强的需求。如果缺乏惩罚的概念,那么 Alice 可能会反复尝试不正当的提现,从而迫使 Bob (或其他参与者)每次都要花费 gas 费用来进行响应。然而,讽刺的是,如何在 Plasma 中实施这种惩罚并非如此容易。为了削减 Alice 在 Plasma 链中的资金,我们需要确定哪些资金属于 Alice,这需要一个声明 / 争议窗口机制——我们不妨深入这个充满挑战的兔子洞。

因此,Plasma 结构通常要求 Alice 在尝试提现时进行「退出抵押」。从本质上讲,Alice 的抵押表示「我想要取出 5 个以太币。如果你发现我的退出证明带有欺诈性的话,那么你可以从我这里拿走 1 个以太币作为罚款。」我们可以自由设定合约条款,即所需的抵押规模,以及对特定违规行为的响应情形(比如将押金交给质疑成功的参与者作为赏金,或者将其削减为零,或者仅仅涵盖质疑者的 gas 成本等),并根据个人喜好来调整其宽松 / 严酷程度。

悲惨情况:邪恶的运营者

到目前为止,事情的发展相对顺利。这很大程度上是因为我们做出了极其简化的假设,即运营者将所有人的最佳利益都放在心上。现在是时候来考虑一下我们不愿想象的情形了:如果运营者是一个彻头彻尾的骗子和小偷,那么我们该怎么办?

比方说,Alice 和 Bob 正在开展他们的业务。有一天,他们发现运营者向他们发送了一个区块。这个区块的默克尔根已经在链上进行过认证,其中包括一个赤裸裸的无效交易,比如花费 Plasma 链上 90% 的以太币。回想一下,运营者全权负责创建区块,因此其理论上可以随意包含任意他想要的东西。更糟糕的是,接下来,运营者要求使用这笔无效交易来进行链上提现。

与 Alice 在上述案例中的欺诈行为不同,因为那只是 Alice 试图进行双重花费,而这笔交易花费的是一个甚至都不存在的「UTXO」。因此,我们无法使用先前的质疑和取消提现的方案。

可能大家很容易就认为我们可以构建一种不同类型的欺诈证明来处理这种不同的作恶行为,即「如果我们要求运营者证明该输入 UTXO 的存在行不行?并且,额 ... 如果这个 UTXO 是凭空产生的,那么我们可以要求证明这个 UTXO 的合法性吗?然后,额 ...」

我必须要打断你。在这种情况下,欺诈证明会很复杂,甚至有可能是不可实现的。但即使探索这条路线也毫无意义,并且徒劳无功,因为它最终会遇到更大的问题。由于我们假定存在一个邪恶的运营者,我们不妨全力以赴——运营者不仅创建了一笔无效的交易并尝试提现,与此同时,他甚至从未与他的用户共享无效的 Plasma 区块。Alice,Bob 和其他参与者现在看到的是一个包含天量资金且极度可疑的退出请求,但他们对于其中的细节一无所知。

那么现在怎么办?我们如何确保我们的运营者不会带着不属于他的资金逃之夭夭?在这种可怕的情况下,我们转向 MVP 的核按钮:鉴于我们不能直接阻止运营者退出,我们可以允许其他参与者先退出:由智能合约负责强制执行一个退出队列,并确保先前的 UTXO 优先退出。因此,只要每个人 —— 没错,确实是每个人 —— 使用 Plasma 链在运营者的大规模提现完成之前撤回各自的资金,那么运营者想要偷走的以太币将被排空,由此他的恶意企图最终只能无功而返。

从理论上讲,这种方案有效的。无论其他参与方是否作恶,用户始终保管着自己的资金 —— 这就是我们的目标。但坦率地说:恶意运营者(或者更可能是被黑客入侵 / 被攻陷的运营者)使用不超过一笔交易来迫使所有用户在一定时间内撤回主链的状况远非理想。事实上,在真正最糟糕的情况下,如果主链区块拥堵的时间足够长,那么用户可能无法及时退出,因此实际上可能会失去他们的资金。理论上,我们可以通过更先进的退出策略来减少大规模退出所需的交易数量——比如通过签名聚合来将众多交易批量合并——但这仍然是一个尚有待解决的研究问题。即使这是一个有效的解决方案,它也需要用户之间的协调与合作,因此仍然是次优的。

但 MVP 结构中还有另一个(可以说是)更严重的缺陷。即使在皆大欢喜的情形中,我们也要求所有用户完全验证整条 Plasma 链。这使我们处于可用性 Catch-22。Plasma 在扩展以太坊的交易吞吐量上是十分有用的,但 Plasma 链提供的每秒交易吞吐量越高,客户端在带宽和内存方面的负担就会越重。回想一下,Plasma 结构的一个关键优势是它可以轻松地支持许多用户,将其用户范围限制在只能运行大型应用程序的人群范围中将会严重削弱其价值主张。

来源链接:www.theblockcrypto.com