前 言
HyperLedger Fabric 最初是由Digital Asset 和IBM 公司貢獻的、由Linux 基金會主辦的超級帳本專案,它是一個目前非常流行並廣為人知的區塊鏈網路架構的實現方案。身為以模組化架構開發應用程式或解決方案的基礎,HyperLedger Fabric 支援如共識和會員服務等隨插即用的元件。HyperLedger Fabric 利用容器技術來執行稱為"chaincode" 的智慧合約,該合約包含系統的應用程式邏輯。
✾ 為什麼寫作本書
區塊鏈由於去中心化、開放性、自治性、資訊不可篡改及匿名性等特徵而受到廣泛關注,且目前正處在上升勢態。拋開炒作的代幣專案,應用於企業聯盟鏈或直接架設私鏈的專案,採用HyperLedger Fabric 作為底層平台無疑是最好的選擇之一。
本人從接觸HyperLedger Fabric 專案以來,經歷了從0.6 版本到1.1 版本的數次迭代。因為早期中文資料缺乏,並且0.6 版本到1.0 版本是一個跨度非常大的迭代,導致早期的大部分部署和應用經驗失去作用,不得已再次從1.0 版本開始從頭學習。當時中文資料極為有限,且大多數都是單篇翻譯或純粹的概念說明,一直沒有找到入門的頭緒,只能不斷地從官方文件中汲取知識,並成功架設了以Kafka 類型為基礎的叢集網路。
有了叢集的經驗,加深自己對HyperLedger Fabric 整個網路交易流程的了解,並以此為基礎順利架設以Fabric-SDK-Java 為基礎的用戶端專案。也就在這個時候,開始有寫相關部落格的想法,並在部落格上發佈第一篇文,也是從零開始系列文章的第一篇,開始介紹自己的開發歷程和部署經驗,希望能透過這樣的方式幫助更多的開發夥伴加入HyperLedger Fabric 大家庭。之後又建立了「區塊鏈學習分享」的微信訂閱號,也透過微信建立一個純技術討論分享的HyperLedger Fabric 等區塊鏈相關交流群,並在這樣的機緣下結識電子工業出版社宋亞東老師,並正式開始撰寫本書。
在寫書之前我一直在整理部落格的內容,為真實地還原生產場景,還自費租賃15 台伺服器用於測試。在已有博文的基礎上,外加後來撰寫的新文章,我順利地完成本書的撰寫工作,且書中的專案都依據所租賃的伺服器完成演練,每一步驟都是以真實情況和場景為基礎的操作。在此過程中,自己對HyperLedger Fabric 也有了新的認識和了解。
本書主要以HyperLedger Fabric 案例為引,層層深入,從單機單節點到Solo 多機網路拓樸再到Kafka 叢集部署,其中穿插文件說明加深讀者的了解。與一些偏概念性質的區塊鏈教學類書籍不同,希望透過本書幫助讀者實現以HyperLedger Fabric 為基礎的區塊鏈實作。
✾ 本書主要內容
本書基於HyperLedger Fabric v1.1 版本說明,總計10 章,每章主要內容介紹如下:
■ 第1 章是基本環境部署,包含內網和外網的不同方案,以及核心處理等。
■ 第2 章是HyperLedger Fabric 及環境部署,先用文件說明Fabric 相關的介紹和主要功能點,接著分析原始程式部署和映像檔處理方面的問題。
■ 第3 章帶領讀者一步步了解官方的e2e_cli 案例,並隨後對該案例進行分析。
■ 第4 章開始手動部署單機多節點網路。
■ 第5 章跟隨前章的腳步,手動部署Solo 多機網路環境。
■ 第6 章繼續深入,架設以Kafka 為基礎的叢集網路。
■ 第7 章以文件為主,說明如何撰寫智慧合約及有關智慧合約的用法。
■ 第8 章詳細介紹CouchDB 的使用,並推薦使用CouchDB。
■ 第9 章說明在Fabric 發佈1.0 版本之後的對外用戶端呼叫方式、用戶端對SDK 的使用和相關原始程式。
■ 第10 章以一個簡單的案例做演練,在資料鏈上用到了智慧合約,對資料分析則提供另一種想法。
✾ 適合讀者群
這是一本基礎說明的書,是為了幫助更多的新手入門。所以,本書適合正在尋求HyperLedger Fabric 入門的新人閱讀,也適合中、進階開發人員作為工具書參考。
在閱讀本書之前,讀者需要具備以下基礎知識:
■ 具有一定的Linux 作業系統基本指令的常識。
■ 有Java/Go 等物件導向語言的基礎,其中智慧合約用Go 語言撰寫,SDK 則用到Java。如果具這方面的基礎,則有助於閱讀本書。
✾ 致謝
在入門及撰寫本書的時候,有許多人給予我鼓勵和支援。
首先感謝我的妻子,我開始學習HyperLedger Fabric 時遇到很多困難,經常熬夜加班,她始終體諒我,鼓勵並支援我。在寫書期間她不遺餘力地幫忙查閱相關資料,以便我能夠更順利地完成書稿。
還要感謝我的主管, 也是我的好友王海林, 正是他給我研究學習HyperLedger Fabric 的機會,並在我遇到困難時幫我逐筆分析,釐清想法。他也給予我在公司極優的研發條件和時間,讓我在最短的時間完成一次自我蛻變。
還要感謝電子工業出版社的宋亞東老師對我的支援和鼓勵,在我撰寫書稿的初期過程中對內容的編排和標準給予很多幫助。也感謝所有參與本書的出版社工作人員,是你們的辛勤付出讓本書得以成功出版。
最後,感謝我部落格的讀者及微信群裡的朋友們,正是與你們一次次地溝通和探討,讓我不斷提升自我,也鞭策我不斷前行。
由於水準有限,書中不足及錯誤之處在所難免,敬請專家和讀者給予批評指正。
楊毅