比特幣和區塊鏈
2008年,中本聰發布了一篇名為《比特幣:一種點對點的電子現金系統》論文,之所以選擇在金融危機這年發布,也許別有深意。他認為傳統貨幣最根本的問題在于信任,銀行必須讓人信任它能幫我們管好錢財,但是銀行卻在用貨幣制造信貸泡沫,通貨膨脹使人財富縮水。首先中本聰把比特幣定義為一種點對點的電子現金系統, 目的很明確:希望這套系統不要依賴任何一個中心,比如中央銀行,所以這個系統肯定是分布式系統。
區塊鏈的概念是在中本聰設計比特幣系統的時候首次提出,也是區塊鏈技術第一次得以落地并且運用得最成功的一次。比特幣是一種業務場景, 區塊鏈是比特幣這種業務場景實現的技術基礎,要了解區塊鏈,先簡單了解比特幣的運行機制。
圖中的橙色方塊就是這套系統上的每個節點,散布在世界各地;可以認為每個節點都運行著中本聰開源的比特幣客戶端,節點之間形成全網通訊。
為什么要去中心中心化?
為了安全和信任。首先來說說安全,這個應該都好理解。比如現在我們用支付寶,所有的轉賬支付行為都要經過支付寶這個中心,這個中心一旦出問題,所有用戶都受影響;這個中心一旦被黑客攻破,數據就非常容易被修改;而分布式系統中,全球每個節點既是客戶端也是服務器,除非同時有51%以上節點被篡改,否則所有修改均無效,被“自治”,所有篡改數據難道非常大。安全上的保證也極大解決了信任問題,但是主要的還是數據控制權問題,中心化的系統,被掌握在一個中心中,比如我們的交易數據被掌握在支付寶中,鬼知道有沒有被出賣,有沒有被利用;而分布式系統中,所有數據透明,不屬于任何一個中心;人人都是數據生產者也是擁有者。
比特幣系統為什么能有效的運行下去?
第一,比特幣的稀缺性;第二,獎勵機制。首先要說兩個重要的角色: “礦工”和用戶。
沒錯,礦工就是比特幣系統上的每個節點的維護者,中本聰并不親自部署這么多節點,而是通過一種獎勵機制,讓每一個人都能參與維護擴展這套系統,這時候運行在這個節點上的機器也稱為“礦機”,礦機的主人就是礦工。在用戶交易過程中產生的記錄,如果被某個節點來幫忙驗證并記錄了,這時候礦機的主人就會得到一定的比特幣作為獎勵。 具體由那個礦工來記錄?這個就比較有意思了。
挖礦
發生交易時,全網節點能監聽到,通過驗證的記錄或放入節點內存中,然后所有的礦機都在開始“算題”,拼算力的時候來了,這批交易記錄會被分配一個隨機數, 每個節點都在“努力”地找這個隨機數,誰先找到,誰就得到了這批交易的記賬權,然后就開始驗證,驗證之后打包成一個數據塊,就是我們說的區塊了(終于提到區塊這個概念了,先別著急,后面再慢慢展開。),然后開始全網廣播,把這個區塊副本廣播出去,告訴其他節點不要努力了,我已經找到了,挖到礦了,大家看看是不是“真的”,然后其他節點停止挖礦,逐一驗證,51% 以上的節點都驗證通過之后就把這個區塊加到當前區塊鏈上的末端,交易完成。
比特幣價值
為什么有人愿意部署礦機來挖礦, 挖礦的獎勵真的有價值么?首先比特幣是稀缺的,如果比特幣可以無限的產生那就無價了。比特幣總量是 2100 萬個,從 2009 年開始,每次產生一個區塊的獎勵是50個,每 4 年獎勵減一半。按照比特幣大約每十分鐘產生一個區塊的速度計算,大約到 2134 年比特幣全部發完。另外比特幣不受一個中央控制,當大多數人都相信它具有代幣價值、大多數人都愿意在上面交易的時候它就有價值了,比如紙幣,它就是一張紙,當大多數人都相信并認可它的價值并能流通,它就不再是一張紙那么簡單了。
核心概念
現在我們對以上內容進行一個總結了。
- 比特幣是一個完全分布式系統,系統由許多節點組成。
- 每個節點都有記賬能力。
- 每一個記錄都需要公證,全網節點共識,共識方式就是以上說的“挖礦”,又叫做工作量共識方式( 共識的方式除了“挖礦”,還有很多種,后面再介紹。)
- 隨著交易不斷進行,區塊不斷生產,每個節點上的區塊按時間順序串在一起就形成了區塊鏈條。
- 系統涉及幾個核心概念,節點、鏈、區塊、記錄,關系如下:
到這里,我們對比特幣系統雛形有一個大致了解,下面我們就對這個系統中的核心概念分別展開介紹。
記錄
在比特幣中成為一個用戶很簡單,獲取一個錢包地址就行了,獲取地址:https://blockchain.info/wallet/#/signup。擁有了一個錢包地址之后就可以向全世界任何一個錢包發送比特幣了,前提你擁有了比特幣。交易記錄是加密的、匿名的,每個用戶擁有唯一的私鑰,交易時候使用私鑰生成數字簽名,用戶之間交易就產生了記錄。一條記錄是整個區塊鏈中的最小單位,一次操作就會生成一條記錄。
區塊
一個區塊由區塊頭和區塊體組成。
區塊頭
版本號(version):版本號
哈希值(Hash):當前區塊hash值
前驅區塊哈希值(Previous Block):前驅區塊hash值
后續區塊哈希值(Next Block(s)):后續區塊hash值
交易總數(Number Of Transactions):交易數量
時間戳(Timestamp):時間戳
隨機數(Nonce):隨機數,在比特幣系統中,“挖礦”就是找這個隨機數。
默克爾樹根哈希值(Merkle Root):交易記錄的默克爾根
區塊體裝的是記錄列表。
Merkle Root 怎么來的?
先說說 Merkle Root 的作用, 交易記錄發生任何變化, 這個值都會變,也就是這個值是以交易記錄為變量生成的。
生成原理,如下圖:
這是一棵二叉樹,叫做默克爾樹(也叫hash樹), 把所有記錄各自hash值作為葉子節點, 兩個葉子節點hash值合起來
又進行一次hash計算,生成父節點;直到最終的樹根。樹根hash值就是Merkle Root。
一個區塊格式:https://blockchain.info/block/0000000000000000003e1641219b1291b53e0c609d53f4d56aadcf0646cdfd36
鏈
所有區塊通過 Previous Block 或 Next Block 順序一個鏈條。區塊鏈系統,例如比特幣的區塊鏈系統中每個節點都維護著一條這樣的鏈條,區塊鏈的主要概念就是這么來的。
區塊鏈工作流程
以上我們大致了解了交易記錄、區塊、鏈等概念,現在我們把這些概念串起來,看看區塊鏈的工作流程。
- 發生交易記錄時發送節點全網廣播記錄。
- 節點監聽到新的交易記錄。
- 節點對交易記錄進行驗證并放入節點緩存區。
- 節點開始"算題",爭取到記賬權,打包記錄生成區塊,并向全網廣播進行共識。
- 經過共識的區塊被追加到區塊鏈的尾部。
上文提到的"全網廣播",實際上不需要讓全網所有節點都收到,只要大部分節點就行了。對于那些沒有收到的,丟失的區塊,區塊鏈系統是具有容錯能力的,如果某個節點么有收到特定區塊,這個節點將會發現自己缺失的區塊,可以提出自己下載區塊的請求。
共識機制
以上流程中,最為重要的就是區塊的共識機制了。共識,是指要讓全網大多數節點(至少51%)都認為數據真是可靠的過程。目前主流的共識機制有:工作量證明(PoW)、權益證明機制(PoS)、授權股權證明機制(DPOS)和拜占庭共識算法(PBFT)。 比特幣中使用的就是工作量證明算法,也就是上面所說的"挖礦",這里重點來講講"挖礦"。
節點監聽全網記錄數據,通過基本的合法性驗證之后把記錄暫存起來,接下來就開始工作量證明了?;貞浵挛覀冊谇拔闹薪榻B的區塊的格式,區中區塊頭有一個隨機數字段:Nonce。節點礦機不斷的嘗試不同隨機數,直到找到這個隨機數,然后把記錄打包生成區塊,把這個區塊廣播出去,經過其他節點驗證通過之后再鏈接到區塊鏈中。比特幣的PoW中, 平均每10分鐘有一個節點找到(產生)一個區塊,如果兩個節點同時一個時間內找到區塊,那么網絡將根據后續節點和區塊生成情況來決定,再給六個區塊的生成時間來確定,誰最先找到誰就擁有記賬權限。
區塊鏈的運用領域
隨著區塊鏈技術的成熟,基于區塊鏈技術的運用領域應還是比較廣闊的。
區塊鏈的分類
區塊鏈按照應用場景、數據讀寫范圍來分,可以分為三類:公共區塊鏈、共同體區塊鏈和私有區塊鏈。
公共區塊鏈:指全世界任何人都可以參與,任何人都可以在上面進行交易、讀寫、共識的區塊鏈。共有區塊鏈是完全分布式的,數據公開,用戶參與度高,便于推廣,但是系統運行依賴獎勵機制。應用場景有如比特幣、以太坊等。
共同體:又稱為聯盟鏈,比如多家金融機構,每個機構作為一個節點,一起構成一個區塊鏈的分布式系統。對區塊鏈的對其僅限這些機構之間,或共識過程的參與節點。典型應用場景有如IBM的超級賬本(HyperLedger),騰訊等多家互聯網巨頭已經參與其中;又比如騰訊云聯合微眾銀行,平安科技等二十余家金融機構和科技企業共同發起成立了金融區塊鏈合作聯盟(簡稱“金鏈盟”),在國內率先嘗試探索、研發、實現適用于金融機構的金融聯盟區塊鏈。
完全私有鏈:
完全私有的區塊鏈是指其寫入權限僅在一個組織手里的區塊鏈。讀取權限或者對外開放,或者被任意程度地進行了限制。區塊鏈鏈一個重要的特點解決中心化信任問題,個人覺得現階段,私有鏈沒什么卵用。
如何判斷是否需要區塊鏈?
當前區塊鏈存在的問題
區塊鏈技術在面臨機遇的同時,也面臨著不少問題與挑戰。
1、區塊鏈體積過大:隨著區塊鏈的發展,節點存儲的區塊鏈越來越大,存儲和計算負擔也越來越大。例如比特幣,完整比特幣區塊鏈大小已經超過64GB了,客戶端要同步完整數據的話,可能三天三夜都同步不完。
2、同步確認時間過長:全網節點共識的機制,共識過程時間問題還是存在不少挑戰。例如比特幣一次確認時間大約為10分鐘。
3、區塊鏈發展受到現行體制的制約: 去中心化,自治等特征,淡化了國家監管的概念,給傳統中心機構帶來了沖擊,比如中央銀行。這也是什么現在各種xx幣在國內少到打壓的原因。
開源項目
區塊鏈的開源項目也是比較多,具體可以參考這里:http://blog.csdn.net/elwingao/article/details/52679475。