
區塊鍊技術指南
鄒均 張海甯 唐屹 李磊 等著
圖書在版編目(cip)資料
區塊鍊技術指南 / 鄒均等著. —北京:機械工業出版社,2016.11
isbn 978-7-111-55356-4
i. 區… ii. 鄒… iii. 電子商務-支付方式-指南 iv. f713.361.3-62
中國版本圖書館cip資料核字(2016)第268750号
出版發行:機械工業出版社(北京市西城區百萬莊大街22号 郵政編碼:100037)
責任編輯:高婧雅 責任校對:殷 虹
印 刷: 版 次:2016年11月第1版第1次印刷
開 本:186mm×240mm 1/16 印 張:17.75
書 号:isbn 978-7-111-55356-4 定 價:69.00元
凡購本書,如有缺頁、倒頁、脫頁,由本社發行部調換
客服熱線:(010)88379426 88361066 投稿熱線:(010)88379604
購書熱線:(010)68326294 88379649 68995259 讀者信箱:[email protected]
版權所有 ? 侵權必究
封底無防僞标均為盜版
本書法律顧問:北京大成律師事務所 韓光/鄒曉東
本書作者
鄒均:中關村區塊鍊産業聯盟專家、服務合約(service contract)方向博士,關注與實踐區塊鍊技術與應用。擅長雲計算、大資料、軟體定義存儲。現為海納雲cto,曾任ibm澳洲金融行業首席軟體架構師、多個雲計算公司高管,是融智北京高端外國專家。在國際會議期刊發表論文20餘篇,獲2015年澳中校友會ict和媒體類别傑出校友獎,區塊鍊相關論文獲2016年ieee icws最佳博士論文獎。
張海甯:vmware中國研發中心雲原生應用首席架構師,西蒙弗雷澤大學計算機科學碩士,多年軟體全棧開發經驗,harbor企業級容器registry開源項目負責人,cloud foundry中國社群最早的技術布道師之一,國内最早的ios開發者。在vmware公司先後負責開源paas平台cloud foundry、大資料虛拟化、軟體定義存儲vsan等領域的技術布道和解決方案推廣。目前着重關注區塊鍊、容器和雲計算等領域的研究和開發工作。之前曾擔任ibm資深軟體工程師、sun公司資深解決方案架構師等職務。
唐屹:廣州大學教授、理學博士,專注于區塊鍊安全與應用、網絡資訊安全、分布式計算等,為國外知名安全公司開發過橢圓曲線密碼軟體,獲密碼科技進步二等獎(省部級)。主持或參與完成多項國家級或省部級自然科學基金與人才計劃等重點項目。
李磊:合肥工業大學副教授,macquarie大學博士。擅長資料挖掘、社會計算、智能計算。獲2011年澳洲最優博士論文提名,并多次擔任ieee國際會議的程式委員會委員及組織者。在社會計算和區塊鍊等領域發表論文40餘篇,被引用350餘次。
劉天喜:深圳拓邦股份有限公司總經理助理,進階工程師、北京大學博士。在移動通信、內建電路、移動網際網路、物聯網等領域深耕多年,擅長技術産業研究、行業分析和戰略規劃,主導或參與中國工程院、中央網信辦、工信部、國資委等十餘項産業研究課題。發表學術論文10餘篇。
陳晖:區塊鍊ppk開源項目發起人和主要開發者、巴比特網站專欄作者與區塊鍊技術版版主。對網絡與通信技術有深入實踐與研究,十餘年的軟體研發和項目管理經驗。通過深度實踐以比特币為代表的數字加密貨币領域,率先提出“區塊鍊+網絡通信”将最大化發揮區塊鍊革命性價值的觀點,并着力以開放開源項目的形式推動區塊鍊與網絡通信領域融合的技術創新和應用發展。
曲烈:macquarie大學博士,曾任macquarie大學研究員、助教。從事資訊安全、密碼學、區塊鍊、服務計算以及資訊系統等領域的研究。多次在國際知名會議和期刊發表論文,并受邀宣講。
鄭曉明:中國電信雲計算分公司工程師、macquarie大學博士,專注于雲計算、雲存儲、監控系統、推薦系統、模式識别等,近期研究區塊鍊相關技術。
序一:什麼是區塊鍊
2015年是國外區塊鍊的元年,世界許多重大組織,包括高盛、花旗銀行、英國央行、美國央行等機構紛紛在區塊鍊上面投資。大量的投資從2015年10月開始便進入了區塊鍊,原因是在《華爾街日報》刊登一篇的文章,裡面報道區塊鍊經過了多次的實驗和驗證,許多金融機構證明了區塊鍊是一個颠覆性的技術。之前華爾街日報甚至宣稱,區塊鍊是最近500年以來在金融領域最重要的突破。而這500年來有多少科技上的突破,但華爾街日報卻說區塊鍊是人類曆史上在金融領域最大的突破。這可能是因為出現了一個新的貨币媒介,而每一次新貨币媒介出現,都會引發社會和經濟上的重大改革。
2016年1月,英國首席科學家建議英國政府把區塊鍊技術列為英國國家戰略,這是區塊鍊曆史上一個重大突破,原因是基于華爾街以及金融機構對區塊鍊的評價。但自從2016年1月以後,區塊鍊的評價是基于科學曆史悠久的英國官方的評價。從各樣名額來看,英國在科學上的建樹經常是排名第二,僅次于美國。而世界科學排名第二的英國甚至把區塊鍊列為國家戰略,表示區塊鍊的重要性毋庸置疑,而且有深遠的影響。能夠成為國家戰略必須在科學上被驗證過,另外還必須帶來巨大的商業價值,兩者都不可缺少才能成為國家戰略。筆者曾在2016年3月拜訪英國首席科學家,他們認為,區塊鍊可以在各行各業使用,帶來行業公平,例如:誠實報稅、政府監管、反洗錢、國家安全等。
2016年可以說是中國區塊鍊元年,因為在2016年區塊鍊在中國受到極大的重視。首先是1月的時候,人民銀行宣布要使用數字貨币。然後在30日以後,許多中國的組織機關就開始投資區塊鍊。中國許多大學也開始研究區塊鍊技術,大型金融機構都紛紛表态成立區塊鍊團隊來研究區塊鍊,區塊鍊的讨論班以及研讨會如雨後春筍一般大量湧現。
但到底什麼是區塊鍊?筆者在2015年開始研究區塊鍊,就發現了一件事情:學生們在實驗,提出來的區塊鍊模型、算法,或者架構都是有偏差的,而且有時候偏差甚大,例如,在設計私有區塊鍊的時候把公有區塊鍊的全部思想搬過來。結果不像私有區塊鍊,但也不像原來的公有區塊鍊。另外發覺很多人對相關的算法不熟悉,是以有的時候會有一些錯誤的看法,例如拜占庭将軍的問題是一門專門的學問,而區塊鍊隻是用了一個近似的算法,若是把兩者混為一談,就會讓人感到迷惑。
再加上在讨論區塊鍊時,有時候會有情緒化、宗教化或者政治化的言語出現,原來在數字貨币領域,數字貨币的先鋒常帶有一些政治思想,如無政府主義。再加上原來的數字貨币過去有洗錢、犯罪的記錄,是以在讨論時,有時候會失去焦點。這一點在英國首席科學家的報告裡也有提出來,他們認為應該重視區塊鍊,把區塊鍊當做一門科學技術來看,而且是一門有助于經濟的科學技術,而不是吹捧任何政治思想,或傳遞宗教概念。
筆者從今年初開始多次提出應該以系統工程角度來發展區塊鍊技術,例如基于雲計算、軟體工程、資料庫等系統工程技術來開發區塊鍊,區塊鍊不隻是一個加密技術或是數字貨币,而是一門系統工程。區塊鍊不是某些特殊政治思想的烏托邦,或洗錢的工具,而是一門科學家和工程師可以研究的系統工程,而且這項技術可以成為國家戰略,改變各行各業的流程以及基礎設施。英國首席科學家已經做出這樣的判斷,英國央行也做出了類似的決定,英國政府已經派了兩位部長來上司這項計劃,這就是我們所期
待的。
是以我非常高興像鄒均、張海甯、唐屹、李磊、劉天喜、陳晖、曲烈、鄭曉明這些年輕的學者們開始書寫區塊鍊技術,因為現在市面上有關區塊鍊的書都是在講解區塊鍊的概念及應用場景,但是今天描述區塊鍊技術的書卻很少。我們希望讀者能多了解區塊鍊技術,多發展區塊鍊技術,并且加以應用。隻有我們了解區塊鍊技術之後,才能真正了解區塊鍊的意義,而不會随波逐流,人雲亦雲,并且有自己的判斷,希望讀者們能夠認真讀這本書,了解區塊鍊技術,相信必定會大有收獲。
蔡維德
美國亞利桑那州立大學榮譽教授,北航區塊鍊實驗室主任
序二:區塊鍊——未來已來,
隻是尚未流行
比特币誕生于2008年美國次貸危機的末期。在比特币白皮書,即中本聰的論文《比特币:一種點對點的電子現金系統》中,還沒有“區塊鍊”這個詞,隻有“區塊”(block)和“鍊”(chain)。一些人為這種超越主權、不會濫發的虛拟數字貨币而歡欣鼓舞,開始積極投入到挖礦、炒币中,甚至發行自己的數字貨币進行籌資(ico),俗稱“币圈”。而另一些人,包括很多專家和學者,則專注于比特币底層技術,對區塊鍊(blockchain)技術和應用進行深入地研究,考慮能否将這個技術加以改進,運用到更多的領域中去,俗稱“鍊圈”。
七年之後,以2015年10月美國《經濟學人》雜志發表的《信任的機器》(the trust machine)的封面文章為标志,大家意識到,作為比特币底層技術的“鍊”,其價值遠大于比特币本身。區塊鍊可以讓人們在沒有中央權威機構監督的情況下,對彼此的互相協作建立起信心。簡單來說,它是一台創造信任的機器。華爾街開始熱捧區塊鍊。gartner釋出的2016年技術炒作曲線圖表明,目前區塊鍊正處于期望的最高點,即“過度期望期”,這也意味着在未來不久的一段時間,區塊鍊将墜入“期望幻滅期”。人們對區塊鍊的過度期望,實際暗示着對其存在很多誤解,其中最典型的有三個,因為其關鍵詞的首字母都是d,是以筆者将其歸納為“3d誤區”。
誤區一——區塊鍊是一種颠覆性(disruptive)的新技術
首先,區塊鍊不是一項新技術,而是一個新的技術組合。其關鍵技術,包括p2p動态組網、基于密碼學的共享賬本、共識機制(拜占庭将軍問題,即一種分布式場景下的一緻性問題)、智能合約等技術,都是已經有十年以上的老技術了。但是,中本聰将這些技術很巧妙地組合在一起,并在此基礎上引入了完善的激勵機制,用經濟學原理來解決傳統技術無法解決的問題。
其次,這個技術組合雖然有其獨到的創新之處,但并非是颠覆性技術,是現有技術的有力補充。目前大部分人已經認同,區塊鍊是“價值網際網路”的基礎協定,從這個角度看,其地位與目前“資訊網際網路”的http協定相當,兩者都是建立在tcp/ip協定之上的應用層協定,同是網際網路的兩大基礎協定。因而,兩者是互補而非颠覆的關系。
最後,這個技術組合,并未颠覆現有業務,而是引入了新的思想,去改善和改造現有業務模式,進而為大衆提供更好的、普惠的服務。《華爾街日報》在2015年1月曾發表題為《比特币與數字貨币的颠覆性革命》的文章,認為比特币的數字貨币發行機制可能“颠覆”目前各國央行的法定貨币發行模式,這算是最接近“颠覆”性的區塊鍊案例。而實際上,比特币在經過8年多的發展後,雖然總市值發展到了100億美元,但在全球經濟活動中的比重還是微不足道。與此同時,也确實有一些國家的央行,如英國和中國,在考慮擯棄比特币的挖礦機制後,通過借鑒數字貨币的一些機制,在一定範圍内實作可跟蹤、可追溯、數字化的法定貨币。
誤區二——區塊鍊就是去中心化(decentralized)的
首先,很多人認為decentralized是區塊鍊的核心特征,并将其翻譯為“去中心化”。然而這個最早由國内“币圈”所做出的翻譯,多少有一點主觀和政治化的色彩。作為軟體系統的網絡架構一般有三種模式:單中心、多中心、分布式。單詞decentralized隻是表明不是單中心模式,可能為多中心或弱中心,也可能是分布式的。是以在中國台灣地區,大多将decentralized翻譯為“分散式的”而不是“去中心化的”。
其次,在中本聰的整篇論文中并沒有提到過decentralized,而隻有peer-to-peer(p2p)。在2016年6月召開的w3c區塊鍊标準會議上,以太坊的核心開發團隊ethcore就明确表示,不再使用decentralized這個詞,而是用p2p、secure、serverless這類純技術性詞語。
最後,the dao事件表明,完全去中心化是不可行的。the dao是一個基于以太坊公有鍊的衆籌項目,它在短時間内就募集了價值1.6億美元的數字貨币,成為史上最大的衆籌項目。然而由于其智能合約的漏洞,導緻the dao被黑客攻擊并轉移走價值6000萬美元的數字貨币,最後不得不黯然落幕。在挽回這個損失的過程中,原有的去中心化機制未能解決問題,最後還是通過“集中式”的方式,強制以太坊進行“硬分叉”完成交易復原。但這也導緻了以太坊社群的分裂,産生了eth和etc這兩種同源卻又不同價格的數字貨币,給以太坊生态系統帶來了很多負面影響。此次事件之後,很多人對區塊鍊的“去中心化”進行了反思。前上交所總工、chinaledger聯盟技術委員會主任白碩則認為“去中心化不是區塊鍊的本質特征”。萬向控股副董事長兼執行董事肖風則進一步闡述“區塊鍊的核心是分布式而不是去中心”。
誤區三——區塊鍊交易存在很大的延遲(delay)
在使用比特币進行支付時,一般需要10分鐘才能完成一次支付确認。如果要保證支付交易的不可逆轉,通常需要等待連續的6個資料塊完全确認,這至少需要1個小時的确認時間。而我們通常使用的銀行網銀支付和第三方支付,通常都是秒級完成的。與之相比,使用區塊鍊的比特币支付實在太慢。
然而,我們再考慮一下跨境支付的場景,當我們使用swift完成一次跨境彙款時,通常需要3~5個工作日,對方才能收到相應的款項。而使用比特币進行跨境彙款,僅僅需要一個小時就能收到彙款。如此比較起來,比特币支付已經是非常快了。
為什麼有兩個完全不同的結論?因為,對于比特币支付來說,支付确認過程即是清算和結算的過程。如果把支付過程和清結算過程作為一個整體,來比較兩類支付的延遲時間,使用區塊鍊進行交易還是很快的。區塊鍊交易的本質,是大幅減少了交易後的處理工作,消除了大量的人工幹預過程,進而提高了交易效率。
通常我們把區塊鍊分為公有鍊、私有鍊、聯盟鍊三種,比特币和以太坊都屬于公有鍊範疇。在數字貨币之外的場景中,尤其是在金融領域中引入區塊鍊技術,将面臨很多問題。如何引入以及引入哪種區塊鍊,還存在許多權衡決策方面的障礙。
第一,主流金融機構難以接納公有鍊。r3釋出最新研究報告,證明公有區塊鍊不可作為金融機構解決方案。2016年swift釋出白皮書指出,目前世界主流金融機構無法接納公有區塊鍊。對于這些金融機構而言,需要的是一個自主可控的系統,而公有鍊顯然做不到這點。
第二,私有鍊與公有鍊架構差異大。筆者曾仔細分析了以太坊和超級賬本這兩個典型區塊鍊的子產品結構,發現兩者差異巨大。很多公有鍊的核心子產品,如挖礦、pow共識、原生貨币等,在私有鍊環境中是完全不必要的,甚至是有害的。與此同時,公有鍊系統中還缺失一些諸如身份認證、權限管理等在私有鍊中必要的子產品。以太坊創始人vitalik也曾坦言,隻有5%的以太坊程式可被金融領域使用。
第三,私有鍊和聯盟鍊還很不成熟。目前,以比特币和以太坊為代表的公有鍊相對比較成熟,而私有鍊和聯盟鍊則遠遠不夠成熟。開源而且好用的聯盟鍊,更是不存在。目前全球影響力最大的開源聯盟鍊,是linux基金會下面的超級賬本(hyperledger)項目,目前已有95個成員機關。旗下的fabric子項目是以ibm捐獻出的openblockchain為主體搭建而成的,目前還處在0.6版的快速疊代過程中,到0.8将是alpha版,而0.9則是beta版,再經過3個rc版本之後,才會進入相對成熟的1.0版。
想要找到或研發出一個成熟穩定的、适合金融領域的聯盟鍊底層系統,還任重道遠,需要很多仁人志士的共同努力,踏踏實實地投入到區塊鍊的基礎研究中去。
在目前已出版的區塊鍊書籍中,有很多都冠以“革命”、“重塑”、“重新定義世界”等煽動性詞語作為書名,這更像是一種口号,而非切合實際的研究。我很高興地看到,還有像鄒均、張海甯、唐屹、李磊、劉天喜、陳晖、曲烈、鄭曉明等這些研究者們,在踏踏實實地研究區塊鍊底層技術,用普實的話語來介紹和普及區塊鍊技術,讓更多的人了解和接受區塊鍊技術,實實在在地讓人們了解區塊鍊技術特征和特點,以及在現階段環境下的不足,如何去改善這些不足等。知己知彼,方能百戰不殆。世上沒有“銀彈”,沒有哪一種技術能解決所有的問題。
希望讀者們能夠通過本書,深入地了解區塊鍊技術。也隻有深入了解其底層運作機制和原理,才能更好地靈活運用該技術,取得理想的效果。
未來已來,隻是尚未流行,我輩仍需多努力。
張斌,關聯優勢科技有限公司ceo
序三:區塊鍊——連接配接虛拟與現實
我們對于一種新興的技術,往往會在短期内對它有過高的不切實際的期望;泡沫破滅後,在長期的時間軸線上,又往往會忽視它的深刻影響,這一句話,用在區塊鍊上,再合适不過。
區塊鍊的發明,是建立在網際網路之上。其所使用的技術,像p2p、分布式存儲、分布式密鑰的思想,十幾年前就已經存在,但是如果沒有中本聰那一篇開創性的關于比特币的白皮書,所有這些強大的工具,都還隻是埋藏在學術論文堆裡。因為這些工具單獨使用,并不能解決問題,隻有中本聰,出人意料地提出了一個系統性的、可供實踐的解決方案。如果他能提前十年提出這篇論文,那麼比特币就可以提前十年發明出來。是以,單個技術點,并非是區塊鍊的魅力所在,運用這些技術的全新思想,才是區塊鍊的本質和核心。
單純把區塊鍊等同于一種分布式資料存儲技術,就像将浏覽器說成是一個網頁解釋器,将手機說成是一台手持電話,将雲計算說成是一個伺服器的叢集一樣,說了等于沒有說,甚至比沒說更糟糕,更容易造成誤解。當全球的使用者都打開浏覽器通路網頁,當街上每一個人都攜帶着一台能拍照、能上網、帶gps,運算性能可以發射登月火箭的智能手機,當我們所有的工作和生活資料都發生與存儲在雲上的時候,我們看到在浏覽器、移動網際網路和雲計算上所承載的産業生态,跟最初的技術描述相比不知道差了多少萬裡。是以有人讓我用一句話解釋什麼是區塊鍊的時候,我往往會争取機會多說幾句,争取讓人更多了解一點。
從功能上說,網際網路實作了資訊的傳播,而區塊鍊實作了價值的轉移。網際網路在最開始的時候,就是以資訊傳輸管道的模式進行的設計,tcp?/?ip協定底層并不關心上面傳輸的資料有什麼差别——對于底層的交換機和路由器來說,一切都是0和1而已。無差别的資訊傳輸,創造了資訊複制的便捷通道,也造就了今天資訊爆炸的資訊社會。但是網際網路雖然解決了資訊傳播的問題,卻帶來了資訊權屬的新問題,我們可以将一首歌曲或者電影,在幾個小時内傳遍全球,我們卻不能知道,究竟是誰擁有這部電影的權利,是通過什麼樣的路徑進行的傳播。而區塊鍊則可以做到,我将一個資料,發送給另外一個人之後,我自己就不再擁有這個資料的所有權,進而實作了可以利用一個虛拟的系統,來傳輸實際的價值。
從機制上說,如果說tcp?/?ip是機器與機器之間的通信協定,而區塊鍊就是機器與機器之間的信任機制和合作協定。對于不需要驗證真假的資訊傳輸來說,tcp?/?ip已經足夠可用,但是一旦屬于不同實體的計算機,需要彼此之間進行自動化的溝通和合作的時候,問題就會變得相當複雜。現實世界公司與公司之間的合作,有律師和合同來進行條款約定,有執法機關來保障合同的實行,而在虛拟世界,計算機沒有辦法開設銀行賬戶,屬于不同實體的計算機,也沒有辦法去法院起訴對方,是以在溝通和合作的時候,一定要有一種有效的機制,來快速實作共同協作。區塊鍊就可以起到這樣一個作用,是以在區塊鍊行業中有一句話:代碼即法律(code is the law)。未來不管我們的生活還是工作,都會有越來越多地需要計算機參與,人類将整體進入後人工智能時代,區塊鍊就是在為這個時代的到來進行前期的鋪墊和準備。未來我們将會看到無人駕駛汽車,通過區塊鍊協定自動繳納過路費用;智能投資顧問自動為我們計算各種投資組合;未來最先進的金融公司,也會像現在的無人工廠一樣,看不到太多從業人員,隻有無數的計算機,在快速地締結無數的智能合約,進行精确到小數點後的資産配置。
因為區塊鍊的以上屬性,區塊鍊将會是連接配接虛拟世界與現實世界的最佳橋梁。在未來,區塊鍊所連接配接的,不會像比特币一樣是無法辨識的匿名賬戶和價值不定的虛拟資産,而将會是千千萬萬真實存在的個體和公司實體。上面所承載的資産,都将具有現實的價值和對應物,而這個虛拟的網絡上發生的一切,也都會直接作用于現實世界。這一過程,需要的不僅僅是單純的技術,還需要金融、商貿、法律、政府等各方面專家和人才凝聚在一起,來保證這一映射的有效性,也是我們一直在努力推進區塊鍊生态系統和可信區塊鍊概念的原因。區塊鍊有巨大的潛力和未來,而這些潛力和未來,需要社會的共識與力量來共同推進和實作。
鄧迪
太一雲科技有限公司董事長兼ceo
序四:區塊鍊——轉型之擎
鄒均先生在國内外企業的it架構、雲計算、大資料、it産品創新方面有很多年的經驗,鄒均本人也是我多年的好朋友和同亊。這次鄒均先生主寫的這本區塊鍊的書,相信一定會在it業内,特别是在企業it架構圈内産生巨大的反響,一定會深受廣大區塊鍊愛好者、參與者、實踐者的熱烈歡迎。
我和鄒均先生工作背景相似,曾經從事過多年企業it工作,從2009年開始,做雲計算的創新,近年來也做金融科技的創新。從我這一年多時間的區塊鍊的實踐中,我個人看到區塊鍊目前雖然還在發展初期,而每天區塊鍊技術都有新的變化和突破,每天都是“山雨欲來風滿樓”。但是區塊鍊這樣一個意義重大的技術,對整個it的架構、基礎協定、标準、營運、環境具有颠覆性的意義。是以我們應當充滿緊迫感,應當預先了解區塊鍊技術、商業模式和發展趨勢,加強與國内外各界的合作,特别是在區塊鍊的底層領域、區塊鍊的平台領域和區塊鍊的應用領域的合作,我們應當在區塊鍊的全球協定和标準方面要占據主動。
區塊鍊技術具有全新的理念和邏輯結構,并且它每天還處在發展變化過程中,是以區塊鍊技術與應用在企業内不可能單打獨鬥,區塊鍊的應用必須在企業架構中上着天、下着地,和企業現有的應用系統互相關聯。我們不應該簡單地把區塊鍊了解為一項技術,而應當考慮它在更高的企業it架構轉型層面的作用。區塊鍊的應用不是簡單地提供一個隻能追加、不能更改的分布式資料庫解決方案,而是要把區塊鍊與雲計算、大資料和傳統企業的系統互相關聯,使得企業系統由原來的傳統系統和雲計算這種“雙核驅動”轉變為傳統系統、雲計算與區塊鍊的“三核驅動”,讓企業的異構系統更好地發揮協同效應,一起解決原來傳統it系統難以解決的問題,這樣才能更好地發揮區塊鍊的獨特性,才能夠使傳統企業it架構更好地轉型。
本質上,因為區塊鍊鍊與鍊之間具有隐私、安全、共識、自治、價值共享的特性,是以在技術層面解決了網際網路上的價值傳遞問題。同時,區塊鍊又具有底層開源和改變業務規則、創新業務多方共識等邏輯,是以區塊鍊是未來整個it架構和網際網路轉型的重要支撐。而企業與網際網路it架構的轉型也為未來經濟的轉型、服務模式、信用交換和商業規則的轉型提供了關鍵支援,是以研究和應用區塊鍊不僅要研究技術,更要注意在網際網路時代赢者通吃的規則,重要的是要研究和應用區塊鍊帶來的商業規則的改變。
以前我們的資訊化,不管是企業資訊化、政府資訊化,還是個人資訊化,實際上都側重在機構内部的資訊化。這幾年随着網際網路、雲計算、大資料、平台經濟的蓬勃興起,現在it正在促使企業由内部資訊化轉型為外部資訊化,最終通過平台轉型為資訊化的企業,由政府資訊化轉型為資訊化政府,由個人資訊化轉型為資訊化個人,這些詞雖然相似,但性質具有很大的不同。它們在邏輯關系、業務處理方式、資訊的确權、資訊的使用、組織流程的改變、企業治理結構方面有很大不同,資訊化已經不再是工具、手段和管道。這樣一個資訊化平台的更新,未來會使得實體經濟更好虛拟化,使得虛拟經濟更好地結合實體化。
實施區塊鍊既需要具有傳統it系統的經驗,也需要有網際網路、雲計算、大資料的實施經驗,需要對整個it系統變遷具有很強的洞察力,需要把整個it系統協同起來,讓整個it系統互聯互助,互相合作。是以,區塊鍊系統在企業的應用,必然需要結合本地的實踐,發揮原創的精神,必然還要有網際網路時代産品開發的能力。而做一個好的區塊鍊應用更需要研究共享經濟理論、價值網際網路和金融科技的創新與發展。這一切都需要在區塊鍊理論與研究方面走到前列。
是以,我希望鄒均先生等人寫的這本區塊鍊的書籍,會連接配接it架構的過去、現在與未來,開啟大家創新的熱情,會對行業産生影響,同時為大家開啟一扇協同企業傳統系統、雲計算、大資料和區塊鍊新的大門。
黎江
北京世紀互聯創新研究院院長
前言
為什麼要寫這本書
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章 區塊鍊和比特币初體驗 / 1
1.1 區塊鍊簡介 / 1
1.1.1 區塊鍊起源——比特币 / 1
1.1.2 區塊鍊和區塊鍊技術的涵義 / 2
1.1.3 區塊鍊分類 / 2
1.1.4 區塊鍊價值與應用 / 7
1.2 區塊鍊體驗 / 10
1.2.1 擷取比特币的3種途徑 / 11
1.2.2 通過交易所購買比特币 / 13
1.2.3 比特币錢包和位址 / 17
1.2.4 從交易平台提取比特币到錢包 / 20
1.2.5 比特币交易查詢 / 22
1.3 本章小結 / 22
第2章 區塊鍊基礎 / 24
2.1 區塊鍊技術 / 24
2.1.1 基本概念 / 25
2.1.2 架構與特點 / 32
2.1.3 區塊鍊運作的核心技術 / 35
2.1.4 區塊鍊交易流程 / 41
2.2 以太坊 / 42
2.2.1 什麼是以太坊 / 42
2.2.2 以太坊技術 / 43
2.2.3 以太坊智能合約 / 48
2.2.4 以太坊的去中心化應用 / 50
2.3 基于區塊鍊的電子貨币 / 51
2.3.1 元币平台 / 51
2.3.2 代币 / 52
2.3.3 貨币的未來 / 58
2.4 本章小結 / 58
第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
第1章
區塊鍊和比特币初體驗
區塊鍊(blockchain)是近年來最具革命性的新興技術之一。區塊鍊技術發源于比特币(bitcoin),其以去中心化方式建立信任等突出特點,對金融等諸多行業來說極具颠覆性,具有非常廣闊的應用前景,受到各國政府、金融機構、科技企業、愛好者和媒體的高度關注。
在本章中,我們首先介紹區塊鍊的定義和特點,然後通過介紹購買、存儲和交易比特币等實際使用場景來體驗區塊鍊,最後再探讨一些關于區塊鍊的常見問題。
1.1 區塊鍊簡介
2016年1月20日,中國人民銀行官方網站上發表了一條題為《中國人民銀行數字貨币研讨會在京召開》的新聞[1],這一消息迅速在各大主流新聞媒體和比特币、區塊鍊愛好者社群中傳播,成為推動區塊鍊技術在國内迅速升溫的“導火線”。這是自從2013年12月5日中國人民銀行、工信部、銀監會、證監會和保監會五部委聯合釋出《關于防範比特币風險的通知》[2]以來,相關首次公開對比特币底層技術——區塊鍊技術給予了高度評價。
在我們開始區塊鍊體驗之旅之前,讓我們簡要介紹區塊鍊的定義和其發展曆程。
1.1.1 區塊鍊起源——比特币
區塊鍊的英文是blockchain,字面意思就是(交易資料)塊(block)的鍊(chain)。區塊鍊技術首先被應用于比特币,如圖1-1所示。比特币本身就是第一個,也是規模最大、應用範圍最廣的區塊鍊。
圖1-1 簡化的比特币區塊鍊示意圖
1.1.2 區塊鍊和區塊鍊技術的涵義
目前,關于區塊鍊沒有統一的定義,綜合來看,區塊鍊就是基于區塊鍊技術形成的公共資料庫(或稱公共賬本)。其中區塊鍊技術是指多個參與方之間基于現代密碼學、分布式一緻性協定、點對點網絡通信技術和智能合約程式設計語言等形成的資料交換、處理和存儲的技術組合。同時,區塊鍊技術本身仍在不斷發展和演化中。
1.1.3 區塊鍊分類
以參與方分類,區塊鍊可以分為:公開鍊(public blockchain)、聯盟鍊(consortium blockchain)和私有鍊(private blockchain)。從鍊與鍊的關系來分,可以分為主鍊和側鍊。而且,不同區塊鍊還可以形成網絡,網絡中鍊與鍊的互聯互通,産生互聯鍊(interchain)的概念。
1.?公共鍊
公共鍊對外公開,使用者不用注冊就能匿名參與,無需授權即可通路網絡和區塊鍊。節點可選擇自由出入網絡。公共鍊上的區塊可以被任何人檢視,任何人也可以在公共鍊上發送交易,還可以随時參與網絡上形成共識的過程,即決定哪個區塊可以加入區塊鍊并記錄目前的網絡狀态。公共鍊是真正意義上的完全去中心化的區塊鍊,它通過密碼學保證交易不可篡改,同時也利用密碼學驗證以及經濟上的激勵,在互為陌生的網絡環境中建立共識,進而形成去中心化的信用機制。在公共鍊中的共識機制一般是工作量證明(pow)或權益證明(pos),使用者對共識形成的影響力直接取決于他們在網絡中擁有資源的占比。
公共鍊通常也稱為非許可鍊(permissionless blockchain)。如比特币和以太坊等都是公共鍊。公共鍊一般适合于虛拟貨币、面向大衆的電子商務、網際網路金融等b2c、c2c或c2b等應用場景。
2.?聯盟鍊
聯盟鍊(consortium blockchain)僅限于聯盟成員參與,區塊鍊上的讀寫權限、參與記賬權限按聯盟規則來制定。由40多家銀行參與的區塊鍊聯盟r3[3]和linux基金會支援的超級賬本(hyperleder)[4]項目都屬于聯盟鍊架構。聯盟鍊是一種需要注冊許可的區塊鍊,這種區塊鍊也稱為許可鍊(permissioned blockchain)。
聯盟鍊的共識過程由預先選好的節點控制。一般來說,它适合于機構間的交易、結算或清算等b2b場景。例如在銀行間進行支付、結算、清算的系統就可以采用聯盟鍊的形式,将各家銀行的網關節點作為記賬節點,當網絡上有超過2/3的節點确認一個區塊,該區塊記錄的交易将得到全網确認。聯盟鍊可以根據應用場景來決定對公衆的開放程度。由于參與共識的節點比較少,聯盟鍊一般不采用工作量證明的挖礦機制,而是多采用權益證明或pbft(practical byzantine fault tolerant)、raft等共識算法。聯盟鍊對交易的确認時間、每秒交易數都與公共鍊有較大的差別,對安全和性能的要求也比公共鍊高。
聯盟鍊網絡由成員機構共同維護,網絡接入一般通過成員機構的網關節點接入。聯盟鍊平台應提供成員管理、認證、授權、監控、審計等安全管理功能。
2015年成立的r3聯盟,旨在建立銀行同業的一個聯盟鍊,目前已經吸引了40多個成員,包括世界著名的銀行(如摩根大通、高盛、瑞信、伯克萊、彙豐銀行等),it巨頭(如ibm、微軟)。
銀行間結算是非常碎片化的流程,每個銀行各自有一套賬本,對賬困難,有些交易有時要花幾天才能校驗和确認。同時,其流動性風險很高,在監管報送方面非常繁瑣,也容易出現人為錯誤,結算成本很高。
針對這種情況,r3聯盟建構了一個銀行同業的聯盟鍊以解決這些問題。利用區塊鍊技術,銀行同業間可以共享一個統一的賬本,省掉對賬的繁瑣工作,交易可以做到接近實時的校驗和确認、自動結算,同時監管者可以利用密碼學的安全保證來審計不可篡改的日志記錄。
r3聯盟将開發corda分布式賬本來實作未來願景。corda的名字來源有兩個,該名字前半部分聽起來像accord(協定),後半部分來自于chord(弦,即圓上兩點間最短的直線)的定義。這個圓就代表r3聯盟中的銀行機構。從目前公開的資料來看,corda具有以下特點:
資料不一定要全局共享,隻有滿足合法需求的一方才能在一個協定裡通路資料;
corda不用一個中心化的控制就可以編排聯盟成員的工作流;
corda對聯盟成員之間的每筆交易形成共識,而不是在聯盟機構的系統層面形成共識;
corda的設計直接支援監管者監督和合規性監控;
交易由參與交易的機構進行驗證,而不會報告與交易無關的機構;
支援不同的共識機制;
明确記錄智能合約與用書面語言撰寫的法律檔案之間的關聯;
采用工業标準的工具來建構corda平台;
不設虛拟貨币。
corda平台注重互操作性和漸進部署,不會将保密資訊釋出給第三方。一個機構可以和對手機構看到一組協定,并可以保證對手機構看到的是同樣内容,同時報送給監管機構。corda包括共識、校驗、獨一性、永恒性和認證等功能。
3.?私有鍊
私有鍊則僅在私有組織使用,區塊鍊上的讀寫權限、參與記賬權限按私有組織規則來制定。私有鍊的應用場景一般是企業内部的應用,如資料庫管理、審計等。也有一些比較特殊的組織情況,比如在政府行業的一些應用:政府的預算和執行,或者政府的行業統計資料,這個一般來說由政府登記,但公衆有權力監督。私有鍊的價值主要是提供安全、可追溯、不可篡改、自動執行的運算平台,可以同時防範來自内部和外部對資料的安全攻擊,這個在傳統的系統是很難做到的。根據資料[1]的解讀,央行發行數字貨币可能就是一種私有鍊。和聯盟鍊類似,私有鍊也是一種許可鍊。
币科學(coin science)公司推出供企業建立私鍊的多鍊(multichain)平台。它提供保護隐私和權限控制的區塊鍊平台,來克服在金融行業裡碰到的推廣區塊鍊技術的障礙。多鍊的目标有以下3個:
1)保證區塊鍊上的活動隻能由選擇的參與者看到;
2)引入機制來控制哪些交易是被允許的交易;
3)提供安全的挖礦機制,同時不需要工作量證明以及與其相關的成本。
多鍊把挖礦權限制在一組實名的礦工範圍,解決了一直困擾私有鍊解決方案中的一方壟斷挖礦過程的問題。它的解決辦法是限制在同一個時間視窗同一礦工能産生的區塊鍊數。不像比特币那樣隻支援一條區塊鍊,多鍊可以友善地配置多條區塊鍊,并讓使用者同時用多條鍊。這樣的話,機構使用者可以讓管理者配置區塊鍊而不需要由區塊鍊專業開發者來做。
多鍊讓使用者在一個配置檔案中配置區塊鍊的所有參數,這些參數包括:
區塊鍊的協定,例如是私有鍊還是像比特币那樣的公共鍊;
目标區塊産生時間,例如1分鐘;
權限,例如所有人能連接配接,隻有一些人能發送或接收交易;
挖礦的不同形式(隻适合于私有鍊);
建立、移除管理者和礦工所需要的共識的程度,以及在建立期不需要強制執行的期限(隻适合于私有鍊);
礦工的報酬,例如每區塊50個币,然後每210?000個區塊減半付酬;
鄰節點連接配接和json rpc api的ip端口,例如8571、8570;
允許的交易類型,例如paytoaddress、paytomultisig、paytoscripthash等;
最大的區塊大小,例如1mb;
每個交易的最大中繼資料(op_return),例如4kb。
多鍊在節點的“握手”連接配接過程如下:
1)每個節點提供它的公共位址,使其他節點能将它的位址包括在允許連接配接的清
單中;
2)每個節點驗證鄰節點的位址是在它的授權連接配接的節點清單裡;
3)每個節點發一個盤問(challenge)消息給其他節點;
4)每個節點發回一個回複盤問資訊的簽名,證明擁有他們的對應公共位址的私鑰;
5)如果雙方對對方回複不滿意,可随時中斷連接配接。
在多鍊裡,所有的權限的授予和回收都是通過包含特殊中繼資料的網絡交易來實作的。找到創世區塊的礦工被自動授予所有的權限,包括管理其他使用者的管理者權限。管理者通過發交易給其他使用者,并在交易的輸出中包含授權使用者的位址以及授權資訊的中繼資料來給其他使用者授予相應的權限。當要改變其他使用者的管理和挖礦權限的時候,一個額外的限制條件是要由現有的管理者投票來決定。這些管理者的投票需要登記在不同的交易中,隻有當足夠的共識形成之後才能通過改變。
多鍊在很多方面的設計是為了使得使用者在私鍊和比特币區塊鍊能夠進行雙向遷移。多鍊是基于比特币核心的一個分叉。所有的對比特币的代碼改變都是本地化的改變。未來比特币的更新功能可以并入多鍊的本地代碼。它基于比特币的協定、交易和區塊鍊架構,隻是在握手協定上有所改變。其他的功能是通過中繼資料,同時改變交易和區塊的驗證規則來實作的。在接口方面與比特币完全相容,所有的新功能通過新的指令來提供。它可以做成普通比特币網絡的一個節點。
多鍊提供一個在企業内快速部署私鍊的解決方案。可以用于如去中心化交易所、資料庫同步、貨币結算、債券發行和p2p交易、消費行業積分獎勵機制等場景。
4.?側鍊
比特币主要是按其設計者中本聰的思想設計的一個虛拟貨币系統,雖然很成功,但是其規則已經相對固定,很難在比特币上做大的修改,因為這些修改會引起分叉,影響現有的比特币使用者。是以,要在比特币平台上做創新或擴充是比較困難的。一般來說,大部分代币系統是通過用比特币平台做基礎,重構一條區塊鍊,然後在上面使用新的規則發新的虛拟貨币。這就是目前大部分代币的做法。然而這些代币系統要從無到有得到人們的價值認可是非常困難的,通常的辦法是與比特币挂鈎,相當于用比特币作為儲備來發行代币,這樣就可以完成代币的貨币價值認可的過程。但随之而來的問題是,如何自動保障代币和比特币的挂鈎呢?因為虛拟貨币的一個特點就是價格波動非常大,一般人都不願意持有波動大、流動性差的代币。一個直接的想法就是通過比特币平台和代币平台的整合來做到實時的挂鈎。
2014年,亞當·貝克(adam back)等作者發表了一篇論文,題目是《enabling blockchain innovations with pegged sidechains》,中文意思是“用與比特币挂鈎的側鍊來提供區塊鍊創新”。其核心觀點是“比特币”的區塊鍊在概念上獨立于作為資産的比特币。他希望通過技術能支援在不同的區塊鍊上轉移資産,這樣新的系統可以重用原先的比特币。他提出一個側鍊(side chains)的概念。所謂側鍊,就是能和比特币區塊鍊互動,并與比特币挂鈎的區塊鍊。貝克列出了側鍊的一些屬性:
一個使用者在一條鍊上的資産被轉移到另一條鍊上後,還應該可以轉移回到原先鍊上的同一使用者名下。
資産轉移應該沒有對手卷款逃跑的風險,也就是不誠實的使用者沒能力阻礙資産轉移的發生。
資産的轉移必須是原子操作,也就是要麼全發生,要麼不發生。不應該出現丢失資産或欺詐性增加資産的情況。
側鍊間應該有防火牆。一條側鍊上的軟體錯誤造成鍊上資産的丢失或增加不會影響另一條鍊上的資産的丢失或增加。
即使在資産的轉移過程中發生區塊鍊的重組,也不應出現問題。任何因區塊鍊重組造成的中斷,應該局限在本條側鍊上而不應影響其他區塊鍊。通常側鍊之間最好能互相獨立,使用者可以從其他鍊條提供資料。隻有當存在明确的側鍊的共識規則時才需要去檢查另一條側鍊來對其驗證。
使用者不應需要跟蹤不經常使用的側鍊。
比特币是大家公認的公共鍊,是很多代币的基礎。但比特币的設計規則決定了比特币有一定的局限,例如平均每10分鐘出一個區塊,每個區塊1mb大小限制,這使得大概每秒才能确認7筆交易,這種交易速度而在很多場景下不能滿足業務需求。是以,通過側鍊來提升效率,擴充比特币功能是一個非常有效的做法。比如,閃電網絡把很多交易放在側鍊,隻有在做清算時才用上主鍊,這樣一來可以極大地提升交易速率,又不會增加主鍊的存儲負擔。
5.?互聯鍊
如圖1-2所示,針對特定領域的應用可能會形成各自垂直領域的區塊鍊,這些區塊鍊會有互聯互通的需求,這樣這些區塊鍊也會通過某種互聯互通協定連接配接起來。與網際網路一樣,這種區塊鍊上的互聯互通就構成互聯鍊,形成區塊鍊全球網絡。
圖1-2 區塊鍊網絡示意圖
1.1.4 區塊鍊價值與應用
根據各個區塊鍊采取的技術組合不同,形成的區塊鍊特點也大不相同。但是需要指出的是,區塊鍊技術是一攬子技術,可以根據業務的需要進行有針對性的組合和創新。
總體來說,去中心化信用機制是區塊鍊技術的核心價值之一,是以區塊鍊本身又被稱為“分布式賬本技術”“去中心化價值網絡”等。自古以來,信用和信任機制就是金融和大部分經濟活動的基礎,随着移動網際網路、大資料、物聯網等資訊技術的廣泛應用,以及工業4.0等新一代工業革命的開啟,網絡空間的信用作為數字化社會的基石的作用顯得更加重要。傳統上,信用機制是中心化的,而中心化的信任和信用機制必然導緻中心化機構成為價值鍊的核心,也容易引發問題。而區塊鍊技術則首先在人類曆史上實作了去中心化的大規模信用機制,在消除中心機構“超級信用”的同時,保證信用機制安全、高效地運作。
具體來看,區塊鍊的颠覆性價值至少包括以下5個方面。
1)簡化流程,提升效率。由于區塊鍊技術是參與方之間通過共享共識的方式建立的公共賬本,形成對網絡狀态的共識,是以區塊鍊中的資訊天然就是參與方認可的、唯一的、可溯源、不可篡改的資訊源,是以原來許多重複驗證的流程和操作就可以簡化,甚至消除,例如銀行間的對賬、結算、清算等,進而大幅提升操作效率。
2)降低交易對手的信用風險。與傳統交易需要信任交易對手不同,區塊鍊技術可以使用智能合約等方式,保證交易多方自動完成相應義務,確定交易安全,進而降低對手的信用風險。
3)減少結算或清算時間。由于參與方的去中心化信任機制,區塊鍊技術可以實作實時的交易結算和清算,實作金融“脫媒”,進而大幅降低結算和清算成本,減少結算和清算時間,提高效率。
4)增加資金流動性,提升資産利用效率。區塊鍊的高效性,以及更短的交易結算和清算時間,使交易中的資金和資産需要鎖定的時間減少,進而可以加速資金和資産的流動,提升價值的流動性。
5)提升透明度和監管效率,避免欺詐行為。由于區塊鍊技術可以更好地将所有交易和智能合約進行實時監控,并且以不可撤銷、不可抵賴、不可篡改方式留存,友善監管機構實作實時監控和監管,也友善參與方實作自動化合規處理,進而提升透明度,避免欺詐行為,更高效地實作監管。
區塊鍊的創新性最大的特點不在于單點技術,而在于一攬子技術的組合,在于系統化的創新,在于思維的創新。而正是由于區塊鍊是非常底層的、系統性的創新,區塊鍊技術和雲計算、大資料、人工智能、量子計算等新興技術一起,被認為是最具變革性的新興技術之一。其中,金融服務領域是即将被颠覆的關鍵領域之一,除此之外,區塊鍊還可以被廣泛應用于物聯網、移動邊緣計算等去中心化控制領域,以及智能化資産和共享經濟(如自動駕駛汽車、智能門鎖+租賃)等一系列潛在可應用的領域。下面我們重點介紹幾類區塊鍊變革金融服務的場景。
(1)金融領域的結算和清算
以金融領域的結算和清算為例,全球每年涉及各種類型的金融交易高達18萬億美元。如圖1-3所示,由于交易雙方互不信任,是以金融機構需要通過處于中心位置的清算結構來完成資産清算和賬本的确認。這類涉及多個交易主體且互不信任的應用場景就非常适合使用區塊鍊技術。原則上,可以直接在金融之間建構聯盟鍊,那麼機構之間隻需要共同維護同一個聯盟區塊鍊,即可實作資産的轉移和交易。
圖1-3 區塊鍊去中心化金融服務示意圖
(2)數字貨币
貨币是一種價值存儲和交換的載體,過去都是由中央法定機構集中發行的。以比特币為例,正是由于其非中心化的信任機制,雖然先後經曆多次交易所倒閉、“虛拟貨币”非法使用被查抄、多個政府禁止使用等危機,但比特币經受住了所有這些考驗,目前仍能穩定運作。比特币的出現和穩定運作,可以說完全颠覆了人們對于貨币的認識。相信區塊鍊技術或者說分布式賬本技術會在數字貨币技術體系中占據重要地位。
(3)跨境支付
另一個區塊鍊可颠覆的金融服務就是跨境支付。通常跨境支付到賬時間長達幾天甚至一個星期。除此之外,跨境支付需要雙邊的使用者都向當地銀行提供大量開戶資料和證明,以配合銀行的合規性要求,參與交易的銀行和中間金融機構還需要定期報告,以實作反洗錢等其他合規性要求。這是一個典型的涉及多方主題的交易場景,區塊鍊技術可以應用在多個環節。區塊鍊技術,一方面可以減少使用者重複送出證明材料,提升效率,另一方面可以更好地實作合規、實時性等,大幅提升金融機構的運作效率,提升監管效率。此外,由于區塊鍊技術可以在銀行等金融機構之間直接通過區塊鍊實作資金和資産的轉移,是以可以去掉高昂的中間費用。此外,還可以結合智能合約等技術,在合約中規定好實施支付的條件,在支付的同時保證義務的實施,提升交易的安
全性。
(4)财産保險
财險是除壽險之外最大的保險。傳統上,财險理賠是使用者的痛點和成本瓶頸,估計理賠成本的占比至少高達保險公司收入的11%。而且由于理賠過程中使用者需要提供大量的資料,客戶體驗往往非常不友好。由于每個理賠可能會涉及大量的手工操作,是以需要占用大量的人力、物力來進行理賠處理。此外,由于保險公司各自為政,财險理賠還需要對抗保險欺詐。而區塊鍊技術則可以很好地緩解财險理賠的使用者痛點,降低理賠成本。首先區塊鍊可以減少客戶提供理賠資料和證明的負擔,如果資産可以智能化地嵌入智能合約,則資産可具備自動啟動理賠流程的能力,甚至可以實作自動化理賠,大幅加速理賠過程,改善客戶體驗,甚至可以在聯盟成員之間進行合理的資料共享,有效地發現和排除保險欺詐。此外,區塊鍊技術的應用可以大幅度減少保險公司對中介代理服務人員的需求,進而大幅度降低營運成本。
此外,區塊鍊還可以廣泛應用在物聯網、邊緣計算、存在性證明等許多領域,讀者可以參考《blockchain:blueprint for a new economy》一書。此處,特别強調的是關于區塊鍊的應用可能層出不窮,關鍵還是要了解區塊鍊技術的内涵和變革原理,深刻體會區塊鍊去中心化的系統化思維,進而可以結合自身對相關行業的了解和需求,創造出新的解決方案、新的價值。
1.2 區塊鍊體驗
區塊鍊仍然是一個抽象概念,為了更好地了解區塊鍊,為本書後續章節提供一個直覺的了解基礎,本節中我們将首先通過交易所購買少量比特币,然後轉移到比特币錢包中,最後通過錢包實作比特币轉賬。
1.2.1 擷取比特币的3種途徑
擷取比特币有3種途徑:一是作為“礦工”挖礦獲得,二是線上“交易所”購買或者線下通過中間人購買,三是作為商家收取比特币。
1.?挖礦
由于比特币的獨特設計,參與者可以通過計算能力競争的方式擷取系統獎勵和支付小費,同時也維護着比特币這個區塊鍊的穩定運轉,我們把這種算力競争行為稱為“挖礦”。比特币價格的一路攀升。挖礦的裝置和算力也一路更新,如圖1-4所示,從最初的cpu挖礦,到第二代的顯示卡挖礦,經曆過短暫的fpga挖礦時代後,迅速進入專用晶片(asic)挖礦時代。
圖1-4 比特币算力增長圖
而進入asic礦機時代之後,礦機晶片的工藝更新速度遠超摩爾定律的演進速度,差不多3個月時間就會進化一代,螞蟻礦機s9是目前新出産的主流挖礦裝置已經采用了16nm工藝制造的專用晶片。
“挖礦”今天已經成為高度專業化的細分産業。為保證收益,挖礦不僅要求有較高的初始投入,以及更低廉擷取“礦機”和電力的管道,還要求有專業的管理能力。如圖1-5所示,這是一座位于我國西南某處的比特币礦場。
随着挖礦專業化程度的提高,礦工往往都是通過聯合挖礦組成礦池的形式來挖礦的,礦池用來協調和分布挖礦的收益,比特币的算力分布目前前幾大礦池都位于中國。
圖1-5 比特币礦場
2.?線上交易所或者線下撮合擷取比特币
其中線上交易所方面,我國的okcoin、火币占據了交易量的絕大多數,兩家交易量占線上交易量的93%以上。線下交易具有更好的匿名性。圖1-6展示的是比特币曆史交易價格,可以看到從最初的不到0.1美元到曆史最高點接近1200美元,再到目前日期(2016年7月25日)的約660美元。中間經曆多次大的價格波動。
圖1-6 比特币曆史價格(對數坐标,美元計價)
3.?比特币作為一種支付的手段
其優勢在于跨境支付等場景下具備非常低的收費,并且非常快捷。在日常小額支付方面,目前在全球也有一定的市場。目前比特币作為一種支付手段,主要在歐美等發達國家和地區有比較廣泛的分布。當然,由于比特币價格的波動性,一般商家都會實時将比特币轉換為當地貨币。比特币在我國不能作為貨币支付手段,不能很友善地在銀行
彙兌。
1.2.2 通過交易所購買比特币
在本節中,我們将通過okcoin這個比特币交易平台購買少量比特币。讀者可以選擇火币、btcc等其他平台購買擷取比特币,基本過程是相似的。大部分主流交易平台也提供移動端app,讀者可以根據情況選用。
首先,我們需要注冊okcoin的賬号,在okcoin中國站(https://www.okcoin.cn/user/register.do)通過郵箱(或手機号)注冊即可。如圖1-7所示,填寫郵箱、密碼,并勾選同意服務條款後,單擊“注冊”按鈕即可完成注冊。
注冊成功後可看到注冊成功的頁面,如圖1-8所示。然後開始身份認證。根據相關條例要求,目前幾乎所有比特币交易平台都會要求真實身份認證。
?? 圖1-7 網站注冊頁面 ? 圖1-8 注冊成功頁面
單擊圖1-8中的“開始身份認證”按鈕,将會進入如圖1-9所示的提示頁面,可以選擇“個人使用者”或者“企業使用者”進行認證。這裡選擇“個人使用者”這個類型進行
認證。
圖1-9 身份認證提示頁面
如圖1-10所示,正确填寫身份資訊并送出就能看到如圖1-11所示的認證成功提示。注意,請使用真實身份資訊,如遇到忘記密碼等情形,可能會需要配合平台方提供相關證明才能進行處理。
圖1-10 個人身份認證頁面
單擊“設定資金密碼”按鈕,就會進入如圖1-12所示的頁面。根據提示,我們可以選擇手機認證或者google驗證的方式來設定二次驗證的方式。
我們選擇google驗證的方式,安裝ios或者android版google authenticator之後,單擊圖1-13中的“設定”按鈕,打開app,掃描左邊的條形碼後就能看到okcoin.cn的動态密碼了。将app中的動态密碼輸入彈出頁面中,就能看到成功提示頁面,同時也可看到資金密碼的“設定”按鈕變為可用。單擊該按鈕将進入如圖1-13所示的資金密碼設定頁面。
圖1-11 個人身份認證成功頁面
圖1-12 二次驗證設定頁面
設定密碼并填寫google驗證的二次驗證密碼(如果前面是手機驗證,則是手機驗證碼),就會看到如圖1-14所示的提示頁面。
單擊“前往充值”按鈕進入充值頁面,如圖1-15所示。我們選擇“快捷充值”方式,也可以選擇“支付寶充值”或者“網銀彙款充值”的方式。
圖1-13 資金密碼設定頁面
圖1-14 資金密碼設定成功提示頁面 圖1-15 充值選擇頁面
選擇“快捷充值”後進入如圖1-16所示的銀行選擇頁面,根據個人情況選擇網銀進行充值。我們在這裡選擇充值100元用于購買小額的比特币,未來仍然可以通過交易所換回現金(當然可能會有少量的轉賬費用和價格波動)。
圖1-16 快捷充值頁面
充值成功之後就可以購買比特币了。我們可以通過“市價單”快速購買比特币,如圖1-17所示。
圖1-17 購買比特币頁面
委托完成後,可以在頁面下方的委托成交記錄中看到交易記錄,如圖1-18所示。可以看到,我們以4389.76元/btc的價格成功地通過交易所購買到了0.02個比特币。
圖1-18 委托成交記錄
1.2.3 比特币錢包和位址
在上節中,我們通過比特币交易平台購買了少量比特币。需要指出的是,交易平台仍然不屬于中心化的服務機構,在交易平台的交易不屬于區塊鍊(比特币)之上的交易,其交易和資金的可靠性需要交易平台的背書。雖然,目前國内營運的幾大交易平台沒有發生大的誠信危機,但從比特币誕生至今也發生過多次交易所欺詐、倒閉和“跑路”事件,讓不少比特币擁有者蒙受了巨額經濟損失。為了進一步體驗比特币和區塊鍊的真實性,我們的體驗之旅繼續。在本節中,我們将在交易平台購買的比特币轉入我們的比特币“錢包”,并可以在區塊鍊上查詢到這筆交易。
比特币錢包是一個形象的概念,比特币本身由一對數字密鑰來決定歸屬,因為擁有私鑰就能擁有對應位址比特币的處置權,可以說這些私鑰就等于比特币,我們通常将管理這些數字密鑰的軟體稱為“錢包”。比特币錢包,根據終端類型可以分為桌面錢包、手機錢包、網頁錢包和硬體錢包。其中硬體錢包(見圖1-19)成本最高,也相對更安全。對于小量比特币來說,我們可以選用網頁錢包這種輕量級的錢包來存儲,而對于較大額度的比特币,則建議使用更進階的錢包存儲方式。
圖1-19 比特币硬體錢包case(來源:choosecase.com)
我們接下來将選擇開源錢包multibit hd桌面版,當然讀者也可以選擇其他優秀的錢包。在https://multibit.org/下載下傳對應版本的檔案後,單擊安裝,并選擇中文作為界面語言。單擊“下一步”按鈕之後,可以進入如到圖1-20所示的頁面。
圖1-20 建立錢包準備頁面
特别需要強調的是,比特币不同于銀行賬戶的概念,錢包是幫助我們管理這些私鑰的,同時也要妥善保管好錢包的恢複密語和備份資料。mulitbit hd錢包使用一種新的密鑰技術,即12個單詞的密語可以恢複這個錢包,如圖1-21所示。是以建議妥善儲存這些單詞,而且要離線儲存。
圖1-21 multibit錢包密語
繼續按照提示完成後續操作,包括設定錢包密碼等。完成之後可以看到如圖1-22所示的建立錢包報告頁面。
圖1-22 建立錢包報告頁面
建立完成後打開multibit,在發送/接受頁面選擇接收,可以看到錢包的比特币位址:1fa97cbn8ebffrknvkffpq4z5c8wnfhtpp,如圖1-23所示。或者單擊位址欄後面第二個圖示,可以顯示二維碼形式的比特币位址,這将是我們從交易平台購買的比特币提現位址。
圖1-23 錢包比特币位址
1.2.4 從交易平台提取比特币到錢包
首先,我們需要在交易平台添加提現位址。登入okcoin後,選擇“資金管理”欄目,然後選擇添加位址,正确填寫錢包中的比特币位址,二次驗證碼,如果需要認證,則勾選“認證位址”複選框,并填寫資金密碼,如圖1-24所示。單擊“确定”後,平台會向使用者發送确認郵件,确認後即可完成提現位址添加。
圖1-24 添加比特币提現位址
最後一步,在“資金管理”欄目中選擇“btc提現”頁籤,如圖1-25所示。提現位址可以選擇上面認證過的提現位址,數量為我們能提現的數量,如0.02btc(20mbtc)。注意,“網絡手續費”為網絡“礦工”維持比特币區塊鍊網絡運轉的交易費獎勵。當然,為了防止垃圾交易攻擊和提高礦工處理交易的積極性,一般都會選擇0.1~0.5mbt不等的小費(小費多少一般根據交易占用的容量大小而定)。
圖1-25 比特币提現頁面
目前國内的平台為了防止被盜,在提現要求送出後,一般都會由人工處理提現申請,包括電話确認提現是本人所操作、确認提現的數量等,确認完成後才會正式處理。等平台将交易發送到比特币網絡,我們就可以在區塊鍊上公開看到這筆交易了。我們可以在multibit上看到,剛開始的時候,multibit上會顯示已收到付款,但是是“未确認”的,如圖1-26所示。原則上,未确認的交易可能存在風險,比如發送者重複花費這部分比特币,在小額支付的場景下,零确認可能也是可以接受的,但是在較大金額的交易中,通常會選擇等待至少6個以上的确認。
圖1-26 未确認收款
1.2.5 比特币交易查詢
經過比較長的時間後,我們可以使用blockchain.info和qukuai.com查詢交易的結果。如圖1-27所示,這筆交易是從一個有92.22788075的btc,位址為1edpd8oynmkzhjvtrjqnwmkexenb7mxjxk中轉出的,剩餘的92.20788075btc轉到一個新位址1kqrkjvjqumrzzq274wskmrwbwbxprknpf。交易在第421416個區塊被鎖定,截至寫作時已經經曆了1063個确認。圖1-28中的“轉入腳本”(也稱為解鎖腳本)和“轉出腳本”(也稱為鎖定腳本)就是比特币的合約腳本,後續我們将會在2.1.3節詳細介紹。
圖1-27 btc提現交易結果
到這裡,我們的區塊鍊(比特币)初次體驗之旅就告一段落了。我們存儲到multibit錢包的比特币可以直接用于支付、捐贈、打賞,也可以通過交易平台的比特币充值回流到平台,再換成人民币等。
1.3 本章小結
本章中,我們首先簡單介紹了區塊鍊的起源和定義,以及區塊鍊的分類、價值和應用。然後我們通過圖示的方式,以比特币這個目前最大的公鍊為例,帶領大家體驗比特币,包括如何擷取比特币,如何通過交易平台購買比特币,以及如何通過錢包存儲比特币,最後将交易平台的比特币提取到錢包中,并在區塊鍊上公開查詢到這筆交易。
毋庸置疑,區塊鍊的發展已經遠遠超出了比特币和數字貨币的範疇,可以說,區塊鍊去中心化的信任機制和價值傳遞機制的變革将極具颠覆性,目前區塊鍊領域的創新才剛剛開始。後續章節讓我們一起繼續關于區塊鍊更深入的探索。
參考資料
[1] 中國人民銀行.中國人民銀行數字貨币研讨會在京召開[j/ol]. 2016, http://www.pbc.gov.cn/goutongjiaoliu/113456/113469/3008070/index.html.
[2] 中國人民銀行.中國人民銀行等五部委釋出《關于防範比特币風險的通知》[j/ol].2013, http://www.pbc.gov.cn/goutongjiaoliu/113456/113469/999049/index.html.
[3] r3. 2016, http://r3cev.com/.
[4] hyperledger. 2016, https://www.hyperledger.org/.blockstream. 2016, http://www.blockstream.com/.
[5] swan m. blockchain: blueprint for a new economy [m]. o'reilly media, inc., 2015.
第2章
區塊鍊基礎
區塊鍊是随着比特币等數字加密貨币的日益普及而逐漸興起的一種全新技術,它提供了一種去中心化的、無需信任積累的信用建立範式,目前已經引起金融行業、科研機構、政府部門和投資公司的高度重視與廣泛關注。區塊鍊技術通過建立一個共同維護且不可被篡改的資料庫來記錄過去的所有交易記錄和曆史資料,所有的資料都是分布式存儲且公開透明的。在這種技術下,任何互不相識的網絡使用者都可以通過合約、點對點記賬、數字加密等方式達成信用共識,而不需要任何的中央信任機構。在這種技術下,我們可以建立數字貨币、數字資産、智能财産以及智能合約等。
通過上一章的介紹,相信大家已經對區塊鍊和比特币有了初步的認識,在本章中,我們将繼續探讨區塊鍊的技術細節。
本章将首先介紹區塊鍊的相關基本概念及其運作原理,然後介紹區塊鍊上可以進行的操作和相關細節,最後再讨論區塊鍊上的交易流程和它的驗證過程。
2.1 區塊鍊技術
區塊鍊本質上是一個對等網絡(peer-to-peer)的分布式賬本資料庫。比特币的底層就采用了區塊鍊的技術架構。區塊鍊本身其實是一串連結的資料區塊,其連結指針是采用密碼學雜湊演算法對區塊頭進行處理所産生的區塊頭哈希值。每一個資料塊中記錄了一組采用雜湊演算法組成的樹狀交易狀态資訊,這樣保證了每個區塊内的交易資料不可篡改,區塊鍊裡連結的區塊也不可篡改。
2.1.1 基本概念
一個完整的區塊鍊系統包含了很多技術,其中有存儲資料的資料區塊及其之上的數字簽名、時間戳等技術,有作為支撐的p2p網絡和維護系統的共識算法,有挖礦和工作量證明機制,有匿名交易機制和比特币錢包,還有鍊齡、utxo、merkle樹、雙花等相關技術概念。正是這些技術,使得區塊鍊在無中心的網絡上形成了運轉不息的引擎,為區塊鍊的交易、驗證、連結等功能提供了源源不斷的動力。
1.?資料區塊
比特币的交易記錄會儲存在資料區塊之中,比特币系統中大約每10分鐘會産生一個區塊,每個資料區塊一般包含區塊頭(header)和區塊體(body)兩部分,如圖2-1所示。
圖2-1 區塊結構
區塊頭封裝了目前的版本号(version)、前一區塊位址(prev-block)、時間戳(timestamp)、随機數(nonce)、目前區塊的目标哈希值(bits)、merkle樹的根值(merkle-root)等資訊。
區塊體中則主要包含交易計數和交易詳情。交易詳情就是比特币系統中的記賬本,每一筆交易都會被永久地記入資料區塊中,而且任何人都可以查詢。區塊體中的merkle樹将會對每一筆交易進行數字簽名,如此可以確定每一筆交易都不可僞造且沒有重複交易。所有的交易将通過merkle樹的hash過程産生一個唯一merkle根值記入區塊頭。關于merkle樹本章後面将詳細介紹。
如果你使用的是比特币核心錢包(bitcoin core),那麼每當你打開用戶端時,區塊資料檔案都會被同步到電腦硬碟中,可以在blocks檔案夾下找到它們。如圖2-2所示的.dat檔案就是我們要找的資料區塊檔案。
我們還可以使用hexdump指令在終端上将資料區塊以十六進制的方式顯示出來。我們可以通過解析這些資料得出交易記錄、區塊大小等基本資訊,是以我們說區塊鍊中的資料是完全公開透明的。如圖2-3所示,我們使用指令hexdump -n 10000 -c blk00000.dat打開了編号為00000的創世區塊(比特币中的第一塊區塊鍊)。
圖2-3 用hexdump指令打開的創世區塊
2.?挖礦與分叉問題
區塊在挖礦過程中産生。所謂挖礦,實際上是窮舉随機數算法,把上個區塊的哈希值加上10分鐘内的全部交易單打包,再加上一個随機數,算出一個256位的字元串哈希值,輸入的随機數nonce使哈希值滿足一定條件就獲得這個區塊的交易記賬權。新産生的區塊需要快速廣播出去,以便其他節點進行對其驗證,以防造假。每個區塊存着上一個區塊的哈希值,可以溯源到源頭,隻有經過驗證後才最終獲得區塊的交易記賬權。比特币系統會讓挖礦的礦工競争記賬權(在主鍊上連結區塊的權利),這個競争機制就是工作量證明機制。挖礦需要付出大量的能源和時間,誰付出的工作量多就能以更大的機率獲得一個區塊的記賬權。擷取記賬權的礦工會将目前區塊連結到前一區塊,形成最新的區塊主鍊,該礦工也會得到系統獎勵的一定數量(2009~2013年每10鐘産生50個比特币,2014年至今每10分鐘産生的比特币将減半成25個)的比特币。所有的區塊連結在一起形成了區塊鍊的主鍊,從創世區塊到目前區塊,在區塊鍊之上的所有資料曆史都可以被追溯和查詢。
需要說明的是,可能會出現不同地區的兩個礦工同時“挖出”兩個新區塊加以連結的情況,這時主鍊上就會出現“分叉”。系統并不會馬上确認哪個區塊不合理,而是約定後續礦工總是選擇累計工作量證明最大的區塊鍊。是以,當主鍊分叉以後,後續區塊的礦工将通過計算和比較,将其區塊連結到目前累計工作量證明最大化的備選鍊上,形成更長的新主鍊,并自動抛棄分叉處的短鍊,進而解決分叉問題。
3.?時間戳和不可篡改性
時間戳是指從格林威治時間1970年01月01日00時00分00秒(中原標準時間1970年01月01日08時00分00秒)起至現在的總秒數,通常是一個字元序列,唯一地辨別某一刻的時間。在比特币系統中,獲得記賬權的節點在連結區塊時需要在區塊頭中加蓋時間戳,用于記錄目前區塊資料的寫入時間。每一個随後區塊中的時間戳都會對前一個時間戳進行增強,形成一個時間遞增的鍊條。時間戳技術本身并沒有多複雜,但在區塊鍊技術中應用時間戳卻是一個重大創新,時間戳為未來基于區塊鍊的網際網路和大資料增加了一個時間次元,使得資料更容易追溯,重制曆史也成為可能。同時,時間戳可以作為存在性證明(proof of existence)的重要參數,它能夠證明特定資料必然在某特定時刻是的确存在的,這保證了區塊鍊資料庫是不可篡改和不可僞造的,這也為區塊鍊技術應用于公證、知識産權注冊等時間敏感領域提供了可能。
4.?分布式資料庫
比特币系統中的區塊就像一個記賬本一樣,記錄了所有比特币的交易資訊,每一個比特币使用者的比特币收支情況都被永久地嵌入了資料區塊中以供别人查詢。這些資料區塊中的交易資料存放在每一個比特币使用者的用戶端節點中,所有的這些節點則組成了比特币及其堅韌的分布式資料庫系統。任何一個節點的資料被破壞都不會影響整個資料庫的正常運轉,因為其他的健康節點中都儲存了完整的資料庫。
5.?utxo交易模式
utxo(unspent transaction outputs)是未花費的交易輸出,它是比特币交易過程中的基本機關。除創世區塊以外,所有區塊中的交易(tx)會存在若幹個輸入(tx_in,也稱資金來源)和若幹個輸出(tx_out,也稱資金去向),創世區塊和後來挖礦産生的區塊中給礦工獎勵的交易沒有輸入,除此之外,在比特币系統中,某筆交易的輸入必須是另一筆交易未被使用的輸出,同時這筆輸入也需要上一筆輸出位址所對應的私鑰進行簽名。目前整個區塊鍊網絡中的utxo會被儲存在每個節點中,隻有滿足了來源于utxo和數字簽名條件的交易才是合法的。是以區塊鍊系統中的新交易并不需要追溯整個交易曆史,就可以确認目前交易是否合法。
6.?哈希函數
哈希函數在比特币系統中也有着重要的應用,區塊鍊中的資料并不隻是原始資料或者交易記錄,還包括它們的哈希函數值,即将原始資料編碼為特定長度的、由數字和字母組成的字元串後,記入區塊鍊。哈希函數有着很多适合存儲區塊鍊資料的
優點:
1)哈希函數處理過的資料是單向性的,通過處理過的輸出值幾乎不可能計算出原始的輸入值;
2)哈希函數處理不同長度的資料所耗費的時間是一緻的,輸出值也是定長的;
3)哈希函數的輸入值即使隻相差一個位元組,輸出值的結果也會迥然不同。比特币系統中最常采用的哈希函數是雙sha256哈希函數,通俗來說就是将不同長度的原始資料用兩次sha256哈希函數進行處理,再輸出長度為256的二進制數字來進行統一的識别和存儲。
總之,哈希函數是比特币系統中的關鍵技術,為比特币系統提供了很多便利。本書後面的章節将會對哈希函數做詳細介紹,此處不贅述。
7.?merkle樹
merkle樹是資料結構中的一種樹,可以是二叉樹,也可以是多叉樹,它具有樹結構的所有特點。如圖2-4所示,比特币區塊鍊系統中的采用的是merkle二叉樹,它的作用主要是快速歸納和校驗區塊資料的完整性,它會将區塊鍊中的資料分組進行哈希運算,向上不斷遞歸運算産生新的哈希節點,最終隻剩下一個merkle根存入區塊頭中,每個哈希節點總是包含兩個相鄰的資料塊或其哈希值。在比特币系統中使用merkle樹有諸多優點:首先是極大地提高了區塊鍊的運作效率和可擴充性,使得區塊頭隻需包含根哈希值而不必封裝所有底層資料,這使得哈希運算可以高效地運作在智能手機甚至物聯網裝置上;其次是merkle樹可支援“簡化支付驗證協定”(spv),即在不運作完整區塊鍊網絡節點的情況下,也能夠對交易資料進行檢驗。是以,在區塊鍊中使用merkle樹這種資料結構是非常具有意義的。本書後面的章節将會對merkle樹做詳細介紹。
8.?雙重支付
雙重支付問題又稱為“雙花”問題,即利用貨币的數字特性用“同一筆錢”完成兩次或者多次支付。在傳統的金融和貨币體系中,由于金錢貨币是實體實體,具有客觀唯一存在的屬性,是以可以避免雙重支付的情況。但在其他的電子貨币系統中,則需要可信的第三方管理機構提供保證。區塊鍊技術則在去中心化的系統中不借助任何第三方機構而隻通過分布式節點之間的互相驗證和共識機制,有效地解決了雙重支付問題,在資訊傳輸的同時完成了價值轉移。區塊鍊技術通過區塊連結形成的時間戳技術加上驗證比特币是否滿足utxo(未花費交易)和數字簽名,有效避免了雙重支付的問題。如果有人用同一筆utxo構造了兩筆付給不同交易方的交易,則比特币用戶端隻會轉發最先被偵聽到的那個。礦工會選擇将那筆交易包入未來區塊,當其中一筆交易所在的區塊後有5個連結的區塊,這筆交易已經得到了6次确認。在比特币區塊鍊上,6次确認後可以基本上保證比特币不被雙花。
9.?p2p網絡
p2p網絡(peer-to-peer network,對等網絡)是一種在對等者(peer)之間配置設定任務和工作負載的分布式應用架構,是對等計算模型在應用層形成的一種組網或網絡形式。是以,從字面上,p2p可以了解為對等計算或對等網絡,p2p網絡示意圖如圖2-5所示。國内的迅雷軟體采用的就是p2p技術。區塊鍊系統是建立在ip通信協定和分布式網絡的基礎上的,它不依靠傳統的電路交換,而是建立于網絡通信之上,完全通過網際網路去交換資訊。網絡中所有的節點具有同等的地位,不存在任何特殊化的中心節點和層級結構,每個節點均會承擔網絡路由、驗證資料區塊等功能。網絡的節點根據存儲資料量的不同可以分為全節點和輕量級節點,全節點存儲了從創世區塊以來的所有區塊鍊資料(比特币網絡現在大約有幾十gb,且還在不斷增長中)。全節點的優點是進行資料校驗時不需要依靠别的節點,僅依靠自身就可以完成校驗更新等操作,缺點是硬體成本較高。輕量級節點隻需要存儲部分資料資訊,當需要别的資料時可以通過簡易支付驗證方式(simplif?ied payment verif?ication,spv)向鄰近節點請求所需資料來完成驗證更新。
圖2-5 p2p網絡
10.?加密算法
除了雜湊演算法以外,比特币中還存在一種為交易加密的非對稱加密算法(橢圓曲線加密算法)。非對稱加密算法指的就是存在一對數學相關的密鑰,使用其中一個密鑰進行加密的資料資訊,隻有使用另一個密鑰才能對該資訊進行解密。這對密鑰中,對外公開的密鑰叫作公鑰,不公開的密鑰就叫作私鑰。打個比方來說,公鑰就像銀行的賬戶,私鑰就像是該賬戶的密碼或者賬戶所有者的簽名。區塊鍊之上的有效交易有一個用于交易發起方私鑰簽名有效的數字簽名,而該交易的簽名可以通過使用交易發起方的公鑰進行驗證。公鑰可以通過算法從私鑰中計算得出,但私鑰卻不能從公鑰中推出。比特币系統中使用的就是一種非常典型的非對稱加密算法——橢圓曲線加密算法(ecc)。
如圖2-6所示,比特币系統一般從作業系統底層的一個密碼學安全的随機源中取出一個256位随機數作為私鑰,私鑰總數為2256個,是以很難通過周遊所有可能的私鑰得出與公鑰的對應的私鑰。使用者使用的私鑰還會通過sha256和base58轉換成易書寫和識别的50位長度的私鑰,公鑰則首先由私鑰和secp256k1橢圓曲線算法生成65位元組長度的随機數。一般情況下,比特币錢包的位址也由公鑰所生成,其生成過程為首先将公鑰進行sha256和ripemd160雙哈希運算,并生成20位元組長度的摘要結果(即hash160結果),這個将作為比特币位址的主體(body)資訊,再在前面加上版本字首0x00,在後面添加4個位元組的位址校驗碼。位址校驗碼通過對摘要結果進行兩次sha256運算,取哈希值的前4位産生。最後通過base58處理把連在一起的版本字首、主體資訊和校驗碼轉換成可以容易讓人識别的比特币字元位址。
圖2-6 比特币非對稱加密機制
11.?數字簽名
數字簽名就是在資訊後面加上另一段内容,作為發送者的證明并且證明資訊沒有被篡改。一般是發送者将資訊用雜湊演算法處理得出一個哈希值,然後用私鑰對該哈希值進行加密,得出一個簽名。然後發送者再将資訊和簽名一起發送給接收者。接收者使用發送者的公鑰對簽名進行解密,還原出哈希值,再通過雜湊演算法來驗證資訊的哈希值和解密簽名還原出來的哈希值是否一緻,進而可以鑒定資訊是否來自發送者或驗證資訊是否被篡改。
12.?比特币的隐私模型
傳統隐私模型(見圖2-7)為交易的參與者提供了一定程度的隐私保護,第三方不會交出交易者的個人身份資訊,公衆所得知的隻是某個人将一定數量的貨币發給了另外一個人,但是難以将該交易與某個特定身份的人聯系起來,公衆無法知道這人到底是誰。這同股票交易所釋出的資訊是類似的,每一手股票買賣發生的時間、交易量是記錄在案且可供查詢的,但是交易雙方的身份資訊卻不予透露。但實際上,交易雙方的個人資訊是存放在第三方機構,是以一定程度上交易參與者的隐私資訊還是會有洩露的風險。
圖2-7 傳統隐私模型
在比特币的隐私模型(見圖2-8)中,所有的交易不需要第三方的操控,也不需要提供任何身份資訊,隻需要提供比特币的位址就可以跟任何人完成一次準匿名的交易。在一定程度上,交易不可追溯到交易者本身,是以比特币上的交易可以在一定程度上擺脫監管。但通過對區塊鍊上交易的位址以及交易額做關聯分析,也可以獲得有關交易者的蛛絲馬迹。是以,比特币的交易還不是純粹的匿名交易機制,而是準匿名(pseudo-anonymous)交易機制。
圖2-8 比特币的隐私模型
2.1.2 架構與特點
1.?架構簡介
目前大多數區塊鍊技術的應用與比特币類似,大部分是在比特币架構基礎上的擴充。目前,區塊鍊技術在金融行業得到廣泛關注,被認為可以用來從最底層重構傳統金融業現有的it基礎架構。我們将區塊鍊的基礎架構分為三層來進行講解,如圖2-9所示。
圖2-9 區塊鍊基礎架構
首先,在網絡層之上,區塊鍊是建立在ip通信協定和對等網絡的基礎上的一個分布式系統,和傳統帶中心的分布式系統不一樣,它不依靠中心化的伺服器節點來轉發消息,而是每一個節點都參與消息的轉發。是以p2p網絡比傳統網絡具有更高的安全性,任何一個節點被攻擊都不會影響整個網絡,所有的節點都儲存着整個系統的狀态資訊。
其次,在資料層面上,區塊鍊就是一個隻可追加、不可更改的分布式資料庫系統,是一個分布式賬本。如果是公開的區塊鍊,也就是公有鍊,那麼這個賬本可以被任何人在任何地方進行查詢,完全公開透明。在區塊鍊網絡中,節點通過使用共識算法來維持網絡中賬本資料庫的一緻性。同時采用密碼學的簽名和雜湊演算法來確定這個資料庫不可篡改,不能作僞,并且可追溯。例如,在比特币系統中,隻有在控制了51%的網絡算力時才有可能對區塊鍊進行重組以修改賬本資訊。由于比特币系統的設計者中本聰在系統設計中巧妙地加入了帶有經濟激勵的挖礦工作量證明(pow)機制,使得即使擁有網絡51%以上算力的人也不會損害其自身利益而發起對網絡的攻擊。是以,比特币系統自上線7年多來一直持續不斷地正常運作,沒有出現過因為比特币系統本身缺陷而造成的安全故障。
再次,在應用層面,我們可以用區塊鍊代替傳統的登記、清算系統。2016年6月22日,波士頓咨詢公司指出,到2030年,全球支付業務收入預計将會達到8070億美元。基于區塊鍊技術的彙兌和支付屬于區塊鍊的1.0應用版,其安全性、交易時間、成本都會對傳統支付業務進行颠覆式改進。花旗銀行也明确指出,到2020年,如果各大金融機構都使用區塊鍊技術,每年能夠節省超過200億美元的成本。國信證券分析報告指出,通過區塊鍊的點對點分布式的時間戳伺服器來生成依照時間前後排列并加以記錄的電子交易證明,可以解決雙重支付問題,進而帶來結算成本趨零的可能性。根據德國銀行的一份引用波士頓咨詢的研究報告,歐洲銀行的it成本支出平均占據銀行整體運作成本的16%[5]。一個重要原因就是傳統銀行在賬本的維護、支付交易的結算和清算方面的架構過于複雜,維護成本過高。
在應用方面,區塊鍊平台能夠提供程式設計環境讓使用者編寫智能合約。通過智能合約,可以把業務規則轉化成在區塊鍊平台自動執行的合約,該合約的執行不依賴可信任的第三方,也不受人為的幹預。理論上隻要一旦部署,一旦符合合約執行的條件就會自動執行。執行結果也可以在區塊鍊上供公開檢查,提供了合約的公正性和透明性。是以,智能合約可以降低合約建立、執行和仲裁中所涉及的中間機構成本。區塊鍊的智能合約奠定了未來建立可程式設計貨币、可程式設計金融,甚至是可程式設計社會的基礎。
2.?架構特點
區塊鍊具有去中心化、可靠資料庫、開源可程式設計、集體維護、安全可信、交易準匿名性等特點。如果一個系統不具有以上特征,将不能被視為基于區塊鍊技術的應用。
(1)去中心化
區塊鍊資料的存儲、傳輸、驗證等過程均基于分布式的系統結構,整個網絡中不依賴一個沒有中心化的硬體或管理機構。作為區塊鍊一種部署模式,公共鍊網絡中所有參與的節點都可以具有同等的權利和義務。
(2)可靠資料庫
區塊鍊系統的資料庫采用分布式存儲,任一參與節點都可以擁有一份完整的資料庫拷貝。除非能控制系統中超過一半以上的算力,否則在節點上對資料庫的修改都将是無效的。參與系統的節點越多,資料庫的安全性就越高。并且區塊鍊資料的存儲還帶有時間戳,進而為資料添加了時間次元,具有極高的可追溯性。
(3)開源可程式設計
區塊鍊系統通常是開源的,代碼高度透明公共鍊的資料和程式對所有人公開,任何人都可以通過接口查詢系統中的資料。并且區塊鍊平台還提供靈活的腳本代碼系統,支援使用者建立進階的智能合約、貨币和去中心化應用。例如,以太坊(ethereum)平台即提供了圖靈完備的腳本語言,供使用者來建構任何可以精确定義的智能合約或交易類型。關于以太坊的更多内容請參考2.2節。
(4)集體維護
系統中的資料塊由整個系統中所有具有記賬功能的節點來共同維護,任一節點的損壞或失去都不會影響整個系統的運作。
(5)安全可信
區塊鍊技術采用非對稱密碼學原理對交易進行簽名,使得交易不能被僞造;同時利用雜湊演算法保證交易資料不能被輕易篡改,最後借助分布式系統各節點的工作量證明等共識算法形成強大的算力來抵禦破壞者的攻擊,保證區塊鍊中的區塊以及區塊内的交易資料不可篡改和不可僞造,是以具有極高的安全性。
(6)準匿名性
區塊鍊系統采用與使用者公鑰挂鈎的位址來做使用者辨別,不需要傳統的基于pki(public key infrastructure)的第三方認證中心(certif?icate authority,ca)頒發數字證書來确認身份。通過在全網節點運作共識算法,建立網絡中誠實節點對全網狀态的共識,間接地建立了節點間的信任。使用者隻需要公開位址,不需要公開真實身份,而且同一個使用者可以不斷變換位址。是以,在區塊鍊上的交易不和使用者真實身份挂鈎,隻是和使用者的位址挂鈎,具有交易的準匿名性。。
區塊鍊技術的核心優勢是去中心化,能夠通過運用雜湊演算法、數字簽名、時間戳、分布式共識和經濟激勵等手段,在節點無需互相信任的分布式系統中建立信用,實作點對點交易和協作,進而為中心化機構普遍存在的高成本、低效率和資料存儲不安全等問題提供了解決方案。近年來,伴随着國内外研究機構對區塊鍊技術的研究與應用,區塊鍊的應用前景受到各行各業的高度重視,被認為是繼大型機、個人電腦、網際網路、移動/社交網絡之後計算範式的第5次颠覆式創新,是人類信用進化史上繼血親信用、貴金屬信用、央行紙币信用之後的第4個裡程碑。它被視為下一代雲計算的雛形,有望徹底重塑人類社會活動形态,并實作從現在的資訊網際網路到價值網際網路的轉變。
2.1.3 區塊鍊運作的核心技術
1.?區塊鍊的連結
顧名思義,區塊鍊即由一個個區塊組成的鍊。每個區塊分為區塊頭和區塊體(含交易資料)兩個部分。區塊頭包括用來實作區塊連結的前一區塊的哈希(prevhash)值(又稱散列值)和用于計算挖礦難度的随機數(nonce)。前一區塊的哈希值實際是上一個區塊頭部的哈希值,而計算随機數規則決定了哪個礦工可以獲得記錄區塊的權力。區塊鍊的連結模型如圖2-10所示。
圖2-10 區塊鍊的連結模型
2.?共識機制
區塊鍊是伴随比特币誕生的,是比特币的基礎技術架構。可以将區塊鍊了解為一個基于網際網路的去中心化記賬系統。類似比特币這樣的去中心化數字貨币系統,要求在沒有中心節點的情況下保證各個誠實節點記賬的一緻性,就需要區塊鍊來完成。是以區塊鍊技術的核心是在沒有中心控制的情況下,在互相沒有信任基礎的個體之間就交易的合法性等達成共識的共識機制。
區塊鍊的共識機制目前主要有4類:pow、pos、dpos、分布式一緻性算法。
(1)pow
pow(工作量證明),也就是像比特币的挖礦機制,礦工通過把網絡尚未記錄的現有交易打包到一個區塊,然後不斷周遊嘗試來尋找一個随機數,使得新區塊加上随機數的哈希值滿足一定的難度條件,例如前面10位是零。找到滿足條件的随機數,就相當于确定了區塊鍊最新的一個區塊,也相當于獲得了區塊鍊的本輪記賬權。礦工把滿足挖礦難度條件的區塊在網絡中廣播出去,全網其他節點在驗證該區塊滿足挖礦難度條件,同時區塊裡的交易資料符合協定規範後,将各自把該區塊連結到自己版本的區塊鍊上,進而在全網形成對目前網絡狀态的共識。
優點:完全去中心化,節點自由進出,避免了建立和維護中心化信用機構的成本。隻要網絡破壞者的算力不超過網絡總算力的50%,網絡的交易狀态就能達成一緻。
缺點:目前比特币挖礦造成大量的資源浪費;另外挖礦的激勵機制也造成礦池算力的高度集中,背離了當初去中心化設計的初衷。更大的問題是pow機制的共識達成的周期較長,每秒隻能最多做7筆交易,不适合商業應用。
(2)pos
pos權益證明,要求節點提供擁有一定數量的代币證明來擷取競争區塊鍊記賬權的一種分布式共識機制。如果單純依靠代币餘額來決定記賬者必然使得富有者勝出,導緻記賬權的中心化,降低共識的公正性,是以不同的pos機制在權益證明的基礎上,采用不同方式來增加記賬權的随機性來避免中心化。例如點點币(peercoin)pos機制中,擁有最多鍊齡長的比特币獲得記賬權的幾率就越大。nxt和blackcoin則采用一個公式來預測下一個記賬的節點。擁有多的代币被選為記賬節點的機率就會大。未來以太坊也會從目前的pow機制轉換到pos機制,從目前看到的資料看,以太坊的pos機制将采用節點下賭注來賭下一個區塊,賭中者有額外以太币獎,賭不中者會被扣以太币的方式來達成下一區塊的共識。
優點:在一定程度上縮短了共識達成的時間,降低了pow機制的資源浪費。
缺點:破壞者對網絡攻擊的成本低,網絡的安全性有待驗證。另外擁有代币數量大的節點獲得記賬權的幾率更大,會使得網絡的共識受少數富裕賬戶支配,進而失去公正性。
(3)dpos
dpos(股份授權證明)機制,類似于董事會投票。比特股(bitshares)采用的pos機制是持股者投票選出一定數量的見證人,每個見證人按序有兩秒的權限時間生成區塊,若見證人在給定的時間片不能生成區塊,區塊生成權限交給下一個時間片對應的見證人。持股人可以随時通過投票更換這些見證人。dpos的這種設計使得區塊的生成更為快速,也更加節能。
優點:大幅縮小參與驗證和記賬節點的數量,可以達到秒級的共識驗證。
缺點:選舉固定數量的見證人作為記賬候選人有可能不适合于完全去中心化的場景。另外在網絡節點數少的場景,選舉的見證人的代表性也不強。
(4)分布式一緻性算法
分布式一緻性算法是基于傳統的分布式一緻性技術。其中有分為解決拜占庭将軍問題的拜占庭容錯算法,如pbft。另外解決非拜占庭問題的分布式一緻性算法(pasox、raft),詳細見本書第5章的共識算法。該類算法目前是聯盟鍊和私有鍊鍊場景中常用的共識機制。
優點:實作秒級的快速共識機制,保證一緻性。
缺點:去中心化程度不如公有鍊上的共識機制;更适合多方參與的多中心商業模式。
3.?解鎖腳本
腳本是區塊鍊上實作自動驗證、自動執行合約的重要技術。每一筆交易的每一項輸出嚴格意義上并不是指向一個位址,而是指向一個腳本。腳本類似一套規則,它限制着接收方怎樣才能花掉這個輸出上鎖定的資産。
交易的合法性驗證也依賴于腳本。目前它依賴于兩類腳本:鎖定腳本與解鎖腳本。鎖定腳本是在輸出交易上加上的條件,通過一段腳本語言來實作,位于交易的輸出。解鎖腳本與鎖定腳本相對應,隻有滿足鎖定腳本要求的條件,才能花掉這個腳本上對應的資産,位于交易的輸入。通過腳本語言可以表達很多靈活的條件。解釋腳本是通過類似我們程式設計領域裡的“虛拟機”,它分布式運作在區塊鍊網絡裡的每一個節點。
比特币的腳本目前常用的主要分為兩種,一種是普通的p2pkh(pay-to-public-key-hash),即支付給公鑰的哈希位址,接收方隻需要使用位址對應的私鑰對該輸出進行簽名,即可花掉該輸出。另一種是p2sh(pay-to-script-hash),即支付腳本的哈希。以多重簽名來舉例,它要求該輸出要有n把私鑰中的m把私鑰(m≤n)同時簽名才能花掉該資産,它類似于現實生活中需要多把鑰匙才能同時打開的保險櫃,或是多人簽名才能使條約生效一樣,隻是它是自動執行。
比如在比特币中,p2pkh的腳本規則如下:
pubkey script: op_dup op_hash160 <pubkeyhash> op_equalverify op_checksig
signature script: <sig> <pubkey>
p2sh的腳本規則如下:
pubkey script: op_hash160 <hash160(redeemscript)> op_equal
signature script: <sig> [sig] [sig...] <redeemscript>
在上述的兩種腳本規則裡,pubkey script代表鎖定腳本,signature script代表解鎖腳本。op_開頭的單詞是相關的腳本指令,也是“虛拟機”所能解析的指令。這些指令規則根據pubkey script的不同來進行劃分,它也決定解鎖腳本的規則。
比特币中的腳本機制相對簡單,隻是一個基于堆棧式的、解釋相關op指令的引擎,能夠解析的腳本規則并不是太多,不能實作很複雜的邏輯。但它為區塊鍊可程式設計提供了一個原型,後續一些可程式設計區塊鍊項目其實是基于腳本的原理發展起來的,比如以太坊就是深入增強了腳本機制,腳本機制裡不再單單是簡單的op指令,而是支援腳本的一套圖靈完備語言,該腳本語言可以通過“虛拟機”去執行。以太坊實作了一個支援圖靈完備腳本語言的區塊鍊平台。
腳本的機制對于區塊鍊來說非常重要,它類似于區塊鍊技術提供的一個擴充接口,任何人都可以基于這個接口開發基于區塊鍊技術的應用,比如智能合約的功能。腳本機制也讓區塊鍊技術作為一項底層協定成為可能。未來很多基于區塊鍊的颠覆性應用,都有可能通過區塊鍊的腳本語言來完成。
4.?交易規則
區塊鍊的交易就是構成區塊的基本機關,也是區塊鍊負責記錄的實際有效内容。一個區塊鍊交易可以是一次轉賬,也可以是智能合約的部署等其他事務。
就比特币而言,交易即指一次支付轉賬。其交易規則如下:
1)交易的輸入和輸出不能為空。
2)對交易的每個輸入,如果其對應的utxo輸出能在目前交易池中找到,則拒絕該交易。因為目前交易池是未被記錄在區塊鍊中的交易,而交易的每個輸入,應該來自确認的utxo。如果在目前交易池中找到,那就是雙花交易。
3)交易中的每個輸入,其對應的輸出必須是utxo。
4)每個輸入的解鎖腳本(unlocking script)必須和相應輸出的鎖定腳本(locking script)共同驗證交易的合規性。
對于以太坊來說,交易還可能是智能合約的部署。交易規則就确定了符合一定文法規則的合約才能被部署在區塊鍊上。
5.?交易優先級
區塊鍊交易的優先級由區塊鍊協定規則決定。對于比特币而言,交易被區塊包含的優先次序由交易廣播到網絡上的時間和交易額的大小決定。随着交易廣播到網絡上的時間的增長,交易的鍊齡增加,交易的優先級就被提高,最終會被區塊包含。對于以太坊而言,交易的優先級還與交易的釋出者願意支付的交易費用有關,釋出者願意支付的交易費用越高,交易被包含進區塊的優先級就越高。
6.?merkle證明
merkle證明的原始應用是比特币系統(bitcoin),它是由中本聰(satoshi nakamoto)在2009年描述并且創造的。比特币區塊鍊使用了merkle證明,為的是将交易存儲在每一個區塊中。使得交易不能被篡改,同時也容易驗證交易是否包含在一個特定區塊中,merkle樹說明詳見4.2節。比特币的merkle證明樹如圖2-11所示。
圖2-11 比特币的merkle證明樹
merkle樹的一個重要使用場景就是快速支付驗證,也就是中本聰描述的“簡化支付驗證”(spv)的概念:輕量級節點(light client)不用下載下傳每一筆交易以及每一個區塊,可以僅下載下傳鍊的區塊頭,每個區塊中僅包含下述5項内容,資料塊大小為80位元組。
上一區塊頭的哈希值
時間戳
挖礦難度值
工作量證明随機數(nonce)
包含該區塊交易的merkle樹的根哈希
如果一個輕用戶端希望确定一筆交易的狀态,它可以簡單地要求一個merkle證明,顯示出一個在merkle樹特定的交易,其根是在主鍊(main chain,非分叉鍊)上的區塊頭。
merkle證明可以讓區塊鍊得到更廣闊的應用,但比特币的輕客戶有其局限性。雖然可以證明包含的交易,但無法證明任何目前的狀态(例如:數字資産的持有,名稱注冊,金融合約的狀态等)。一筆交易影響的确切性質(precise nature)可以取決于此前的幾筆交易,而這些交易本身則依賴于更為前面的交易,是以最終你需要驗證整個鍊上的每一筆交易。為了解決這個問題,以太坊進行了更進一步的創新。
以太坊的每一個區塊頭中并非隻包含一棵merkle樹,而是包含了3棵merkle樹(見圖2-12),分别對應了以下3種對象:
交易(transactions)
收據(receipts,基本上,它是展示每一筆交易影響的資料條)
狀态(state)
圖2-12 以太坊的merkle證明樹
這三棵樹允許輕用戶端輕松地進行并核實以下類型的查詢答案:
1)這筆交易被包含在特定的區塊中了嗎?
2)告訴我這個位址在過去30天中,發出x類型事件的所有執行個體(例如,一個衆籌合約完成了它的目标)。
3)目前我的賬戶餘額是多少?
4)這個賬戶是否存在?
5)假裝在這個合約中運作這筆交易,它的輸出會是什麼?
第一種是由交易樹(transaction tree)來處理的;第3和第4種則是由狀态樹(state tree)負責處理,第2種則由收據樹(receipt tree)處理。計算前4個查詢任務是相當簡單的。在伺服器簡單地找到對象,擷取梅克爾分支,并通過分支來回複輕用戶端。第5種查詢任務同樣也是由狀态樹處理。
7.?rlp
rlp(recursive length pref?ix,遞歸長度字首編碼)是ethereum中對象序列化的一個主要編碼方式,其目的是對任意嵌套的二進制資料的序列進行編碼。
以太坊中的所有資料都以“遞歸長度字首編碼”(recursive length pref?ix encoding,rlp)形式存儲,這種編碼格式将任意長度和次元的字元串構成的數組串連接配接成字元串。例如,['dog', 'cat']被串接(以位元組數組格式)為[130,67,100,111,103,67,99,97,116];其基本的思想是把資料類型和長度編碼成一個單獨的位元組放在實際資料的前面(例如‘dog’的位元組數組編碼為[100,111,103],于是串接後就成了[67,100,111,103])。注意rlp編碼正如其名字表示的一樣,是遞歸的;當rlp編碼一個數組時,實際上是在對每一個元素的rlp編碼級聯成的字元串編碼。需要進一步提請注意的是,以太坊中所有資料都是整數;是以,如果有任何的以一個或多個0位元組開頭的哈希或者位址,這些0位元組應該在計算出現問題的時候去除。以太坊中沒有串接資料結構包含任何以0開頭的數值。整數以大端基礎(big endian)256格式存儲(例如32767位元組數組格式為[127,255])。
2.1.4 區塊鍊交易流程
以比特币的交易為例,區塊鍊的交易并不是通常意義上的一手交錢一手交貨的交易,而是轉賬。如果每一筆轉賬都需要構造一筆交易資料會比較笨拙,為了使得價值易于組合與分割,比特币的交易被設計為可以納入多個輸入和輸出,即一筆交易可以轉賬給多個人。從生成到在網絡中傳播,再到通過工作量證明、整個網絡節點驗證,最終記錄到區塊鍊,就是區塊鍊交易的整個生命周期。整個區塊鍊交易流程如圖2-13所示。
圖2-13 區塊鍊交易流程
交易的生成。所有者a利用他的私鑰對前一次交易和下一位所有者b簽署一個數字簽名,并将這個簽名附加在這枚貨币的末尾,制作成交易單。
交易的傳播。a将交易單廣播至全網,每個節點都将收到的交易資訊納入一個區塊中。
工作量證明。每個節點通過相當于解一道數學題的工作量證明機制,進而獲得建立新區塊的權力,并争取得到數字貨币的獎勵。
整個網絡節點驗證。當一個節點找到解時,它就向全網廣播該區塊記錄的所有蓋時間戳交易,并由全網其他節點核對。
記錄到區塊鍊。全網其他節點核對該區塊記賬的正确性,沒有錯誤後他們将在該合法區塊之後競争下一個區塊,這樣就形成了一個合法記賬的區塊鍊。
2.2 以太坊
2.2.1 什麼是以太坊
自2008年比特币出現以來,數字貨币的存在已經漸漸為一部分人所接受。人們也積極展開了基于比特币的商業應用的思考與開發。但是随着應用的擴充,人們發現比特币的設計隻适合虛拟貨币場景,由于存在着非圖靈完備性、缺少儲存狀态的賬戶概念,以及pow挖礦機制所帶來的資源浪費和效率問題,在很多區塊鍊應用場景下并不适用。人們需要一個新的基于區塊鍊的具有圖靈完備性、高效共識機制、支援更多應用場景的智能合約開發平台。以太坊在這種情況下應運而生。
以太坊的目的是對腳本、競争币和鍊上元協定(on-chain meta-protocol)等概念進行整合和提高,使得開發者能夠建立任意的基于共識的、可擴充的、标準化的、圖靈完備的、易于開發和協同的應用。
以太坊是一個通用的全球性區塊鍊,可以管理金融和非金融類型應用的狀态。以太坊的新穎在于其神奇的計算機網絡,它促成了一種新型的軟體應用,真正的去中心化應用。将信任邏輯嵌入小程式裡,運作在區塊鍊上。而與比特币相比,以太坊建立了一種新的密碼學技術基礎架構,在其上開發應用更加容易,并對輕用戶端友好,同時允許應用共享一個可行的經濟環境和可靠的區塊鍊安全。以太坊在全球範圍内激發了商業和社會創新,為前所未有的去中心化應用打開了大門。從長遠來看,它所帶來的改變将影響全球經濟和控制結構。
以太坊是個平台和程式設計語言,包括數字貨币以太币(ether),以及用來建構和釋出分布式應用的以太腳本(etherscript)。
以太币和著名的數字貨币比特币有非常多的相似之處。兩者均為數字貨币且無法僞造,都以去中心化的方式運作來保證貨币供應不被某一方所控制。以太坊的另一半重要特性是提供一個完整的程式設計語言環境,有時也被叫作以太腳本。我們都知道,程式設計語言是人類用來控制計算機工作的。是以,用任何程式設計語言寫好的指令對計算機來說都是準确無誤沒有歧義的。也就是說,計算機如何執行一段代碼是沒有二義性的。在同樣的條件下,一段代碼總是會按照既定的步驟執行。這種特性正是人類現行法律與合約所缺失的。是以,有了以太腳本之後,我們就可以制定沒有二義性的合約了。
從最底層角度來看,以太坊是一個多層的、基于密碼學的開源技術協定。它的不同功能子產品通過設計進行了全面的整合,作為一個整體,它是一個建立和部署去中心化應用的綜合平台。雖然,以太坊看起來像由多個互相聯系的開源項目構成的混合體,但是它的進化一直被明确目标所引導,是以各個元件可以協同地組裝在一起。
同時,以太坊也是區塊鍊與智能合約的完美結合,是智能合約的完整解決方案,被設計成了一個通用的去中心化平台,擁有一套完整的、可以擴充其功能的工具,在p2p網絡、加密、httpclient等技術的支援下實作了一個類似于比特币的區塊鍊。它通過工作量證明機制實作共識,由礦工挖礦,通過對新的網絡協定的制定實作對區塊鍊的同步等操作。不同于比特币的是,在以太坊上可以任意編寫智能合約,通過智能合約實作強大的功能,實作去中心化應用的開發。在以太坊上部署的智能合約運作在以太坊特有的虛拟機上,通過以太坊虛拟機和rpc接口與底層區塊鍊進行互動。
以太坊的總體系統架構如圖2-14所示。
圖2-14 以太坊總體架構
2.2.2 以太坊技術
1.?以太坊核心概念
(1)以太坊虛拟機
以太坊虛拟機(evm)是以太坊中智能合約的運作環境。它是以太坊項目中的另一個主要創新。有人說evm“位于區塊鍊之上”,實際上它是由許多互相連接配接的計算機組成的。任何人都可以上傳程式,并讓這些程式自動執行,同時保證現在和所有以前的每個程式的狀态總是公共可見的。這些程式運作在區塊鍊上,嚴格地按照evm定義的方式繼續執行。是以任何人都可以為所有權、交易格式和狀态轉換函數建立商業邏輯。
(2)賬戶
以太坊中有兩類賬戶,它們共用同一個位址空間。外部賬戶,該類賬戶被公鑰-私鑰對控制。合約賬戶,該類賬戶被存儲在賬戶中的代碼控制。外部賬戶的位址是由公鑰決定的,合約賬戶的位址是在建立合約時由合約建立者的位址和該位址發出過的交易數量計算得到。兩類賬戶的唯一差別是:外部賬戶沒有代碼,人們可以通過建立和簽名一筆交易從一個外部賬戶發送消息。每當合約賬戶收到一條消息,合約内部的代碼就會被激活,允許它對内部存儲進行讀取、寫入、發送其他消息和建立合約。
以太坊的賬戶包含4個部分:①随機數,用于确定每筆交易隻能被處理一次的計數器;②賬戶目前的以太币餘額;③賬戶的合約代碼(如果有的話);④賬戶的存儲(預設為空)。
(3)消息
以太坊的消息在某種程度上類似于比特币的交易,但是兩者之間存在3點重要的不同。
1)以太坊的消息可以由外部實體或者合約建立,然而比特币的交易隻能從外部建立。
2)以太坊消息可以選擇包含資料。
3)如果以太坊消息的接收者是合約賬戶,可以選擇進行回應,這意味着以太坊消息也包含函數概念。
(4)交易
以太坊中“交易”是指存儲從外部賬戶發出的消息的簽名資料包。交易包含消息的接收者、用于确認發送者的簽名、以太币賬戶餘額、要發送的資料和被稱為startgas和gasprice的兩個數值。為了防止代碼出現指數型爆炸和無限循環,每筆交易需要對執行代碼所引發的計算步驟做出限制。startgas就是通過需要支付的燃料來對計算步驟進行限制,gasprice是每一計算步驟需要支付礦工的燃料的價格。
(5)gas
以太坊上的每筆交易都會被收取一定數量的燃料gas,設定gas的目的是限制交易執行所需的工作量,同時為交易的執行支付費用。當evm執行交易時,gas将按照特定規則被逐漸消耗。gas價格由交易建立者設定,發送賬戶需要預付的交易費用= gasprice * gas amount。如果執行結束還有gas剩餘,這些gas将被返還給發送賬戶。無論執行到什麼位置,一旦gas被耗盡就會觸發一個out-of-gas異常。同時,目前調用幀所做的所有狀态修改都将被復原。
(6)存儲、主存和棧
每個賬戶都有一塊永久的記憶體區域,被稱為存儲,其形式為key-value,key和value的長度均為256位。在合約裡,不能周遊賬戶的存儲。相對于主存和棧,存儲的讀操作開銷較大,修改存儲甚至更多。一個合約隻能對它自己的存儲進行讀寫。
第二個記憶體區被稱為主存。合約執行每次消息調用時都有一塊新的被清除過的主存。主存可以按位元組尋址,但是讀寫的最小機關為32位元組。操作主存的開銷随着主存的增長而變大。
evm不是基于寄存器的,而是基于棧的虛拟機。是以所有的計算都在一個稱為棧的區域内執行。棧最大有1024個元素,每個元素有256位。對棧的通路隻限于其頂端,允許複制最頂端的16個元素中的一個到棧頂,或者是交換棧頂元素和下面16個元素中的一個。所有其他操作都隻能取最頂的一個或幾個元素,并把結果壓在棧頂。當然可以把棧裡的元素放到存儲或者主存中。但是無法隻通路棧裡指定深度的那個元素,在那之前必須把指定深度之上的所有元素都從棧中移除才行。
(7)指令集
evm的指令集被刻意保持在最小規模,以盡可能避免可能導緻共識問題的錯誤。所有的指令都是針對256位這個基本的資料機關進行的操作,具備常用的算術、位、邏輯和比較操作,也可以進行條件和無條件跳轉。此外,合約可以通路目前區塊的相關屬性,比如它的編号和時間戳。
(8)消息調用
合約可以通過消息調用的方式來調用其他合約,或者發送以太币到非合約賬戶。消息調用和交易非常類似,它們都有一個源,一個目标,資料負載,以太币,gas和傳回資料。事實上每個交易都可以被認為是一個頂層消息調用,這個消息調用會依次産生更多的消息調用。
一個合約可以決定剩餘gas的配置設定。比如内部消息調用時使用多少gas,或者期望保留多少gas。如果在内部消息調用時發生了out-of-gas異常或者其他異常,合約将會得到通知,一個錯誤碼被壓入棧中。這種情況隻是内部消息調用的gas耗盡。在solidity中,這種情況下發起調用的合約預設會觸發一個人工異常,這個異常會列印出調用棧。
就像之前說過的,被調用的合約(發起調用的合約也一樣)會擁有嶄新的主存,并能夠通路調用的負載。調用負載被存儲在一個單獨的被稱為calldata的區域。調用執行結束後,傳回資料将被存放在調用方預先配置設定好的一塊記憶體中。調用層數被限制為1024。是以對于更加複雜的操作,我們應該使用循環而不是遞歸。
(9)代碼調用和庫
以太坊中存在一種特殊類型的消息調用,被稱為callcode。它跟消息調用幾乎完全一樣,隻是加載來自目标位址的代碼将在發起調用的合約上下文中運作。這意味着一個合約可以在運作時從另外一個位址動态加載代碼。存儲,目前位址和餘額都指向發起調用的合約,隻有代碼是從被調用位址擷取的。這使得solidity可以實作“庫”。可複用的庫代碼可以應用在一個合約的存儲上,可以用來實作複雜的資料結構,進而使智能合約更加的強大。
2.?以太坊的狀态轉換
以太坊的狀态轉換是指在一個交易(tx)發生時,以太坊從一個正确狀态(s)轉變到下一個正确狀态(s’)的轉換過程,如圖2-15所示。對于交易而言,為了防止代碼的指數型爆炸和無限循環,每筆交易需要對執行代碼所引發的計算步驟做出限制。startgas就是限制,gasprice是每一計算步驟需要支付礦工的費用價格。
圖2-15 以太坊狀态轉換
以太坊的狀态轉換函數為apply(s, tx) -> s’,可以定義如下:
1)檢查交易的格式是否正确,簽名是否有效,以及随機數是否與發送者賬戶的随機數比對。如否,傳回錯誤。
2)計算交易費用fee = startgas * gasprice,并從簽名中确定發送者的位址。從發送者的賬戶中減去交易費用和增加發送者的随機數。如果賬戶餘額不足,傳回錯誤。
3)設定初值gas = startgas,并根據交易中的位元組數減去一定量的燃料值。
4)從發送者的賬戶轉移價值到接收者賬戶。如果接收賬戶還不存在,建立此賬戶。如果接收賬戶是一個合約,運作合約的代碼,直到代碼運作結束或者燃料用完。
5)如果因為發送者賬戶沒有足夠的費用或者代碼執行耗盡燃料導緻價值轉移失敗,恢複原來的狀态,但是還需要支付交易費用,交易費用加至礦工賬戶。
6)若代碼執行成功,将所有剩餘的燃料歸還給發送者,消耗掉的燃料作為交易費用發送給礦工。
例如,假設一個合約的代碼如下:
if !contract.storage[msg.data[0]]:
contract.storage[msg.data[0]] = msg.data[1]
需要注意的是,在現實中合約代碼是用底層以太坊虛拟機(evm)代碼寫成的。上面的合約是用我們的進階語言serpent語言寫成的,它可以被編譯成evm代碼。假設合約存儲器開始時是空的,一個值為10以太、燃料為2000、燃料價格為0.001以太并且兩個資料字段值為[2,'charlie']的交易發送後,狀态轉換函數的處理過程如下:
1)檢查交易是否有效,格式是否正确。
2)檢查交易發送者是否至少有2000×0.001=2個以太币。如果有,從發送者賬戶中減去2個以太币。
3)初始設定gas=2000,假設交易長為170位元組,每位元組的費用是5,減去850,是以還剩1150。
4)從發送者賬戶減去10個以太币,為合約賬戶增加10個以太币。
5)運作代碼。在這個合約中,運作代碼很簡單:它檢查合約存儲器索引為2處是否已使用,注意到它未被使用,然後将其值置為charlie。假設這消耗了187機關的燃料,于是剩餘的燃料為1150-187 = 963。
6)向發送者的賬戶增加963×0.001=0.963個以太币,傳回最終狀态。
如果沒有合約接收交易,那麼所有的交易費用就等于gasprice×交易的位元組長度,交易的資料就與交易費用無關了。另外,需要注意的是,合約發起的消息可以對它們産生的計算配置設定燃料限額,如果子計算的燃料用完了,它隻恢複到消息發出時的狀态。是以,就像交易一樣,合約也可以通過對它産生的子計算設定嚴格的限制,保護它們的計算資源。
3.?以太坊用戶端
為了測試各種語言對以太坊的支援,同時使更多的人能夠參與以太坊的開發及使用,目前有4種語言編寫的以太坊的用戶端。它們分别是用go語言實作的用戶端geth,用c++實作的用戶端eth,用python語言實作的用戶端pyethapp和用java實作的用戶端ethereumj。其中,go語言版是以太坊官方一直維護并推薦使用的用戶端。
以太坊包括一個專用的用戶端浏覽器,使得使用者可以運作各種各樣的去中心化應用(dapp),釋出智能合約。這一浏覽器被稱為mist,它易于使用,降低了使用者使用門檻,進而使得dapp和智能合約能夠被大量使用者使用。它的作用等同于浏覽器之于網際網路或者itunes之于數字化内容下載下傳。mist由特殊的安全層、密鑰管理、去中心化賬戶管理和與區塊鍊相關的元件幾部分組成。這一切使得mist成為普通使用者運作或者管理區塊鍊去中心化應用不可或缺的工具,普通使用者不需要了解技術方面的東西。
從使用者體驗角度而言,可以在mist中使用dapp,就像通過正常浏覽器與網站進行互動一樣。例如,一個純dapp(例如預測市場augur)就可以在以太坊mist浏覽器中運作。當然,這些服務也可以通過一個正常浏覽器以更加傳統的web 2.0的方式實作。
2.2.3 以太坊智能合約
1.?智能合約
智能合約是由尼克薩博提出的理念,幾乎與網際網路同齡。但是由于缺少可信的執行環境,智能合約并沒有被應用到實際産業中。自從比特币誕生後,人們認識到比特币的底層技術區塊鍊天生可以為智能合約提供可信的執行環境,以太坊首先實作了區塊鍊和智能合約的完整契合。
以太坊是内置有圖靈完備程式設計語言的區塊鍊,通過建立抽象的基礎層,使得任何人都能夠建立合約和去中心化應用,并在其中設立他們自由定義的所有權規則、交易方式和狀态轉換函數。建立一個代币的主體架構隻需要兩行代碼就可以實作,諸如貨币和信譽系統等其他協定隻需要不到20行代碼就可以實作。智能合約就像能在以太坊的平台上建立的包含價值而且隻有滿足某些條件才能打開的加密箱子,并且因為圖靈完備性、價值意識(value-awareness)、區塊鍊意識(blockchain-awareness)和記錄多狀态所增加的功能而比比特币腳本所能提供的智能合約強大得多。
2.?開發語言
以太坊的軟體開發語言是其最大特性之一,因為對區塊鍊進行程式設計是一項首要目标。以太坊具有4種專用語言:serpent(受python啟發)、solidity(受javascript啟發)、mutan(受go啟發)和lll(受lisp啟發),都是為面向合約程式設計而從底層開始設計的語言。
作為以太坊的進階程式設計語言,serpent的設計非常類似于python。它被設計為最大可能地簡潔和簡單,将低級語言的高效優勢與程式設計風格中的易用性相結合。
solidity是以太坊的首選語言,它内置了serpent的所有特性,但是文法類似于javascript。solidity充分利用了現有數以百萬程式員已掌握javascript這一現狀,降低了學習門檻,易于被掌握和使用。
以太坊區塊鍊的另一關鍵特征是它的“圖靈完備性”,這保證了以太坊可以解決所有的計算問題。更加準确地說,它是“半”圖靈完備的,因為它是通過對計算量設定上限,它避免了完全圖靈完備語言存在的無法停機問題。此外,因為以太坊的語言是為區塊鍊專門設計的,它有賬戶的概念,使得它在交易的可視化和查詢賬戶狀态方面提供了實時性。這是一個受人歡迎的功能,但對比特币而言實作起來具有一定的挑戰。在比特币上,由于隻有utxo而沒有賬戶的概念,我們需要導入區塊鍊資料庫,解析所有的交易,并為了抽取出在區塊鍊上的某個使用者的交易情況而查詢交易。而用以太坊,我們則可以在實時的區塊鍊上,根據一個位址情況實時檢視目前賬戶情況和交易狀态。
3.?代碼執行
以太坊合約的代碼是使用低級的基于堆棧的位元組碼的語言寫成的,被稱為“以太坊虛拟機代碼”或者“evm代碼”。代碼由一系列位元組構成,每一個位元組代表一種操作。一般而言,代碼執行是無限循環,程式計數器每增加一(初始值為零)就執行一次操作,直到代碼執行完畢或者遇到錯誤、stop或者return指令。操作可以通路3種存儲資料的空間:
1)堆棧,一種後進先出的資料存儲,入棧、出棧的基本機關為32位元組。
2)記憶體,可無限擴充的位元組隊列。
3)合約的長期存儲,一個密鑰/數值的存儲,其中密鑰和數值都是32位元組大小。與計算結束即重置的堆棧和記憶體不同,存儲内容将長期保持。
代碼可以像通路區塊頭資料一樣通路數值、發送和接收到的消息中的資料,代碼還可以傳回資料的位元組隊列作為輸出。evm代碼的正式執行模型非常簡單。當以太坊虛拟機運作時,它的完整的計算狀态可以由元組(block_state,transaction,message,code,memory,stack,pc,gas)來定義,這裡block_state是包含所有賬戶餘額和存儲的全局狀态。每輪執行時,通過調出代碼的第pc(程式計數器)個位元組,每個指令如何影響元組都有定義。例如,add将兩個元素出棧并将它們的和入棧,将gas減1并将pc加1;stack将頂部的兩個元素出棧,并将第2個元素插入由第1個元素定義的合約存儲位置,同樣減少最多200的gas值,并将pc加1。雖然有許多方法通過即時編譯去優化以太坊,但以太坊的基礎性的實施可以用幾百行代碼實作。
2.2.4 以太坊的去中心化應用
1.?什麼是dapp
一個dapp是由智能合約和用戶端代碼構成的。智能合約就像加密的包含價值的箱子。隻有當特定條件被滿足時它才被打開,它封裝了一些邏輯、規則、處理步驟或者雙方間的協定。
從架構角度而言,dapp非常類似于傳統的web應用。主要差別是:在傳統web應用中,用戶端有javascript代碼,由使用者在自己的浏覽器中執行;伺服器端的代碼由主機運作。但是在一個dapp中,它的智能邏輯運作在區塊鍊上,用戶端代碼運作在特殊浏覽器mist裡面。
2.?應用舉例
正如蘋果電腦公司的app store給衆多公司和個人提供了極佳的商業機會一樣,以太坊這樣的平台上一定會出現類似“憤怒的小鳥”這樣的成功範例,對于it導向的創業公司和個人,這是一個廣闊的空間。下面舉幾個例子,看看這個空間中正在孕育的項目。
augur(www.augur.net),一個正在開發去中心化預測系統。augur在英文中的意思是“預言家”,使用者可以在這個應用上對各種事件打賭并下注,例如希拉裡會不會赢得2016年美國的大選;2016年中國的gdp增長會不會超過7%;上證指數2020年之前會不會超10000點,等等。對于參與者而言,如果預測正确,則将獲得經濟上的回報;而對于社會整體而言,augur便成了一個群體智慧的收集器,在它上面的下注資訊反映了人們對于未來某事件發生可能性的最佳評估。當你打開搜尋引擎,輸入“×××會不會赢得2020年美國的大選”的時候,可能搜到這樣的結果:“augur:該事件發生的可能性為46.6%”。
maker(www.makerdao.com),一個正在開發中的金融類去中心化自治組織。maker是一個去中心化自治組織(decentralized autonomous organization,dao),它維護一系列用于金融服務的合約軟體(即智能合約),其中的一個軟體是貸券信貸系統(the dai credit system)。貸券信貸系統是一個通過抵押進行借貸的應用,當使用者在區塊鍊上擁有衆多資産時,一個必然的需求就是,在不出售資産的情況下通過抵押借款獲得資金,類似于房屋抵押貸款。
weifund,一個正在開發中的去中心化衆籌平台。這個衆籌平台的好處是資金不需要第三方托管,而是由程式托管,是以能夠確定資金100%安全。如果在限定時間内衆籌項目的資助超過預定目标,則程式将資金發送給創業者;如果目标未達到,則将資金退回給衆籌參與者。
boardroom,一個正在開發中的dao管理平台。去中心化自治組織與傳統公司一樣,也可以有股份的概念,通常就是dao的代币,這些代币又可以有投票權。與上一個例子中的weifund結合,可以發生有趣的事:如果衆籌募資的目标達到,則weifund可以将資金發送給boardroom,并将該衆籌項目的參與者組成dao。如此一來,這些參與者便可以通過投票來控制資金的具體使用,而不是簡單地将資金一次性發放給創業者,這樣便大大避免了來自創業者的道德風險。
ujo music,一個音樂版權管理平台,測試版。ujo music作為音樂版權管理平台,可以直接在歌曲的創作者與消費者之間建立直接的聯系,進而省去了中間商的費用提成。更進一步,歌手甚至可以将自己的作品在weifund上進行ipo上市,如此一來,持有歌手代币的投資者就會分得歌手今後歌曲的銷售收入,他們是歌手天然的鐵杆粉絲團。幫助歌手推廣音樂也不僅僅出于經濟動機,同時也是出于情感上的支援,試想在周傑倫默默無聞的時候就持有他的代币,該是一件多麼令粉絲感到驕傲的事。同時代币也是歌手與粉絲團之間互動的媒介,例如歌手可以讓持有代币的粉絲優先購買演唱會的門票,如此,粉絲經濟會更加紅火。
貸券(decentralized autonomous insured bond)簡稱dai或者dai bond,是一種可轉讓的、彼此等價可互換的“加密債券”,它流通于信貸系統中,使用者無需事先認證,同時又是低風險的。貸券的發行人(借款方)将在以太坊區塊鍊上的以太等數字加密資産作為抵押品來發行貸券,再将這些貸券在市場上賣給貸券持有人以換回流動性好的資産。貸券的持有人之是以買入貸券是為了賺取收益,或者是為了将貸券當作價值穩定的加密貨币來流通使用。
2.3 基于區塊鍊的電子貨币
2.3.1 元币平台
元币(metacoin)單詞字首“meta-”意為“在其中”。是以元币是衍生于現有加密貨币體系之上,更專注于業務系統的代币種類。
(1)彩币
彩币(colored coins)是一種建立在比特币資料塊上的進階衍生應用協定。彩币建立在p2p網絡之上,具有去中心化的所有優勢,可以用來進行任何虛拟财産和現實資産的交易,并且比傳統金融交易更加快捷和友善,更重要的是,它沒有手續費。彩币由一種特殊的錢包負責管理,進行記錄和闡釋附加在彩币中的中繼資料。通過這種錢包,使用者可以通過添加标簽,将一定量的比特币轉化為彩币,使其具有特殊意義。而這種特殊意義,往往使其價值提升。相關中繼資料是由使用者來定義的,并且使比特币轉化為彩币。彩币一旦定義,便可以進行買賣、分銷、積累或者分紅。當然,也可以去顔色化,回歸比特币。
(2)萬事達币
萬事達币(mastercoin)釋出于2013年6月24日,是建立在比特币協定之上的二代币,旨在幫助使用者建立并交易加密貨币以及其他類型的智能合同。萬事達币不僅僅是一種代币,更像是一個去中心化的财産交易、合同簽署、使用者貨币、智能财産代币等的平台。打個形象的比方,就像http運作在tcp層之上一樣,萬事達币是工作于比特币交易層之上的應用層協定。
(3)合約币
合約币(counterparty)是另一種建立在比特塊鍊基礎之上的協定層,它把比特币塊鍊當成可信的時間戳服務和可信的資訊釋出證明。合約币在比特币中添加額外的資訊記錄,以此強化比特币的交易。合約币實作了使用者貨币、可交易代币、财經工具、去中心化交易等一些功能。
2.3.2 代币
盡管部分代币沒有使用比特币,而是直接在區塊鍊的基礎上全新建立的,但事實上,大多數代币都是比特币衍生出來的。其中最值得一提的是萊特币(litecoin),而萊特币本身又被作為代币的母币,衍生出更多新的代币。以同樣方式誕生的還有代鍊這個概念。如同字面意思,兩者的差別在于,代币用作貨币目的,而代鍊用于非貨币目的。本節介紹内容屬于代币範疇。
代币的建立過程非常簡單。2011年8月,通過修改比特币的一些參數,加速貨币的産生速度,世界上第一種代币ixcoin誕生。自此以後,代币發展極其迅速。到2016年,已經有超過600種代币釋出,并且,大部分是萊特币的變種。它們與比特币的差異主要存在于貨币政策、工作量證明和共識機制以及所引入的新特性方面。其實,大多數代币之間差異甚微,甚至,有些代币的産生,隻是發明者為了增加收入的一種手段,并不具備研究價值。但是,這些代币中還是有一些比較明顯的例外,或者說有非常重要的創新值得我們學習。那麼如何衡量一種代币呢?通常從如下幾個方面思考:是否具有重大創新?是否能因為與比特币的差別從比特币吸引過來使用者?是否針對市場或者應用?是否能吸引足夠多的礦工來抵禦聯合作弊?财經和市場名額上,又可以從資本量、預計使用者量、日交易量和流通性上來評價一種代币。
1.?通過貨币參數修改而建立的代币
比特币有一些貨币參數來預防貨币通貨膨脹。比特币限制為2100萬主要貨币單元的貨币總量。許多代币修改了比特币的主要參數,進而實作了新的不同貨币政策。最具代表性的有如下幾種。
(1)萊特币
要介紹萊特币(litecoin),就不得不提tenebrix,它是第一個應用不同工作量證明算法的加密貨币。此算法被稱作scrypt,是專門為預防暴力破解密碼而設計的。tenebrix并沒有成功,卻為萊特币的誕生奠定了基礎。作為主要的成功代币,萊特币的核心是繼承了scrypt算法,修改了塊産生時間,使之從比特币的10分鐘縮短到2.5分鐘,進而成為一種輕型代币。擁護者們認為,相對于比特币,萊特币更适合零售業的交易。更重要的是,以萊特币為基礎,後來延伸出來上百種類似的代币。
提示: 塊産生時間,2.5分鐘;總貨币量,8400萬(2140年);共識算法,工作量證明scrypt;市值, 96 961萬元(2016年年中)。
(2)狗狗币
作為萊特币的變種,狗狗币(dogecoin)釋出于2013年12月。狗狗币的貨币政策特點是發行迅速,貨币配額巨大。
提示: 塊産生時間,1分鐘;總貨币量,10?000億(2016年年中);共識算法,工作量證明scrypt;市值,8201萬元(2016年年中)。
(3)運輸币
運輸币(freicoin)釋出于2012年7月,是一種滞期代币。其儲存額具有負利率。運輸币不鼓勵持有,它收取4.5%的年費來促進消費。運輸币之是以出名,是因為它所采用的貨币政策與比特币的通貨緊縮政策完全相反。作為代币,運輸币并沒有取得成功,卻成為了供代币借鑒的多樣性貨币政策的重要一員。
提示: 塊産生時間,10分鐘;總貨币量,1億(2140年);共識算法,工作量證明sha256;市值,13萬美元(2014年年中)。
2.?基于共識機制的創新而建立的代币
比特币的共識機制是建立在用sha256算法加密的作業證據基礎之上的。從此,共識機制的創新進入了一個狂熱的發展階段。一些代币采用了各式各樣的算法,如:scrypt、scrypt-n、skein,groestl、sha3、x11、blake等。還有的代币同時采用其中的幾種算法。2013年,作為工作量證明的替代品,權益證明(proof of stake)被提出,為許多新代币的誕生提供了基礎。權益證明系統中,擁有者可以将貨币像股票一樣抵押生息。它在某種程度上類似于存款證明,持有者可以保留所持貨币的一部分,同時,以利息支付和交易費的形式賺取投資回報。
(1)點點币
點點币(peercoin)誕生于2012年8月,是第一種綜合使用工作量證明和權益證明機制來發行新币的代币。
提示: 塊産生時間,10分鐘;總貨币量,不限;共識算法,工作量證明機制與權益證明結合;市值,5825萬元(2016年年中)。
(2)myriad
myriad發行于2014年2月,具有複合算法的特性,是第一個同時包含5種算法的加密貨币。與比特币隻能使用sha256礦機挖礦不一樣,myriad相容sha256、scrypt等算法,同時相容gpu及cpu挖礦。myriad對共識攻擊具有更強的抵抗力,這是因為隻有多種挖礦算法同時被攻擊時才會受到攻擊。
提示: 塊産生時間,平均0.5分鐘;總貨币量,20億(2024年);共識算法,工作量證明機制與多算法共用;市值, 12萬美元(2014年年中)。
(3)黑币
發行于2014年2月的黑币(blackcoin)使用權益證明作為共識算法。黑币走進人們的視野是因為它引入了多池這種可以根據利潤差異在不同代币間自動切換的挖礦池。
提示: 塊産生時間,1分鐘;總貨币量,不限;共識算法,權益證明;市值,1125萬元(2016年年中)。
(4)維理币
維理币(vericoin)發行于2014年5月。它使用權益證明共識機制,并且采用根據市場供求動态調節的利率。同時,維理币也是第一種可以自動兌換成比特币的代币。
提示: 塊産生時間,1分鐘;總貨币量,不限;共識算法,權益證明;市值,390萬元(2016年年中)。
(5)未币
未币(nxt)徹底抛棄工作量證明,而僅僅使用權益證明共識機制,故nxt是一種全新的加密貨币,是以不應稱之為比特币的變種或者代币。nxt具有許多先進特性,如:名稱注冊、去中心化的财産交易、整合分散的安全消息、股票代表等。是以,nxt常被稱作下一代數字加密貨币。
提示: 塊産生時間,1分鐘;總貨币量,不限;共識算法,權益證明;市值,3816萬元(2016年年中)。
3.?通過雙目标挖礦機制創新而建立的代币
比特币的工作量證明算法僅僅具有一個目的,那就是確定比特鍊的安全。盡管相對于傳統支付系統的安全,這點挖礦開銷并不高,但是被指是一種浪費。雙目标工作量證明算法在産生工作量證明來滿足安全的同時,解決一個具體的問題。但這樣做也帶來一定的風險。在向貨币安全添加額外功能的同時,也影響了其供求曲線。
(1)質數币
質數币(primecoin)發行于2013年7月,據稱其“具有數學價值”。這種币嘗試把虛拟貨币中無目的的算法所浪費的資源利用起來。質數币的工作量證明機制有一定的科學價值。是以從某種意義上講,質數币的礦工在挖礦的同時也促進了科學的進步。質數币是沒有總量上限的。但是,質數币的産生速度很慢,這與大質數的計算困難特性有關。
提示: 塊産生時間,1分鐘;總貨币量,不限;共識算法,工作量證明和質數鍊發現;市值,533萬元(2016年年中)。
(2)治療币
治療币(curecoin)發行于2013年5月。它将sha256工作量證明算法與蛋白質折疊研究相結合,強調對生命科學和醫學的貢獻。其中蛋白質折疊是蛋白質生化反應的計算密集型模拟,目的在于發現新藥。
提示: 塊産生時間,10分鐘;總貨币量,不限;共識算法,工作量證明和蛋白質折疊研究;市值,194萬元(2016年年中)。
(3)格雷德币
格雷德币(gridcoin)發行于2013年10月。它支援基于scrypt的工作量證明算法。格雷德币通過伯克利的分布式計算項目(boinc)進行包羅萬象的科學探索,隻有在挖礦的同時運作boinc才能夠獲得較多的币。boinc是一種科研網格計算的開放協定,允許參與者貢獻自己的空餘計算力來進行一系列科研計算。是以,不同于質數币和治療币那樣目的單一,格雷德币可以通過boinc這個計算平台幫助進行各種科學研究,包括尋找外星人、計算rna結果等。
提示: 塊産生時間,2.5分鐘;總貨币量,不限;共識算法,工作量證明和boinc網格計算;市值,2858萬元(2016年年中)。
4.?注重隐私性的代币
比特币常常被誤認為具有隐私性。事實上,通過大資料分析,關聯身份和比特币位址相對容易,進而通過連接配接彼此的位址,解析一個人的比特币消費習慣。是以,一些代币專注于強隐私性,試圖直接解決此問題。
(1)零币
零币(zerocoin)作為比特币之上保持隐私性的元币協定,是針對隐私性的第一個嘗試。它誕生于2013年,僅是一種針對數字貨币隐私性的理論方法。應用零币理論的代币叫作zerocash,至今仍在研究階段,并未發行。
(2)cryptonote
cryptonote公布于2012年12月,是一種為匿名數字貨币提供基礎的參考實踐代币。它的設計初衷就是為了不同的實踐并且内置定時重置機制,這使得它本身不太可能成為一種貨币。cryptonote的出名還來自于它不是比特币的翻版,而是全新從頭設計實踐的加密貨币。基于cryptonote衍生出來的數字貨币還有bytecoin(bcn)、aeon(aeon)、boolberry(bbr)、ducknote(duck)、fantomcoin(fcn)、monero(xmr)、monetaverde(mcn)和quazarcoin(qcn)等。更詳細的cryptonote衍生代币請見網頁https://en.wikipedia.org/wiki/file:forks-tree-f?ixed.png。
(3)百特币
百特币(bytecoin)發行于2012年7月,是第一個衍生自cryptonote的代币(比cryptonote本身的發行早)。百特币基于cryptonote技術,提供一種可行的匿名貨币。它從cryptonote繼承了環簽名、非連接配接交易和抵制區塊鍊分析的隐私性。之後,百特币還進行了包括多簽名交易、安全更新等方面的改進。
提示: 塊産生時間,2分鐘;總貨币量,1.84億元;共識算法,工作量證明cryptonight;市值, 2909萬元(2016年年中)。
(4)門羅币
門羅币(monero,xmr)是cryptonote的另外一種應用。相比于百特币,它具有略微平坦的發行曲線,在前4年就發行了80%。它繼承了cryptonote所有的隐私性。
提示: 塊産生時間,1分鐘;總貨币量,1844萬元;共識算法,工作量證明cryptonight;市值,2622萬元(2016年年中)。
(5)黑暗币
黑暗币(darkcoin)釋出于2014年1月。作為匿名貨币,它對所有交易采用一種叫作darksend的再混合協定。另外,黑暗币的出名還在于它在工作量證明算法中使用了11種不同的哈希函數(blake、bmw、groestl、jh、keccak、skein、luffa、cubehash、shavite、simd、echo)。
提示: 塊産生時間,2.5分鐘;總貨币量,2200萬(2016年年中);共識算法,作業證明多算法共用;市值,1900萬美元(2014年年中)。
2.3.3 貨币的未來
加密貨币的未來整體來說比比特币更加繁榮。它們在比特币的基礎上引進了全新的去中心化的組織形式和共識機制,并由此衍生出了數以百計的不可思議的創新。這将影響與經濟相關的衆多部門,如:财政、經濟、貨币、中央銀行、企業管理等。
許多之前需要中心機構來執行授權或信用控制的活動,現在可以去中心化了。區塊鍊和共識機制的發明,在根除權力集中、腐敗、監管俘獲的同時,必将大幅度削減組織和大規模系統協調的費用。
2.4 本章小結
本章主要介紹了區塊鍊技術的基礎知識。首先,介紹了區塊鍊技術,這是這本書的基礎,包括區塊鍊技術的基本概念、架構與特點,核心技術及交易流程。在這個基礎之上,我們詳細介紹了區塊鍊技術最成功的應用——比特币,包括概念、原理、及隐私模型。之後,我們介紹了區塊鍊的另外一個重要應用——以太坊。以太坊是區塊鍊技術發展的一個重要的方向,是區塊鍊技術未來的一部分。我們介紹了以太坊技術、以太坊智能合約、以太坊去中心化應用、以太坊發展的現狀及未來。最後,我們分析了現有的流行的電子貨币各自的優缺點。
[1] 袁勇,王飛躍.區塊鍊技術發展現狀與展望[j].自動化學報,2016,42(4).
[2] antonopoulos a m. mastering bitcoin: unlocking digital crypto-currencies[j]. oreilly media inc usa, 2015.
[3] swan m. blockchain: blueprint for a new economy[m]. o'reilly, 2015.
[4] 以太坊(ethereum):下一代智能合約和去中心化應用平台.以太坊愛好者,2016-06-23.
[5] deutsch bank, banking & technology snapshot, db research, 20 december 2012.
[6] vatalik buterin, merkling-in-ethereum, https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/.