区块链这两年

前言

做了区块链两年多,目前算是告一段落了,无论未来是否还会再来从事区块链行业,在现目前都需要对此做一番小结,整体看来我对区块链是一个偏悲观的态度,接下来就开始阐述我这两年的感悟

综述

区块链本质上是一个无主复制的分布式数据库,在容错上采取了最后写入为准的态度,这个后是逻辑上的后,例如以太坊就是total difficult更大的块才是正式块。

整体看来区块链的技术是由很多技术拼凑而来,没有什么新的东西,个人感觉真正的亮点是POW共识的设计以及分层确定钱包的设计。前者非常的精巧,基于利益和人性进行设计,个人非常膜拜。后者也很有趣,基于比特币的一个建议流传下来在社区发展。让人感觉到了社区的力量。

区块链细分来看分为联盟链和公链,前者服务于企业界,可以说是2B,后者服务于广大人民群众,可以说是2C,接下来就细聊这2B2C

联盟链

先聊联盟链,在公司我首先接触到的就是联盟链fabric,当时是1.0非正式版本,迭代很快,刚接触的时候还没有实现多channel,只有一个testchannel

联盟链在我看来是一个限制了准入身份的公链。由于限制了准入身份,所以不用担心添加节点数量的女巫攻击,可以在共识,虚拟机上采取更宽松的策略。

技术上的联盟链

联盟链以fabric为例,通常包括如下几个部分

  • 虚拟机
  • 共识模块
  • CA身份验证,加解密
  • 世界状态数据库与区块记录
  • 网络广播机制
  • RPC

在fabric的简介中可以看到,他们在每个模块进行技术选型的理由都是“选用业界成熟技术”。

虚拟机

在联盟链中由于线下联盟的存在,所以虚拟机不用像EVM那样进行疯狂的阉割保证稳定性(想想随机数),在fabric中虚拟机直接使用的docker,在docker中运行golang的环境来跑合约的golang程序,甚至不限制网络连接和任何系统库,所以可以尽情的发挥。

可以这样去理解,在fabric中写合约就是写一段普通的Golang程序或者Java程序。

共识模块

在fabric 1.0中,拜占庭共识是被极其弱化的东西,因为在联盟中作假是会被线下惩罚的。

共识的最大作用其实就是让不同节点写入账本的交易顺序相同,达到分布式数据库的最终一致。因此fabric 1.0很简单粗暴的使用了kafka作为共识,完美,简单,粗暴,但是好用,高效。毕竟kafka号称能达到上百万TPS。

CA身份验证,加解密

fabric 1.0自己是实现了CA中心的,不需要使用外界的CA证书。加解密是使用了ECC椭圆加密算法。

世界状态数据库与区块记录

这两坨都是属于存储的部分,所以放在一起聊。

世界状态数据库在fabric中用于存储世界状态,区块记录用于存放交易记录。举个例子,A有50块,B有20块,A向B转10块转了3次,最终A有20块,B有50块。世界状态数据库就是用来存放A、B的最终状态,而A的初始50块、B的初始20块,A向B转账10块这些交易记录就会存在区块记录中。

fabric 1.0的世界状态数据库有两种,leveldbcouchdb,两者的差别在于虚拟机中的合约是否能调用一个批量查询的接口。而区块记录是使用blockfile文件来存储的,一个巨大的文件,按顺序写入了区块的内容。

区块链区块链,实际上就是这些区块记录从前向后依次形成的一条链。

网络广播机制

网络广播机制是个很有趣的东西,在联盟链中由于节点的准入限制,以及节点数量不算多,因此选用了gossip机制。

有兴趣大家可以了解下这个机制,非常稳健,在现实生活中也一样的稳健。

RPC

区块链这种分布式系统中肯定少不了RPC,在fabric中使用的是GPRC,成熟,稳健。

我看联盟链

联盟链号称能解决不同组织间的信任问题,然而其实这本身就有一个问题,为什么我要信任联盟链(笑)

联盟链的场景其实是有点尴尬的,这种尴尬有两个方面,一个是政治上的,一个是技术上的。

政治上

我通常把非技术的问题都算作“政治”问题。

首先从场景上来看,一个大组织和许多小用户,在这种业务场景是根本用不上区块链的,一个传统的中心化系统就能搞定。适合区块链的只能是多个组织。

从我参与民生,中信和苏宁银行的信用证项目的经历来看,不同组织之间要达到一个绝对的平等是不可能的。都想抢占盟主地位,都想占据话语权——无论是技术,还是业务——联盟链的推进是非常缓慢的,当然也可能是由于银行的特殊性。

因此最适合这个阶段区块链推进的场景只能是多个组织,一大N小这种,由大的这家来牵头做事,但是小的又没有完全失去抵抗(否则就退化成为大组织和小用户了)。在现目前阶段的中国,能满足这个需求的可能就是阿里和腾讯了。

阿里手握菜鸟,虽然我不懂供应链和物流,但肉眼可见这是个大组织和小组织的关系。

腾讯系有非常多家公司,也许也能做出很多不同的东西。然而千万不要相信和腾讯游戏的结合,本质上腾讯游戏还是一个公司和用户的组合,游戏中的币和Q币有什么分别呢?为什么上链呢?这就是个噱头,还是个很傻逼的噱头(顺火暖你懂的)

小公司做联盟链最终都会变成技术外包,银行和金融机构的业务都太重了,不是创业小公司玩得转的,而区块链的技术门槛会让外包的成本很高,迟早都会杯具掉。

技术上

技术上很直接了,由于联盟链的BFT共识需要至少3次来回通信(PrePreCommit, PreCommit,Commit)来确认一次交易。如果是互联网环境,网络通信就可以让你等上许久。TPS的瓶颈是非常直接的。

由于TPS的限制,高频业务基本不用想,只能考虑一些低频业务,目前我做过的也就是信用证。

另外一个点是用区块链做存证业务我个人觉得是个很蠢的事情,比如溯源。最根本一点,链上过程是OK的,那上链过程呢?

还是期待能有更适合的场景出现,现目前以我薄弱的见识来看,似乎没有特别好的场景。

公链

公链我了解过不少,例如BTC,ETH,EOS等,深入研究的其实就ETH,这里就以ETH为例对公链进行一些介绍。

公链自然是没有准入机制的,中本聪最初做BTC是想做一个点对点的支付系统。ETH是在这个支付系统上加入了智能合约,允许用户在上面进行编程,其实这个合约一点都不智能,只是一个程序而已,而且是个能调用API很少的程序。

技术上的公链

公链上的技术模块与联盟链类似,大致有如下模块

  • 虚拟机
  • 共识
  • 加解密,账号机制
  • 世界状态与区块
  • P2P网络
  • RPC

公链是没有准入机制的,因此共识尤为重要,能看到市场上很多做币的都是在吹嘘自己的共识有多么多么牛逼(笑)

虚拟机

ETH的虚拟机使用的是自己做的EVM,语言是Solidity。在公链上做虚拟机需要保证每次执行都是一样的结果,所以很多方法都被限制了,比如获取当前时间,访问网络等等。再加上对于无限循环占用计算资源的限制,因此设置了Gas来限制每个交易的运行时间,防止网络被卡住。

整体技术还是很有趣的,可以算是刀尖上的舞蹈,不过限制多,功能就相应的少一些,目前的合约还是以发币和各种收藏赌博为主。

共识

在没有准入机制的公链上,拜占庭容错共识是非常重要的,ETH目前还是采用的POW共识,算力第一。据说会逐渐的切换到POS上。切换到POS可能会是能源消耗变小,但是我认为不太会改变目前的出块速度。

加解密,账号机制

加解密仍然使用的是ECC椭圆加密算法。

账号机制这边是一个叫做分层确定性钱包的东西,挺有趣的,不过我没有怎么深入研究。

世界状态与区块

这里和联盟链很类似,区别是以太坊有叔伯区块(竞争失败者,安慰奖),世界状态仍然写到leveldb里面(这里没得选)

P2P网络

由于公链的节点数量不定,因此这里是使用的KAD网络作为P2P网络机制,KAD网络在BT下载上已经非常非常成熟了,用在这里也是个“没毛病”的选择。

RPC

ETH使用的是自己实现的RPC

我看公链

公链的问题其实也很好玩,也从政治上与技术上考量。

政治上

老生常态了,政策上肯定有问题,炒币,圈钱,割韭菜这个是币圈的常见话题了,韭菜都被割了还没点政策上的问题么? 再加上最近的区块链监管文件,瓜肯定会不少。

另外一点就是算力集中化和租借算力攻击的问题。中本聪在设计BTC的时候肯定没有想过矿池这种怪物的出现。由于矿池的出现,算力被大量的集中了起来,区块链这种号称分布式容错的东西就产生了矿池这种算力集中的怪物,也算是一个讽刺。

对于很多小链,本身算力不足的情况下很容易被租借算力达到51%攻击,然后来一波清洗收割。这其实从另外方面可以认为在币圈,山寨链其实没什么存在价值,骗钱玩意而已。

最后是EOS,很多的DPOS节点都在亚马逊云上,这种感觉就像是为了保险,把鸡蛋放在了不同篮子里面,但是这些篮子都在一辆车上。那么EOS的宪法重要还是亚马逊云的用户守则重要?(笑)

技术上

简单的说,TPS实在太低了,对于C端的应用来说,目前公链的tps根本不够看,EOS在集中了固定数量的DPOS节点之后让TPS到了几百,但是仍然是个渣渣。

如此低的TPS,开发者能做的DAPP很少很少,什么滴滴打车别想了,早高峰拥堵的打车可能会让整个网络拥堵到明年去。所以开发者都在做赌博DAPP,捞钱,跑路,割韭菜。

要改变这个还是得等TPS上去之后来一个杀手级应用。当然TPS得能上去,我个人认为TPS要上去,只能提高网速了…

总结

以我目前浅薄的阅历看来,区块链在技术上最大的问题其实就是TPS,而TPS是因为网络延迟的问题导致的,要解决,要么提高网速,要么减少共识一致性的通信次数。由于TPS的不够,所以可以适用的场景非常的少。

公链基本上算是一地鸡毛了,联盟链呢,我个人认为未来如果区块链要起来,机会还是在联盟链,但是只能指望大厂,希望阿里和腾讯能给我们带来一些不一样的东西。