近段时间著名的比特币投资者Olivier Janssens发布的推特投票中,Vitalik Buterin表达了其对ERC20 CBDC(央行数字货币)的支持。当被问到有关延展能力的问题时,Buterin回答,即将到来的Plasma部署能够解决这类问题,这样区块链网络就足以支撑央行需要的容量了。
本期研究院的主题就详细为大家详解Plasma扩容方案如何做到支持极高的交易,并且成为行业内最风靡的落地技术方案。
Plasma到底是什么
Plasma是由Joseph Poon和Vitalik Buterin提出的一种区块链扩容方案。Plasma是指在根区块链或者说主链(例如以太坊区块链)上运行一系列智能合约,这些合约会制定相关的规则。基于根区块链上部署的合约延伸出来的区块链被称为子链,合约中制定的状态交易规则将用于子链,这些子链也可以进一步衍生出自身的子链。
大多数情况下,子链能够完成大量的计算,仅仅周期性的将正常状态的Merkle证明广播到根链,根链只需处理少量来自子链的请求,这样可以大大扩展整个系统的容量。
根链和子链形成了一种树状的分层结构,如下图所示。区块的提交依次向下流动。用户想要退出Plasma子链时,退出申请可以提交给任意父链,最终被提交到主链。
Plasma类似于一个法院的系统,位于不同树深度的Plasma区块链就像是各级法院。更高一级的法院可以否认下层法院的审判结果,根链就是级别最高的法院。一般情况下由低级别法院进行审判,若用户不认同审判结果,则可以回到更高级别的法院。这样可以最大化下层法院的可用性,最小化非共识状态的成本。
Plasma中蕴含的博弈机制
Plasma是通过创建经济激励和奖惩机制使整个区块链系统正常工作。在Plasma区块链中,子链拥有自己的共识算法,且独立于根链。与现有区块链类似,子链中也存在区块生产者,称为Plasma链的运营者(Operator)。但是这些区块生产者需要抵押一部分资产,如果他们保持诚实,正确地记录子链的区块内容,那么他们会得到经济上的奖励;而如果他们出现不良的欺诈行为,则抵押的资产将被销毁。
在一个Plasma子链中,验证者(validator)或运营者负责将子链的相关活动通知给根链。为节省存储空间,只有区块头的哈希提交到根链,其他信息保存在子链上。
若要使用Plasma链,用户需要向Plasma链中存入资金。用户通过将资金移动到根链上部署的Plasma智能合约上的方式,将资金从根链转移到相应的子链上。
Plasma区块链中,根链是所有全局计算的强制执行者,并仅在给予欺诈行为操作者惩罚。若Plasma子链中的用户发现运营者提交了伪造的信息给根链,那么他们可以提交相关的欺诈证明数据给根链,以证明运营者提供的数据是伪造的。一旦证明成功,Plasma子链的区块将回滚到伪造之前的状态,同时,运营者也将受到惩罚。
如何取回质押资产
如果用户想要取回自己的资产,或者用户对自己所在的Plasma链产生信任危机,想将资产转移回根链或Plasma父链。用户可以发起一个取款交易(Withdrawal transaction)或者退出交易(exit transaction),即用户提交其交易历史的Merkle证明,以证明其拥有一定数量的资金。
一般地,取款的类型分为两种。一种是简单取款(Simple Withdrawal),即单方从子链中取回资产;另一种是大量取款(Mass Withdrawal),即多方一起从子链取回他们的资产。
简单取款包含以下几个步骤:
1.用户提交一个签了名的取款交易(Withdrawal transaction)给根链或者Plasma父链。用户在发起取款交易的同时需要附上一笔押金作为奖励金。
2.提交取款交易后进入一个挑战期。在挑战期时间内,任何人都可以提交欺诈证明来挑战该用户的资产声明,证明该用户的资产声明无效或者过期。若挑战成功,那么该笔取款交易会被取消,且挑战者可以得到该用户提供的奖励金。
3.若直到挑战期结束都没有人能够提供欺诈证明,那么就认定该取款交易是正确的,该用户可以赎回在根链或Plasma父链上的资金,且奖励金会退回给用户。
Plasma的设计模型有两个主要的分支:Plasma MVP(Minimal Viable Plasma,最小可行的Plasma)和Plasma Cash。Plasma MVP的目标是为最基本的可用的Plasma提供设计规范。Plasma cash是做了部分修改的一个Plasma版本,使用户进行资产证明或验证时所需提供的数据更少。
阻止运营者的欺诈行为
假设在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可以检索到叶子节点的位置,进而查到代币的交易记录。这有点类似于房屋买卖——交易时房屋并不会动,但是房屋的主人会更换,而房屋契据则会记录交易相关方以及所有权易手的频率。这极大降低了检查代币历史记录的难度,因为知道应该去查找树上的哪个位置。
如上图所示,要验证某个代币,只需要查询该代币ID在树中对应的叶子节点。例如图中树的最左边的叶子节点显示该节点对应的代币ID为Sam的资产。
Vitalik在对Plasma Cash的说明中提到,用户在证明他们的币没有被双花时只需提供:从币被存入之后的所有交易,代表币的交易历史,加上每个区块的不包含证明,用于证明那些区块不包含花费了该币的交易。用户需要将币转给另一个用户时,只需要将币完整的证明发送给那个用户。Plasma运营者只需要和每个用户连接,每次创建一个区块,只需将证明发送给对应的用户。对于每个用户,不需要发送任何不属于该用户的币的相关数据。显然,任何不属于这些证明的数据不能用来欺诈退出或双花用户的币。
Plasma Cash是一个比较新颖的想法,与传统的必须验证所有币的整个交易链相比,其验证方法更高效。目前,Plasma Cash的部分设计细节还不够详细,相信以后区块链研究人员会对其进一步地完善。
总结
和许多区块链扩容方案类似,Plasma的设计思想也是将大量的计算、状态管理等分离出主链,减少主链所需处理的信息。
Plasma系统的一个较大的优点是使用退出机制来保障资金安全。当Plasma链的用户想要将资金转移到根链时,只需要提交一个退出交易。而根链对多用户的退出交易的处理优先级方法,可以保证即使Plasma区块链网络发生黑客攻击,用户也不会失去其资金,最糟糕的情况也只是所有用户被强制从Plasma子链上撤出。
当然,Plasma系统也存在一些问题。一个重要的问题就是当Plasma子链网络出现问题或其他原因导致大量用户将资金转移回根链时,根链可能没有足够的能力在挑战期内处理这些用户的退出交易,这可能会导致用户损失资金。这一点也可能会被黑客用来攻击Plasma系统。针对这个问题,有人提出一个简单的方法,就是延长用户退出交易的挑战期,以使根链有足够的时间来处理。理论上可以在一定程度上解决这个问题,具体的实际效果,让我们拭目以待吧。
评论
查看更多