Py学习  »  区块链

区块链扩展之路:Plasma和Cosmos(一)

蓝狐笔记 • 5 年前 • 178 次点击  

前言:区块链的扩展性是限制它走向主流人群的主要障碍。本文主要聚焦解释侧链模式和跨链模式的扩展性解决方案。它们分别是如何来解决扩展性问题的?它们又有什么局限?本文仅代表作者观点。本文文作者Dave Kajpust,来源于medium.com,有蓝狐笔记社群“Leo”翻译。


区块链的扩展性可能是当今区块链领域最重要的问题。它为去中心化应用提供了构建商业化规模的机会,提供了与中心化应用竞争的机会。不幸的是,很少有人真正懂得如何实现扩展,扩展方面也没有很多详细的细节解释。

 

本文试图解释区块链的扩展性问题,方式是通过对两个不同的扩展解决方案:Cosmos和Plasma进行详细解释。Plasma是链外扩展解决方案。Cosmos的技术堆栈则不同,它不是直接的扩展解决方案,它是跨链解决方案,它试图解决很多区块链的挑战,扩展性也是其中之一。

 

突破扩展性

 

很重要的是要明白一点,提升了区块链的扩展性会涉及到去中心化和安全方面的平衡。Vlad Zamfir给“不可能三角”极佳的可视化:

 

(不可能三角考虑了容错共识协议中的扩展性、去中心化和安全。只要优化了其中二个指标,另外一个就无法优化。三个指标无法同时优化。区块链项目的开发者必须明智地选择想要优化的指标。)

 

比如,比特币为了去中心化和安全牺牲了扩展性。这个选择让它从第一天开始就异常强健。比特币表现良好。但,最近几年开始,越来越多的团队开始探索区块链的可扩展解决方案。

 

接下来,通过分解为两个较小问题来探究扩展性。

 

吞吐量(TPS)

 

吞吐量是指在固定时间内传输的数据量,通常用TPS(每秒交易量)来表示。

 

增加吞吐量的一个方法是增加区块大小。然而,它确实需要更多的处理能力,因为在相同时间内要处理更多的交易。吞吐量的增加会导致网络更加中心化,原因是吞吐量增加会消除一些节点,这些节点无法提升必要的CPU处理能力。

 

如果我们仔细观察比特币和以太坊的吞吐量,可以看到它们都是高延时的网络。下面是一些有助于它的设计选择:

 

经过大量优化,使审查和拜占庭容错变得昂贵

尤其是比特币,开发者试图让运行一个全节点的成本保持在较低的水平,尽可能让网络保持无须许可

在同步模型下,它们有一个利于实时的分叉选择规则

 

这些设计选择使得两个网络保持了去中心化和安全,与此同时,也保持了较低的吞吐量。相比之下,很多新区块链协议试图提升吞吐量,但它们通常会牺牲安全或去中心化。

 

延迟(达成共识的时间)

 

比特币最长链POW算法依赖于同步的假设,假设平均需要10分钟才能达成共识。以太坊的平均出块时间是在14秒左右。这些共识机制需要平衡很多变量,其中之一就是延迟。

 

我们会简要介绍比特币的延迟,以此来解释网络是如何达成共识的。如果每个比特币区块只有1MB,这就确定了一个区块的交易量上限。你可以把出块时间从10分钟降至5分钟,这样,你把吞吐量有效地提升了两倍。但是,这会导致出现更多孤块。

 

10分钟出块可以提供足够的时间来向网络的所有节点广播新产生的区块。选择这个区块时间,是因为网络的优点是尽可能快地将新区块广播到其他节点。这降低了同时广播两个有效区块的可能,否则容易导致分叉。它还允许矿工尽快开始挖新区块,而不是在一条旧链上浪费挖矿资源。

 

接下来,我们会阐述Plasma扩展的技术路线,它会为去中心化网络增加什么能力。

 

Plasma

 

Plasma于2017年8月由Joseph Poon和Vitalk Buterin首次提出。它聚焦于提供更高的扩展性。它通过把交易转移到更快更少拥堵的侧链来完成这一个目标。侧链的安全由底层根链来保障,一旦Plasma用户发觉恶意的节点行为,他们可以退出侧链。

 

这是Layer 2的解决方案,可以提高扩展性,潜在的tps可达到1000以上。

 

Plasma是如何工作的

 

首先,我们需要定义Plasma是什么。有三种不同的Plasma概念经常被提及:

 

最初白皮书中阐释的Plasma

最小可行的Plasma(MVP)

Plasma 现金

还有其他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智能合约包含如下数据结构:

 

智能合约的所有者

Plasma区块列表。每个区块有梅克尔根以及提交梅克尔根的时间。

UTXO(未消费交易输出)位置

 

有了这些数据结构,我们还需要根据交易排序执行优先退出。这也意味着,在大规模退出发生时,UTXO交易将在主网上重放,重放会根据它们在Plasma链出现的顺序进行,直到所有资金都返还。这会确保没有利益相关者可以跳出伪造区块并在退出时候偷走Ether。

 

在MVP中有三个利益相关者:

 

以太坊主网矿工

Plasma验证者,称为“操作者”(他们维持Plasma子链的运行,以获得费用)

在主网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退出,它也要求用户每个检查点在线一次,这是一种设计约束,它可能会让一部分用户不想忍受麻烦。


---未完待续---


------

风险警示:蓝狐笔记所有文章都不构成投资推荐投资有风险,投资应该考虑个人风险承受能力,建议对项目进行深入考察,慎重做好自己的投资决策。


通往区块链的新世界:关注“蓝狐笔记”区块链公众号:lanhubiji 

或加入蓝狐笔记的知识星球:https://t.zsxq.com/iaQNnIq


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/bQdlOkG6nN
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/25168
 
178 次点击