Plasma的设计模型有两个主要的分支:Plasma MVP(Minimal Viable Plasma,最小可行的Plasma)和Plasma Cash。Plasma MVP的目标是为最基本的可用的Plasma提供设计规范。Plasma cash是做了部分修改的一个Plasma版本,使用户进行资产证明或验证时所需提供的数据更少。
回顾:
Qtum量子链研究院:Plasma技术详解(上篇)
Qtum量子链研究院: MVP技术详解 (中篇)
Qtum量子链研究院:Qtum Plasma MVP操作指南
阻止运营者的欺诈行为
假设在Plasma链中,Sam的资产为2.5个PETH,Alice的资产为3.5个PETH,若此时Plasma链的运营者创建了一个无效的Plasma区块来声明自己具有很多PETH,并将该无效的Plasma区块信息提交给根链。这种情况下,Sam和Alice可以通过向根链发起退出交易来阻止Plasma链运营者的欺诈行为,具体过程如下:
(1) Plasma运营者创建一个无效的Plasma区块,该区块包含一笔交易,该交易虚构运营者具有9999个PETH。
(2)Plasma运营者将该无效区块的信息提交给根链。
(3)根链中的矿工发现运营者提交的信息,在创建根链的区块时将该信息包含在区块中,此时相当于无效的Plasma区块被确认。
(4)Sam和Alice注意到Plasma运营者的欺诈行为,他们向根链提交退出交易。为了得到这一大笔虚造的PETH,Plasma运营者也立即向根链提交一个退出交易。
(5)此时,根链上的Plasma合约共有6个PETH。根链根据用户的交易最初被创建的时间,按照从最早到最新的顺序处理Plasma用户的退出交易。根据Plasma链中的交易情况,Sam最早向Plasma链转入5个PETH,然后是Alice转入了1个PETH。因此Sam的退出交易最早被根链处理,然后是Alice,最后才是Plasma运营者。
(6)根链根据Plasma链和根链的区块顺序,依次清算各区块里的交易,首先退回Sam2.5个ETH,加上Sam原来拥有的5个ETH,Sam共有7.5个ETH。然后,根链退回Alice3.5个ETH。此时,Plasma合约中没有多余的资金可以退给Plasma运营者,因此Plasma运营者的欺诈行为失败。
上述描述的系统运作方法以及对于欺诈行为的处理方法已经可以满足一个基本的Plasma系统的要求。
Plasma Cash
Plasma Cash相比最早提出的Plasma进行了以下修改:
(1)每个单笔存款都对应有一个唯一的币ID,代币无法分割也无法合并;
(2)交易不是按照txindex的顺序存储在二进制Merkle树中,而是存储在稀疏简单的Merkle树或Patricia树中,并且索引是所花费的币的ID。
简单理解,就是在Plasma Cash中,对于用户存入的某一笔代币,其会被分配一个唯一的ID,该代币相关的交易记录存储在稀疏的Merkle树或Patricia树的叶子节点中,通过这个唯一的ID可以检索到叶子节点的位置,进而查到代币的交易记录。这有点类似于房屋买卖——交易时房屋并不会动,但是房屋的主人会更换,而房屋契据则会记录交易相关方以及所有权易手的频率。这极大降低了检查代币历史记录的难度,因为知道应该去查找树上的哪个位置。
查询Plasma链中代币
如上图所示,要验证某个代币,只需要查询该代币ID在树中对应的叶子节点。例如图中树的最左边的叶子节点显示该节点对应的代币ID为Sam的资产。
Vitalik在对Plasma Cash的说明中提到,用户在证明他们的币没有被双花时只需提供:从币被存入之后的所有交易,代表币的交易历史,加上每个区块的不包含证明,用于证明那些区块不包含花费了该币的交易。用户需要将币转给另一个用户时,只需要将币完整的证明发送给那个用户。Plasma运营者只需要和每个用户连接,每次创建一个区块,只需将证明发送给对应的用户。对于每个用户,不需要发送任何不属于该用户的币的相关数据。显然,任何不属于这些证明的数据不能用来欺诈退出或双花用户的币。
Plasma Cash是一个比较新颖的想法,与传统的必须验证所有币的整个交易链相比,其验证方法更高效。目前,Plasma Cash的部分设计细节还不够详细,相信以后区块链研究人员会对其进一步地完善。
总结
和许多区块链扩容方案类似,Plasma的设计思想也是将大量的计算、状态管理等分离出主链,减少主链所需处理的信息。
Plasma系统的一个较大的优点是使用退出机制来保障资金安全。当Plasma链的用户想要将资金转移到根链时,只需要提交一个退出交易。而根链对多用户的退出交易的处理优先级方法,可以保证即使Plasma区块链网络发生黑客攻击,用户也不会失去其资金,最糟糕的情况也只是所有用户被强制从Plasma子链上撤出。
当然,Plasma系统也存在一些问题。一个重要的问题就是当Plasma子链网络出现问题或其他原因导致大量用户将资金转移回根链时,根链可能没有足够的能力在挑战期内处理这些用户的退出交易,这可能会导致用户损失资金。这一点也可能会被黑客用来攻击Plasma系统。针对这个问题,有人提出一个简单的方法,就是延长用户退出交易的挑战期,以使根链有足够的时间来处理。理论上可以在一定程度上解决这个问题,具体的实际效果,让我们拭目以待吧。
参考文献
1.Joseph Poon, Vitalik Buterin, "Plasma: Scalable Autonomous Smart Contracts"
2. Vitalik Buterin, “Minimal Viable Plasma”,
https://ethresear.ch/t/minimal-viable-plasma/426
3. Vitalik Buterin, “Plasma Cash: Plasma with much less per-user data checking”,
https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user->4.What is Plasma? Plasma Cash?
https://medium.com/crypto-economics/what-is-plasma-plasma-cash-6fbbef784a
5.The State of Ethereum Scaling, March 2018,
https://medium.com/loom-network/the-state-of-ethereum-scaling-march-2018-74ac08198a36
6.以太坊Plasma解说,链接:
https://www.chainnews.com/articles/867627836976.htm
7. Plasma链0x1的构造,链接:
https://www.jianshu.com/p/408b4228562a
8.区块链水平扩展:以太坊分片和plasma区块链树(Part2),链接:
https://www.jianshu.com/p/b68b346f2c0d
9.PPT|Plasma最小实现版,链接:
https://ethfans.org/posts/plasma-mvp