Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

Plasma MVP 和 Plasma Cash 介绍

梦语曦曦s
139 0 0
Vitalik提出了Plasma这个概念以解决Ethereum交易速度及成本的问题,不过提出的内容太概念性,没什么人知道该怎么实作,最小可行性的Plasma,而目前大家也是遵循这个规范来实作。Plasma属于layer2的solution,就是在主链之外做运作(也就是链下交易)。8 T, ]+ c$ y+ y% g2 m# g
) U3 y% n, W+ w3 F& e
Plasma简单来说就是链中链,每个链都可以有自己的链,自己的链还可以再有链,就像是tree一样的概念。举例来说,往后交易所就可以创造自己的链,在自己链内交易,速度快而且无手续费。而目前MVP的设计是在主链外多一层而已,还没有多层的概念。上个月的COSCUP有EthereumFoundation负责Plasma的开发者的分享,
5 j5 J  {! x, m2 t& g; o- z
* I3 }. G0 ^* yPlasmaMVP在每个Plasmachain会有一个operator,operator负责产块(可以想象是中心化的管理者),以目前来说,operator实作成RestfulAPIserver,而产块可以想作是在数据库insert一笔纪录,跟我们以往中心化的系统一样。而你要进入到这个Plasmachain需要先在主链上的smartcontract作存款(deposit)才能进入。然后Plasmachain每产一个块,就必须跟主链作回报。( s3 V: k6 f7 X' L5 u) s
7 d2 I$ r9 N$ i6 B8 G9 U3 f
这样Plasmachain这边的块才算被confirm。每个Plasmachain是独立的,所以不能跨链交易,必须先转回到主链。那安全问题呢?operator是中央式的,如果被攻击或是原本就是恶意的呢?接续上面的例子,其实要把筹码换成新台币,没有这么简单。首先,要七天后才能领出(取出),这段期间就是挑战期(challengeperiod),在这段期间内,如果有人提出你在赌场内造假的证据,提交到法院(也就是主链)并被且被法院认证是造假,那你的钱就不能提领了。接着回到,如果operator跟某个账号串通,假造balance的数目怎么办勒?Plasma会依照transaction的顺序处理,从最旧的到最新的逐一验证。举例来说,
7 s' {' x$ G% |+ P! \* m$ L% C+ G4 |  J- n% K
    A存了5块存进赌场(A:5颗筹码)
0 C8 K5 r! k4 k. `$ b9 Z5 W( }; @5 M/ G: D4 H. B9 P1 p9 J3 R* f
    B存了20块进入赌场(B:20颗筹码)(此时赌场共有25颗筹码)7 x- _2 |" g/ R6 G2 J, K6 `  M' l

  d: H2 Z7 D0 T    接着B给A3颗筹码(A:8颗,B:17颗),
) d3 B# l% C$ w) S2 b- A3 m
$ ]) ^: m  R% [# g    operator从桌底下偷偷拿拿自己带的1000颗筹码给了C6 t( `+ h% h/ j4 x7 P8 C3 ~

! J7 c3 d8 q) Y  n6 \9 H    这个时候,大家发现赌场诈赌,就会开始想离开,把筹码换回新台币,这个时候就会照1,2,3,4顺序来验证交易,验证到到第3步,A有8块可以提领,B有17块可以提领,AB领完后,赌场就没钱了,所以C想领假造的1000块也没钱可以领了。更细节的部分,可以参考
' h! x2 Q6 [3 k  z0 r) e$ q0 G9 u, R( I9 v4 ^5 @( S/ F
    Karl.tech对于Plasma的介绍
; V6 M4 F/ v7 @) W2 Y, h: P/ _7 P5 k- W" X
    。PlasmaCash简单来说,PlasmaCash做了两个修改:1)每一笔存入Plasmacontract的钱,都给一个uniquetokenID(专有的TokenID);2)Merkletree的index存tokenID,内容存这个tokenID的交易纪录。这样有什么好处呢?你每一笔存入的钱都有一个ID,可以想作是进了Plasmachain,你的Eth就变成了ERC20token,所以当有人要偷钱的时候,就必须一个一个token地偷,对恶意的攻击者来说,变得很不方便。不过相对的坏处就是,你存进去两笔钱,要分开来用,不能合并一起,比较不方便。第二点,可以想象成,你的token有一个自己的帐户,所有的交易都在这个帐户里,要找纪录,证明交易都很方便,重点是寻找起来很快速,只要是关于这个token的交易但不在这个账户的,都是无效的。但是每一笔钱都有一个ID,可想象的是Merkletree会长得很大,EthereumResearch上有个简单的算术:Assumingwehavea(very)smallPlasmaCashchainwithonly21⁶(=65536)coins,thentheMerkleproofofeitherexistenceornon-existenceforagivencoinwillbeatleast32bytes*16siblings=512bytesperblock.IfweassumethatPlasmablockiscreatedonceevery15seconds,thenwe’llendupwith31557600/15=2103840blocksperyear.2103840blocksperyear*512bytesperblock=1077166080bytesperyear=~1.077gigabytesperyear.1gigabytepercoin,peryear!5 H+ s+ S( p1 x9 q9 H8 a# r( A

' y3 ]( _) L  v' {& G    source:- |/ w6 `4 r, k5 Y' M1 o

0 ?. M# K* ~- l    https://ethresear.ch/t/plasma-xt ... -data-checking/1926- b4 d- }. |9 }$ O- A3 X; j2 U

5 R0 ]  ^4 M; U    简单来说,就是65536种token(也就是63356次存款),每年大概会多1GB的数据量。如果Plasma被大量使用,这个量会相当惊人。后来又有提出. l6 {9 r! `$ K) q

" H1 ]: U! u% z9 @5 z) R7 A5 x! H    PlasmaXT( S: G5 b: A( U( ^$ G

$ W0 p3 p6 m) O8 f8 j! o, M; s    ,是基于PlasmaCash之上做改进。资料会这么大,是为了要有历史纪录用于查证,而Plasma
! d3 B2 S7 \2 y' T. T, m% f+ @& C1 J; x* I" s" [
    XT提出了checkpoint的概念,定期做验证,也就不需要全部历史纪录了。Checkpoint的概念听起来很简单,就定期检查就好,但是operator并不是实际的一个链,只是一个apiserver,所以假如operator不提供交易纪录只提供Merkleroot那用户要怎么确认?假使有方法可以确认了,那token数量这么多,大家都同时确认,是不是会超过gaslimit的上限?目前解决方案,第一个问题,就是用使用者的签名验证,如果operator擅自在某个checkpointfinalize你的状态,那你就很容易地知道这个operator作弊,因为你没有在这个checkpoint签名过。第二个问题使用了checkpointzone,也就是每个tokenID有一个时间做验证(即一次只验证一部分Token的历史),例如ID号为0~99的在Nblock做验证,100~199的在N+1block验证…以此类推,解决了一次太大量的问题。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦语曦曦s 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13