深刻理解Plasma(一)Plasma 框架

本文首发于深刻浅出区块链社区 原文连接:深刻理解Plasma(一)Plasma 框架原文已更新,请读者前往原文阅读git

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操做细节,安全性讨论以及将来研究方向等。本篇文章做为开篇,主要目的是理解 Plasma 框架。github

Plasma 做为以太坊的二层扩容框架,自从 2017 年被 Joseph Poon(Lightning Network 创始人)和 Vitalik Buterin (Ethereum 创始人)提出以来[1],一直是区块链从业人员关注的焦点[2]。首先须要明确的是,Plasma 实质上是一套框架,而不是一个单独的项目,它为各类不一样的项目实际项目提供链下(off-chain)解决方案。这也是为何不少人对 Plasma 感到疑惑的一个重要缘由,由于在缺少实际应用场景的状况下很难将 Plasma 解释清楚。 所以,理解 Plasma 是一套框架是理解 Plasma 的关键。web

从区块链扩容谈起

在介绍 Plasma 以前,不得不先介绍区块链扩容。咱们都知道,比特币(Bitcoin)和以太坊(Ethereum)做为目前最普遍使用的区块链平台,面临的最大问题就是可扩展性(Scalability)。这里须要注意的是,区块链中的可扩展性问题并非单独特指某个问题,而是区块链想要实现 Web3.0[3] 的愿景,为亿万用户提供去中心化服务所要克服的一系列挑战。虽然以太坊号称是“世界计算机”,但这台“计算机”倒是单线程的,每秒钟只能处理大约 15 条交易,与目前主流的 Visa 和 MasterCard 动辄每秒上万的吞吐量相比实在相形见绌。所以如何在保证区块链安全性的状况下,提升可扩展性是目前区块链发展亟待解决的问题之一。算法

目前关于区块链扩容的解决方案无外乎两个方向:一层(Layer 1)扩容和二层(Layer 2)扩容[4]。一层扩容也被称为链上(on-chain)扩容,顾名思义,这类扩容方案须要更改区块链底层协议。但同时也意味着须要将区块链硬分叉。这类扩容方案就像将原来的单核 CPU 改装成多核 CPU,从而能够多线程处理计算任务,提升整个网络的吞吐量。安全

目前最典型的一层扩容方案是 Vitalik 和他的研究团队提出的“Sharding(分片)”,也就是说将区块链划分红不一样的部分(shards),每一个部分独立处理交易。想要了解更多关于 Sharding 的信息,能够参考以太坊官方的 Wiki[5]网络

二层扩容也称链下(off-chain)扩容,一样很是好理解,这种扩容方案不须要修改区块链底层协议,而是经过将大量、频繁的计算工做转移到“链下”完成,并按期或在须要时将链下的计算结果提交到“链上”保证其最终性(finality)。二层扩容的核心思想是将底层区块链做为共识基础,使用智能合约或者其它手段做为链下和链上沟通的桥梁,当有欺诈行为发生时链下的用户仍然能够回到链上的某一状态。虽然将计算转移到链下会在一段时间内损失最终性,但这个代价是值得的,由于这样作不止能够极大提升区块链的灵活性和可扩展性,也极大下降了用户进行交易所须要的代价。将计算转移到链下也并不意味着彻底放弃安全性,由于最终的安全性仍是由底层所依赖的区块链来保证,所以二层扩容主要关注的问题就在于如何保证链上链下切换过程的安全性。这种思想最先被用在闪电网络(Lightning Network)当中做为比特币的其中一个扩容方案,并取得了很好的效果。多线程

本文所要介绍的 Plasma 就属于基于以太坊二层扩容方案,相似的解决方案还有 State ChannelsTrubit。这些方案虽然面向的问题有所区别,但基本思想都是将复杂的计算转移到链下进行。那么,接下来咱们将进入 Plasma 的世界,一窥究竟!框架

理解 Plasma

在前文中咱们已经明白 Plasma 是一种二层扩容框架,那么该如何进一步理解 Plasma 是什么?它区别于其它二层扩容方案的地方在哪呢?分布式

Plasma 也被称为“链中链(blockchains in blockchains)”。任何人均可以在底层区块链之上建立不一样的 Plasma 支持不一样的业务需求,例如分布式交易所、社交网络、游戏等。学习

<img src="https://raw.githubusercontent.com/gitferry/mastering-ethereum/master/Plasma-in-depth/images/Blockchains-of-blockchain.png" width="600" height="230" alt="Blockchains of Blockchain" />

这里能够举一个例子来理解 Plasma。假如企鹅公司建立了一个 Plasma Chain 叫做 Game Chain。用户经过向 Game Chain 发送一些以太币换取 Token,用于购买皮肤等游戏内的增值商品。加入 Game Chain 的操做是在链上进行的,以太坊区块链将这部分资产锁定,转移到 Game Chain 上。以后每次咱们购买虚拟商品的交易就会转移到链下进行,由企鹅公司记帐。这种方式几乎跟咱们现实生活中游戏内购的体验同样,不只结算迅速,并且手续费低廉(相比于以太坊之上须要给矿工支付的手续费)。那么问题来了,若是企鹅公司从中做祟,修改帐本,恶意占有咱们的资产怎么办?这时咱们就能够提交以前每次交易的凭证到以太坊区块链上,若是确实是企鹅恶意篡改了帐本,那么咱们不但可以成功取回本身的资产,还能得到以前企鹅公司建立 Game Chain 存入的部分或所有押金。

经过上面这个例子是否是已经明白 Plasma 大体是如何工做的了?但上面这个例子仍是过于简单,只涉及用户本身和企鹅公司。下面咱们使用区块链的语言对上面的例子进行解析。

首先,企鹅公司在以太坊主链之上建立了一系列智能合约做为主链和子链 Game Chain 通讯的媒介。这些智能合约中不只规定了子链中的一些基本的状态转换规则(例如如何惩罚做恶的节点),也记录了子链中的状态(子链中区块的哈希值)。以后企鹅公司能够搭建本身的子链(能够用以太坊搭建一套私链)。子链其实是一个彻底独立的区块链,能够拥有专门的矿工,使用不一样于主链的共识算法,例如 PoS(Proof of Stake)等。

当子链建立完毕后,企鹅公司可使用 ERC721 合约建立 token 做为游戏内的商品(就像 Cryptokitty)。但这里须要注意的是,全部数字资产必须在以太坊主链上建立,并经过 Plasma 子链的智能合约转移到子链中。用户也须要在主链上购买数字资产后转移到子链上。在上面这个例子中,Game Chain 的智能合约将主链上的资产锁定,以后在子链上生成等值的资产。以后用户就能够彻底脱离主链,在子链上进行交易。企鹅公司在子链上扮演 operator 的角色,若是一切运行正常,子链中的矿工会正常打包区块,并在须要时由 operator 将区块的哈希值提交到主链做为子链的状态更新证实。在这个过程当中,用户彻底不须要和主链交互。

咱们能够看到,将复杂的计算操做转移到链下确实使得整个交易过程变得简单。但没有强大的共识算法和庞大的参与者,资产在子链上是很不安全的。Plasma 给了咱们一种避险机制,即便 operator 做恶,咱们也能取回属于本身的资产。下图(来源自[1])简单说明了这个过程。图中,在第 4 个区块中的交易被篡改。因为 Alice 本地保存有 Plasma Chain 中全部的区块数据,所以她能够向主链提交一个含有“防伪证实(Fraud Proof)”的交易。若是证实生效,那么主链将状态从 4 号区块回滚到 3 号区块,一切恢复正常。Plasmas Chain 中的参与者也能够随时提交资产证实,返回到主链。

到这里咱们应该已经理解了,Plasma 所要作的工做并非保护子链的安全,而是当有安全事故发生时,保证用户能够安全地取回本身的资产,并返回到主链上。而且采用一系列经济激励的方式减小做恶状况的发生

下一篇文章将对 Plasma 运行过程的细节进行剖析。

相关资源

  1. https://plasma.io/
  2. https://ethresear.ch/c/plasma
  3. https://medium.com/l4-media/making-sense-of-web-3-c1a9e74dcae
  4. https://blog.ethereum.org/2018/01/02/ethereum-scalability-research-development-subsidy-programs/
  5. https://github.com/ethereum/wiki/wiki/Sharding-FAQs
  6. https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4
  7. https://medium.com/@argongroup/ethereum-plasma-explained-608720d3c60e

本文的做者是盖盖,他的公众号: chainlab

深刻浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。

相关文章
相关标签/搜索