Plasma是以太坊扩容的四大方案之一(另外三个分别是Casper,Sharding和Raiden Network)。前段时间调研了Plasma,看了很多Plasma相关的资料,通过这篇文章总结一下。
什么是Plasma
Plasma对以太坊主链可扩展性的提高通过将大量交易和计算“下放”到侧链来实现。Plasma本质上是一系列运行在以太坊主链上的智能合约,只需处理少量来自侧链的请求,大多数情况下,海量的交易和计算都在侧链上完成。不同于以太坊主链目前使用的POW共识算法,侧链将使用POS等TPS更高的共识机制。因此侧链提供了可扩展性,而主链保证了安全性和去中心化。形象地说,以太坊主链就像最高法院,不需要处理过多事务,而侧链就是下级法院,从最高法院获得权力。
举个例子来说明一下。去年风靡一时的区块链游戏“加密猫”(CryptoKitties)把以太坊网络拥堵成了上下班高峰的北京三环,导致gas费用也水涨船高,破坏了整个以太坊的用户体验。如果有了Plasma,这样的情况就不会发生了——因为游戏可以放在侧链上玩!用户只需要将主链上自己的加密猫(一种ERC721代币)存入到Plasma合约,与此同时侧链上会生成一个相对应的加密猫映射,各项游戏操作都在侧链上进行,侧链上的高TPS能够提供与现在的网络游戏一样流畅的用户体验,玩完之后再把加密猫转移回主链,确保代币财产的安全。
Plasma Cash
V神在2018年3月发帖提出了一种对于Plasma MVP(Minimum Viable Product)的改良实现——Plasma Cash,可以大幅降低检查每一份用户数据的复杂度。总的来说,有以下三个特点:
- 从主链到侧链到每一笔代币存入都有一个唯一的编号(coin ID)与之对应(顾名思义,就像cash现金一样,每一张钞票都有一个序列号),存入到侧链上的代币无法分割也无法合并;
- 在plasma cash侧链的区块结构中,不同于MVP中使用的UTXO模型,交易存储在简易稀疏默克尔树或帕特里夏树中,以该交易花费的coin ID作为索引(即默克尔路径是coin ID,最后的叶子节点是交易哈希,如下图所示);
- 当用户想从侧链上退出并把代币转移到主链时,需要提交能证明其代币所有权的最后两笔交易,其他用户可以通过前/中/后三种方式来提出质疑(challenge机制,下面会解释);
Plasma Cash侧链的退出机制
用户可以自由地从侧链把存入的代币退出并转移回主链,但不排除作恶者获取了不义之财想卷款而逃的可能性。为了保证侧链上代币的安全,Plasma Cash在退出时加入了延时和挑战机制:
我们可以把侧链上代币的状态看作一个具有四种状态的状态机:DEPOSITED(存入),EXITING(待退出),CHALLENGED(被挑战)和EXITED(已退出)。
例如,当用户U把代币T存入侧链后,代币T处于DEPOSITED状态。当用户U想退出时,他可以发起startExit并附带一笔保证金bond1,startExit操作需要引用一笔交易TxA,用以证明代币T的所有权归属于用户U,以及TxA的“直接祖先”TxB,连同这两笔交易所在的区块。startExit提交成功之后代币就进入了EXITING状态。
如果一切顺利,7天之后用户U就可以光明正大地退出,代币T转为EXITED状态。
如果中途有人质疑,即退出请求遭遇挑战,则分三种情况:
- challengeAfter——另一用户O发现了一笔在TxA之后的交易TxC可以证明代币T不属于用户U,用户O以此发起挑战,这种情况很容易得到验证,于是用户O赢得保证金bond1,代币T返回DEPOSITED状态;
- challengeBetween——用户O发现了一笔在TxA和TxB之间的交易TxC可以证明代币T不属于用户U,用户O以此发起挑战,这种情况也很容易得到验证,于是用户O赢得保证金bond1,代币T返回DEPOSITED状态;
- challengeBefore——用户O以一笔在TxB之前的交易TxC发起挑战,想要证明代币T不属于用户U,这种情况无法立即得到验证,所以用户O需要附加一笔保证金bond2,而且被挑战的用户U也有申诉的机会。此时代币T会进入CHALLENGED状态。如果申诉成功,保证金bond2由用户U获得,代币T回到EXITING状态。如果无法成功申诉,则退出请求失败,代币T返回初始状态DEPOSITED;
Plasma的进展
Plasma的白皮书(Plasma: Scalable Autonomous Smart Contracts)由Joseph Poon和Vitalik Buterin共同撰写,发布于2017年8月。
Plasma的最小可行产品MVP于2018年1月公布,通过了概念验证。
Plasma Cash是在2018年3月提出的一个完整的Plasma实现,主要适用于像ERC721这样的Non-Fungible Token。
Plasma Debit实现目前正在研究中,将会增加对代币分割和合并的支持。
小结
Plasma侧链方案为以太坊可扩展性的提高提供了一种可能,但同时Plasma也存在一些亟待解决的问题(比如Mass Withdrawal问题,即大量用户同时从侧链退出的情况),还需要以太坊社区进一步地验证和完善。
参考资料: