一、POW和BFT
比特币是一个现金交易(transaction)系统,所以它只有两个状态:钱花掉了,钱没花掉(Spent 和 Unspent),所以比特币的账本模式是 UXTO。
因为比较简单,那么以太坊引进了智能合约(交易+智能合约),就增加了很多比较复杂的状态,所以当 Vitalik 设计以太坊的时候,非常明显,用比特币的 UXTO 是无法记录其他状态的。
他当时有两种选择:
一种就是把花掉和没花掉,仍然用 UXTO 沿用比特币的做法,用另外的数据文件来处理新状态。但是这种模式他放弃了,后来量子链捡起来了。
第二种就是用了新的账户模式来记录所有的状态。那么这种革新,就使得以太坊成为一种状态复制机(State Replica Machine)。而这里引入了一个很重要的事情,就是这个复制机,可以用 BFT(拜占庭容错机制)来解决。
这和中本聪做的 POW 挖矿不同。POW 在形成共识的时候,会出现暂时的分叉,就是出现分叉链,那么需要确认——大家估计都知道,需要 6 个区块确认, 确认的方法是最长链,哪条分叉最长,大家去哪边挖矿。这个是 POW 的一个弱点,就是你达成共识的时候并不是终极共识,需要二次确认。那么以太坊做出了 一些优化,叫做 Ghost 确认方法。
那么 BFT 就不是这样。BFT 通过每一个节点和其他节点的一对一沟通,最后达成的共识就是终极共识,具有 Consensus Finality,而不需要任何再次确认。但 是 BFT 也有软肋,就是节点超过了 16 个,就慢得好比乌龟了。主要原因是他们节点之间的一对一信息,非常非常多。
二、分片
那么大家要解决这个办法,就开始找捷径。其实嘛,捷径就是牺牲之前的完备性——没有免费午餐啊。比如小蚂蚁的捷径,就是号称我们有 1000 个节点,但是只选出 7 个节点来做 BFT 共识。
那么 Zilliqa 说他们做分片,把每个片分了 600 个节点,然后在这里做 BFT。 大家看到问题了吧?600 个节点,不是 16 个节点啊,所以要走捷径,是不是? 那么捷径是啥?他们就是在 600 个节点中选择一个出来做小组长,那么其他 599 个团员都知道这个小组长是谁。这个小组长叫做 Aggregator,就是把大家的签名集中在一起。
本来 BFT 要求,每个团员都发信息给另外 599 个团员。现在他们不做了,只需要所有人发信息给小组长,然后小组长做一个多重签名,用 Schnorr 签名做成 一个。这样就把信息量大幅度减少,速度就起来了,但是就变中心化了。
小组长这个中心化角色是一个软肋,你只要在 599 个团员中有一个坏人,就可以通过外面去 DDoS 这个小组长,把小组长打趴下。
另一个问题,就是 BFT 就是不假定你知道别人。现在连领导都出来了,变成你必须确认,小组里面没有坏人。那这个就违背了拜占庭容错机制的本意。如果你需要确认大家都是好人,干嘛不做 Raft 呢。
另外他们是硬分片,就是把固定的片分好,然后各种交易分到不同的片里面。 还要根据地址,必须保证同一个地址去同一个片,因为如果去了不同的片就会出 “双花”。我个人觉得这里他们可能会被攻击打垮。
分的固定片出问题,那就出“双花”。 墨客是逻辑分片,我叫软分片,按照智能合约的要求来分片。 大家需要分清楚,Zilliqa 它是提供一个解决方案,比如去修改 BFT 流程;墨客不是提供一个解决方案,而是设计一个基础框架。
以太坊,也是没有分层。那么必须同时解决交易分片,以及智能合约的状态分片。状态分片就是state channel,或者state sharding,难度不是一般的高。
三、墨客的分片
首先墨客有一个假定,未来的主要堵塞的流量来自于智能合约。因此首先是做一个分层,把交易和智能合约分到不同层次。那么在底层我维持用目前已经实践证明有效的pow处理交易,系统合约执行。那么在上层,我用分片按照智能合约来分到不同片,这样一个完整的合约,在一个自己的片里面跑,而不是把一个合约按照先后持续,分到不同的片。这样我们就无需考虑 Zilliqa 必须考虑的如何防止“双花”的 问题,因为我们已经用了现有可行的有效方案。那么在智能合约层面上,我们通过分片落实子链,也不是在子链这里给大家提供解决方案。
我想大家小时候都听过一首儿歌“大路有水,小路有鬼。大路很平坦,但是绕路还有水。小路可以抄近路,但是有鬼”,就是说没有一种解决方法可以尽善尽美,总是有得有失。我们就把这个解决方案,让落实子链应用的客户来自己做取舍。
你在墨客子链,可以做 BFT,可以做 POS,可以做 Tendermint,甚至可以做你自己定义的任何共识方式。我们不会去改动现有的各种共识方式, 来提供解决方案给你,我们只是提供一个非常灵活可扩展的架构,让大家自己根据业务的需要,来选择最合乎你业务最优化的配置,而且各个子链还可以提供服务给大家。
定期要flush下去,形成全网共识的。你可以类比一个vmware,下面一个物理机,上面跑很多不同虚拟机这种。我们类似于上面逻辑分片。
对比闪电网络,墨客是子链subchain,他们是侧链 sidechain,我的想法就是子链可以作为公共服务提供者,比如我们可以部署IPFS子链,时间戳子链,真随机数子链,Schnorr签名子链,零知识证明子链。其他人的子链可以免费或者付费获得服务,也可以自己免费或者付费提供服务。另外就是合约采取异步调用,可以跨区块,用来做原子跨链。
四、墨客的扩展能力
在所有解决公链扩容问题上,墨客是各种底层公链币中最强的。墨客使用了分层分片技术集百家之长。分层的 pow 下层有比特现金的大区块扩容,且 pow 模式能在全球铺开数万节点。去中心化程度高。 分层的智能合约层有分片,各分片子链内部,通证发行方可以自定义共识模式,可以有 eos 的 dpos,小蚁的 dbft。墨客以上层分片法汇集各家竞争底层公链的高并发交易扩容之术,又以整体分层法,用 pow 大区块在底层承载全网交易,有数万挖矿全节点铺遍全球,去中心化程度极高。这在解决区块链扩容方面做到了极致。再加上另外两个大杀器,异步调用合约和跨链交易。
墨客碾压以太坊最大的一个原因,就是你可以在以太坊发币,但是不能在以太坊发链。你可以在以太坊上发一个币,你也可以做一个合同不发币,好像撸猫这种。