本文將對區塊鏈開發使用的技術、工具、語言、平臺做一次全景掃描,并對其應用狀況進行分類。
新工具不僅提升效率,還可為前人所不能。作為活躍開發領域之一,區塊鏈新技術、工具、平臺、語言與框架層出不窮,然而面對紛繁復雜的選擇,開發者難以面面俱到。
區塊鏈開發——工具與框架篇
Ethers.js是針對以太坊錢包功能完整實現的工具包,其API文檔十分詳盡。
Truffle用于開發合約工程的框架,是一套本地集成開發環境和編譯測試調試工具。在Truffle提供的開發環境里,整合了前端實例化合約的方法,可以很便捷的調用合約功能。另外還有各種box支持開箱即用,整合了前端應用調用合約工程的途徑。
Geth是一個以太坊客戶端,用Go語言編寫,它是目前最常用的以太坊客戶端,有著豐富的API,不過沒有可視化操作界面?梢耘cMist配合來進行以太坊智能合約的開發調試。
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作為一項通用語言,具有內存安全、性能優異的特點,使用用作 區塊鏈www.bbcaijing.cn 底層系統的開發語言。已經有一些區塊鏈項目采用了該語言作為開發語言。但開發人群還相對較少,選擇該語言還需要考慮開發生態的成熟度。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是將區塊鏈用于驗證任何數據、文件或過程的平臺,應用場景包括文件存在性證明、審計跟蹤等,應用場景有限,決定使用這個平臺之前請先評估是否跟自己的實際業務場景相匹配。