本書的目標是介紹區塊鏈技術的理論和實踐兩方面的內容。自本書第1版出版以來,區塊鏈技術又出現了很多改變和進步,因此也就有了更新本書的需要。
實施區塊鏈技術可以帶來諸多好處,這已引起學術界和行業研究人員的濃厚興趣,他們正在持續不懈地研究該技術,並且湧現了許多相關的聯盟、工作組、項目和專業機構,它們參與了該技術的開發和進一步發展的工作。
本書第2版將對去中心化、智能合約以及以太坊、比特幣和Hyperledger Fabric等各種區塊鏈平臺進行深入介紹。閱讀完本書之後,讀者將能夠對區塊鏈技術的內部運作有深入的了解,並能夠開發區塊鏈應用程序。
本書涵蓋與區塊鏈技術相關的所有主題,包括密碼學、加密貨幣、比特幣、以太坊以及用於區塊鏈開發的各種其他平臺和工具。如果讀者對計算機科學有基本的了解,並具有基本的編程經驗,那麼將從本書中充分受益。
如果讀者沒有任何編程經驗,也不妨礙輕松閱讀本書,因為本書在必要時會提供相關的背景資料。
本書讀者
本書適用於希望深入了解區塊鏈的任何人,區塊鏈應用程序的開發人員可以將其用作參考書。本書既可以用作與區塊鏈技術和加密貨幣相關課程的教科書,也可以用作與加密貨幣和區塊鏈技術相關的各種考試和認證的學習資料。
內容介紹
本書共包含19章,具體內容如下。
第1章“區塊鏈入門”。詳細闡釋了區塊鏈技術所基於的分布式計算的基本概念,討論了區塊鏈的歷史、定義、相關術語素和類型等,並介紹了作為區塊鏈技術核心的各種共識機制。
第2章“去中心化”。闡述了去中心化的概念及其與區塊鏈技術的關繫,介紹了可用於去中心化過程或繫統去中心化的各種方法或平臺。
第3章“對稱密碼學”。介紹了對稱密碼學的理論基礎,這對於理解如何提供各種安全服務(如機密性和完整性)是必不可少的。
第4章“公鑰密碼學”。通過實際示例介紹了諸如RSA算法和ECC算法、公鑰和私鑰、數字簽名和哈希函數之類的概念,介紹了金融市場和交易基礎知識,因為在金融領域存在許多有趣的區塊鏈技術用例。
第5章“比特幣詳解”。從定義、交易執行、區塊鏈結構和挖礦等多方面介紹了比特幣,這是個區塊鏈,也是目前市值和交易活躍的區塊鏈。此外,還詳細介紹了與比特幣加密貨幣有關的技術概念。
第6章“比特幣網絡和支付”。詳細介紹了比特幣網絡、相關協議和各種比特幣錢包。此外,還介紹了比特幣改進提案、比特幣交易和支付等。
第7章“比特幣客戶端和API”。介紹了可用於構建比特幣應用程序的各種比特幣客戶端和編程API。
第8章“山寨幣”。詳細解釋了山寨幣的由來、工作量證明方案的替代方法、各種權益類型和難度目標重新調整算法等,並介紹了山寨幣的開發和不同山寨幣的示例。
第9章“智能合約”。對智能合約進行了深入的討論,介紹了諸如智能合約的歷史、智能合約的定義、李嘉圖合約、Oracle,以及在區塊鏈上部署智能合約等主題。
第10章“以太坊入門”。詳細介紹了以太坊區塊鏈的設計和架構,討論了與以太坊區塊鏈相關的各種技術概念,深入解釋了該平臺的基本原理、功能和組件。
第11章“深入了解以太坊”。闡述了更多與以太坊相關的內容,包括編程語言和操作碼、區塊和區塊鏈、節點和礦工、錢包和客戶端軟件、API和工具、支持協議等。
第12章“以太坊開發環境”。討論了與以太坊智能合約開發和編程有關的主題,包括建立一個私有網絡和啟動網絡等。
第13章“開發工具和框架”。詳細介紹了Solidity編程語言以及用於以太坊開發的各種相關工具和框架。
第14章“Web3詳解”。介紹了使用以太坊區塊鏈開發去中心化應用程序和智能合約,並對Web3 API進行了詳細介紹,同時列舉了多個實際示例。
第15章“超級賬本”。討論了來自Linux基金會的Hyperledger項目,包括Fabric、Sawtooth Lake和Corda等。
第16章“替代區塊鏈”。介紹了各種替代區塊鏈的解決方案和平臺,提供了替代區塊鏈和相關平臺的技術細節和功能。
第17章“區塊鏈—代幣之外的應用”。對區塊鏈技術在除加密貨幣以外的領域(包括物聯網、政府治理、媒體和金融等)的應用進行了實用而詳細的介紹。
第18章“可伸縮性和其他挑戰”。討論了區塊鏈技術面臨的挑戰(主要包括可伸縮性、隱私保護和安全性),以及如何應對這些挑戰。
第19章“當前發展和未來展望”。介紹了區塊鏈技術的新興趨勢和挑戰、區塊鏈研究和項目、區塊鏈開發工具等。此外,還介紹了對區塊鏈技術未來發展的一些預測。
充分利用本書
? 本書中的所有示例均在Ubuntu 16.04.1 LTS(Xenial)和macOS 10.13.2版本上開發。因此,建議使用Ubuntu或任何其他類似UNIX的繫統。當然,也可以使用任何其他操作繫統(如Windows或Linux),隻不過書中的示例(尤其是與安裝相關的示例)就可能需要進行相應的更改。
? 本書使用OpenSSL 1.0.2g命令行工具開發了與加密相關的示例。
? 以太坊Solidity示例是使用Remix IDE開發的,其下載地址如下:
https://remix.ethereum.org
? 本書以太坊示例是使用以太坊拜占庭版本開發的,其下載地址如下:
https://www.ethereum.org/
? Vilros使用Raspberry Pi套件開發了與物聯網相關的示例,但它也可以使用任何其他模型或工具套件。具體來說,Raspberry Pi 3 Model B 1.2版本可用於構建物聯網的硬件示例。Node.js 8.9.3版本和npm 5.5.1版本已用於下載相關軟件包並運行物聯網示例的Node.js服務器。
? Truffle框架已用於智能合約部署的一些示例中,其下載地址如下:
http://truffleframework.com/
通過npm提供的任何版本都應該是合適的。
下載示例代碼文件
讀者可以從www.packtpub.com下載本書的示例代碼文件。具體步驟如下:
(1)登錄或注冊www.packtpub.com。
(2)在Search(搜索)框中輸入本書名稱Mastering Blockchain的一部分(不區分大小寫,並且不必輸入完全),即可看到本書出現在推薦下拉菜單中,如圖P-1所示。
圖P-1
(3)單擊選擇Mastering Blockchain-Second Edition(本書英譯名稱),在其詳細信息頁面中單擊Download code files(下載代碼文件)按鈕,如圖P-2所示。需要說明的是,讀者需要登錄此網站纔能看到該下載按鈕(注冊賬號是免費的)。
下載文件後,請確保使用下列軟件的版本解壓或析取文件夾中的內容:
? WinRAR/7-Zip(Windows繫統)。
? Zipeg/iZip/UnRarX(Mac繫統)。
圖P-2
? 7-Zip/PeaZip(Linux繫統)。
本書的代碼包也已經在GitHub上托管,對應網址如下:
https://github.com/PacktPublishing/Mastering-Blockchain-Second-Edition
在該頁面上,單擊Code(代碼)按鈕,然後選擇Download ZIP即可下載本書代碼包,如圖P-3所示。
如果代碼有更新,則會在現有GitHub存儲庫上更新。
圖P-3
下載彩色圖像
我們還提供了一個PDF文件,其中包含本書中使用的屏幕截圖/圖表的彩色圖像,可以通過以下地址下載:
http://www.packtpub.com/sites/default/files/downloads/MasteringBlockchainSecondEdition_ ColorImages.pdf
本書約定
本書中使用了許多文本約定。
(1)CodeInText:表示文本中的代碼字、數據庫表名、文件夾名、文件名、文件擴展名、路徑名、虛擬URL和用戶輸入等。以下段落就是一個示例。
POST是HTTP支持的請求方法。有關POST的更多信息,請訪問以下網址。
https://en.wikipedia.org/wiki/POST_(HTTP)
(2)有關代碼塊的設置如下所示:
pragma solidity ^0.4.0;
contract TestStruct {
struct Trade
{
uint tradeid;
uint quantity;
uint price;
string trader;
}
// 該結構可以按以下方式初始化和使用
Trade tStruct=Trade({tradeid:123,quantity:1,price:1,trader:"equinox"});
}
(3)當要強調代碼塊的特定部分時,相關行或項目以粗體顯示:
pragma solidity ^0.4.0;
contract TestStruct {
struct Trade
{
uint tradeid;
uint quantity;
uint price;
string trader;
}
// 該結構可以按以下方式初始化和使用
Trade tStruct=Trade({tradeid:123,quantity:1,price:1,trader:"equinox"});
}
(4)任何命令行輸入或輸出都采用如下所示的粗體代碼形式:
$ sudo apt-get install solc
(5)術語或重要單詞采用中英文對照形式,在括號內保留其英文原文。示例如下:
該文件包素,重要的是應用程序二進制接口(Application Binary Interface,ABI),可以使用geth來查詢它。通過Solidity編譯器可生成該文件,也可以直接從Remix IDE合約詳細信息中復制它。
(6)對於界面詞彙則保留其英文原文,在後面使用括號添加其中文翻譯。示例如下:
請注意,在上面的屏幕截圖中,有許多字段,例如From(付款人的地址)、To(收款人的地址)、BTC(比特幣)、GBP(英鎊)和Fee(費用)。這些字段的意思不言而喻,但值得一提的是,Fee是根據交易規模的大小來計算的,而Fee Rate(費率)則是一個取決於網絡中交易的數量的值。
(7)本書還使用了以下兩個圖標。
表示警告或重要的注意事項。
表示提示或小技巧。