一年前开始关注区块链技术及其行业应用前景,对比特币、以太坊、超级总账和bigchaindb四个主要区块链技术流派都进行过考察和研究,形成了在中国应用区块链技术的观点和思路。
如果你关注区块链技术长达几个月,可能也会跟我一样,对没完没了的原理介绍、前景描绘、行业探讨和链圈新闻产生了审美疲劳。没错,区块链必须与行业紧密结合,它也有颠覆人类协作方式之洪荒巨力,但是说到底它还是一个技术活,是要写代码的,在咖啡厅里整天坐而论道是造不出金链子来的。技术人员的逻辑简单直接,这个事情有没有前(钱)途?有,那怎么干?
区块链技术的流派
未战先谋局,你想投入区块链开发这个领域,至少先要搞清楚现在有哪些玩家,各自的主张和实力如何。
划分区块链技术流派并无一定之规,据我所见,或可有以下四种方式:
第一是按照节点准入规则,划分为公有链、私有链和联盟链。公有链的代表自然是比特币和以太坊,私有链则以r3 corda声名最盛,联盟链的代表作品是hyperledger名下的fabric。公有链注重匿名性与去中心化,而私有链及联盟链注重高效率,而且还往往设置了准入门槛。公有链、私有链与联盟链之间的这些不同都在技术中有所体现,比如私有链和联盟链假设节点数目不大,可以采用pbft算法来形成共识。而公有链假设有大量且不断动态变化的节点网络,用pbft效率太低,只能采用类似抽彩票的算法来确定意见领袖。这就意味着,私有链与联盟链很难变成公有链,而用公有链来作联盟链或私有链虽然容易,却也并非即插即用。此种差异,学者不可不察。
第二是按照共享目标,划分为共享账本和共享状态机两派。比特币是典型的共享账本,而chain和bigchaindb也应属此类,这几个区块链系统在各个节点之间共享一本总账,因此对接金融应用比较方便。另一大类区块链系统中,各个节点所共享的是可完成图灵完备计算的状态机,如以太坊、fabric,它们都通过执行智能合约而改变共享状态机状态,进而达成种种复杂功能。
第三是按照梅兰妮 · 斯旺所描述的代际演进,将区块链系统分为1.0、2.0和3.0三代。其中1.0支撑去中心化交易和支付系统,2.0通过智能合约支撑行业应用,3.0支撑去中心化的社会体系。比特币和chain应属于区块链1.0系统,而以太坊和fabric是区块链2.0系统,目前尚无成功的区块链3.0系统出现,不成功的尝试倒是有那么一个,就是著名的the dao。
第四是按照核心数据结构,分为区块链和分布式总账两派。区块链这一派在系统中真的实现了一个区块的链作为核心数据结构,而分布式总账这一派,只是吸取了区块链的精神,并没有真用一条区块链作为核心数据结构,或者虽然暂时用了,但声明说吾项庄舞区块链,意在分布式总账耳,若假以时日,因缘际会,未尝不可取而代之也。
主流区块链技术平台
了解流派划分,仍是只能用来指点江山,吹牛论道,要动手,总要有个切入点。区块链货币据说已经有上千个了,但值得关注的技术平台大概只有数十个,而如果要进入区块链开发领域,打下一个好基础,练出一身好功夫,捞到几个好offer,则值得深入研究学习的平台,屈指可数。
首先当然是比特币。比特币作为区块链的第一个也是目前为止最成功、最重要的样板工程,已经上线运行了八年多,本身没有发生任何严重的安全和运维事故,其稳定与强悍堪称当代软件系统典范。比特币bitcoin core是一个代码质量高、文档良好的开源软件,从学习区块链原理、掌握核心技术的角度来说,bitcoin core是最佳切入点,能够学到原汁原味的区块链技术。当然,bitcoin core是用c++写的,而且用了一些c++11和boost库的机制,对学习者的c++水平提出了较高的要求。
学习比特币平台开发还有一个优势,就是可以对接繁荣的比特币技术社区。目前围绕比特币进行改进和提升的人很多,人多力量就大,诸如隔离验证、闪电网络、侧链等比较新的想法和技术,都率先在比特币社区里落地。比如侧链技术的主要领导者blockstream是由密码学货币元老adam back领衔的,而blockstream是bitcoin core最大的贡献者之一,所以一些有关侧链的技术在比特币社区里讨论最充分。
但比特币作为一个典型的区块链1.0系统,是不是支撑其他类型区块链应用的最佳技术平台,存在很大的争议。另外,也不是所有人都有能力和必要精通区块链底层技术。所以对那些急于冲到区块链领域里做(quān)事(qián)的人来说,可能更直截了当的学习目标是以太坊和hyperledger fabric。
在以太坊上面用solidity进行的智能合约开发是切入区块链开发最简单的方式,没有之一。以太坊的理想非常宏大,由于配备了强大的图灵完备的智能合约虚拟机,因此可以成为一切区块链项目的母平台,是驮住整个区块链世界的大乌龟。在以太坊上开发一个类似比特币的加密货币,是一个不折不扣的小目标。一般有经验的开发者在文档指导下,半天到一天即可入门。问题在于,入门以后又如何?靠写solidity是否就可以包打天下?这是大大存疑的。我们也可以反过来说,如果以太坊+solidity是区块链的终极解决方案,那么怎么还会出现那么多区块链技术门派呢?特别是,以太坊似乎并没有给现实世界中巨型的中心化组织们留下一条活路,这种彻底不妥协的革命态度有可能也成为以太坊推广的障碍。
当前以太坊项目的开发进展并不顺利。一个比较突出的问题是项目过多,力量分散,导致项目质量参差不齐。但尽管如此,跟其他区块链2.0平台相比,以太坊提供的开发环境是最简单最完善的。初学区块链的人绝对有必要学习以太坊,从而对区块链和智能合约建立起一个最“正宗”的认识。
主流区块链技术平台的第三支就是fabric,它是hyperledger的第一个也是最知名的孵化项目。 fabric最早来自ibm的open blockchain项目,到2015年11月,ibm将当时已经开发完成的44,000行go语言代码交给linux基金会,并入hyperledger项目之中。在2016年3月一次黑客马拉松中,blockstream和dah两家公司将各自的代码并入open blockchain,随后改名为fabric。到目前为止,fabric与intel提供的sawtooth lake并列为hyperledger的一级孵化项目,但前者得到的关注远超后者。
从技术角度来说,fabric思路不错,重点是满足企业商用的需求,比如解决交易量问题。众所周知,比特币最大的短板是它每秒钟7个交易的上限,完全无法满足现实需要。而fabric目标是实现每秒钟10万交易,这个量接近刚刚过去的双十一交易量瞬时峰值,完全可以满足正常条件下的行业级应用。fabric用go语言开发,也提供多种语言的api。特别值得一提的是,fabric比较充分地运用了容器技术,比如其智能合约就运行在容器当中。这也是go语言带给fabric的一项福利,因为go语言静态编译部署的特征很适合开发容器中的程序。
fabric还有一些特点,比如其membership服务可以设置节点准入审查,这是典型的联盟链特征。再比如其共识算法是可定制的。fabric自带pbft共识算法实现,但是pbft的算法效率是o(n²),其中n是节点数量。因此pbft用在节点数量受限的联盟链里是没有问题的,但用在公有链里效率过低。
fabric的短板是体系较为复杂,虽有文档,但缺少经验的开发者学习起来障碍比较大。然而由于其定位清楚,迎合了不少企业的心态,所以已经有多家机构在基于fabric秘密研发行业内的联盟链项目。
小众门派
上述区块链开发的三大主流平台,从活跃度、受关注和参与人数来说,远远超过其他平台。但俗话说莫欺少年穷,一些眼下还默默无闻的平台也不容忽视。
hyperledger的另一个一级孵化项目sawtooth lake是intel开发的区块链平台,是一个很少被关注的项目,大概是因为被同在hyperledger旗下的fabric给掩盖了,再加上名字拗口,所以很少看到有人讨论它,项目活跃度也不高。但其实sawtooth lake是一个挺有想法的区块链项目,设计十分精心。它以数字金融资产管理为目标,整体架构清晰,模块化程度高,因此可定制能力也强。概念上独创了“交易族(transaction family)”概念,而且还支持poet和quorum两种共识机制。当节点数量很多(公有链环境)时,使用第6代intel core cpu所提供的sgx扩展功能提供一种称为时间流逝证明(poet)的机制来形成共识,这种机制与比特币所采用的pow同属“抽彩票”式的共识算法,但杜绝了通过asic专用硬件“作弊”的可能性,排除了比特币出现的算力过于集中的隐患,可靠性由intel cpu硬件来保障,是公有链系统里很有价值的一个共识机制。另一方面,当节点数量少且受控时,sawtooth lake可以采用quorum共识机制,这是由ripple提出并验证的共识机制,非常适合于联盟链场景,这样sawtooth lake就摇身一变成为很好用的联盟链了。
sawtooth lake采用python开发,并提供了java sdk。由于这两种语言的流行度,实际上它应该有很大的潜在开发者人群。事实上,r3 cev曾经测试过sawtooth lake并进行了成功的证券交易实验。当前它主要的问题是受关注度不足,不知intel是否有足够的耐心和毅力坚持到底。如果intel战略更明确一些,支持力度更大一些,我建议大家可以对它投以更多的关注。
r3 corda是一个备受关注的分布式账本项目。 r3是由数十家银行和金融机构支持的区块链企业,融资上亿美元,号称汇集了一票高手,潜心研究符合金融行业需求的分布式账本系统。corda是r3分布式账本系统中的核心,在千呼万唤之后,于11月30日正式开源。
corda采用jetbrain原创的小众语言kotlin开发,对java世界敞开大门,这是令人点赞的。此外,corda更重要的特色是其与现有世界里大银行、大型中心机构的全面妥协、全面合作的姿态,这与以太坊革命无罪、造反有理的形象形成鲜明对比。corda在设计中有多项独特考虑,就是为了对接现有的业务规则。比如在其他几乎所有区块链平台里,每一个交易对于各节点来说都是可见的,可见才能验证,能验证才谈得上共识,所以交易的全网可见性是顺理成章的。但是现实世界里金融机构之间的交易,只有交易相关方才能看到交易详情,工行与建行的一笔交易,绝无必要让招行看到。为了对接这个现实,corda设计了与众不同的机制,牺牲了交易验证的全局可见性,确保只有交易相关方才能看到和验证交易本身。可是另一方面,银行业务是被重度监管的业务,不能因为你用了区块链系统,就把洋洋洒洒的巴塞尔协议晾在一边,监管机构的职能如何体现?这是其他区块链系统里考虑不多的。而corda设计了独特的notary和oracle节点,为监管体系进入留下了空间。仔细品味,这些都是给现实世界当中的大机构预留的美差。这些设计上的考虑,无疑大大增强了corda被现有大型金融机构采纳的机会。不过这一切看上去很美好,但目前corda的实现基本上是个花架子,设想的种种,不少处于todo状态。
另外两个值得点名的区块链门派分别是chain和bigchaindb。前者跟visa有合作,后者是一个基于rethinkdb开发的分布式账本,两者各有各的思路和特色,也拿到了为数可观的投资,不排除未来能有大的发展。限于篇幅,在这里不展开介绍了。
区块链开发所需具备的技术基础
可以预见,未来从事区块链开发的主要有三类开发者,一类是开发基于区块链的web或移动app,这种开发者所需要的技能与今天的web和移动开发者并无二致,这里就不赘述了。
第二类开发者是开发智能合约的。这类开发者使用类似solidity这样的智能合约语言,或者直接用go、java、python等语言开发。开发智能合约所要求的语言和算法技术水平不高,什么并发、多线程之类的东西一般用不到,普通开发者均可胜任。但是智能合约的难点在于业务与安全。本质上智能合约就是以代码写成的商业合同,必须对于业务有非常清晰的认识,对于安全有着深刻的理解,才能够写出正确的智能合约。因此,我认为未来智能合约的开发者,可能反而是具体应用领域的行业专家出身居多,因为让他们掌握python语言,远比让程序员去理解进出口贸易规则或者商业票据业务要容易得多。
第三类开发者,就是区块链核心应用系统和核心平台的开发者。这部分人当然必须是技术高手,按现在通俗的说法,得是后端专家。从语言上讲,c++、java、python、go、javascript都有可能要触及。从基础知识来说,要求对密码学、分布式系统、网络编程、系统架构和部署都有相当程度的理解和实践经验。这种开发者显然将是区块链技术浪潮当中的弄潮儿,也将是最大的受益者之一。
特别要点一下密码学。密码学是大多数开发人员的短板,但若要在区块链核心技术领域搞出能够碾压竞品的创新点,密码学是最有可能出成果的地方。不用说搞出什么密码学突破,就是将密码学现有成果充分运用在区块链里,都可能会搞出一些逆天的创新来。比如用零知识证明协议(zero-knowledge proof)构造高度匿名化的区块链系统,比如用私有计算外包(private computing outsourcing)技术让别的节点既能够验证交易,又对交易本身的内容一无所知,这都是能够激发大量商业模式创新的技术,等待密码学黑客们发掘和实现。因此,我相信密码学成为显学的时代即将到来。
区块链是一项前景无限、极具颠覆性和想象空间的技术,它有潜力带来一个完全不同的商业时代,塑造新一代的互联网,也有可能被传统势力合谋异化。无论如何,区块链为创业者和程序员提供了又一次弄潮的机会,在这片蓝海上将演出一场怎样的大戏,我们且拭目以待。
无人叉车AGV应达到哪些安全要求
第七代 iPod touch 来了!1599 元起售
微线程电极:大脑控制假肢行走的秘诀
详解信息化工厂中的工业以太网
一种LVDS内核及外围电路设计
区块链有关的所有技术流派和主流平台介绍
云天励飞重磅发布新一代AI芯片DeepEdge10
边缘计算常见误区分析
光宽带网络服务关系到“宽带中国”的全面实施
安信可Ai-WB2系列模组概述
大气网格化监测系统的特点
华为公开可辨识车辆列队中异常车辆新专利 奥迪A6 e-tron concept亮相
新唐科技N535FS0080芯片介绍
加速度传感器属于什么类型传感器
中国联通混改情况分析
全面解读CAN总线协议的相关知识
计算机图形学的“圣杯”——光线追踪技术
一文聊聊自动驾驶感知系统
赫特智慧科技荣获北京市“专精特新”企业官方认证
华大半导体提出了“一静一动”的产品布局 深度挖掘MCU控制的价值