前言
為什麼要寫這本書
1900年9月8日,一場4級強度的飓風橫掃德克薩斯州的加爾維斯頓。這個位于墨西哥灣的島城,靠近德克薩斯海岸,在災難來臨前擁有37?000人口和光明的經濟前景。飓風猛烈攻擊了這個毫無防備的低海拔城市,給該市帶來了巨大的毀壞。飓風風速為每小時225千米,毀掉了3600座建築,使占整個城市3/4的12個街區徹底消失,死亡人數為8000~10?000人。是迄今為止,美國曆史上死亡人數最多的自然災害。
而2016年8月2日在中國華南沿海登入的“妮妲”台風,風力14級,最高風速每小時151.2千米,台風過境的廣東、廣西、湖南、貴州、雲南5省(自治區),雖然也造成了重大經濟損失,但在人員傷亡統計報告中,隻有1人失蹤。
這兩次自然災害的結果如此不同,歸功于人類掌握了計算這個神奇工具。在妮妲形成過程中,美國、日本、中國氣象監控部門就不斷跟蹤,通過監控資料,氣象數學模型和強大的計算能力,對台風進行了準确的預報和預警。在台風到來前,有關部門做了積極準備,7.6萬人得以緊急轉移安置,使得損失得以降到最低。
今天,it已經滲透到各行各業,人們已經能近距離接觸無人駕駛、機器人、虛拟現實(virtual reality)、增強現實(augmented reality)等先進技術,當人們在享受it給人們生活帶來的各種便利和好處的時候,也日益感受到來自不當使用科技所帶來的挑戰。例如,國内日益猖獗的電信詐騙,全球範圍内黑客的攻擊和安全勒索,以及未來基因技術和ai(人工智能)技術給人類所帶來的倫理、生活和工作方面的全方位沖擊,都使得有識之士開始思考如何應對科技發展所帶來的風險。
一直以來,筆者對計算技術有一種既感恩又敬畏的情結。首先感恩我們的時代,計算技術的發展使我們避過很多前人無法避過的災難;但高速發展的計算技術必然導緻機器的智能超過人類自身,是以而産生的未來不确定性也使筆者的敬畏之心油然而生。
筆者也一直有一個預感,未來可能需要針對it,特别是與業務結合緊密的雲計算和智能裝置建立監管、問責的機制。筆者的意思不完全是對從事it或智能裝置的人進行監管問責,甚至要考慮對智能裝置進行自動問責。這個看似荒謬的想法促使筆者選擇了雲計算的問責機制(accountability in cloud services)作為博士研究方向。
所謂雲計算的問責機制(accountability),指的是在雲計算架構中,能建立一個自動化的問責機制。該機制包括形式化的标準服務合同定義,服務合同的釋出,服務合同執行的監控,合同違約方的自動發現,違約方的罰則和執行,以及合同雙方争議的仲裁。舉個例子來說,今天公有雲的提供商,都沒有提供能讓電腦了解的雲服務合同。合同雙方的責任、義務和權利沒有精确的界定;雲服務提供商的服務好壞,是否遵從合同,都沒有自動化的方法去檢測;服務故障責任也沒有辦法界定;出現争議也隻能靠人工去解決。而雲計算的問責機制,旨在建立一個自動化的體系來讓電腦自動規範電腦的行為。
可想而知,這個研究課題非常有挑戰。在博士研究的過程中,筆者也走了很多彎路,一直沒有找到好的解決方法,直到三年前接觸到比特币,突然意識到區塊鍊技術是提供問責機制的最理想平台。這是因為區塊鍊技術中的防僞、防篡改、交易可追溯、數字簽名和智能合約技術提供了一個公正、可問責(accountable)、自動執行的技術平台基礎。
但是區塊鍊目前還停留在概念炒作階段,很多關注點還停留在金融應用,特别是虛拟貨币方面的應用。筆者認為,區塊鍊未來可能最适合作智能裝置的“警察”,為物聯網和智能裝置的自治管理提供一個基礎平台。區塊鍊技術應該推廣應用到除金融外的行業,是以萌生了寫這本書的念頭,作為博士研究工作的一個延續。
而寫這本書的另一個原因,也是深感在學習區塊鍊技術過程中碰到的參考資料不足的痛苦,希望能整理過去的學習所得,對區塊鍊初學者有所幫助。
從2008年中本聰發表比特币白皮書算起,區塊鍊技術才走過短短8年的時間。雖然區塊鍊1.0、2.0和3.0的架構理念已經提出并得到一定程度上的認可,但區塊鍊的技術發展仍然處于初級階段,區塊鍊的應用還剛起步,成熟的區塊鍊應用除了比特币系統,還寥寥無幾。在這種情況下寫關于區塊鍊的書籍,其實面臨一個兩難境況。一是區塊鍊的技術變化快,像個移動的靶子;可供參考的資料又少,要準确把握一個快速變化的技術非常困難,而且受限于寫筆者的水準,實踐經驗,寫出來的書難免有很多錯誤,弄不好會贻笑大方。而另一方面,正因為變化快,資料少,廣大區塊鍊技術愛好者又渴望能找到一本對他們學習、了解、掌握區塊鍊架構和技術有所幫助的書。
目前在市場上的區塊鍊書籍大緻分為兩類:一類是以梅蘭妮·斯萬(melanie swan)的《區塊鍊:新經濟藍圖及導讀》為代表的,談區塊鍊對整個宏觀層面所帶來的革命性影響的戰略性書籍;一類是以安德魯·安東普洛斯(andreas m. antonpulos)的《精通比特币》,以及普林斯頓大學以阿文·拿瑞延南(arvind?narayanan)為首編著的《比特币和密碼學技術》為代表的專注于比特币的技術性書籍。這些書籍滿足了目前市場上一部分對區塊鍊在行業中的應用有興趣的偏業務的人士,以及對比特币技術有興趣的偏技術的人士的需求。
在這兩類書籍所覆寫的市場中,其實還有一個很大的空白。我們發現,在對整個區塊鍊架構(包括區塊鍊1.0、2.0和3.0)進行系統性剖析,包括對其中關鍵技術(密碼學、共識算法)等進行系統性論述,對不同的區塊鍊架構形式(聯盟鍊、公共鍊、私有鍊、側鍊、多鍊、互聯鍊等)進行系統性介紹的書好像還沒有。而這樣的書對了解、普及區塊鍊技術,推動區塊鍊應用落地可能會有所幫助。是以,與其等待這樣的書籍出現,不如自己行動,為區塊鍊技術的推廣盡綿薄之力。筆者也就自不量力,把可能被同行笑話的風險置之腦後,鼓起勇氣集合幾個對區塊鍊着迷、志同道合的朋友,在條件不成熟,時間比較倉促的情況下,經過不少不眠之夜的努力,克服重重困難,特别是在機械工業出版社華章分社編輯高婧雅的大力協助下,完成了該書。
本書的缺點是顯而易見的。
一是因資料匮乏、技術變化快而難免出現技術錯誤。是以,本書的目的,主要是抛磚引玉,歡迎讀者多提寶貴意見,争取在下一版本能糾正大部分的錯誤,不斷完善、提升本書的品質。
二是缺少應用案例。其實目前網上的應用案例也有不少,但是我們認為,如果隻是拿别人在網上的案例加工修改,從深度、廣度方面都經不起推敲,起不了真正案例的作用。除非由真正落地該應用案例的主要負責人來寫,才能使讀者有真正的收獲。受限于我們的人脈圈子和條件,目前隻能請到ppkpub.org開源社群組織者陳晖先生來寫一個區塊鍊在辨別注冊方面的應用案例。在此鳴謝陳晖先生的大力支援,将來也歡迎有更多的區塊鍊應用的領軍團隊提供應用案例,在未來更新的版本中補上在應用案例方面的短闆。
本書特色
1)和目前市場上主流的區塊鍊書籍強調區塊鍊去中心化的概念,以及對業界帶來的革命性影響不同,本書主要是從技術的角度,介紹區塊鍊的基礎概念,特别是對區塊鍊的架構進行了詳細的剖析。
2)對區塊鍊的關鍵技術,包括區塊鍊架構(1.0、2.0、3.0)、密碼學和共識算法等做了一個詳盡的介紹。
3)提供了比特币開發指南,通過以太坊智能合約開發來幫助初學者入門。本書也用專門一章來讨論區塊鍊的常見問題,包括對近期發生的dao攻擊事件,都有詳細的分析。
4)在區塊鍊技術落地方面,本書也提供比較典型的區塊鍊解決方案,包括支付和辨別登記方面的解決方案。
5)以獨特的架構演進對it發展的影響為切入點,給讀者展示一個全新觀察整個it曆史的視角,并在這個視角下探讨區塊鍊技術在未來it發展中的影響和地位。
本書中一些實操的例子和章節,比較适合區塊鍊初學者和程式員,可以成為區塊鍊入門的書;架構剖析和深入分析方面的章節,比較适合it架構師,以及區塊鍊技術愛好者來深入了解區塊鍊架構特點和技術細節,對設計區塊鍊的解決方案有所幫助;解決方案和常見問題章節有助于區塊鍊從業人員全面了解區塊鍊應用落地方面的情況。最後一章是從架構視角對it發展的一些觀察,僅供喜愛思考的it從業者參考。
讀者對象
區塊鍊從業者
it架構師
區塊鍊應用開發人員
對區塊鍊技術感興趣的人員
如何閱讀本書
本書分為三大部分,共11章。
第一部分介紹基礎和入門,包括以下2章内容。
第1章 本書的開篇,首先介紹區塊鍊的定義和特點,并簡單介紹了區塊鍊的主要類型,然後通過介紹購買、存儲和交易比特币等實際使用場景來讓讀者對區塊鍊有所體驗,然後再探讨一些關于區塊鍊的常見問題。
第2章 介紹區塊鍊的基礎概念,為後面深入介紹區塊鍊技術做鋪墊。
第二部分介紹架構和核心技術,包括以下8章内容:
第3章 詳細介紹區塊鍊1.0、2.0、3.0典型架構,同時介紹了互聯鍊的概念和架構。
第4章 詳細介紹了區塊鍊涉及的密碼學原理和典型的算法。
第5章 介紹了在區塊鍊架構中常用的共識算法。
第6章 提供比特币開發指南,通過實際案例來幫助初學者入門。
第7章 提供以太坊上的智能合約開發指南,幫助初學者掌握智能合約的開發要領。
第8章 詳細介紹hyperledger開源項目及其架構。
第9章 讨論區塊鍊上常見的問題,包括最近出現的the dao攻擊的源碼級分析。
第10章 讨論區塊鍊上的典型解決方案,一個是以閃電網絡為主的支付方案,另一個是以辨別登記為主的開源odin解決方案。
第三部分為回顧和展望,即第11章,主要回顧it架構演進曆史并展望未來區塊鍊對it發展的影響。
勘誤和支援
由于筆者的水準有限,編寫時間倉促,書中難免會出現一些錯誤或者不準确的地方,懇請讀者批評指正。如果你有更多的寶貴意見,歡迎通過微信或郵件進行讨論。你可以通過微信joezou3986、微網誌@雲中君3986,或者發送郵件到郵箱[email protected]聯系到我,期待能夠得到你們的真摯回報,在技術之路上互勉共進。
緻謝
首先感謝我的作者夥伴——張海甯先生、唐屹教授、李磊教授、劉天喜博士、陳晖先生、曲烈博士和鄭曉明博士。他們在工作之餘,擠出寶貴時間為本書貢獻了他們對區塊鍊技術的了解和洞察。特别感謝我的大學同門師弟henry張海甯先生在關鍵時刻的出手相助,為本書貢獻了很多精力,他不單在内容上積極供稿,也在本書的審定、修改和校正方面下了很多工夫。唐屹教授和李磊教授也在繁忙的教學和學術研究中抽出時間來對一些區塊鍊的基本概念和關鍵技術(包括密碼學和共識算法)做了詳盡的闡述。劉天喜博士在本書的架構規劃和開篇設計上做了很大貢獻。而陳晖先生的比特币開發指南對很多初學者入門有很大的幫助,他的odin開源項目也是區塊鍊登記方面的一個典型解決方案。曲烈博士的智能合約開發章節給衆多以太坊開發初學者提供一個易懂、易上手的應用指引。鄭曉明博士也對主流代币做了比較全面的介紹。
本書作者也得到中關村區塊鍊聯盟的大力支援,在此也特别鳴謝中關村區塊鍊産業聯盟秘書長王安平先生、副秘書長範金剛先生和林大鵬先生以及聯盟發展部張培部長。同時也感謝江源老師、江苑绛博士,他們的鼓勵成為我堅持下來的動力。另外在寫書過程中也得到澳洲富士通區塊鍊技術架構師董仲利先生、信達證劵區塊鍊首席專家曹寅先生、亞投行企業it項目管理專家allen邵以及合肥工業大學劉古劉和方輝先生的幫助,在此對他們表示感謝。
另外感謝比特币開源社群、以太坊開源社群,以及巴比特社群的各位技術專家們的部落格文章,每次閱讀必有所獲,本書也多處引用了他們的觀點和思想。
非常感謝機械工業出版社華章公司的編輯高婧雅,她的敬業精神和編輯效率令我由衷敬佩,她的回報、建議、鼓勵和幫助引導我們克服諸多困難完成全部書稿。
特别緻謝
最後,因為工作和寫書,犧牲了很多本該陪伴家人的時間。我要特别感謝我的母親從小對我的培養,也要感謝我的哥哥姐姐們在兒時營造的和睦互助、求知好學的家庭環境,這對我長大以後形成對新興技術濃厚的求知欲性格有很大影響,一直以來在我的職業生涯中都受益匪淺。更要感謝我太太annie長期以來對我的默默支援,以及女兒beverley,兒子skyler對我工作的了解。
謹以此書獻給我最親愛的家人,多年以來幫助、支援我的師友們,以及衆多熱愛區塊鍊技術的朋友們!
我想和作者聊聊
如果你想和本書作者溝通,可以通過以下方式。
1)微信群“區塊鍊技術交流群”,添加群助理微信号xiaodanmyd入群。
2)qq群“區塊鍊技術交流群”,群号375936045。
3)關注微信公衆号“鍊信chain2trust”。
4)鄒均微信号:joezou3986,添加請注明溝通事項。
鄒均
目錄
序一:什麼是區塊鍊
序二:區塊鍊——未來已來,隻是尚未流行
序三:區塊鍊——連接配接虛拟與現實
序四:區塊鍊——轉型之擎
第1章 區塊鍊和比特币初體驗
<a href="https://yq.aliyun.com/articles/82064/" target="_blank">1.1 區塊鍊簡介 </a>
<a href="https://yq.aliyun.com/articles/82107/" target="_blank">1.2 區塊鍊體驗 </a>
<a href="https://yq.aliyun.com/articles/82110/" target="_blank">1.3 本章小結 </a>
第2章 區塊鍊基礎
<a href="https://yq.aliyun.com/articles/82112" target="_blank">2.1 區塊鍊技術 </a>
<a href="https://yq.aliyun.com/articles/82118/" target="_blank">2.2 以太坊 </a>
2.4 本章小結
第3章 區塊鍊架構剖析 / 59
3.1 基本定義 / 59
3.2 區塊鍊1.0架構:比特币區塊鍊 / 61
3.2.1 比特币前端 / 63
3.2.2 比特币節點後端 / 66
3.3 區塊鍊2.0架構:以太坊區塊鍊 / 79
3.4 區塊鍊3.0架構:超越貨币、金融範圍的區塊鍊應用 / 87
3.5 互聯鍊架構剖析 / 90
3.5.1 互聯鍊背景 / 90
3.5.2 互聯賬本 / 91
3.5.3 互聯賬本協定組 / 92
3.5.4 互聯賬本各層協定關系 / 95
3.6 本章小結 / 96
第4章 區塊鍊中的密碼學技術 / 97
4.1 雜湊演算法 / 97
4.1.1 哈希函數的性質與應用 / 99
4.1.2 哈希指針鍊 / 101
4.2 merkle樹 / 102
4.3 公鑰密碼算法 / 103
4.3.1 橢圓曲線密碼算法 / 104
4.3.2 secp256k1橢圓曲線 / 105
4.3.3 橢圓曲線簽名與驗證簽名 / 106
4.4 本章小結 / 107
第5章 共識算法詳解 / 109
5.1 拜占庭容錯技術 / 109
5.1.1 拜占庭将軍問題 / 110
5.1.2 拜占庭容錯系統 / 112
5.1.3 實用的拜占庭容錯系統 / 112
5.1.4 raft協定 / 114
5.2 pow機制 / 116
5.3 pos機制 / 122
5.4 dpos機制 / 123
5.5 ripple共識算法 / 124
5.6 小蟻共識機制 / 126
5.7 本章小結 / 127
第6章 比特币應用開發指南 / 129
6.1 以虛拟機方式搭建應用開發環境 / 129
6.1.1 下載下傳和安裝oracle vm virtualbox / 129
6.1.2 以虛拟機方式安裝ubuntu14.04 / 133
6.1.3 安裝node.js開發環境 / 138
6.1.4 安裝docker運作環境 / 138
6.1.5 安裝和運作比特币測試網絡 / 139
6.1.6 運作第一個示例程式 / 141
6.2 把握比特币“交易”資料結構 / 145
6.2.1 了解比特币的“交易”資料結構 / 145
6.2.2 交易記錄的執行個體解析 / 146
6.2.3 運作示例程式 / 148
6.3 實戰:多重簽名交易 / 153
6.3.1 将odin辨別注冊到區塊鍊上的執行個體解析 / 153
6.3.2 運作示例程式 / 156
6.4 本章小結 / 157
第7章 智能合約 / 158
7.1 智能合約簡介 / 158
7.1.1 什麼是智能合約 / 158
7.1.2 智能合約的曆史 / 159
7.1.3 智能合約的優點和面臨的風險 / 160
7.2 以太坊智能合約詳解 / 161
7.2.1 以太坊上的賬戶 / 161
7.2.2 以太币和gas / 166
7.2.3 合約和交易 / 167
7.3 以太坊虛拟機 / 170
7.4 執行個體:在以太坊上開發實施智能合約 / 173
7.4.1 通過以太坊錢包部署智能合約 / 173
7.4.2 通過控制台部署智能合約 / 179
7.5 本章小結 / 183
第8章 超級賬本項目 / 184
8.1 超級賬本項目簡介 / 184
8.1.1 項目背景 / 184
8.1.2 項目管理形式 / 185
8.1.3 項目的生命周期管理 / 186
8.1.4 項目發展狀況 / 187
8.2 fabric項目 / 187
8.2.1 項目概述 / 187
8.2.2 應用場景 / 188
8.2.3 項目架構 / 189
8.2.4 部署方式 / 191
8.2.5 交易的執行 / 192
8.3 sawtooth lake項目 / 193
8.3.1 項目概述 / 194
8.3.2 項目架構 / 194
8.4 本章小結 / 196
第9章 區塊鍊常見問題 / 197
9.1 錢包的安全性問題 / 197
9.2 加密貨币的交易方式 / 199
9.3 匿名性和隐私性 / 201
9.4 礦池算力集中的問題 / 203
9.5 51%攻擊問題 / 205
9.6 去中心化的自治組織 / 207
9.6.1 去中心化的自治組織簡介 / 207
9.6.2 the dao項目 / 208
9.6.3 代碼漏洞分析 / 210
9.6.4 解決方案 / 213
9.6.5 軟分叉和硬分叉的影響 / 215
9.6.6 重播攻擊 / 216
9.7 本章小結 / 219
第10章 區塊鍊應用案例分析 / 220
10.1 閃電網絡 / 220
10.1.1 閃電網絡簡介 / 220
10.1.2 支付通道的建立 / 221
10.1.3 支付通道的更新 / 223
10.1.4 支付網絡的建構 / 223
10.1.5 支付通道的關閉 / 225
10.1.6 小結 / 226
10.2 odin:用區塊鍊來替代dns / 226
10.2.1 odin簡介 / 227
10.2.2 實作功能 / 228
10.2.3 主要特點 / 229
10.2.4 odin辨別編碼格式 / 229
10.2.5 odin辨別技術規範 / 232
10.2.6 使用示例 / 233
10.2.7 開放資源 / 234
10.2.8 問題與思考 / 234
10.3 本章小結 / 236
第11章 從架構變革看it時代的演進 / 237
11.1 架構心得 / 237
11.1.1 架構和技術的關系 / 237
11.1.2 關于計算的觀察 / 238
11.1.3 架構創新的神奇力量 / 238
11.1.4 馮·諾依曼架構 / 239
11.1.5 哈佛體系架構 / 240
11.1.6 有影響力架構的特點 / 240
11.1.7 從非生物計算到非生物智能 / 241
11.2 架構創新——it發展源源不斷的動力 / 242
11.2.1 大中型機時代 / 243
11.2.2 開放時代的到來 / 243
11.2.3 用戶端/服務端(cs)分布式時代 / 243
11.2.4 網際網路時代 / 244
11.2.5 雲計算、大資料時代 / 246
11.2.6 網際網路+時代 / 250
11.2.7 區塊鍊+時代 / 252
11.3 未來展望 / 254