首页 > 代码库 > 区块链开发技术路线选择的思考(之一)
区块链开发技术路线选择的思考(之一)
现在整个技术社区的注意力主要还是在 Web 和移动开发上面,相关人才供销两旺。不过个别有心人已经开始转向大数据分析、深度学习、VR/AR 这些前景看好的技术。最近几个月区块链非常火,所以也有极少数开发者在关注区块链的开发技术。
应该比较客观的看待现在区块链的这一把火。目前无论在中国还是在国外,讨论区块链最积极最热闹的主要是政府官员、金融政策研究者、技术未来学家和学院派学者,跟他们相比,真正在写代码的人发出的声音很小。官员们重视,说明这个技术的潜在影响力巨大,学者重视,说明还有很多技术问题有待解决,而开发者音量小,说明投身于其中的人还很少,也没有大规模的出成果。禾苗还很娇嫩,阳光雨露高浓度化肥农药都来了,这对区块链来说绝不是什么福祉。这个情形有点类似 2009 年到 2010 年的物联网,因为时任总理的力推,什么国家战略、产业政策、扶植资金过早的进入到了物联网行业,产业园、基础设施、重点项目搞了一大堆,估计也验收了不少成果,但几年下来在这块并没有出来什么成功的企业。希望区块链不要重蹈被揠苗助长的覆辙。
我觉得区块链的发展,还是需要更多写代码的人实际参与,才能实实在在的推动。概念炒作大师们,可以考虑休息一下,他好,你也好。
目前实际动手做区块链开发,大致有两条路。一是直接基于现成的区块链开发平台(主要是 Ethereum 和 HyperLedger)来开发,二是自己从基础开始造区块链。表面上看,从开发效率、投入成本、产业合作等方面毫无疑问应该走第一条路,但实际上情况要复杂得多。下面试对目前区块链开发的主要几个技术路线进行点评。第一部分先讨论 Ethereum 和 Hyperledger,第二部分讨论自开发链和编程语言的选择。
先拿 Ethereum 来说,Ethereum 的理想非常宏大,甚至可以说是晚上仰望星空,白天埋头印钱。创始人 Vitalik Buterin 是我们这个时代的少年天才,为人极其聪明,对事物的洞悉能力非常强,无论 Ethereum 发展如何,他本人都非常有可能成为新一代的科技明星。Ethereum 是公共区块链平台,而且由于配备了强大的图灵完备的智能合约语言,因此可以成为一切区块链项目的母平台,驮住整个区块链世界的大乌龟。在 Ethereum 上开发一个类似比特币的加密货币,是一个不折不扣的小目标。因此 Ethereum 出现以来,相当引人瞩目,相当令人兴奋。前不久 Ethereum 的大批人马杀到中国做了一场 DEVCON 会,其中的技术内容相当深入,可见 Ethereum 还是极客范十足的,这一点必须点赞。
然而瑜不掩瑕,Ethereum 目前实际上处于其发展过程中的一个低谷期。原因有二。
首先,最直接的原因还是今年六月份 TheDAO 事件的影响。关于这个事件,网上的记载和评论已经车载斗量,我就不赘述了。 但需要搞清楚的是,TheDAO 资金失窃实际上暴露出了 Ethereum 的一个本质困难,就是用图灵完备的语言编写的智能合约难以进行安全验证的问题。 Dijkstra 曾经说过,你要么把程序写的简单到极点,以至于明显没有错误,要么就把它写的非常复杂,从而没有明显的错误。 中本聪为比特币选择了前者,而 Vitalik Buterin 为 Ethereum 选择了后者。 理论上你可以在智能合约里写一个 3D 程序,要求玩家通关打怪团灭大 boss 之后才能执行合约。一个智能合约语言,功能强悍至此,大家满意了吧?但是智能合约不比一般的程序,一旦出错就可能带来巨额损失,所以安全性应该是远远放在功能性前面的。TheDAO 失窃的事件就是一次典型案例,一个小漏洞,失窃 6,000 万美金。事后有些 Ethereum 的支持者说,这不是 Ethereum 的问题,是 TheDAO 自己的代码没写好。这就太不局气了。今天你家 TheDAO 的代码没写好,日后我家 TheCAO 的代码就一定写的好? 如果以后 Ethereum 上面的项目三天两头因为自己没写好就被偷得连内裤都输掉,那 Ethereum 怎么玩下去?Ethereum 现在采取的做法是跟传统技术产品一样悬赏捉拿安全漏洞,但大家想想也知道,如果一个安全漏洞有可能给发现者带来几百万美元,你那点赏金怎么会被放在眼里呢? Ethereum 把功能性放在安全性前面,这个基本选择是它得以在众多区块链中脱颖而出的原因,也会让其社区付出相当长的时间和相当大的代价来寻找脚踏实地的道路。
第二个原因是 Ethereum 目前项目过多,各种点子层出不穷,经验丰富的核心开发人员精力不足,导致项目质量参差不齐,文档过时,无疑为学习和使用制造了很多障碍。目前仅 Ethereum 官方客户端(节点)就有 Go, C++, Java, JavaScript, Python, Ruby 等不同版,甚至还有 Haskell 和 Rust 版,你一眼就能看清这背后是一支何等松散、充满个人主义和猎奇精神的团队。此外,Ethereum 还在构建钱包、浏览器、IDE、Solidity 语言等一大堆项目,整个 Ethereum 社区点子横飞,几乎是一个人一个点子,一个点子一个项目,发布一个接一个,连像样的文档都没有,别人想帮忙都帮不上,这给 Ethereum 生态体系的整体质量带来了不良的影响。我们做个比较,Bitcoin 核心开发者几十个人,主要代码贡献者三百多,三百多人围着一个项目转,跟 Ethereum 几十个人做十几个项目,那质量能放到一块比吗? 更不要说文档这种 “外围” 项目,Ethereum 的文档水平跟 Bitcoin 比连提鞋都不配。因此,Ethereum 目前无论是技术成熟度还是社区成熟度,都还差的远。现在投入 Ethereum,要承担较大的风险和变更成本。
当然,Ethereum 还是值得关注,因为它的志向远大,如果能够走过成长的烦恼,成功步入稳定阶段,是可以成为区块链时代全球性的基础设施的。现阶段如果你希望加入 Ethereum 社区,与其在上面直接开发你自己的区块链或者 DAPP 项目,还不如帮助 Geth、Cpp-Ethereum 等核心项目尽快成熟。最近的 DEVCON 大会上,Ethereum 的高手们又纷纷登台,秀出各种梅花间竹的新点子。但依我说,真为了 Ethereum 好,当务之急是回去把文档写好,把几个最核心的项目做扎实,或许能够帮助 Ethereum 尽快走稳。
再看 Hyperledger。 从今年年初到现在,不要提技术内容发生了多少次变化,就是它的代码仓库和文档平台,都已经搬了三次家,最近一次是从 Github 搬到了自家的 Git 代码仓库里。我认为这不是一个随意的变化,这实际上反映了 Hyperledger 的开源策略、商业模式等方面都还在探索和调试中,背后的主导者对于很多原则性问题还在纠结。选择它就必须做好心理准备,跟着它一起动。
从技术上说,Hyperledger 一开始就使用了 Go 语言开发全部基础设施,并且使用 docker 容器发布开发测试环境,这是非常明智的决策。 Hyperledger 支持图灵完备的智能合约编写,因此具有与 Ethereum 相似的安全隐忧。但是它目前没有配备类似 Solidity 的智能合约编程语言,目前它的编程模型是用 Go 或其他语言通过 API 直接操作一个状态,显得比较笨拙,在 C 语言里调用过 Lua 的人用起来会有穿越般的似曾相识感。 但也惟其如此,用 Hyperledger 恰好可以控制合约的复杂度,所以要爆出 TheDAO 那么大的问题反而还不是太容易。
HyperLedger 最大的优势是其定位,面向行业业务应用的联盟链,这是未来区块链应用的一个重要场景。传统企业被预言家们吓出一身冷汗之后,急匆匆来搞区块链的时候,他们必然不愿意接受一个完全开放对等的区块链网络,那相当于是开门揖盗,让毫无根基的颠覆者跟自己打擂台,这是他们从内心里排斥的。要搞区块链,他们的必然选择是集体抱团来做半封闭的行业级联盟链,这样既享受了区块链的技术优势,又维护了既得利益,还赢得了技术弄潮儿的美誉,可谓完美。 Hyperledger 就是给这些企业量身定做的,因此在一段时间之内必然会受到很大的支持。但其弱点也在于此,联盟链注定不如全开放的公共区块链更具颠覆性,所以如果假以时日,有强大的公共区块链,挟巨量终端消费者之力,陈兵扣城,到那个时候联盟链不但守不住,连转型投胎的可能也没有了。我们回想一下,电子商务发展早期,很多传统企业都在自己的门户网站上添加了电商购物的功能,即享受了电子商务的技术优势,又维护了既得利益,还赢得了技术弄潮儿的美誉,可谓完美。现在呢?
不管怎么说,今天这个时候研究区块链开发,Hyperledger 是可以用的,只是要承担可能的变化成本。
区块链开发技术路线选择的思考(之一)