本文将对区块链开发使用的技术、工具、语言、平台做一次全景扫描,并对其应用状况进行分类。
新工具不仅提升效率,还可为前人所不能。作为活跃开发领域之一,区块链新技术、工具、平台、语言与框架层出不穷,然而面对纷繁复杂的选择,开发者难以面面俱到。
区块链开发——工具与框架篇
Ethers.js是针对以太坊钱包功能完整实现的工具包,其API文档十分详尽。
Truffle用于开发合约工程的框架,是一套本地集成开发环境和编译测试调试工具。在Truffle提供的开发环境里,整合了前端实例化合约的方法,可以很便捷的调用合约功能。另外还有各种box支持开箱即用,整合了前端应用调用合约工程的途径。
Geth是一个以太坊客户端,用Go语言编写,它是目前最常用的以太坊客户端,有着丰富的API,不过没有可视化操作界面。可以与Mist配合来进行以太坊智能合约的开发调试。
Solc是以太坊官方提供的Solidity编译工具。
OpenZeppelin是已实现的一系列经安全验证的合约工具和ERC标准合约库,开发者可以通过继承这些合约和libray方便的进行合约开发。
Mist是以太坊PC钱包,可以选择连接不同的网络。包含账户管理、交易、调用合约、部署合约以及部分DApp功能的调用。针对以上功能所提供的界面化操作极大的方便了普通用户发送交易和调用合约。
使用Mist可以轻松连接以太坊测试网络,并支持开发、部署、调试智能合约。对开发者非常友好。
Remix是一个集成的编写部署调试合约的浏览器IDE,可以在remix提供的浏览器页面快速编写部署合约,支持正式和测试网络连接、静态检查、本地调试、交易记录、事件和日志查询等功能。另外结合Remixd提供的ws服务可以连接本地文件进行开发。对兼容以太坊智能合约的链平台来说,Remix是非常好用的合约编辑、测试、部署工具,用户众多,已经比较成熟。
Docker在区块链中有多种用途,包括用于 BaaS 服务中作为实现动态节点管理的基础组件,在Fabric作为智能合约的运行容器等。
RocksDB是一种NoSQL数据库,具有高性能和使用简单的特点,许多区块链项目都以 RocksDB 作为底层的存储数据库。
MyEtherWallet是一个很受欢迎的网页版以太坊在线钱包,具有丰富的资产管理,账户备份功能。对于不想在本地安装钱包客户端,存储全量区块信息的用户来说,是一个不错的选择。曾经因为DNS劫持的问题,导致一些用户访问了钓鱼网站,损失了大量以太币资产。MyEtherWallet代码开源,它不会存储用户的钱包信息账号,就算有一天MyEtherWallet网站不能使用,你也可以通过钱包的私钥和密码在其他钱包上找回你的钱包账号,可放心使用。
MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在谷歌浏览器添加对应的扩展程序即可,非常轻量级,使用起来也非常方便,不需要下载全量区块信息,也能让小白用户管理自己的数字资产。对于以太坊Dapp的普及和传播起到了非常大的作用。当年的以太猫游戏的火爆,Metamask功不可没。
Embark目前集成了 EVM 区块链(以太坊)、去中心化存储(IPFS) 和去中心化通信平台(Whisper 和 Orbit),部署支持 Swarm,方便开发者搭建自己的区块链应用。
Ganache是Truffle官方推荐使用的客户端之一(另一个是Truffle内置的Truffle Develop)。
以太坊联合创始人Gavin Wood认为,所有人都从头构建网络和共识代码,非常浪费精力。使用Substrate来构建新项目,开发者所要做的,就是在代码调用少量函数,就能获得各种密码学模板,以及定制、搭建和发布新区块链所需要的方方面面,“Substrate为区块链开发者提供最大限度的自由,花费最少的精力”。
关系数据,如MySQL在一些区块链系统中用作记录系统对象的关联关系,以便提供比NoSQL更丰富的查询能力。但关系数据库的灵活性、伸缩性不好,并不太适合区块链这类数据单调递增的场景,在数据量增长上来之后对关系数据库的运维管理复杂,因此不推荐使用,建议考虑其它的替代方案。
曾经广泛使用的EtherScripter已被淘汰,Embark、Truffle是其替代者。
区块链开发——技术篇
GOSSIP是一种消息通讯算法,广泛用于面向公链的区块链系统中,包括比特币、以太坊等,用于实现点对点通信。
POW是目前面向公链的众多共识算法中唯一具有安全性证明的算法,在中本聪的论文已论证,并且得到比特币系统的运行所证明。缺点是需要消耗算力。
PBFT是一种拜占庭容错的共识算法,适合用于面向联盟链的场景,在许多区块链项目上都采用了 PBFT 算法及其变种算法;但原始的 PBFT 算法本身不支持节点的动态增加,在实际应用时需要注意。
区块链开发——语言篇
Java作为一项成熟的通用语言,掌握开发人员多,生态全面,被广泛运用于各类企业级系统、中间件的开发,在区块链中也被一些项目用做系统开发语言和合约开发语言。
Go是高效快速的应用逻辑开发语言,编译速度优越,已经有较为强大的基础库,属于新兴语言,很被大家看好。作为一项通用语言,具有内存安全、性能优异的特点,使用用作区块链底层系统的开发语言。由于Go简洁易用的语言特性、功能丰富的代码库以及优异的性能表现,很多区块链底层是用Go语言实现的,Hyperledger Fabric等项目也主推用Go编写智能合约或DApp,可说Go语言在区块的应用中已经非常成熟。
Go的高性能,预编译与语言学习的易上手性,使得它非常适合被用来编写区块链项目。目前,大量的新的区块链项目都是用Go来编写。
JavaScript开发方便,很多区块链项目支持。Lisk支持使用JavaScript来开发智能合约,这使得智能合约的开发对于Web开发者来说,变得更加的简单。
Solidity是以太坊EVM虚拟机上编写智能合约的图灵完备语言,也是当前智能合约最实用和使用最广泛的语言,语法类似JavaScript,适用于以太坊及其扩展实现,只能由 EVM 加载执行。但受制于EVM包括以太坊本身的扩展性不够等设计缺陷,在开发效率和运行速度上有一定的限制。不过Solidity还在不断的发展和更新,可以期待未来更优的使用体验,但如果用于正式的重要的业务中,需要谨慎考虑。
Rust作为一项通用语言,具有内存安全、性能优异的特点,使用用作区块链底层系统的开发语言。已经有一些区块链项目采用了该语言作为开发语言。但开发人群还相对较少,选择该语言还需要考虑开发生态的成熟度。Rust在不影响性能的前提下提供的安全特性非常有吸引力,这些安全特性也很适用于区块链开发。如steem等区块链项目用Rust开发,经过适当的限制后也适用于智能合约开发。Rust可以被C及其它多种语言轻松调用,且由于其高性能特性,非常适合被用来编写区块链相关组件,比如可插拔密码库和共识机制。
作为一项有历史的成熟的经典语言,C++通常用于开发偏底层的系统,且不断迭代升级,引入新特性新思想,性能一直较好,但由于语言特性复杂,容易产生内存安全的问题,对开发者要求高,在有其它内存安全的语言可选择的情况下,C++不是进行区块系统开发的最优选择。EOS等项目是用C++开发的,但由于其复杂性,使用时需要非常小心。
另外,学习曲线较陡,使得越来越多的新的区块链项目不再使用C++语言来进行编写。但是C++高性能和编译特性,使得它仍然会在一些区块链项目的底层开发中发挥作用。
Vyper是新的以太坊语言,它为开发者提供了Solidity的一种替代选择。
已有项目采用Clojure编写合约解释器,但学习曲线较为陡峭,现有开发者中,熟练掌握的人相当少,可能会面对缺人或维护困难的窘境。
Red拥有出色的表达及DSL能力,但项目仍在开发中,基础尚不完备。
区块链开发——平台篇
迅雷链平台(Thunder Chain)是高性能、高可靠性、开发方便、技术支持完善的主链平台。
EVM是以太坊上的智能合约引擎,用于执行 Solidity 的智能合约,它是一个栈式虚拟机,其安全性是还需要完善,众多针对以太坊的攻击方法都是由 EVM 本身的缺陷带来的,虽然爆出的缺陷已经大部分修复,但毕竟EVM出现的时间相对还很短,所以还需更多时间来观察其进展。
和普通节点相比,Azure BaaS节点好处主要是,能让开发者快速建立自己所需的开发环境,能帮助更快地验证自己的概念和模型,工具性更强,便于创建、部署、运行和监控区块链服务。但其实用性还有待验证。
Blockchain Testnet可用于测试和体验操作。允许DApp开发者使用测试网络方便的进行开发和调试,而不必担心在主链上测试导致的费用问题。
Coinbase’s API的提供者Coinbase是全球用户最多的交易所之一。
Tierion是将区块链用于验证任何数据、文件或过程的平台,应用场景包括文件存在性证明、审计跟踪等,应用场景有限,决定使用这个平台之前请先评估是否跟自己的实际业务场景相匹配。