以太坊有没有可能一秒钟达到200笔交易,甚至像Visa达到每秒2000笔交易?
这个问题我们一直在思考,如何不通过破坏现有架构,不试图中心化,不试图拼命扩容或者用中心化或牺牲安全性的方式提升性能,这是整个行业中都在探索的。
而且,我个人认为,这个问题比复杂的共识算法还要重要,我一直秉持这个观点。
Sharding(分片)
Sharding(分片)的意思是我不需要让全网共识了,而是我刚才进行了一笔100元的转账,我可以将现在的人分成十个小组,每个小组验证一笔交易,最后十个小组把验证的交易全部报上来,我一次性打包掉十笔交易,这是分片的做法。
分片喊得最凶的是zilliqa,zilliqa的分片开了一个好头,但是分片有一个问题。
基于交易的分片相对比较简单,BTC、Qtum、BCH等等,我们称之为UTXO模式。它不存储账户的余额,只存储过往所有的交易。不同的人都在验证,最后一个人只需要验证所有人验证的时候有没有发生余额不足的问题。如果没有,谁先交易都是没有问题的。
最怕的是我给你转100元,给他再转200元,后来发现我给你转100元以后,没有余额再转200元,这是最容易发生的冲突,在UTXO模式下也比较好解决。
但这个问题在以太坊的智能合约里,会变得非常麻烦,因为以太坊的智能合约存在执行先后的问题。在以太坊上转账,需要先完成一笔交易再进行下一笔交易。在这种情况下,我不能将它分成十个片区,最后同时执行。这就造成我们在并行执行计算方面,存在难度。
现在市场上有一些做基础设施的项目在简化它。比如,我给你转100元,你再将100元转给其他人,只要这两件事被原子级打包(原子级打包就是指要么两个一起打包,要么两个都不打包。)如果能做到这一点,那么在打包的过程中就可以做一个清算,我给你转100元,你再将100元转给他,整个过程被同步打包,并且按照顺序记录下来。
我们如何提升单个节点或者多个节点集群的性能,也就是打包区块的效率,这一点BM也在思考。
EOS白皮书里有一段非常有意思
EOS的矿工是超级节点,运算能力很强。每次当几百笔交易进来,需要打包成一个区块的时候,这些超级节点在收到智能合约广播的时候,会把这些合约重新梳理一遍。让矿工来决定,至于如何整理,应该是让它尽可能以并行的方式去打包,如果整理得好,会给与矿工更多的奖励。
EOS提出这一点很好,但目前EOS超级节点们并不知道如何处理它,他们不知道如何打包能让合约更好地并行执行。
我也问了行业内很多的人,最后总结的最好的方式是尽可能地将所有需要打包的交易先分散,然后再合并。如果发现没有办法合并,继续打回重来,重新执行一遍。
无论是EOS,还是ETH的去中心化(P2P)的网络里,只有达到一个接近于中心化的某种零界点,链上才可以运行大量的应用,否则一个以太猫游戏就把以太坊堵死了,大家没法在链上做更多的应用。
强化基础设施
Atomicity原子级的操作
原子级的操作不可分割,但是真的不可分割吗?
之前说过100元转账问题,只有某账户被转进100元时,才能转给别人100元。这件事能不能变成,当知道有100元需要被打包的时候,网络就做一个条件数据,让转进来100元和转出100元同时被打包。本来是存在先后顺序的,但是原子级操作可以让两个操作一起执行,或者都不执行。
Storage存储
存储现在也是一个很大的问题,以太坊容量当前已经差不多到1T了。
现在主流的区块链用的数据库LabelDB,LabelDB的特点是顺序读写能力最强,而区块链里很多东西都是顺序读写,因此,速度会比较快。
如果用哪怕SCC的硬盘去同步以太坊的状态,需要让每个以太坊节点从以太坊的第一个区块开始一直同步到最后一个。但是如果硬盘的读写速度不够,或者使用的方式不够好,就会变成一直追赶以太坊的出块速度,这是以太坊网络经常发生的问题。
大家知道白皮书应该看哪里吗?
看工程能力,看有没有可能让众节点同步的速度变快,能不能让节点打包记账的速度变快,或者执行合约的速度变快。
因此,我们面临的问题是,如何能更快地提升现有的读写速度。硬盘的读写速度是内存的千分之一,如何用一种方式更快地去读写?
在中心化的网络里,微博、微信的数据不是直接从服务器硬盘上读取的,如果从服务器硬盘上读,那就完蛋了!它们都是用的内存做缓存机制,新浪有七层的cache,腾讯有九层cache,最后才打在SD上。
在区块链的世界里,众节点不需要像新浪、微信一样维护到如此高可用的读写速度。假如突然断电,之前的东西都加载进内存了,我无法做一个高可用的架构去保证我的节点是健壮的。好在市场上有一些非常神奇的产品,它们通过做消息队列,让硬盘的读写速度达到内存的读写速度。
所以,区块链里很多的实践赋能了一些边缘化的技术,但这些技术在区块链里变得很好用。例如,支付网关在中心化系统里只是一个很小的插件,但是在区块链里就成了一个明星项目。
当基础设施的产品对行业产生巨大影响以后,都会变得很值钱。
Contract合约
合约有依赖性关系的存储,比特大陆强大的地方在于没有它搞不定的算法。
Zcash的算法因为有零知识证明,它的算法比以太坊的算法复杂50倍以上,其实是最难破解的,但是比特大陆破解了,比特大陆这一块的能力相当逆天。
但是他们解决不了什么呢?比特大陆对于如何快速地执行合约已经研究了很长时间。我刚好比较擅长这方面,前段时间和他们交流了一下。未来随着矿工打包gas的数量越来越多,以太坊在不分片的情况下可以达到100以上的TPS,在分片的情况下可以达到5000以上的TPS。
最近V神心态很好,又是唱歌又是跳舞,因为他找到了公链集大成之路。