Nervos x AlphaWallet | 你所不知道的 Plasma & State Channel


#1

Chapter1 重现的历史

Do you hear the people sing?
这张图描绘的是法国大革命的胜利,可是为什么在开篇的时候,我们要放这样一张图在这里?

历史总会给我们教训。法国大革命历经五年,起义三次,不管人们有什么样的呼声,都会有英雄站出来,来响应这个呼声。把皇帝推上去的是他们,杀皇帝也是他们;捧起拿破仑的是他们,推翻拿破仑的也是他们。

历史给了我们教训,但有趣的是,历史总会重演。就像我们现在的区块链行业一样:因为人们有很高的呼声,想要某种技术、某种功能的诞生,就有人提出相应的方案。

我从2014年就开始了解比特币,之后在澳大利亚最大的金融机构——澳大利亚联邦银行做首席区块链架构师,我就来聊聊银行里的“give them what they want”。

有人说,建立和管理一批节点实在是太麻烦了,于是微软就来满足这个需求:它提供了全套的管理方案,包括主机、密钥的管理,只要一个按钮,六个主机全部打开,哪个主机作弊、哪个主机在处理交易都能看的清清楚楚。但是靠谱吗?显然我们心里是知道的。

然后有人说,管理私钥太麻烦了。以前用户名和密码每个人都知道如何管理,因为在中心化的数据库中只需要简单的加密就能够保证安全,用户能够自行定义用户名和密码。但是区块链上需要密钥对,私钥需要妥善保管,这时候大家就不知道怎么管理了。怎么办?就有人发明了 Keyless Blockchain,就是不需要密钥的区块链。怎么做?就是把数字签名的不可抵赖性(non - repudiation)去掉,思路非常巧妙。这里要提一句,不可抵赖性和我们常说的不可篡改性是有区别的。 前者是有”主”的,那个”主”不能抵赖他签名的这些信息;后者可以没有”主”,就是说这个消息是能确定不会被修改的,但是不知道谁写的。区块链那么多功能,少一个问题不大。那么 Keyless Blockchain 能做什么呢?比如能够当 IM(即时消息)来使用,那么就不需要密钥了。这也是一个很可笑的例子,即时通讯为什么要这样用呢?

第三个最可笑,银行里不停做 POC(Proof of Concept)怎么办。为什么只能做 POC?因为现在区块链还在早期,基础设施不完善,或是替换需要高昂的成本。银行里的创新部门只能做 POC 而做不出实质性的产品,并且他们可能有一定的 KPI ,比如一年需要完成10个 POC。于是就有人提出来做一个 POC Factory,一个月时间帮创新部门完成十个 POC 的任务,那么接下来的时间创新部门的就可以喝茶了。

第四点事,程序员不会 Solidity 怎么办?就有人卖 SQL Chain,也就是区块链+ SQL。有很多人用奇葩的方式将 SQL 和区块链结合。比如有人想象说,将SQL数据库配置成分布式,执行一个 SQL 就能够在整个区块链的范围内执行一个交易,其他数据库都会同步,把写入的数据叫做「区块」,那这就是 SQL Chain 了。但是目前是做不到的,如果能够做到倒是真的不错。

我们在银行业看到了各式各样的”呼应”。那如果我们跳出银行业务的范畴,来看整个市场,特别是公链市场的时候,这种情况就更多了:有什么样的呼声,就有什么样的解决方案。

有人提出来说,区块链那么安全,是不是可以用来管理医疗数据呢?就有人提出医疗链的解决方案,大致是提供安全的医疗数据流转、存储、验证的解决方案。但实际上这里「安全」这个概念是不一致的。区块链的安全不涉及保密。在区块链里存在可信任的第三方(Trusted Third Person) 的概念,这里的意思是「如果你执行交易,发起交易就会按照签名的方式来执行」,比如比特币的区块链,就没有任何加密的数据。而医疗数据的安全显然是需要结合隐私保密的。但是为什么有人说能够做?那就是爱屋及乌了:区块链既然可信,那么就能够保证安全,也能够保密,所以能够管理医疗数据。这里面的逻辑其实是错误的。

之后就有人在去中心化这个地方做文章。Facebook 今年陷入了史上最大的数据泄漏丑闻,股价一度暴跌。由此大家开始担心中心化机构做恶的问题。有人就说我们能不能做个去中心化的 Facebook ?而现实是,目前区块链技术距离建设去中心化的社交工具还有很长的一段路要走,但是有人有需求就会有人提出方案进行融资。

最后一个例子,就是以太坊拥堵,每秒只能处理 25 笔交易,并且交易费用昂贵,人民的呼声是希望有一个更快、更便宜的以太坊,V神不是没听到这些呼声但是他现在还做不出来,毕竟这事不容易。因为区块链如去中心化这样的假设条件存在,注定是不能处理无限的交易的。但是如果我们修改掉一些假设呢?比如以太坊是开放网络,那么能不能改成封闭的网络,只有几个已知的节点?几个已知节点所需要的共识算法比开放网络的简单了太多,可以套用以前研究了三十多年的各种共识算法,如拜占庭容错共识。这样做的话交易速度多快都可以,甚至能够上亿。如果条件再修改一下,所有节点在一个办公室里面用光纤连接起来,那么要多快就能够多快。接下来,请大家投资。

整个2017年,上述故事不断重演。

当初的法国大革命,必须经历过流血,才会有最后红白蓝三色的法国国旗,显示着他们“自由、平等、博爱”的精神。

现在的区块链世界,经历过投资人的浪费、韭菜的血本无归,我们才会知道区块链到底是什么,为什么,能够干什么。

在 Netflix 上有一步很火的动漫,叫马男波杰克,他的主题就是作为一个演员要给大家所要。有一期他想讲自己内心真实的东西,最后被导演叫停并且剪掉了。

我们知道如何讨好观众,但是我们该如何面对自己?我现在就像是马男,我有两个选择:是说大家都想听的,所有一切都没有问题。还是我现身说法,讲一下真实的情况?

以太坊的 Sharding 和 Casper 遇到了瓶颈性的问题导致推迟,分层方案现在被摆到风口上,就连一向推崇Sharding 的 Vitalik 自己都开始关注 Layer2 方案。但是市面上这么多的 Layer2 方案,真的都有那么美好吗?需要有一个人讲一下实话,所以我来。

为什么需要 Layer2 的方案?在区块链上的信任机制的前提下,网络必须要是开放的,全世界必须对一些问题达成共识 —— 这个共识的内容就是:1、交易是否存在;2、并且按照一定顺序完成。共识的成本是非常高的,因此在 Layer1 上效率是有极限的,除非修改一些限制条件否则我们不可能突破这个极限。所以 Layer2 的思想是让一部分事情在 Layer1 之外去做,通过和 Layer1 的交互能够将信任传递到 Layer2。

接下来,我会对市面上常见的 Layer2 方案—— State Channel 和 Plasma 进行分析,我希望大家能够知道:1、这些 Layer2 方案的局限性;2、这些 Layer2 方案可能会遇到的攻击模型。 我们要知道局限,才会知道怎么用;要知道如何攻击,才知道多安全。

Chapter2 State Channel

Layer2 的方案,首先是 State Channel,这是扩容的第一个 Layer2 解决方案。State Channel的设计思路是把一部分的交易放在区块链之外,把区块链的共识由确认”每一步”变成只确认”结果”。

State Channel 基本的玩法是:在各方确认的情况下打开通道在其中完成交易,最后回到区块链上结算。一般情况下在 State Channel 上这个各方的数量是不能变化的,当然针对这个问题有其他的扩展机制,我们留到后面去说。

State Channel 有下面四个基本的特点:
1、首先,基础的 State Channel 各方的数量是稳定的,Channel 和 区块链交互一次至少需要两个 Commit:加入和退出 Channel 。前来看 Commit 都是用交易来做的,也就是 State Channel 和区块链交互一次需要两次交易。未来可能有 Commit 不用交易来做,所以这里用 Commit 而不是用交易来表达。

2、关于在 State Channel 中的共识机制。由于影响的各方数量比较小,所以并不需要建立共识机制,简单的Gossip 协议,或者如果这个 Channel 是点对点的话直接点对点链接就好了。

3、State Channel 是比较贵的,因为它是事务性的,按照事务,完成一件之后大家退出 State Channel。加入和退出 Channel 都是有成本的,如果事务很多那么费用就很高。而事务的大小只和 Channel 的长度有关系,和费用无关。

4、最后,加入 State Channel 的各方都是需要相互知道的。

State Channel 攻击模型

讲完 State Channel 的特点,下面讲一下 State Channel 的攻击模型:有人把 State Channel 的安全程度列为“非常安全”,但这也是相对的。因此我们要知道有这样的攻击方法,才能知道哪些是可以的,哪些是不可以的,才能知道有多安全。

首先,我们的假设是 State Channel 中的交易是逐步达成一致的。在 State Channel 中某一个时刻发生的事情我们叫做支票,但由于游戏随时都会有相反的事情发生,有新的支票那么旧的支票就作废了。

这样的话,一种攻击方法是出示已经作废的支票。以象棋为例,本来是 Alice 赢了 Bob,几步之后 Bob 赢了 Alice,然后 Alice 退出了游戏,但是出示当时她快要赢 Bob 的时候的支票向网络要钱。对于这种攻击方法,State Channel 需要建立一个智能合约给 Bob 证伪的机会,比如在看到 Alice 的支票的时候并不是立刻兑现而是给一天的时间,若 Bob 在这一天里提出争议并且证明他在后面和 Alice 的游戏中自己多下了几步并且赢了,也就是拿出新的支票并证明,那么合约就能够判断 Alice 出示了作废的支票,这是证伪的方式。

那么聪明的读者就会有问题了:为什么游戏不设计成 Alice 和 Bob 在游戏的任何中间阶段都不能请求终止 State Channel,也就是规定成游戏必须玩完,而且谁不玩完就惩罚谁。这样就不会出现 Alice 拿了玩到一半的支票来向网络要钱?

实际上这是做不到的,Alice、Bob 谁退出了网络是不清楚的,所以 State Channel 必须做成游戏中途能够退出结算。因为 State Channel 只在退出的时候结算,并不能知道谁退出了。

第二个攻击方法,我们称为「出示作废支票+掐网线」。比如 Alice 在某一个时刻快要赢了 Bob,但后来 Bob 赢了。Alice 开始做恶,先向合约提出自己即将赢的证明,然后 Bob 退出了。合约这时候提出来说 Alice 你等等,看看 Bob 会不会有异议。这时候 Alice 把 Bob 的网线掐断了。大学的时候我们经常玩,在现实情况中用户使用的大多数是手机客户端,用户手机下线了可能性会更大。那么解决方法就是用户找一个代理在自己下线的时候帮助自己提出证据。这里的问题就是代理需要有用户的数据,就会出现隐私风险,因此代理不能是区块链本身,需要另外设计。

第三个攻击方法思路和第二个类似,是在区块链特别忙的时候出示作废支票。也就是在 Alice 快赢了的时候(虽然后面几手 Alice 输了),在区块链最忙的时候去证明自己快赢了,假设这个交易被打包成功了。这时候Bob 因为网络忙碌没有把自己的证据交给智能合约,而且一天时间网络都很忙。那么这样就没有特别好的方法,我们只好把提交证据的时间延长并且设置特殊机制,比如不以时间为准而是以时间的变量为准,但是这样会更加复杂。

以上是 State channel 的攻击模型,总结一下就是,State Channel 做不到和区块链一样的可信度,至少是在强制在游戏结束的时候去结算是做不到的。

State Channel 的具体场景

讲完攻击模型,我们来讲一下具体的场景。

State channel 最经典的场景就是象棋,一些项目做演示的时候也用这个场景。用 State Channel 做象棋可以很公平,这里公平的意思是能够判断在半局的时候能够判断谁胜的更多。这里需要有两个条件:1、能够产生公平的随机数,因为象棋的 First Mover 是有优势的。2、能够有押金或者类似的机制解决意外退出的问题。

对于第一个条件,随机数如何产生?大致来说,如果只有双方,那么各方给出一个数字,把这个数字 Hash,公布这个 Hash,放到合约里面去,约定大家过一段很短的时间给出这个数字不然就罚款。因为双方只能看到Hash 并不知道对方给出的数字是什么,所以在给出数字的时候双方是无法控制计算的结果的,将两个数字做XOR(异或运算) 之后得到随机数,在这里并不存在一方比另一方有优势来控制随机数结果的情况,因此能够产生公平的随机数。

第二点,押金解决意外退出的含义是,如果退出的话,能够按照当时输赢的情况来分配押金。

第二个场景是 SpankChain 色情游戏。这是今年的 1CO 项目。我自己没有玩过哈,但是估计的玩法是美女做表演视频,用户开通 State Channel 进行打赏,在视频结束的时候进行一次结算,如果断线那么打赏到什么地方就结算到什么地方。这个 SpankChain 是少见的、正确的实施了 State Channel 的例子。

第三个场景是酒店用押金消费。为什么 State Channel 能够做这件事情?因为酒店押金在结算过程中结算方式是事先就能够知道的,所以单独用 State Channel 就能够完成。中间会有这么几个流程:1、对押金进行签名。比如用户入住的时候抵押了一个比特币,如果在酒店产生费用就能够在这个押金里面扣。用户每产生一次消费就签一次名进行授权,最后签名完成结算,State Channel 关闭。这里用户可以选择用或者不用 State Channel,如果使用无非就是在区块链上结算的次数少一些,交易费用能够少一些。这样就不用喝一杯酒就需要一次 Transaction,只需要在最后结算一次就可以。类似的消费场景都能够用 State Channel 进行结算。

第四个场景是装修,也是一个典型的 State Channel 。这里会需要原先不存在的第三方(这里第三方是有条件的)。假设 Alice 找到 Bob 做装修,Bob 装修完 Alice 支付一个比特币。但是条件是 Bob 装修完需要提供一个第三方证明,比如环境检测机构提供的材料无毒或者甲醛不超标的证明。Alice 用抵押的方法有两个结果:Bob装修完、并且拿到第三方签名获得比特币;或者时间超时,Alice 收回这个比特币。这里是一个 State Channel ,只有两步。有人会提出问题,之前不是说 State Channel 需要提前知道是哪些玩家吗?现在引入了Alice事先不知道的第三方(这个第三方是 Bob 找到的权威机构, Alice 事先并不知道是哪一个),这里为什么可以?因为这里的机构只提供签名但是并不参与交易。State Channel 需要知道的是哪些角色最后能够拿到钱,而不是所有的角色(比如只需要签名的角色)。

第五个场景,我们来看看即时性的游戏,比如钓鱼游戏。钓鱼游戏原来是一种电子游戏,理论上是可以用 State Channel 来做的,但是问题是结算必须在游戏结束的时候进行而不能在游戏过程中奖励。那么如果用户中间退出了游戏怎么办?那就需要有一个见证人的机制,因为之前说过 State Channel 是不知道谁中途退出的。这个见证人可能需要兼职其他的工作,比如随机数的生成也会需要见证人。所有鱼的运动是需要随机数来生成的,需要用双方都不能控制的随机数方案。之前说过随机数在两个人之间产生是没问题的,但是如果在多人之间就变得复杂,因为可能屏幕后面都是同一个人,这时候就需要依赖服务器,这后面都需要有一个见证人节点来做。但是即使是用了节点,我们也希望能够让节点的职能变得最小,从而不会影响整个游戏。而且如果我们需要让这个游戏变得不可预测的话,就不能让游戏一开始 Alice 和 Bob 就 commit 的数据都 open 了,这样虽然数据是随机的但是没有即时性,毕竟这个游戏需要即时地、逐步地放出新的随机数出来,这里需要建立新的协议,会更加复杂。

但是如果要玩 World of Warcraft 这样的游戏那么就会比较复杂了,因为游戏玩家数量是不确定的,任何人都能够中途加入,那么这个情况就必须 Plasma 这样的网络的情况。

Chapter 3 Plasma

相比 State Channel,Plasma 增加了很多的功能,并且本身是十分复杂的,复杂到很多东西到现在都还没有确定,我们简单讲一下 Plasma。Plasma 基本设计思路就是比特币上常见的 Sidechain 的解决思路,但是它解决了 Sidechain 没有解决的几个问题。我们先聊一聊 Sidechain。

SideChain 在2014年就有,那时候是比特币的时代。

我从2014年开始就搞比特币,当时我们做了一些东西和 Sidechain 有一些相似。Sidechain 也是一个区块链,需要有出块节点和共识机制,然后它的交易要通过一定的方式到主链上证明。这个证明是有限度的,Sidechain发展起来也是不容易。

以比特币为例,比特币上的 Sidechain 没有提供退出机制,它的基本机制就是用户将比特币用抵押的方法,依据某个共识算法抵押到一个 Sidechain 里面去。这是一个原子化的操作,一旦完成抵押这个比特币就不能在比特币区块链上使用,而是在 Sidechain 里面置换成另一种币。然后在符合一定退出规则的情况下就能够回来变成比特币。当然也有一些 Sidechain 没有退出规则, 这一类 Sidechain 的节点上运行的会和比特币一样每十分钟出一个块,然后将这个 Block 的 Hash commit 到比特币的区块链上。如果 Sidechain 上完成一笔交易的话就可以引用 Sidechain 的 Markel Proof 来证明这个交易发生过,Markel Proof 会证明到比特币的区块上,然后比特币本身也有自己的 Markel Proof。然后这样的一环一环证明过去的话,可以证明交易确实发生过。

这是 Sidechain 的基本工作原理,它的缺点是失效的时候不能退出。进入 Sidechain的时候就是 Sidechain 的规则。如果 Sidechain 上节点不断减少最后变得不可信的时候,成员没有办法很容易离开这个有问题的Sidechain,或者说没有办法在区块链有问题的时候就离开。而 Plasma 就是在这里提出了解决机制,这是第一点。

第二个就是 Sidechain 在 Plasma 中的定义改为了 Childchain,也就是说 Sidechain 里面可以运行其他的 Sidechain。这是非常有意义的,Sidechain 也需要定时向区块链提供 Merkel Tree 的 Commit,这个成本是非常昂贵的。如果 Plasma 上有 Plasma 链的话,也需要提供 Merkel Proof。如果一个 Plasma 上面的业务非常少的话,业务带来的利润不足以支持这么高的费用,那么这个业务就应该在 Childchain上运行。理想情况下一个以太坊会有多个 Plasma Chain,每个 Plasma 上有多个 Childchain。

第三个要点是,在 Plasma 上状态(State )是用UTXO的方式来表示的。UTXO有很多的优点,其中一个就是不用存储过去的信息。UTXO 一旦被花费掉之后信息存在的意义就大大减少,清空这些信息能够保证区块链大小不会无限膨胀。另一个就是 UTXO 是一个布尔值,要么是 0 要么是 1 ,要么被花费要么没有被花费。如果这样的话一些分布式计算的技术就能够进来。要是业务有很多的值就会很复杂,状态机很难达成共识。

Plasma 会有 UTXO 的 bitmap(位图) commit 方法提供一些特性,比如设计个别用户可以用在不信任的时候退出 Plasma 的机制。

第四个要点是在 Plasma 改变了信任的前提条件 —— 把”去中心化”改成了”无信任”。无信任和去中心化的意义是不同的,去中心化通常说就是比特币的 “trusted third party” 这个角色,也就是说,一个去中心化的系统渠道是一个 trusted third party 的角色。在这个系统里:1、被接受的交易就会按照规定的执行;2、交易次序是确定的;3、双花是禁止的。这三个点是去中心化能够保障的特性。

无信任能够提供的要小于这个,Trustless 不保证你提供的交易一定能够被执行,但是能够保证如果不被执行是有一个退出的回路保证不会亏损,这意味着 Plasma 的信任等级和以太坊的信任等级是不同的。Plasma 可以崩溃,比如一些 Plasma 只有两个服务器的时候可以宕机。用户加入 Plasma 是为了获得更好的性能,并且能够在不需要节点配合的情况下退出来防止自己亏损,这是 Trustless 的需求。

那么退出机制是如何实现的呢?首先,Plasma 侧链每过一段时间会向主链提供在侧链上发生的 Merkel Root。如果参与侧链的用户有一个 Transaction,比如证明自己获得了一定数量的币,他会有一个 SPV (简单支付验证)和一个 Merkel Proof 来证明自己的 UTXO 是谁发给他的。如果是在以太坊上这样证明就够了,但是在Sidechain上这样只能够证明「某人持有了某个币,有这个状态的UTXO」,但是并不能证明用户没有把这个钱花掉。

那么如何进一步证明?在做 Merkel Proof 的时候会提供很多节点的信息,暴露 UTXO 在 Plasma 上的次序。如果子链每隔一段时间向主链提供一个 bitmap(位图),上面每一个比特代表一个 UTXO 是否被花掉了。所以结合 Merkel Proof 和 bitmap,持有子链 UTXO 的用户可以证明,他不但获得了 UTXO 并且能够证明这个 UTXO 没有被花出去。这样联合起来可以成为一个基本条件:1、用户在退出 Plasma 链的时候还有资本;2、用户的资本没有被花费掉。

如果用户的 UTXO 在一个子链上但是还没有被写入 Merkel Proof 的交易中,那么这个证明就需要依靠超时机制,需要提供 Merkel Proof 和 Bitmap 来援引证明这个交易没有被花出去,完成超时之后主链能够允许用户单独退出。超时期间内是没有办法把资产在 Plasma 中花费出去的。结合这些机制,最终能够让用户可以选择自己退出区块链(Plasma)。

Plasma攻击模型

那么对 Plasma 的攻击模型呢?主要有四种攻击形式,分别是:节点作弊、节点停止工作、没事瞎证伪、堵住门不让退出。

第一个攻击方式,Plasma 的节点作弊,比如 Plasma 节点双花,许可了Double spending。对于这种情况,如果用户有一份 Plasma节点上的区块链全部信息,那么就可以用这个找到两个double spending transaction 的Merkel Proof ,在区块链上参考这个 Proof 证明这件事情的发生。其他一些作弊方法都可以通过提供 Merkel Proof 来证明。

第二个就是 Plasma节点停止工作。停止工作是说,Plasma 节点停止向主链提供 Merkel Proof。这时候主链上的智能合约可以检测到异常事件的发生,原先建立的共识机制如果是允许用户退出的话(通常是允许的),智能合约会触发一个特殊规则让资产持有人能够集体退出,过程中需要每个人有自己的资产证明(Merkel Proof)。但是这么做意味着钱包会厚一些,因为 UTXO 需要足够多的证据证明,在 Plasma 节点停止工作的时候有足够的证据让自己退出。

第二个情况是 block withholding,这个情况是说,Plasma节点向以太坊提供了 bitmap 和 Merkel Proof,却没有向 Plasma 上的其他用户提供区块链的链本身,这样其他节点和用户不知道这个提交 Merkel 的节点是否作弊,你只知道 Merkel Root 不知道Proof,不知道有没有发生共识错误或者节点提交了不合法的proof。这个需要激励机制来完成,具体可以参考一些相关的论文。

第三个就是没事瞎证伪。这需要设计一个机制,如果Alice提交了证伪,但是在证伪的挑战期有人提出了相反的证明,那么 Alice 会受到惩罚。

最后是堵住门不让退出。在某个时刻 Plasma 节点失效需要大家集体退出,而这时候很不巧以太坊网络非常拥堵,这个问题就不是很好解决。网上有一些方法但是没有一个能让人完全信服。这是因为区块链不提供可靠性保证,区块链能够提供的是「如果交易被接受,那么交易一定会按照规定的交易指令执行」,但是交易并不一定是会被接受的,比如在网络拥堵、手续费不足的情况下。拿我们熟悉的 1CO 来举例子,我们用以太币买向某个 1CO 项目合约地址打款的时候,如果以太坊拥堵那么是不能保证能够买到的,这时候如果 1CO 要停止进行存款,你是没有理由以以太坊网络太拥堵为理由要求对方延长打款期限,以太坊并不提供 availabliity 的保证,也意味着很难保证在大家集体退出是成功的,因此还需要更好的解决方法。

Plasma的缺点

最后来谈一下 Plasma 的缺点

首先 Plasma 的中的资产不能在 Plasma 中产生,或者能够在 Plasma 中产生但是只能够在 Plasma 中使用。 因为对 Plasma 我们一开始就假设它不一定永远存在,用户是随时准备退出的,设计好了逃跑机制随时准备退出这个市场。那么这样的话逃跑机制是要求资产在主链上面通过 commit 传递到 Plasma 的子链上去。如果资产是在子链上产生的话,要退出 Plasma 的时候如何退回到主链就成了问题,因为没有证明。

第二个是说,同一份资产同时只能在一个地方,如果资产被 commit 到 Plasma节点上,那么它在以太坊上就不能使用。而这个会影响区块链的一个用力。我们假设一个场景,如果一个 Plasma 负责电子产品购买,另外有一个由保险公司维护的保险的 Plasma,如果你买了一台 iPhone,如果需要保险那么 iPhone 的购买凭证是保险承诺的前提。这时候问题就出现了,一个 Plasma 它的资产(也就是 iPhone 的所有权)是通过以太坊购买的,所有权在负责电子产品的 Plasma 子链上,保险的证明在另一个 Plasma 上面,如果一个交易需要双方共同签名的话,不在一个链上是解决不了的。这时候双方可以把相关资产的证明退回到主链,但是这么做是有额外的成本的。而且我们不知道资产会用在什么场合,所以退出可能经常需要发生,那么 Plasma 的用途可能会被削弱。

最后一个就是用户需要一定的操作才能维护自己的权益。我们必须承认会有一些 Plasma 子链缺乏维护,尽管我们提供了退出机制能够让缺少维护的 Plasma 子链资产能够退出 Plasma 子链,但是这个需要资产的持有方自己执行一定的操作,如果出现用户下线,上线的时候发现赎回期结束,那么资产就会有损失。比如以前交易所就出现过这样的情况,交易所被关闭给大家一个月的时间提币,一个月之后就不认账了。这个现象其实和Plasma 很相似,但是 Plasma 还没有开始实施,我也不知道会怎么样,但是用户是需要一定的操作来维护自己的权益的。

Bonus Truebit

Truebit和之前的方案都不同,是将复杂的计算任务外包的处理方法。拿拳皇游戏举例子,这样的游戏里面是有的计算的,比如攻击、防御、技能伤害的计算。但是这些计算因为很细节是不能写进智能合约里面去的。Truebit 提供了一种机制,能够利用 Merkel Tree 的机制来帮助以太坊成为一个判官的角色, Truebit 完成计算任务,最后在区块链上结算。如果双方出现争议,可以在 Truebit 中运行游戏的过程,把过程的每一步内存里面的变量信息都变成 Merkel Tree 的节点。然后通过一些协议互相在区块链上发布证明,最后找到作弊的一方。这样能够让游戏在区块链上玩,也能够让一些计算外包任务的场景能够在区块链上做。

Ending

历史不断重演,却从不会回头。在经历无数投资者金钱的浪费之后,终将会有人屏蔽了噪音,找到事物的本质。

走到2018年的十月,我们看到 Celer Network 、Spankchain、Plasma、Lighting Network 等等一众 Layer2 方案,每个人都说,这个项目好,安全,高效。但是每一种方案都必然有其局限性,就像本文所讲的那样,我们必须理性看待,并合理利用。

现实就是不断的Trade off,我们找不到「完美」的方式,但是我们能够找到「合适」的方式,我们终会找到通往未来的路。