區塊鏈技術的起源(區塊鏈技術的演進:從比特幣的起源、發展和技術創新說起)
很多人談論區塊鏈,而真正對其基礎做好研究的,為數不多。不從根本上去理解這一技術,便很難在商業上有所建樹。
比特幣是區塊鏈技術的源起。我們應該回到原點,探究比特幣深層的結構和肌理,理清其演進中的沖突和創新。
探求區塊鏈技術本質,是從業者必走的路。
1 起源
區塊鏈技術起源于比特幣。
比特幣是一種點對點的電子現金系統,由中本聰(Satoshi Nakamoto)于2008年設計開發。這是一個分布式系統,其價值流通媒介是虛擬的加密數字貨幣:比特幣。
比特幣的發行和流通不受任一中心機構控制,只要有算力并接入互聯網,就可以參與其中。其代碼開源,由全世界極客組成的比特幣核心錢包(Bitcoin Core)的核心開發者在GitHub(源代碼托管倉庫)上共同維護更新,在GitHub上有4萬多人收藏,代碼被分叉(fork)24 000多次。
比特幣是密碼學和經濟學的集大成者,讓人類第一次掌握了自己的數據主權,將打破現有互聯網巨頭壟斷的數據孤島狀態。所有的數據都在區塊鏈上,這將會是一個全人類共同維護的分式數據庫。
比特幣所采用的關鍵技術其實可以追溯到20世紀70年代。
1977年,羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出非對稱加密算法RSA。非對稱加密思想第一次落實到具體算法。
1980年,拉爾夫·默克爾(Ralph Merkle)提出默克爾(Merkle)數據結構,該數據結構廣泛應用于文件系統和點對點(P2P)(peer-to-peer)網絡系統中。比特幣利用Merkle樹計算交易根哈希值(hash)。
1982年,萊斯利·蘭波特(Leslie Lamport)提出拜占庭將軍問題,用來描述分布式系統中的一致性問題。萊斯利·蘭波特提出的Paxos算法,僅適用于無拜占庭錯誤的可信環境中,中本聰在比特幣中創造性地引入了工作量證明(Proof of Work,POW)來解決這個問題。
1983年,大衛·喬姆(David Chaum)發表了論文Blind Signatures for Untraceable Payments。在論文中,他提出盲簽名的密碼學算法,用這種算法實現電子交易中的匿名性,這也是他所提出的eCash中重要的密碼學技術。
1985年,尼爾·科布利茨(Neal Koblitz)和維克多·米勒(Victor Miller)分別獨立提出橢圓曲線密碼學(Elliptic Curve Cryptography),它是一種基于橢圓曲線數學的公開密鑰加密算法。比特幣利用ECDSA secp256k1算法實現其公鑰簽名體系。
1997年,亞當·班克(Adam Back)提出哈希現金(HashCash)方法,工作量證明的概念出現在該算法論文中,該算法在當時主要用于反垃圾郵件。如果給目標郵箱發送電子郵件,那么必須滿足一個特定的計算結果,才能被目標郵箱系統所接收。對于普通郵件發送者來說,計算滿足要求的數據在不經意間就完成了,但是對于垃圾郵件的發送系統來說,每天要完成大量的郵件發送任務,這些郵件所需的計算時間累加起來就能大大增加系統的負擔,從而增加了垃圾郵件的發送成本。
1998年,戴維(Wei Dai)提出B-money(一種可匿名、分布式的電子加密貨幣系統),它占據了比特幣白皮書的參考資源第一位。它繼承了用工作量證明造幣的思想,并把記賬工作分配到一個點對點的網絡中,但距離一個可以使用的P2P電子支付系統還有很大的差距,因為它缺少最關鍵的技術—共識機制,也就是說它沒有辦法解決雙花問題,所以交易的雙方必須信任一個第三方。
1998年,肖恩·范寧(Shawn Fanning)在美國波士頓東北大學讀一年級的時候,為室友開發了一個音樂搜集程序,該程序能在互聯網上搜索音樂文件,將其整理并做成索引,使用者可以很容易地找到自己想要的音樂。該程序被肖恩·范寧命名為Napster,從此,越來越多的人在互聯網上開始使用P2P技術。
2001年,由美國國家安全局(NSA)研發、美國國家標準與技術研究院(NIST)發布的SHA2(Secure Hash Algorithm 2)算法誕生。它是一種密碼哈希函數算法標準,屬于SHA算法之一,又可再分為6個不同的算法標準,包括SHA224、SHA256、SHA384、SHA512、SHA512/224、SHA512/256。比特幣使用SHA256算法計算區塊數字摘要,并兩次使用SHA256算法進行挖礦運算。
2 發展
2008年11月,中本聰發表了《比特幣:一種點對點的電子貨幣系統》,比特幣時代正式開啟。
中本聰在文中描述數據結構時,使用了Block和Chain等詞,后來人們在提煉比特幣底層實現技術時,把抽象出的技術體系用Block和Chain表示,創造出Blockchain這個詞,可以說是比特幣的底層設計思想衍生出了區塊鏈(Blockchain)的概念。
中本聰在論文中闡述,區塊鏈由一串使用密碼學方法產生的區塊(Block)組合而成,這些區塊前后依次關聯,新增的區塊總是添加在區塊鏈的尾部。
區塊鏈由點對點網絡節點共同產生,所有網絡中的交易由全網節點共同維護,并存儲在本地,數據與其他節點一致,因此區塊鏈也可以被看成一個去中心化的分布式數據庫。
2009年1月5日,比特幣主網上的第一枚比特幣誕生。比特幣的網絡節點采用工作量證明算法來產生區塊,這也就是通常所說的“挖礦”。
“挖礦”是指使用計算機解決一項復雜的數學問題,誰的算力強誰就有可能先解決難題并廣播到網絡中,而這個數學問題的驗證過程很簡單,其他節點可以快速校驗該答案的正確性。如果正確,那么承認這個難題(區塊數據)的合法性。區塊數據里包含著交易,網絡節點在確認數學問題答案的同時,也將確認交易的合法性,并將其記錄在本地的區塊鏈中。
為了激勵網絡節點積極打包出塊,并用以抵消節點利用算力帶來的電力消耗和設備損耗,開發者在比特幣系統中設計了一套挖礦激勵機制,即出塊獎勵機制。給初始區塊獎勵50枚比特幣,隨后每隔10分鐘就會增加一個區塊,并獎勵50枚比特幣。
比特幣的總產量為2100萬枚,每當開采總量達到剩余的一半時,區塊獎勵減半,例如當開采量達到1050萬枚(2100萬枚×1/2)時,區塊獎勵為25枚(50枚×1/2),當開采量達到1575萬枚(1050枚+1050枚×1/2)時,區塊獎勵為12.5枚(25枚×1/2),以此方式反復減半。每個減半周期約為4年,大約在2140年時出產總量接近2100萬枚。用戶在發起交易時,需要附加交易費用,而這筆費用也將隨同區塊獎勵一起獎勵給挖礦打包的網絡節點。
在比特幣系統中,用戶簽名并發起的交易如同實體經濟中的交易一樣,是指在商業行為上用戶發起轉賬的操作實體,包含發起人、收款人、金額、描述等。在比特幣系統中所有的交易都存儲在區塊鏈賬本里,這也被稱為區塊鏈賬本的記賬。
中本聰在白皮書《比特幣:一種點對點的電子貨幣系統》中創新性地使用了未花費的交易輸出(Unspent Transaction Output,UTXO)來記錄比特幣的交易。
比特幣的交易由交易輸入和交易輸出組成,每筆交易都要花費(Spend)一筆(或多筆)輸入(Input),同時產生一筆(或多筆)輸出(Output),而其所產生的輸出,就是“未花費的交易輸出”。交易需要由發起方使用私鑰完成對交易的簽名,用以證明資產所有權和交易合法性,交易的接收者不用參與整個過程。
圖1
如圖11所示,A、B、C為三個賬戶,定義Tx為交易,每筆交易由輸入和輸出兩部分組成,每筆交易的輸入指向上一筆UTXO,在交易完成后該UTXO將變成已花費的交易輸出,不能再次被使用;而該交易產生的輸出即為新的UTXO,其所有權歸屬于接收者,如果交易過程中有多余的資產,將會產生一個找零UTXO,接收人為自己。交易的過程如下:
(1)交易-1(鑄幣)表示該交易由礦工挖礦所得,輸入標識為挖礦(Mining)獲取,輸出的所有者為A,表示礦工挖礦得到UTXO-A-1歸屬于A賬戶。
(2)交易-2的輸入指向交易-1的輸出,即A賬戶使用自己的UTXO作為交易-2的輸入,輸出為B和A,意味著,A賬戶轉賬給B賬戶,同時剩余一筆資金并找零給自己,此時UTXO-A-1將變成已花費的交易輸出,不能再次被使用,標識為灰色。
(3)交易-3為B賬戶轉賬給C賬戶,交易-4為A賬戶轉賬給C賬戶,同時分別找零給自己形成新的輸出,C賬戶此時擁有UTXO-C-1和UTXO-C-2兩筆UTXO。
(4)交易-5的輸入由兩筆C賬戶的UTXO組成(UTXO-C-1和UTXO-C-2),輸出為B賬戶和自己的C賬戶,表示為轉移資產給B賬戶,同時找零給自己。
由于各個賬戶的余額由最終屬于自己的所有UTXO之和組成,在經過這5筆交易之后,A賬戶的資產有UTXO-A-3,B賬戶的資產有UTXO-B-2和UTXO-B-3,C賬戶的資產有UTXO-C-3,每個賬戶只能控制自己的UTXO,這是它們的剩余資產。所以,從這個角度來說,比特幣區塊鏈里并沒有余額的概念,只有UTXO。
比特幣的項目地址可以在GitHub網站中搜索到,搜索Bitcoin之后的結果如圖2所示。
圖2
Bitcoin項目主要包含兩個工程:bitcoin和bips。
bitcoin 是比特幣客戶端源代碼項目,使用C++語言開發實現,用戶可以在下載并編譯后用于挖礦或者當成全節點錢包使用。
bips(Bitcoin Improvement Proposals)是比特幣改進提案項目,用于接收比特幣升級和改善的提案列表,任何人都可以到該項目下提出自己的改進想法,使之成為一個新的提案,每個提案有多種狀態,如接收、拒絕、草案、最終版等。比特幣的升級和維護更多依賴于這些提案最終是否被確認,這些提案由比特幣的社區共同維護和確認。
3 技術創新
比特幣是第一個基于區塊鏈技術的去中心化支付系統,有較多的特性和創新,主要體現在兩個方面,一是作為支付系統的創新,二是去中心化的創新。
1、作為支付系統的創新
作為支付系統的創新主要表現為以下四個方面:
(1)比特幣可以作為全球性的資產,在任何情況下無論多大的資產都可以通過區塊鏈網絡轉移到目標賬戶里,比特幣的出塊時間是10分鐘,交易地點不受任何物理限制,只要有網絡,用戶就可以通過工具發起交易進行資產轉移,沒有國界和地域之分;
(2)比特幣的交易成本極低,普通的跨境支付費用大約為1%,而有的支付方式的費用會高達3%左右,如果使用比特幣網絡支付,那么只需要支付少量的交易打包費即可,并且與金額大小無關,特別是在大額支付中更能體現其手續費低的優勢;
(3)比特幣是去中心化的網絡和系統,不歸屬于某一個中心化組織或者個人,它制定的規則不會被輕易修改,它的網絡也不會由個別機器控制,例如發行至今,網絡穩定運行已經足夠證明其安全性,且其總量為2100萬枚的機制至今都由所有礦工維護并未有更改;
(4)交易公開并且匿名,任何人都有參與交易的機會,且其賬戶具有匿名性,無須申請特殊的權限即可進入網絡,僅僅通過密碼學的方式來證明身份的合法性,與現實的身份無關,具備一定的匿名性。
2、去中心化的創新
在去中心化的創新方面,比特幣帶來了對系統構建的全新思考,核心是去中心化,但是仍需要正確理解比特幣的“去中心化”屬性,下面從3個維度來講:
(1)架構層。在物理世界里,系統由多臺計算機組成,在運行過程中,我們可以容忍部分計算機宕機而系統不受影響。比特幣的網絡節點分別部署在世界的各個角落里,這些節點同時也都保存著完整的區塊鏈數據,任何一臺或者多臺計算機宕機,都不會影響比特幣網絡的其他節點,更不會影響整個區塊鏈網絡的使用。
(2)治理層。系統的所有權并不受控于某一個中心,而由多個機構或者個人共同所有。比特幣網絡的治理由所有參與的礦工決定,礦工的算力是分布均勻的,某個人或者組織很難控制大部分數量(51%)的礦工,這就保證了比特幣系統在治理上的去中心化特性。
(3)邏輯層。從系統的設計和數據結構上看,它是一個完整的不可分割的整體,所有參與方維護的是同一份賬本數據。每個參與計算的網絡節點,其本身維護全量的區塊鏈賬本,且節點之間的賬本具有強一致性,它們也是基于同一份數據進行驗證、打包、增長區塊的,其數據層實質上是一個強一致性的分布式賬本。