以比特币为旗帜的区块链技术转眼间已经走过十年了,人们常感慨“十年一代人”,对于现在这个三年就会有代沟的快速发展时代,十年似乎已经很久了。我接触区块链大概一年时间,据说在这个领域三年就是资深或者专家了,可见,这个领域尽管有十年历史,却还差些积累,同样十年左右历程的云计算,目前已经是“铺天盖地”了。虽然有诸多不尽人意,但我依然觉得这是个有趣、有想象力的领域,所以,我把自己通过这一年学习得来的对区块链的粗浅认识整理出来与大家一起讨论讨论。我是个业务架构设计人员,所以,我对区块链的理解比较偏重“业务”和“架构”。
一、我所认识的比特币
作为开山鼻祖,比特币是所有接触区块链的人一定要了解的,尤其是技术人员。不去了解比特币、以太坊,也就不会给技术插上想象力的翅膀,那样还不如直接研究分布式系统更实际。我个人对比特币的设计思路总结如下:
按照中本聪自己在白皮书中的说法,他单纯是在设计一个点对点的电子现金交易系统,为此需要确保交易安全和资金安全,要确保不能“双花”、不能“乱花”。通过 UTXO 模型和区块链的技术保证不会出现“双花”,也使历史记录的可信性获得提高;通过非对称加密确保你的“钱”只能自己花,不会被别人花掉。通过工作量证明保证账本唯一性,再通过经济手段“制约”算力强人不去作恶。这方面的讨论很多了,本文也不赘述。
反复读白皮书,感受最深的其实是对专一目标的极客追求和架构设计上的平衡,中本聪只想实现一个点对点的电子现金交易系统,为了安全,他选择做出效率的牺牲,所以,据说 BM 要提高交易效率时,他批评 BM 不懂比特币。设计上,中本聪没打算支持他这个系统目标以外的任何应用,也即,不提供更多的可扩展余地,因为这一方面会引入对电子现金系统而言既不必要又可能致命的各种“缺陷”,又会破坏比特币高度精简的数据结构,比特币为了应对其对存储的压力,几乎把数据需求压缩到最低。
越简单越安全,而这个对电子现金系统,特别是一个期望无人维护、自动运行的电子现金系统来讲,恰恰是可靠性、安全性和公信力的基础。后边有不少尝试对比特币进行的改造、扩展都以失败告终,其实也说明了设计上的刚性。如果不能很好理解比特币设计的初衷和它加给自己的局限,去任意拓展想象力,结果恐怕不会太好。设计目标和约束会决定系统的特点与适用范围,如果扩大适用范围,也必须对目标和约束进行修改。以太坊就是这么干的。
二、我所认识的以太坊
以太坊是 V 神 2013 年推出的,与中本聪不同的是,他是这个领域可以见到真身的“大神”。以太坊其实也挺复杂的,不过从我这个业务架构人员的视角来看,我觉得以太坊的整体逻辑如下:
过于简单了?也许吧。V 神在以太坊白皮书中详细剖析了比特币设计,提出了四个主要不足:不支持图灵完备、状态少、区块盲、价值盲。我技术道行不深,所以,觉得后两个不是什么大问题。前两个则与设计目标和约束有关,中本聪只想做一个点对点的电子现金系统,没想支持其他应用,那么图灵完备、更多的状态对他而言就没什么意义,“现金”不是在你兜里就是在我兜里,本来也不需要那么多状态。
V 神想做的就没这么简单了,据说他跟初始团队共同想出了“世界计算机”这个概念,图灵完备和状态扩展对于他而言就是必备的。他希望以太坊能在比特币这种“去信任”机制上发展出更多的应用,包括分布式自治组织(DAO)。所以,比特币白皮书没怎么谈应用,因为它的系统目标很单一,甚至明确说有些东西就该依靠链下处理;以太坊的白皮书上就讲了很多应用,因为它希望构造一个“新世界”,这个想法 V 神在接受过采访中也多次表达过。
就共识逻辑而言,比特币只是确认签名和一笔交易在历史上存在且没有被其用于其他交易;以太坊就复杂了,它要确认一段代码逻辑的运行结果,也继承了比特币的共识思路,就是人手一本账、人人都验证,这就使代码逻辑不能太过复杂,否则会有节点运行不了,效率太低也会影响共识的达成。比特币虽然效率低,但是系统用途单一,习惯了也就忍了;以太坊给大家插上了翅膀,但是却实实在在地感觉到“地心引力”太大,开玩笑地讲,以太坊其实比比特币“折磨”人。V 神的设计依然是划时代的,很有突破性,对比特币设计目标的修改也很明确,这是做区块链技术研究和设计的人必须认真学习的。
三、我所认识的联盟链
我觉得联盟链是对公链的“反思”,所以搞了很多约束上的调整,而且五花八门,怎么想的都有。从高阶理念的角度,联盟链的诞生实际上也是对社会现实的反映,对此,我总结了一张图:
社会环境已经从具有较强依附关系的中心化辐射状生态结构逐渐演进至平台化、多中心、自由协作的网状体系,尤其是在企业端,根据康威定律,设计对象的组织结构会映射到其系统结构,所以,符合多中心网状生态特点的系统架构必然会应运而生。传统的分布式系统其诞生目的主要是为了提升系统性能,而区块链系统则更多考虑了如何帮助用户平等参与网络,这应该是二者在设计理念上的核心差别,因此,区块链系统比传统的分布式系统更适于多方共赢生态环境的构建。这个是看起来有点儿“务虚”,但是也有其道理的联盟链的价值。
公链的问题在于,如果现阶段应用,显然不符合企业端生态的实际情况,企业端的生态环境即便你一开始没设计中心也会自然产生中心,这是人的社会性决定的,所以也不要那么排斥所谓的“中心化”,镜子中照出来的无论好不好看都是你自己,化妆不解决本质问题。
联盟链既然面向企业,自然会把提升效率放到一个很高的优先级上,于是有了一些假定上的放松,比如,节点都是授权加入,实际上注入了信任;有了信任,共识方面可以放松,都回到了传统分布式系统的路线上;再基于信任,出块速度可达到秒级、毫秒级,不担心中本聪考虑的传播过快存在的安全问题。放松假定上最彻底的是微软的 Coco,将节点放在基于硬件的可信执行环境中,所以,智能合约不用每个节点都执行,只执行一次,结果大家信任,共识也采取简单的跟随机制,所以它还能处理别的联盟链搞不定的“不确定性计算”。
联盟链对公链做了很多调整,有的彻底有的不彻底,由于多数联盟链存在节点数量上限,所以,节点在联盟链中通常代表节点自己而非网络参与者,有点“代理”的意思,也算是让对人的信任转移到了对机器的信任,但是不同于公链这种节点无上限、节点直接代表参与者的结构,这种差别使联盟链在放松假定之后反而比公链设计、部署更复杂了,有点儿小“尴尬”。
四、我所认识的共识
共识是区块链中炒的很热的概念,甚至会让非技术出身的同学觉得“共识”是区块链发明的。我对共识了解不多,只是根据资料总结了一个共识的发展路径或者说学习路径供大家参考:
共识是高深的数学问题,上图中除了 POS、DPOS 之外,其他定理、共识都由获得过图灵奖或者相当于这个级别的专业数学论文做支撑,所以共识不是灵光乍现的好用就行,没有数学基础作支持很难保证其可靠性。严格来说 POS、DPOS 才是专门为区块链设计的共识,但是,缺点是没有缜密的数学论证,尽管以太坊的大神中有很多数学方面的高手。
此外,共识这个词对业务人员和技术人员来讲是有很大区别的,业务上的共识通常指共同遵守的业务规则和一致的结果,而对技术人员来讲却是个与可以与业务几乎没有关系的话题。
五、我所认识的区块链架构
回顾了比特币、以太坊和联盟链之后,我总结了一个我个人视角的区块链一般架构:
我认为广义区块链的设计主要包括数据层、网络层、共识层、激励层、智能合约层,但是实际上,共识层、激励层、智能合约层都是可以选的,不是必须要有,每一层中具体机制也可以灵活变化。网络层虽然必选,但是其机制却是可选的。最不能动的是数据层,这一层的块链式数据结构是铁打的,但有人会说 Codar 呢?Codar 自己只说是受区块链启发,从来没说自己是区块链。
如果用我们常用的软件架构视角来看,也可以这么转换下:
共识其实可以分成业务和数据库两部分,前者是业务逻辑的共识也就是智能合约,后者是记账权共识也就是数据写入权。可以比较出区块链系统与一般软件系统其实主要差别就在于底层数据库的实现和业务逻辑层关于代币的设计上。这也是为什么目前就设计来讲,除了涉及虚拟数字货币的应用难以用传统分布式系统替代,而其他类型的区块链设计尤其是联盟链环境下的设计几乎都可以被替代的原因,替代主要也就是对数据层的替代。
六、我所认识的区块链未来
未来总有些幻影,不是那么容易去辨别的,技术发展太快,我这种“三脚猫”的功夫也不敢轻易给个时限、下个结论,只能说说方向性的认识。
公链技术在效率方面有些很复杂的东西,我说不清楚,分片、L2 层、状态通道这些会给公链进一步赋能的技术或者设计方式,也许可以解决一部分效率问题,但是总体上来讲,还不能带来决定性改变。公链解决“信任”问题的方法,多少有些极端,所以“牺牲”了效率的大幅度提升。在这个“瓶颈”改变之前,公链的效率可能难有实质性突破。
联盟链方面,前边提到了小“尴尬”,假定放松反倒设计麻烦了,是不是该回头看看公链,找点儿启示?目前,IBM 最初带起来的框架之风已经刮成了平台之风,平台功能越来越多、越来越重,造成了学习、设计、部署、运维方面的困难,为什么联盟链不能在注入信任之后,还能兼顾公链的易部署性呢?我近期在《新“汇通天下”:用稳定币实现跨境支付方案》一文中,曾对 Ripple 模式尝试进行一些改变,Ripple 设计中的简化部署很值得大家认真思考,如果要做平台,那就应该把面向业务的功能和面向账本的存储分开考虑,从这个角度讲,联盟链中的“链”最重要的应该是可信连接,而不是所谓的系统底层;如果想要易于推广,那就得易于部署;而易于部署的前提就是功能上有所舍弃,毕竟有太多的事儿并不需要区块链去承担,比如,智能合约。
最近 V 神发推特表示了对“智能合约”这一叫法的“遗憾”,很多人也吐槽过智能合约,那究竟联盟链是否真的需要一个强大的智能合约?我们玩区块链真的是为了智能合约?如果说我在区块链上认识不到位、“开倒车”,那就“开倒车”吧,也许下一代技术真的能解决这些问题,但革命胜利前,大家是真的想用区块链做些能够有较大范围、有价值影响的设计,去证明区块链的价值,还是继续这么别别扭扭呢?如果是前者,是不是可以重新理解下公链,理解下 Ripple,再看看平台设计,也许区块链不是用来做平台的,而是用来让用户信息、核心信息与平台分离的,比如,有可能是下边这样么?
用户之间通过区块链协议共享必要的账本信息,基于区块链机制进行身份验证,解决可信连接,而复杂业务功能都是由平台功能层负责的,包括连接海量存储必须的 IDC。这种方式便于在各用户的本地系统之间形成可信连接,并调用强大的平台功能,但是分离开区块链层和功能层。平台功能是可信的,对于联盟链而言,既然注入了信任,又不去信任不是浪费吗?
联盟链的很多设计本就可以被分布式系统替代的,如果谈价值的话,我觉得还是从公链机制中保存点对点的连接和交互最重要,这个不是传统分布式系统的设计方向,让每个机构真的是自己参与而非“代理”参与,让区块链真的成为协议而非平台,也许这个才是联盟链的设计方向。说到未来,还剩下虚拟数字货币这部分,我不是个数字货币的投资者,从我这个无“币”者的角度看,虚拟数字货币即便要在西方广泛流行,也必须依靠与法币的合法兑换以及价值相对稳定的兑换,这也就真的具备了将资产数字化的能力,绝大多数人都是投资者而非投机者。数字货币方面最重要的其实还是法定数字货币,只有法定数字货币实现了,区块链的全球价值网络之梦才会成真,而上图的联盟链形态也将获得更大的价值,所以我才认为,联盟链最重要的是能保持公链中的“真”点对点机制和易部署性。
区块链走过了激荡的十年,虽然了解其技术的人还不多,在开发者群体中,区块链依然是少数,它的名气更多还是被比特币带起来的,毕竟比特币创造了人类历史上资产价格上升速度之最,但是,所有研究区块链、热衷区块链的人,特别是技术人员,都不希望它停留在这个层面,大家都在技术的现实主义中欣赏着一朵浪漫之花,期待望着它的盛开。
作者介绍
付晓岩,原国有大行资深业务架构师,负责业务架构设计、项目管理,热衷新技术探索与实践,具有丰富的银行业务经验和企业级项目业务架构设计经验,曾主导客户关系、金融市场、同业、资管、养老金等多个领域核心系统的业务架构设计。从 2017 年开始探索区块链技术及其应用,并发表《关于使用区块链技术建设行业级同业交易平台的探讨》、《数字货币可能诱发的现金社会经济活动的模拟与思考》、《联盟链战国:五大联盟链横向比对》等多篇文章。