Plasma 简介
怕什么真理无穷,近一寸有一寸得欢喜。 -- 胡适
其实不止是以太坊,几乎所有的主流公链都存在这么个问题,就是交易处理速度不能满足大多数应用的需要。目前以太坊每秒只能处理几十笔交易,但一个被广泛使用的应用,即使不是双 11 或过年抢火车票这种极端情况,每秒几千笔的交易处理速度还是要的。
这个问题,也被称为扩容问题。解决这个问题并不容易,因为它的存在和区块链的去中心化共识机制密不可分。尽管目前有各种每秒几十万笔交易处理的中心化系统解决方案,我们在解决这个问题时,又不想在去中心化方面进行过多的妥协,以保持区块链在这方面的优势。
目前以太坊生态解决这个问题,主要是两个方向,一个是靠升级区块链网络协议,通过 “分片” 的方式去解决,以太坊核心开发团队主要在这个方向努力,我们称之为 “Layer 1” 解决方案;另一个方向就是不去改动区块链底层协议,而是在其之上添加一个新的层次及相关协议,我们称之为 “Layer 2” 解决方案,很多以太坊社区团队主要在这个方向努力。
Plasma 就是上面提到的以太坊生态所谓 “Layer 2” 解决方案。之所以大家感觉这是个比较靠谱的方向,是因为很多场景下,我们感觉没必要让每个人去了解每一笔交易。
想象一下每天中午我们去食堂吃饭的场景。除非要一次性买很多饭,或者偶尔才去吃一次,你最终可能会注意到,使用食堂的预付卡更为方便,你只需要定期充一些钱进去,而不必每次带现金过去,这对商家来说也更快更省成本,因为他们也不必每次都找零或者和第三方支付通道打交道。这对大家来说是双赢。
你往饭卡里充钱,每天去吃饭消费,相当于在食堂的内部账本里记账。一般来说这种做法是成本更优的,你没必要让天下人都知道自己在食堂的每一笔消费,只要你和食堂对饭卡余额没有异议就可以了。除非有一天食堂跑路了,你的钱再也拿不回来了。食堂跑路的情况不多,但这两年其它各种发行预付卡的理发店,蛋糕店之类跑路的还挺多的。
上面的例子很简单 - 它只涉及两个参与者(你和食堂)。然而,人们想看看我们是否可以将这个想法扩展到整个区块链。是否有可能暂时将资金从一个区块链转移到更小(或成本更优)的区块链,在第二条链上进行更快速的交易,最终还能将剩余资金安全转回?这个时候,所谓 “侧链” 要浮出水面了。
这里的基本思想是,我们可以从一个链中获取资产并通过将资产锁定在主链(也称为“根链”)上并在另一个链(称为“侧链”)上再次“创建”它们将其转移到侧链上。当想要转回资产时,你只需要“销毁”侧链上的资产并在根链上解锁它们。
这听起来很简单,但有一个很大的问题 - 有人必须同意在侧链上“创建”这些资产。那么谁可以“创造”资产?这就涉及到共识机制。如果侧链共识机制运作正常,那么你的资产是安全的。不幸的是,侧链通常并不比根链安全。如果有人设法大量的在侧链创建资产,而这些资产与锁定在根链上的资产不完全对应,那么他们就可以通过在侧链“销毁”这些资产(他们欺诈性地创建了这些资产)窃取大量资金。还有一个问题,就是如果侧链停止运行了怎么办?还能不能拿回锁定在根链上的资产?
只要侧链是安全的,您的资产就是安全的。但如果侧链发生故障,那么您的资产可能会被盗!显然这并不理想。这是我们介绍 Plasma 的地方。Plasma 的推出就是为了在获得侧链带给我们的一些好处的同时确保存储在侧链上的资产始终是安全的(只要根链是安全的)。Plasma 的基本原则是,如果侧链发生安全故障,所有用户资产都可以“回退”到根链。
目前的区块链在处理交易上都是相对缓慢且昂贵的,我们想在保证区块链网络安全性的同时更快速成本更优的去处理交易,这就是我们为什么需要 Plasma。
Plasma 就是一种在不牺牲安全性的同时又能大幅提高交易处理效率的去中心化应用构建方式。下面我们来看看 Plasma 主要由哪些部分组成。
Plasma 应用在“根链”(也就是以太坊主链)之外完成大部分工作。根链往往速度慢且成本高,因为它需要非常安全。如果应用程序可以在根区块链之外进行任何工作,那么最好在链外进行。
例如,在 Plasma MVP 的实现中,几乎每个交易都发生在以太坊之外。只有存款和取款,进入和退出点,才能在智能合约上处理。这是 Plasma 应用的标准工作流程。任何不需要资产/数据移入和移出智能合约的东西都可以在链外处理。
当很多工作在链下进行时,需要某种机制确保链下状态的更新得到确认,这样才能保证当侧链上有恶意行为发生时,主链可以保证用户不会受到损失。这就是为什么需要状态确认(State Commitment),即侧链周期性地将状态更新情况提交到主链进行共识。
然而,将侧链中的所有交易都同步到主链显然违反了 Plasma 的初衷,在 Plasma 中,实际向主链提交的是 Merkle Tree 的根哈希。因此侧链中的实际交易情况被隐藏,在主链上只能看到侧链区块的哈希值。
Plasma 应用在用户想要离开 Plasma 侧链时会使用上面提到的状态确认。我们通常将此称为“退出”应用。
让我们通过想象一个支付应用来说明这一点。此应用的状态确认可能包含一些有关每个用户目前有多少资产的信息。如果用户想要从这个应用程序中提取(“退出”)他们的资产,他们需要向智能合约证明他们确实有相应数量的资产可以撤回。为此,用户可以使用称为Merkle Proof 的东西。
Plasma 不是一个容易搞懂的东西,实际处理过程也比较复杂,这里只是蜻蜓点水的介绍一下,后面会结合项目实践做更多的介绍。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!