区块链的拓展之路。
前言:区块链的扩展性是限制它走向主流人群的主要障碍。本文主要聚焦解释侧链模式和跨链模式的扩展性解决方案。它们分别是如何来解决扩展性问题的?它们又有什么局限?本文仅代表作者观点。
区块链的扩展性可能是当今区块链领域最重要的问题。它为去中心化应用提供了构建商业化规模的机会,提供了与中心化应用竞争的机会。不幸的是,很少有人真正懂得如何实现扩展,扩展方面也没有很多详细的细节解释。
本文试图解释区块链的扩展性问题,方式是通过对两个不同的扩展解决方案: Cosmos 和 Plasma 进行详细解释。Plasma 是链外扩展解决方案。Cosmos 的技术堆栈则不同,它不是直接的扩展解决方案,它是跨链解决方案,它试图解决很多区块链的挑战,扩展性也是其中之一。
突破扩展性
很重要的是要明白一点,提升了区块链的扩展性会涉及到去中心化和安全方面的平衡。Vlad Zamfir 给“不可能三角”极佳的可视化:
(不可能三角考虑了容错共识协议中的扩展性、去中心化和安全。只要优化了其中二个指标,另外一个就无法优化。三个指标无法同时优化。区块链项目的开发者必须明智地选择想要优化的指标。)
比如,比特币为了去中心化和安全牺牲了扩展性。这个选择让它从第一天开始就异常强健。比特币表现良好。但,最近几年开始,越来越多的团队开始探索区块链的可扩展解决方案。
接下来,通过分解为两个较小问题来探究扩展性。
吞吐量(TPS)
吞吐量是指在固定时间内传输的数据量,通常用 TPS(每秒交易量)来表示。
增加吞吐量的一个方法是增加区块大小。然而,它确实需要更多的处理能力,因为在相同时间内要处理更多的交易。吞吐量的增加会导致网络更加中心化,原因是吞吐量增加会消除一些节点,这些节点无法提升必要的 CPU 处理能力。
如果我们仔细观察比特币和以太坊的吞吐量,可以看到它们都是高延时的网络。下面是一些有助于它的设计选择:
l 经过大量优化,使审查和拜占庭容错变得昂贵
l 尤其是比特币,开发者试图让运行一个全节点的成本保持在较低的水平,尽可能让网络保持无须许可
l 在同步模型下,它们有一个利于实时的分叉选择规则
这些设计选择使得两个网络保持了去中心化和安全,与此同时,也保持了较低的吞吐量。相比之下,很多新区块链协议试图提升吞吐量,但它们通常会牺牲安全或去中心化。延迟(达成共识的时间)
比特币最长链 POW 算法依赖于同步的假设,假设平均需要 10 分钟才能达成共识。以太坊的平均出块时间是在 14 秒左右。这些共识机制需要平衡很多变量,其中之一就是延迟。
我们会简要介绍比特币的延迟,以此来解释网络是如何达成共识的。如果每个比特币区块只有 1MB,这就确定了一个区块的交易量上限。你可以把出块时间从 10 分钟降至 5 分钟,这样,你把吞吐量有效地提升了两倍。但是,这会导致出现更多孤块。
10 分钟出块可以提供足够的时间来向网络的所有节点广播新产生的区块。选择这个区块时间,是因为网络的优点是尽可能快地将新区块广播到其他节点。这降低了同时广播两个有效区块的可能,否则容易导致分叉。它还允许矿工尽快开始挖新区块,而不是在一条旧链上浪费挖矿资源。
接下来,我们会阐述 Plasma 扩展的技术路线,它会为去中心化网络增加什么能力。
Plasma
Plasma 于 2017 年 8 月由 Joseph Poon 和 Vitalk Buterin 首次提出。它聚焦于提供更高的扩展性。它通过把交易转移到更快更少拥堵的侧链来完成这一个目标。侧链的安全由底层根链来保障,一旦Plasma用户发觉恶意的节点行为,他们可以退出侧链。
这是 Layer 2 的解决方案,可以提高扩展性,潜在的 tps 可达到 1000 以上。
Plasma 是如何工作的
首先,我们需要定义 Plasma 是什么。有三种不同的 Plasma 概念经常被提及:
l 最初白皮书中阐释的 Plasma
l 最小可行的 Plasma(MVP)
l Plasma 现金
l 还有其他 Plasma,比如 Plasma Debit,其他可行的 Plasma,这也是目前活跃的设计领域
Plasma 使用密码学和博弈理论,目的是为了允许个人能够在 Plasma 区块链上进行可靠的交易。它不应该被视为单一的规格,比如以太坊黄皮书。Plasma 应该被看作为一组设计原则,它可以让你构建你的大规模可扩展的去中心化应用。
Plasma 背后的主要设计原则是保证用户具有与主链同样水平的安全,与此同时,它还可以提供远高于主链吞吐量的侧链。如果用户发觉在 Plasma 链上的任何恶意行为,他们可以离开 Plasma 链,并在主链上恢复资产。
目前大多数 Plasma 设计都有一个验证者。验证者可以审查在 Plasma 链上的用户,但用户能够退出侧链并恢复其资产。通过这样的扩展,Plasma 链跟主链相关联,获得抗审查能力。验证者失去审查的动力,因为最终他们会在主链接受挑战。由于这种隐含的信任,Plasma 的设计允许它扩展到 1000tps。
为了比较,像比特币这样的网络具有抗审查能力,因为 1000 个节点很难串通。但有的区块链可以有更少的节点,比如 EOS 区块链。EOS 只有 21 个区块生产者,串通和审查 EOS 账户变得相对容易。
现在,让我们看看初始白皮书中的 Plasma。
白皮书上的 Plasma
最初的白皮书上把 Plasma 描述为一种扩展设计,试图把区块链扩展到每秒数千次状态更新。它发布之时,还没有实施。但它是一个催化剂,引发出更多的研究。
为了达成目标,有一个 Plasma 智能合约存储在以太坊主网。从主网角度,这个智能合约并无特殊,也不用对以太坊核心协议做任何升级。
Plasma 智能合约基本上将整个子链连接到主网,充当桥梁作用。通过提交最新梅克尔证明,子链的每个区块都记录在主网的 Plasma 智能合约上,这在之后用来验证子链上的数据。这可在子链上实现 1000tps,而只需将单个区块哈希提交到主链。
(Plasma 组成区块链树。区块承诺向下流动,并且可向任何父链提交退出,最终提交到根链。这个案例只有三条链的深度。只有一个梅克尔证明提交到了每个父链,显著增加了交易能力。)
在Plasma 链上的每个交易都要求用户签名确认,确认他们在区块中看到了交易,并且交易已经被包含在主链。然后,确认将被签名并且包含在另外一个区块中,证明双方已有数据可用性。这称之为“确认签名”,并且要求有原始交易的最终性。
确认签名允许保证双方都已经看到交易,并且没有信息被扣压。然而,数据被 Plasma 子链验证者扣压是可能的,这要求用户定期在线。如果出现这样的行为,所有的利益相关者必须能够“大规模退出”子链。关于 Plasma 子链的大规模退出,还没有详细的描述,我们会在此处阐释。
当利益相关者注意到子链的恶意行为,开始退出 Plasma 区块链,停止交易。这个过程设计的目标是,将质押在主网 Plasma 智能合约上的 Ether 退还给真正的所有者。要达成这一点,所有 Plasma 侧链 token 将兑换为原始质押存款,正是这些质押资金在以太坊主网上创建了它们。
然而,这个退出过程涉及到每个 Plasma 账户执行至少一次主网交易。这会变得很贵。一个有 10,000 个账户的 Plasma 链要耗费很长时间达成大规模退出,同时耗费大量 gas。
毋庸置疑,这就是 Plasma 设计领域变得有意思的地方。在 Plasma 设计的落地方面,还有很多悬而未决的问题。
作为第一步,Vitalik 提出了一个简单的 Plasma 可行方案,称为最小可行 Plasma。
最小可行Plasma(MVP)
最小可行 MVP 是 Plasma 的精简版。它符合 Plasma 链的设计要求,同时足够简单,可以落地实施。Plasma 智能合约包含如下数据结构:
l 智能合约的所有者
l Plasma 区块列表。每个区块有梅克尔根以及提交梅克尔根的时间。
l UTXO(未消费交易输出)位置
有了这些数据结构,我们还需要根据交易排序执行优先退出。这也意味着,在大规模退出发生时,UTXO 交易将在主网上重放,重放会根据它们在 Plasma 链出现的顺序进行,直到所有资金都返还。这会确保没有利益相关者可以跳出伪造区块并在退出时候偷走 Ether。
在 MVP 中有三个利益相关者:
l 以太坊主网矿工
l Plasma 验证者,称为“操作者”(他们维持 Plasma 子链的运行,以获得费用)
l 在主网 Plasma 智能合约上抵押Ether的用户
通过这种 MVP 的设置,我们只是进行简单的 token 转移,并不具备通用智能合约能力。相反,我们获得强大的 token 安全保证。token 不能被双花,不能被扣压,并且总是可以通过 Plasma 退出回兑到根链。
我们甚至可以运行一个 MVP 链,只有一个 POA Plasma 验证者,并保证安全退出。MVP 的设计考虑了 ERC-20 的 Token。未来,Plasma Cash 的设计专门考虑了不可兑换 Token,比如 ERC-721 token 标准。
Plasma Cash(现金)
不可兑换的 token 类似于你口袋中的现金。你口袋中的每张美元钞票都有一个系列号,这让它独一无二,每个 ERC-721token 也有唯一的标识符。没有任何两个 ERC-721token 是相同的。
这意味着,在存储数据的梅克尔树中,只有一个 token 有效的位置。任何其他人试图把该 token 退回到主链都很容易受到 token 真正所有者的挑战。
为了激励良好行为,每个 Plasma 链用户在加入时都会提出退出存款。如果他们试图退出不属于自己的资金,一旦被发现,他们会失去所有的存款,转给挑战者。
Plasma Cash 所有者只需跟踪他们独特代币的数据,而不是整个区块链状态。相反,MVP 则要求所有者观察区块链的完整状态。两种设计都要求用户在检查点期间至少登录一次,以确保没有其他利益相关者试图错误地退出其 token。
总的来说,Plasma Cash 对需要简单 UTXO 状态的高吞吐量应用来说,具有良好的前景。
Plasma 如何实现应用的扩展?
可以想到一些应用,它们有高吞吐量和 UTXO 状态,比如去中心化交易所和通用支付。
去中心化交易所
多年来,中心化交易所被黑客攻击过很多次。去中心化交易所可以提供解决这个问题的方案。Plasma 具有高吞吐量,这让它成为构建去中心化交易所的有力竞争者,这些去中心化交易所可以连接到主链,由此移除对中心化交易所的需求。
目前也有去中心化交易所,比如 IDEX,也有去中心化交易协议,比如 0X,它们目前受制于以太坊吞吐量。目前,去中心化交易所根本不可能跟传统的中心化交易所竞争。
然而,构建一个 Plasma 去中心化交易所并不是简单。去中心化交易所,比如 IDEX,它在以太坊主网有很多智能合约和状态对象,这允许它运行,并且为了构建一个能运转的 DEX 很可能需要智能合约的支持。
目前,Plasma 相关的大多数想法都集中在有简单 UTXO 状态的高吞吐量应用上。因此 0X 和 IDEX 交易所还无法在 Plasma 上运行,直到它能支持更多复杂状态对象进行大规模退出。
特别是,一个交易所需要一个订单簿以最好的价格来匹配订单。它也需要做市商、交易者来给平台提供流动性,且还涉及到多种 token,需要数百万数千万美元。此外,交易者希望可以从平台中快速提款,这也受制于 Plasma 挑战期的局限。
支付
支付更适合 Plasma MVP 和 Plasma Cash。少于一美分的微支付可以很容易换手 1000 次,费用不多。但要记住,在 Plasma,每次转移的速度仍受限于根链的最终时间。
除了微支付,任何一群用户之间,如果需要经常发生重复和昂贵的以太坊主网交易,他们也可以使用 Plasma 链以节省费用。支付是区块链可扩展性设计的重要领域。如果 Plasma 可以解决这个问题,它会是一个很大的成就。如果我们希望用区块链来处理购买咖啡这样的微支付场景,我们必须找到一种可扩展的方法。
Plasma 的局限
截止到现在,想让 Plasma 链拥有完整的 EVM 能力是不现实的,也不是正确方法。大多数研究聚焦于让 UTXO 模型首先发挥作用。
我们必须保持简单,其中一个理由是因为智能合约的所有权性质。Solidity 智能合约不擅长代表所有权。这意味着 EVM dApp 的用户会发现自己很难实现退出。一个智能合约可以包含许多不同的功能和状态变量,这些变量由不同个人所拥有。
这会在大规模退出时带来问题,因为它要求保证 Plasma 链的安全。任何从状态 A 到状态 B 的有效状态转移将会导致任何状态 A 的退出无效。由此,子链智能合约的每个单一状态都需要有明确的所有权,否则,大规模退出总是可以被阻止的。
在 Plasma 链上拥有复杂智能合约是可能的,但它们必须是受约束的智能合约。尽管如此,随着研究的深入,Plasma 智能合约应该最终支持更复杂状态。它们需要经过深思熟虑的机制设计才能实现复杂的大规模退出功能。
大规模退出非常关键,因为即使你设计了一个非常安全的 Plasma 链,仍然有必要存在一个高效的方法来处理从 Plasma 到主链的交易。大规模退出如果花费太长时间或太昂贵,都将是不可接受的,因为它会把用户的资金置于危险之中。
白皮书中描绘的确认签名也是有限的。它们要求双方发送确认交易以确保最终性。这样的用户体验很糟糕,因为每一方不得不提交另一个确认交易以确认原始交易。然而,Plasma Cash 和更多可行的 Plasma 目标在于解决这个问题。
对于 Plasma 退出,它也要求用户每个检查点在线一次,这是一种设计约束,它可能会让一部分用户不想忍受麻烦。