本書首先介紹了區塊鏈的起源、概念、技術和特征,并介紹了密碼學原理和共識機制等基礎理論,在比特幣、以太坊和超級賬本等典型實踐的基礎上介紹了一般的區塊鏈技術架構,還專門介紹了公有鏈、區塊鏈即服務(BaaS)等區塊鏈技術,然后特別介紹了區塊鏈安全與監管、區塊鏈的測試與驗證、區塊鏈技術的一些應用及存在的問題,最后介紹了區塊鏈的發展趨勢。
本書適用于計算機相關專業的高校師生,其中一些內容(如加密學和區塊鏈應用項目開發)涉及高等代數、計算機編程和軟件工程開發等知識,因此更適合作為研究生課程的教材。
前 言
背景與動機
具體哪一年第一次聽說區塊鏈這個詞,我已經記不清了,但對當時那種新奇的感覺記憶猶新。在我每個學年開設的軟件質量保證課程中,“軟件新技術介紹”部分是從2017年開始引入區塊鏈知識點的,因為有課件可查,所以我記得清楚。到2019年,隨著中共中央政治局組織集體學習區塊鏈,區塊鏈技術的熱度到達了頂峰,全國各地的各級政府都開始學習和了解這項新技術。憑著前面幾年的學習和積累,在朋友和同事們的鼓勵和支持下,我也應邀開始進行 “區塊鏈技術及應用”科普講座,聽眾經常達300多人。
為了做好每場報告,我學習了很多相關材料,深切地感受到大家對區塊鏈技術滿懷期待,越來越覺得應該把區塊鏈的知識系統梳理一下,形成一本講義,并準備申請在南京大學計算機系給本科生和研究生開設一門課程。
恰逢2020年的全球新冠肺炎疫情,大家都居家辦公,無人來訪,我也不能訪問別人,正好安心讀書,安心著書立說。于是先做一本講義,試用了三年時間,改進后再出版為教材。
其實,促成這本教材的關鍵是2020年年初我遇見了30年前的學長鄭志強教授,他目前擔任得克薩斯大學達拉斯分校Ashbel Smith 講席教授,是信息系統和金融學雙聘教授,博士畢業于沃頓商學院信息系統專業,是信息系統領域國際知名學者,目前研究領域包括區塊鏈、金融科技、智慧健康等。鄭教授在區塊鏈研究中專長于數據資產的通證化設計和管理,帶領團隊自主開發了多項區塊鏈應用,包括水產品區塊鏈溯源、數據算法交易等。他還為多家金融科技初創公司提供技術支持,包括資產通證化估值和管理、供應鏈金融區塊鏈化等。他是在美國管理學院最早一批開設區塊鏈課程的教授,從2015年開始就講授區塊鏈技術和應用。
我的博士生陸超逸從2017年開始,一直研究分布式系統的測試與形式化驗證。2019年年初,他響應政府號召,順應時代發展潮流,開始轉戰區塊鏈系統的測試和形式化驗證。
他對這個領域進行了系統的調研和深入的研究,并為本書的編寫做了大量的工作。
高維忠是美國甲骨文公司的資深程序員,也是我在南京大學和園的鄰居,一直對區塊鏈懷有很高的興趣。我們晚上一起在南京大學和園西邊的九鄉河公園散步時,經常討論區塊鏈的精髓和各種應用,探索下一個區塊鏈的殺手級應用會出現在哪里,以及區塊鏈如何像互聯網那樣深刻地改變人們的生活。
內容組織
市面上關于區塊鏈的書有不少,但缺乏把區塊鏈核心技術、工程開發及應用系統地講述透徹且適合于中高級層次(如研究生)學習的教材。本書首先闡述區塊鏈在數字經濟中的意義;然后從區塊鏈基礎技術入手,系統地解釋了加密算法、共識、分布式計算、通證、去中心化、智能合約等核心技術在區塊鏈中如何實現;其后分別開單章全面介紹比特幣、以太坊、超級賬本三個目前最通用的區塊鏈體系,涵蓋公有鏈、聯盟鏈和私有鏈的三大體系,總結了區塊鏈的一般技術體系,并專門介紹了公有鏈技術架構和BaaS?;之后,介紹了區塊鏈工程開發,包括常用的以太坊體系的Solidity和超級賬本體系的Fabric,以及區塊鏈項目開發中的軟件測試方法、區塊鏈的安全與監控;再后,結合實例介紹了各種應用場景,如溯源、存證、票據、支付、供應鏈金融等,并著眼于未來,探討了區塊鏈的一些可能應用,如通證經濟、去中心化金融、數據交易等;最后,本書以討論區塊鏈的未來發展收尾,探討了新興技術(如量子計算和零知識證明)對區塊鏈的影響,以及未來區塊鏈如何與大數據、物聯網、人工智能相結合。
致謝
本書編寫過程中得到了南京大學計算機系各位老師的幫助,這里特別感謝計算機系副主任仲盛教授,以及陳力軍教授、申富饒教授和柏文陽副教授等給予的鼓勵和支持。感謝江蘇省計算機學會金瑩秘書長的大力支持。
感謝2017~2022年這6年來選修我的區塊鏈技術與應用課程的本科生和研究生,他們為我的講義提出了很多有價值的意見和建議。
本書的編寫得到國家自然科學項目“智能軟件測試的若干關鍵問題研究”(項目編號:62072226)的資助。區塊鏈技術已經成為信息技術的基礎,將來也是智能化軟件的基礎,未來要做好這個關于智能化軟件測試的研究項目,深入研究區塊鏈技術與應用是必不可少的基礎。同時,我們也得到了南京大學軟件新技術國家重點實驗室、南京大學計算機科學與技術系、華為科技有限公司等項目和單位的支持,在此一并表示感謝。
編者于南京大學仙林校區計算機科學與技術樓
2022年5月10日
目 錄
推薦序
前言
第1章 區塊鏈概述 1
1.1 區塊鏈技術緣起 2
1.1.1 從密碼學歷史與金融危機談起 2
1.1.2 金融交易的管理與信任危機 4
1.1.3 比特幣與中本聰的初心 5
1.1.4 區塊鏈技術的起源 7
1.2 什么是區塊鏈 8
1.2.1 身邊的區塊鏈 9
1.2.2 區塊鏈的定義 9
1.2.3 比特幣與區塊鏈 10
1.3 區塊鏈技術的組成架構 11
1.4 區塊鏈的特點與分類 12
1.5 區塊鏈的發展階段和社會意義 14
1.6 區塊鏈技術面臨的挑戰與不足 16
1.7 區塊鏈的應用和監管 18
1.8 我國對虛擬貨幣和“挖礦”
的相關規定 21
第2章 區塊鏈的密碼學原理 23
2.1 對稱加密與非對稱加密 23
2.1.1 對稱加密 23
2.1.2 非對稱加密 24
2.1.3 對稱加密與非對稱加密的
對比 25
2.2 數字簽名 25
2.3 RSA簡介 28
2.4 哈希算法 29
2.4.1 什么是哈希算法 29
2.4.2 哈希算法的特點 30
2.4.3 SHA256簡介 30
2.5 橢圓曲線密碼學 33
2.5.1 secp256k1曲線 34
2.5.2 橢圓曲線運算 34
2.5.3 公鑰的生成 35
2.5.4 公鑰加密,私鑰解密 36
2.5.5 簽名驗證(私鑰加密,
公鑰解密) 36
2.6 Merkle樹 37
第3章 區塊鏈中的共識機制 39
3.1 一致性問題 39
3.2 CAP定理 40
3.3 拜占庭將軍問題 41
3.3.1 通過口頭消息 42
3.3.2 通過書面消息 43
3.4 共識機制 45
3.4.1 PoW 46
3.4.2 PoS 47
3.4.3 DPoS 48
3.4.4 PBFT 48
第4章 比特幣 50
4.1 從貨幣發展史看比特幣 50
4.2 比特幣及其生態系統 52
4.3 比特幣的概念 55
4.4 比特幣區塊鏈結構 56
4.5 比特幣交易 60
4.6 比特幣地址 65
4.7 比特幣錢包 67
4.8 挖礦與區塊創建 68
4.8.1 獎勵機制 69
4.8.2 挖礦過程 70
4.9 驗證 74
4.9.1 交易驗證 74
4.9.2 區塊驗證 75
4.9.3 簡單支付驗證 75
4.10 分叉處理 76
4.10.1 硬分叉與軟分叉 76
4.10.2 挖礦分叉 78
4.10.3 算力51%攻擊與雙花問題 79
4.11 比特幣網絡 81
第5章 以太坊 83
5.1 以太坊簡介 83
5.2 分叉 85
5.3 貨幣 88
5.4 Gas 89
5.5 以太坊虛擬機 90
5.6 智能合約 91
5.7 樹形存儲結構 94
5.7.1 Trie樹 95
5.7.2 Patricia樹 95
5.7.3 Merkle Patricia樹 98
5.8 賬戶與狀態樹 100
5.9 以太坊區塊 104
5.10 交易驗證與區塊挖掘 107
5.10.1 交易驗證與執行 107
5.10.2 區塊挖掘與驗證 109
5.10.3 挖礦難度調整 109
5.10.4 區塊驗證 110
5.11 以太坊網絡 111
5.12 典型的以太坊應用 111
第6章 超級賬本 113
6.1 超級賬本簡介 113
6.2 超級賬本項目 114
6.3 Fabric 116
6.3.1 核心思想 116
6.3.2 整體架構 117
6.3.3 交易流程 121
6.3.4 可插拔的共識 122
6.3.5 智能合約 123
6.3.6 賬本結構 124
6.3.7 鏈碼示例 124
6.3.8 超級賬本開發實例—Fabcar
區塊鏈應用 129
6.4 超級賬本與以太坊的對比 134
第7章 區塊鏈技術架構 136
7.1 區塊鏈的特征 136
7.2 區塊鏈適用的場景條件 137
7.3 區塊鏈關鍵技術架構和
發展趨勢 138
7.3.1 區塊鏈的關鍵技術架構 138
7.3.2 區塊鏈技術架構現狀 143
7.3.3 區塊鏈技術發展趨勢 144
7.3.4 區塊鏈技術發展熱點 147
第8章 公有鏈 150
8.1 公有鏈的起源和概念 150
8.2 公有鏈的價值和特征 152
8.3 公有鏈的技術發展 155
8.4 公有鏈的治理 163
8.5 公有鏈的監管 168
第9章 區塊鏈即服務平臺——
BaaS 171
9.1 概述 171
9.1.1 企業級區塊鏈服務的意義 172
9.1.2 常見的企業級區塊鏈系統 173
9.2 BaaS的定義和設計原則 177
9.3 BaaS的總體架構 179
9.4 BaaS的基本模塊設計 180
9.4.1 區塊鏈服務管理平臺的
設計 180
9.4.2 區塊鏈底層關鍵技術的
設計 182
9.5 BaaS的高階特性 185
9.5.1 跨云部署 185
9.5.2 跨鏈交互 185
9.5.3 基于預言機的鏈上鏈下
訪問 187
9.5.4 分布式的身份管理 188
第10章 區塊鏈安全與監管 190
10.1 從安全視角看區塊鏈技術的
發展和應用態勢 190
10.2 區塊鏈技術應用分層架構及
安全風險分析 193
10.2.1 區塊鏈技術典型應用架構
逐漸趨于共識 193
10.2.2 區