酷玩网

介绍Plasma MVP 与Plasma Cash

linx
欧意最新版本

欧意最新版本

欧意最新版本app是一款安全、稳定、可靠的数字货币交易平台。

APP下载  官网地址

大约一年前,也就是在2017年8月,Vitalik提出了Plasma这一概念,旨在解决以太坊的交易速度和成本问题。然而,由于其过于概念化,实际操作起来并不容易。在今年年初,Vitalik提出了Plasma MVP(最小可行方案),即最小可行性的Plasma,目前大家也都是按照这个规范来进行实践的。

Plasma属于第二层解决方案,即在主链之外进行操作(即离线交易)。简单来说,Plasma就像是链中的链,每个链都可以有自己的链,就像一棵树的概念。举个例子,未来的交易所就可以创建自己的链,在其链内进行交易,速度快且无手续费。而目前MVP的设计只是在主链外增加了一层,还没有多层概念。

在每个Plasma链中,都会有一个operator,operator负责产块(可以想象成中心化的管理者)。目前,operator实现成Restful API server,产块可以想象成在数据库中插入一条记录,就像我们以往的中心化系统一样。要进入Plasma链,需要先在主链上的智能合约进行存款(deposit),然后Plasma链每产一个块,就必须与主链进行回报(回报Merkle root),这样Plasma链这边的块才算被确认。每个Plasma链是独立的,因此不能跨链交易,必须先转回到主链。

可以这样想象,一个Plasma链就像一间赌场,你要进入一间赌场需要先去把人民币换成赌场的筹码(deposit),然后你就可以在这间赌场进行任何交易。如果你要去隔壁赌场下注呢?你需要先换成人民币,然后再换成隔壁赌场的筹码。而在赌场的每一笔交易,都会被记载在赌场的账本上(可以想象成Excel表格),而这个账本需要定期地跟政府报备,报备通过了,在账本上的交易记录才会被承认。Plasma链的概念大概就像这样。

那么安全问题呢?operator是中心化的,如果被攻击或是原本就是恶意的呢?接续上面的例子,其实要把筹码换成人民币,并没有那么简单。首先,要七天后才能领出,这段期间就是挑战期,在这段期间内,如果有人提出你在赌场内造假的证据,提交到法院(也就是主链)并被法院认证是造假,那么你的钱就不能提领了。

接着回到,如果operator与某个账号串通,假造balance的数目怎么办呢?Plasma会根据transaction的顺序进行处理,从最旧的到最新的逐一验证。举例来说,1.) A存了5块存进赌场(A: 5颗筹码)2.) B存了20块进入赌场(B: 20颗筹码)(此时赌场共有25颗筹码)3. )接着B给A 3颗筹码(A:8颗, B:17颗),4.) operator从桌底下偷偷拿自己带的1000颗筹码给了C

这个时候,大家发现赌场作弊,就会开始想离开,把筹码换回人民币,这个时候就会按照1,2,3,4顺序来验证交易,验证到第3步,A有8块可以提领,B有17块可以提领,AB领完后,赌场就没钱了,所以C想领假造的1000块也没钱可以领了。

简单来说,Plasma Cash做了两个修改1.)每一笔存入Plasma contract的钱,都给一个unique token ID2.) Merkle tree的index存token ID,内容存这个token ID的交易记录

这样有什么好处呢?你每一笔存入的钱都有一个ID,可以想象成进入了Plasma chain,你的Eth就变成了ERC20 token,所以当有人要偷钱的时候,就必须一个一个token的偷,对恶意的攻击者来说,变得很不方便。不过相对的坏处就是,你存进去两笔钱,要分开来用,不能合并一起,比较不方便。第二点,可以想象成,你的token有一个自己的账户,所有的交易都在这个账户里,要找记录,证明交易都很方便,重点是寻找起来很快速,只要是关于这个token的交易但不在这个账户的,都是无效的。

但是每一笔钱都有一个ID,可以想象的是Merkle tree会长得很大,Ethereum Research上有个简单的算数

假设我们有一个(非常)小的Plasma Cash chain,只有2^16(= 65536)个硬币,那么给定硬币的存在或不存在证明至少需要32字节的Merkle proof * 16个兄弟节点 = 每个区块512字节。如果我们假设Plasma区块每15秒创建一次,那么一年内会有31557600 / 15 = 2103840个区块。2103840个区块/年 * 512字节/区块 = 1077166080字节/年 = ~1.077 GB/年。1 GB/硬币/年!source:https://ethresear.ch/t/plasma-xt-plasma-cash-with-much-less-per-user-data-checking/1926

简单来说,就是65536种token(也就是63356次存款),每年大概会多出1GB的资料量。如果Plasma被大量使用,这个量会相当惊人。后来又有提出Plasma XT,这是基于Plasma Cash之上进行改进。资料量之所以这么大,是为了要有历史记录作为查证,而Plasma XT提出了check point的概念,定期进行验证,也就不需要全部历史记录了。

Check point的概念听起来很简单,就是定期检查,但是operator并不是实际的一个链,只是一个api server,所以假如operator不提供交易记录只提供Merkle root,那么用户要怎么确认呢?假如有了方法可以确认了,那么token数量这么多,大家都同时确认,会不会超过gas limit的上限?目前的解决方案,第一个问题就是使用用户的签名验证,如果operator擅自在某个check point finalize你的状态,那么你就很容易地知道这个operator作弊,因为你没有在这个check point签名过。第二个问题使用了checkpoint zone,也就是每个token ID有一个时间做验证,例如0-99做N block验证,100-199在N+1 block验证……以此类推,解决了一次太大量的问题。

Plasma的介绍大概就到这里,若有错误欢迎指正!说不清楚的部分,也欢迎提问!

标签: 数字货币