區(qū)塊鏈技術(shù)開(kāi)發(fā)入門(mén)篇
本文將對(duì)區(qū)塊鏈開(kāi)發(fā)使用的技術(shù)、工具、語(yǔ)言、平臺(tái)做一次全景掃描,并對(duì)其應(yīng)用狀況進(jìn)行分類。
新工具不僅提升效率,還可為前人所不能。作為活躍開(kāi)發(fā)領(lǐng)域之一,區(qū)塊鏈新技術(shù)、工具、平臺(tái)、語(yǔ)言與框架層出不窮,然而面對(duì)紛繁復(fù)雜的選擇,開(kāi)發(fā)者難以面面俱到。
區(qū)塊鏈開(kāi)發(fā)——工具與框架篇
Ethers.js是針對(duì)以太坊錢(qián)包功能完整實(shí)現(xiàn)的工具包,其API文檔十分詳盡。
Truffle用于開(kāi)發(fā)合約工程的框架,是一套本地集成開(kāi)發(fā)環(huán)境和編譯測(cè)試調(diào)試工具。在Truffle提供的開(kāi)發(fā)環(huán)境里,整合了前端實(shí)例化合約的方法,可以很便捷的調(diào)用合約功能。另外還有各種box支持開(kāi)箱即用,整合了前端應(yīng)用調(diào)用合約工程的途徑。
Geth是一個(gè)以太坊客戶端,用Go語(yǔ)言編寫(xiě),它是目前最常用的以太坊客戶端,有著豐富的API,不過(guò)沒(méi)有可視化操作界面??梢耘cMist配合來(lái)進(jìn)行以太坊智能合約的開(kāi)發(fā)調(diào)試。
Solc是以太坊官方提供的Solidity編譯工具。
OpenZeppelin是已實(shí)現(xiàn)的一系列經(jīng)安全驗(yàn)證的合約工具和ERC標(biāo)準(zhǔn)合約庫(kù),開(kāi)發(fā)者可以通過(guò)繼承這些合約和libray方便的進(jìn)行合約開(kāi)發(fā)。
Mist是以太坊PC錢(qián)包,可以選擇連接不同的網(wǎng)絡(luò)。包含賬戶管理、交易、調(diào)用合約、部署合約以及部分DApp功能的調(diào)用。針對(duì)以上功能所提供的界面化操作極大的方便了普通用戶發(fā)送交易和調(diào)用合約。
使用Mist可以輕松連接以太坊測(cè)試網(wǎng)絡(luò),并支持開(kāi)發(fā)、部署、調(diào)試智能合約。對(duì)開(kāi)發(fā)者非常友好。
Remix是一個(gè)集成的編寫(xiě)部署調(diào)試合約的瀏覽器IDE,可以在remix提供的瀏覽器頁(yè)面快速編寫(xiě)部署合約,支持正式和測(cè)試網(wǎng)絡(luò)連接、靜態(tài)檢查、本地調(diào)試、交易記錄、事件和日志查詢等功能。另外結(jié)合Remixd提供的ws服務(wù)可以連接本地文件進(jìn)行開(kāi)發(fā)。對(duì)兼容以太坊智能合約的鏈平臺(tái)來(lái)說(shuō),Remix是非常好用的合約編輯、測(cè)試、部署工具,用戶眾多,已經(jīng)比較成熟。
Docker在區(qū)塊鏈中有多種用途,包括用于 BaaS 服務(wù)中作為實(shí)現(xiàn)動(dòng)態(tài)節(jié)點(diǎn)管理的基礎(chǔ)組件,在Fabric作為智能合約的運(yùn)行容器等。
RocksDB是一種NoSQL數(shù)據(jù)庫(kù),具有高性能和使用簡(jiǎn)單的特點(diǎn),許多區(qū)塊鏈項(xiàng)目都以 RocksDB 作為底層的存儲(chǔ)數(shù)據(jù)庫(kù)。
MyEtherWallet是一個(gè)很受歡迎的網(wǎng)頁(yè)版以太坊在線錢(qián)包,具有豐富的資產(chǎn)管理,賬戶備份功能。對(duì)于不想在本地安裝錢(qián)包客戶端,存儲(chǔ)全量區(qū)塊信息的用戶來(lái)說(shuō),是一個(gè)不錯(cuò)的選擇。曾經(jīng)因?yàn)镈NS劫持的問(wèn)題,導(dǎo)致一些用戶訪問(wèn)了釣魚(yú)網(wǎng)站,損失了大量以太幣資產(chǎn)。MyEtherWallet代碼開(kāi)源,它不會(huì)存儲(chǔ)用戶的錢(qián)包信息賬號(hào),就算有一天MyEtherWallet網(wǎng)站不能使用,你也可以通過(guò)錢(qián)包的私鑰和密碼在其他錢(qián)包上找回你的錢(qián)包賬號(hào),可放心使用。
MetaMask是一款在谷歌瀏覽器Chrome上使用的插件類型的以太坊錢(qián)包,該錢(qián)包不需要下載,只需要在谷歌瀏覽器添加對(duì)應(yīng)的擴(kuò)展程序即可,非常輕量級(jí),使用起來(lái)也非常方便,不需要下載全量區(qū)塊信息,也能讓小白用戶管理自己的數(shù)字資產(chǎn)。對(duì)于以太坊Dapp的普及和傳播起到了非常大的作用。當(dāng)年的以太貓游戲的火爆,Metamask功不可沒(méi)。
Embark目前集成了 EVM 區(qū)塊鏈(以太坊)、去中心化存儲(chǔ)(IPFS) 和去中心化通信平臺(tái)(Whisper 和 Orbit),部署支持 Swarm,方便開(kāi)發(fā)者搭建自己的區(qū)塊鏈應(yīng)用。
Ganache是Truffle官方推薦使用的客戶端之一(另一個(gè)是Truffle內(nèi)置的Truffle Develop)。
以太坊聯(lián)合創(chuàng)始人Gavin Wood認(rèn)為,所有人都從頭構(gòu)建網(wǎng)絡(luò)和共識(shí)代碼,非常浪費(fèi)精力。使用Substrate來(lái)構(gòu)建新項(xiàng)目,開(kāi)發(fā)者所要做的,就是在代碼調(diào)用少量函數(shù),就能獲得各種密碼學(xué)模板,以及定制、搭建和發(fā)布新區(qū)塊鏈所需要的方方面面,“Substrate為區(qū)塊鏈開(kāi)發(fā)者提供最大限度的自由,花費(fèi)最少的精力”。
關(guān)系數(shù)據(jù),如MySQL在一些區(qū)塊鏈系統(tǒng)中用作記錄系統(tǒng)對(duì)象的關(guān)聯(lián)關(guān)系,以便提供比NoSQL更豐富的查詢能力。但關(guān)系數(shù)據(jù)庫(kù)的靈活性、伸縮性不好,并不太適合區(qū)塊鏈這類數(shù)據(jù)單調(diào)遞增的場(chǎng)景,在數(shù)據(jù)量增長(zhǎng)上來(lái)之后對(duì)關(guān)系數(shù)據(jù)庫(kù)的運(yùn)維管理復(fù)雜,因此不推薦使用,建議考慮其它的替代方案。
曾經(jīng)廣泛使用的EtherScripter已被淘汰,Embark、Truffle是其替代者。
區(qū)塊鏈開(kāi)發(fā)——技術(shù)篇
GOSSIP是一種消息通訊算法,廣泛用于面向公鏈的區(qū)塊鏈系統(tǒng)中,包括比特幣、以太坊等,用于實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信。
POW是目前面向公鏈的眾多共識(shí)算法中唯一具有安全性證明的算法,在中本聰?shù)恼撐囊颜撟C,并且得到比特幣系統(tǒng)的運(yùn)行所證明。缺點(diǎn)是需要消耗算力。
PBFT是一種拜占庭容錯(cuò)的共識(shí)算法,適合用于面向聯(lián)盟鏈的場(chǎng)景,在許多區(qū)塊鏈項(xiàng)目上都采用了 PBFT 算法及其變種算法;但原始的 PBFT 算法本身不支持節(jié)點(diǎn)的動(dòng)態(tài)增加,在實(shí)際應(yīng)用時(shí)需要注意。
區(qū)塊鏈開(kāi)發(fā)——語(yǔ)言篇
Java作為一項(xiàng)成熟的通用語(yǔ)言,掌握開(kāi)發(fā)人員多,生態(tài)全面,被廣泛運(yùn)用于各類企業(yè)級(jí)系統(tǒng)、中間件的開(kāi)發(fā),在區(qū)塊鏈中也被一些項(xiàng)目用做系統(tǒng)開(kāi)發(fā)語(yǔ)言和合約開(kāi)發(fā)語(yǔ)言。
Go是高效快速的應(yīng)用邏輯開(kāi)發(fā)語(yǔ)言,編譯速度優(yōu)越,已經(jīng)有較為強(qiáng)大的基礎(chǔ)庫(kù),屬于新興語(yǔ)言,很被大家看好。作為一項(xiàng)通用語(yǔ)言,具有內(nèi)存安全、性能優(yōu)異的特點(diǎn),使用用作區(qū)塊鏈底層系統(tǒng)的開(kāi)發(fā)語(yǔ)言。由于Go簡(jiǎn)潔易用的語(yǔ)言特性、功能豐富的代碼庫(kù)以及優(yōu)異的性能表現(xiàn),很多區(qū)塊鏈底層是用Go語(yǔ)言實(shí)現(xiàn)的,Hyperledger Fabric等項(xiàng)目也主推用Go編寫(xiě)智能合約或DApp,可說(shuō)Go語(yǔ)言在區(qū)塊的應(yīng)用中已經(jīng)非常成熟。
Go的高性能,預(yù)編譯與語(yǔ)言學(xué)習(xí)的易上手性,使得它非常適合被用來(lái)編寫(xiě)區(qū)塊鏈項(xiàng)目。目前,大量的新的區(qū)塊鏈項(xiàng)目都是用Go來(lái)編寫(xiě)。
JavaScript開(kāi)發(fā)方便,很多區(qū)塊鏈項(xiàng)目支持。Lisk支持使用JavaScript來(lái)開(kāi)發(fā)智能合約,這使得智能合約的開(kāi)發(fā)對(duì)于Web開(kāi)發(fā)者來(lái)說(shuō),變得更加的簡(jiǎn)單。
Solidity是以太坊EVM虛擬機(jī)上編寫(xiě)智能合約的圖靈完備語(yǔ)言,也是當(dāng)前智能合約最實(shí)用和使用最廣泛的語(yǔ)言,語(yǔ)法類似JavaScript,適用于以太坊及其擴(kuò)展實(shí)現(xiàn),只能由 EVM 加載執(zhí)行。但受制于EVM包括以太坊本身的擴(kuò)展性不夠等設(shè)計(jì)缺陷,在開(kāi)發(fā)效率和運(yùn)行速度上有一定的限制。不過(guò)Solidity還在不斷的發(fā)展和更新,可以期待未來(lái)更優(yōu)的使用體驗(yàn),但如果用于正式的重要的業(yè)務(wù)中,需要謹(jǐn)慎考慮。
Rust作為一項(xiàng)通用語(yǔ)言,具有內(nèi)存安全、性能優(yōu)異的特點(diǎn),使用用作區(qū)塊鏈底層系統(tǒng)的開(kāi)發(fā)語(yǔ)言。已經(jīng)有一些區(qū)塊鏈項(xiàng)目采用了該語(yǔ)言作為開(kāi)發(fā)語(yǔ)言。但開(kāi)發(fā)人群還相對(duì)較少,選擇該語(yǔ)言還需要考慮開(kāi)發(fā)生態(tài)的成熟度。Rust在不影響性能的前提下提供的安全特性非常有吸引力,這些安全特性也很適用于區(qū)塊鏈開(kāi)發(fā)。如steem等區(qū)塊鏈項(xiàng)目用Rust開(kāi)發(fā),經(jīng)過(guò)適當(dāng)?shù)南拗坪笠策m用于智能合約開(kāi)發(fā)。Rust可以被C及其它多種語(yǔ)言輕松調(diào)用,且由于其高性能特性,非常適合被用來(lái)編寫(xiě)區(qū)塊鏈相關(guān)組件,比如可插拔密碼庫(kù)和共識(shí)機(jī)制。
作為一項(xiàng)有歷史的成熟的經(jīng)典語(yǔ)言,C++通常用于開(kāi)發(fā)偏底層的系統(tǒng),且不斷迭代升級(jí),引入新特性新思想,性能一直較好,但由于語(yǔ)言特性復(fù)雜,容易產(chǎn)生內(nèi)存安全的問(wèn)題,對(duì)開(kāi)發(fā)者要求高,在有其它內(nèi)存安全的語(yǔ)言可選擇的情況下,C++不是進(jìn)行區(qū)塊系統(tǒng)開(kāi)發(fā)的最優(yōu)選擇。EOS等項(xiàng)目是用C++開(kāi)發(fā)的,但由于其復(fù)雜性,使用時(shí)需要非常小心。
另外,學(xué)習(xí)曲線較陡,使得越來(lái)越多的新的區(qū)塊鏈項(xiàng)目不再使用C++語(yǔ)言來(lái)進(jìn)行編寫(xiě)。但是C++高性能和編譯特性,使得它仍然會(huì)在一些區(qū)塊鏈項(xiàng)目的底層開(kāi)發(fā)中發(fā)揮作用。
Vyper是新的以太坊語(yǔ)言,它為開(kāi)發(fā)者提供了Solidity的一種替代選擇。
已有項(xiàng)目采用Clojure編寫(xiě)合約解釋器,但學(xué)習(xí)曲線較為陡峭,現(xiàn)有開(kāi)發(fā)者中,熟練掌握的人相當(dāng)少,可能會(huì)面對(duì)缺人或維護(hù)困難的窘境。
Red擁有出色的表達(dá)及DSL能力,但項(xiàng)目仍在開(kāi)發(fā)中,基礎(chǔ)尚不完備。
區(qū)塊鏈開(kāi)發(fā)——平臺(tái)篇
迅雷鏈平臺(tái)(Thunder Chain)是高性能、高可靠性、開(kāi)發(fā)方便、技術(shù)支持完善的主鏈平臺(tái)。
EVM是以太坊上的智能合約引擎,用于執(zhí)行 Solidity 的智能合約,它是一個(gè)棧式虛擬機(jī),其安全性是還需要完善,眾多針對(duì)以太坊的攻擊方法都是由 EVM 本身的缺陷帶來(lái)的,雖然爆出的缺陷已經(jīng)大部分修復(fù),但畢竟EVM出現(xiàn)的時(shí)間相對(duì)還很短,所以還需更多時(shí)間來(lái)觀察其進(jìn)展。
和普通節(jié)點(diǎn)相比,Azure BaaS節(jié)點(diǎn)好處主要是,能讓開(kāi)發(fā)者快速建立自己所需的開(kāi)發(fā)環(huán)境,能幫助更快地驗(yàn)證自己的概念和模型,工具性更強(qiáng),便于創(chuàng)建、部署、運(yùn)行和監(jiān)控區(qū)塊鏈服務(wù)。但其實(shí)用性還有待驗(yàn)證。
Blockchain Testnet可用于測(cè)試和體驗(yàn)操作。允許DApp開(kāi)發(fā)者使用測(cè)試網(wǎng)絡(luò)方便的進(jìn)行開(kāi)發(fā)和調(diào)試,而不必?fù)?dān)心在主鏈上測(cè)試導(dǎo)致的費(fèi)用問(wèn)題。
Coinbase’s API的提供者Coinbase是全球用戶最多的交易所之一。
Tierion是將區(qū)塊鏈用于驗(yàn)證任何數(shù)據(jù)、文件或過(guò)程的平臺(tái),應(yīng)用場(chǎng)景包括文件存在性證明、審計(jì)跟蹤等,應(yīng)用場(chǎng)景有限,決定使用這個(gè)平臺(tái)之前請(qǐng)先評(píng)估是否跟自己的實(shí)際業(yè)務(wù)場(chǎng)景相匹配。