比特幣和區(qū)塊鏈
2008年,中本聰發(fā)布了一篇名為《比特幣:一種點對點的電子現(xiàn)金系統(tǒng)》論文,之所以選擇在金融危機(jī)這年發(fā)布,也許別有深意。他認(rèn)為傳統(tǒng)貨幣最根本的問題在于信任,銀行必須讓人信任它能幫我們管好錢財,但是銀行卻在用貨幣制造信貸泡沫,通貨膨脹使人財富縮水。首先中本聰把比特幣定義為一種點對點的電子現(xiàn)金系統(tǒng), 目的很明確:希望這套系統(tǒng)不要依賴任何一個中心,比如中央銀行,所以這個系統(tǒng)肯定是分布式系統(tǒng)。
區(qū)塊鏈的概念是在中本聰設(shè)計比特幣系統(tǒng)的時候首次提出,也是區(qū)塊鏈技術(shù)第一次得以落地并且運(yùn)用得最成功的一次。比特幣是一種業(yè)務(wù)場景, 區(qū)塊鏈?zhǔn)潜忍貛胚@種業(yè)務(wù)場景實現(xiàn)的技術(shù)基礎(chǔ),要了解區(qū)塊鏈,先簡單了解比特幣的運(yùn)行機(jī)制。

圖中的橙色方塊就是這套系統(tǒng)上的每個節(jié)點,散布在世界各地;可以認(rèn)為每個節(jié)點都運(yùn)行著中本聰開源的比特幣客戶端,節(jié)點之間形成全網(wǎng)通訊。
為什么要去中心中心化?
為了安全和信任。首先來說說安全,這個應(yīng)該都好理解。比如現(xiàn)在我們用支付寶,所有的轉(zhuǎn)賬支付行為都要經(jīng)過支付寶這個中心,這個中心一旦出問題,所有用戶都受影響;這個中心一旦被黑客攻破,數(shù)據(jù)就非常容易被修改;而分布式系統(tǒng)中,全球每個節(jié)點既是客戶端也是服務(wù)器,除非同時有51%以上節(jié)點被篡改,否則所有修改均無效,被“自治”,所有篡改數(shù)據(jù)難道非常大。安全上的保證也極大解決了信任問題,但是主要的還是數(shù)據(jù)控制權(quán)問題,中心化的系統(tǒng),被掌握在一個中心中,比如我們的交易數(shù)據(jù)被掌握在支付寶中,鬼知道有沒有被出賣,有沒有被利用;而分布式系統(tǒng)中,所有數(shù)據(jù)透明,不屬于任何一個中心;人人都是數(shù)據(jù)生產(chǎn)者也是擁有者。
比特幣系統(tǒng)為什么能有效的運(yùn)行下去?
第一,比特幣的稀缺性;第二,獎勵機(jī)制。首先要說兩個重要的角色: “礦工”和用戶。

沒錯,礦工就是比特幣系統(tǒng)上的每個節(jié)點的維護(hù)者,中本聰并不親自部署這么多節(jié)點,而是通過一種獎勵機(jī)制,讓每一個人都能參與維護(hù)擴(kuò)展這套系統(tǒng),這時候運(yùn)行在這個節(jié)點上的機(jī)器也稱為“礦機(jī)”,礦機(jī)的主人就是礦工。在用戶交易過程中產(chǎn)生的記錄,如果被某個節(jié)點來幫忙驗證并記錄了,這時候礦機(jī)的主人就會得到一定的比特幣作為獎勵。 具體由那個礦工來記錄?這個就比較有意思了。
挖礦
發(fā)生交易時,全網(wǎng)節(jié)點能監(jiān)聽到,通過驗證的記錄或放入節(jié)點內(nèi)存中,然后所有的礦機(jī)都在開始“算題”,拼算力的時候來了,這批交易記錄會被分配一個隨機(jī)數(shù), 每個節(jié)點都在“努力”地找這個隨機(jī)數(shù),誰先找到,誰就得到了這批交易的記賬權(quán),然后就開始驗證,驗證之后打包成一個數(shù)據(jù)塊,就是我們說的區(qū)塊了(終于提到區(qū)塊這個概念了,先別著急,后面再慢慢展開。),然后開始全網(wǎng)廣播,把這個區(qū)塊副本廣播出去,告訴其他節(jié)點不要努力了,我已經(jīng)找到了,挖到礦了,大家看看是不是“真的”,然后其他節(jié)點停止挖礦,逐一驗證,51% 以上的節(jié)點都驗證通過之后就把這個區(qū)塊加到當(dāng)前區(qū)塊鏈上的末端,交易完成。
比特幣價值
為什么有人愿意部署礦機(jī)來挖礦, 挖礦的獎勵真的有價值么?首先比特幣是稀缺的,如果比特幣可以無限的產(chǎn)生那就無價了。比特幣總量是 2100 萬個,從 2009 年開始,每次產(chǎn)生一個區(qū)塊的獎勵是50個,每 4 年獎勵減一半。按照比特幣大約每十分鐘產(chǎn)生一個區(qū)塊的速度計算,大約到 2134 年比特幣全部發(fā)完。另外比特幣不受一個中央控制,當(dāng)大多數(shù)人都相信它具有代幣價值、大多數(shù)人都愿意在上面交易的時候它就有價值了,比如紙幣,它就是一張紙,當(dāng)大多數(shù)人都相信并認(rèn)可它的價值并能流通,它就不再是一張紙那么簡單了。
核心概念
現(xiàn)在我們對以上內(nèi)容進(jìn)行一個總結(jié)了。
- 比特幣是一個完全分布式系統(tǒng),系統(tǒng)由許多節(jié)點組成。
- 每個節(jié)點都有記賬能力。
- 每一個記錄都需要公證,全網(wǎng)節(jié)點共識,共識方式就是以上說的“挖礦”,又叫做工作量共識方式( 共識的方式除了“挖礦”,還有很多種,后面再介紹。)
- 隨著交易不斷進(jìn)行,區(qū)塊不斷生產(chǎn),每個節(jié)點上的區(qū)塊按時間順序串在一起就形成了區(qū)塊鏈條。
- 系統(tǒng)涉及幾個核心概念,節(jié)點、鏈、區(qū)塊、記錄,關(guān)系如下:

到這里,我們對比特幣系統(tǒng)雛形有一個大致了解,下面我們就對這個系統(tǒng)中的核心概念分別展開介紹。
記錄
在比特幣中成為一個用戶很簡單,獲取一個錢包地址就行了,獲取地址:https://blockchain.info/wallet/#/signup。擁有了一個錢包地址之后就可以向全世界任何一個錢包發(fā)送比特幣了,前提你擁有了比特幣。交易記錄是加密的、匿名的,每個用戶擁有唯一的私鑰,交易時候使用私鑰生成數(shù)字簽名,用戶之間交易就產(chǎn)生了記錄。一條記錄是整個區(qū)塊鏈中的最小單位,一次操作就會生成一條記錄。
區(qū)塊
一個區(qū)塊由區(qū)塊頭和區(qū)塊體組成。

區(qū)塊頭
版本號(version):版本號
哈希值(Hash):當(dāng)前區(qū)塊hash值
前驅(qū)區(qū)塊哈希值(Previous Block):前驅(qū)區(qū)塊hash值
后續(xù)區(qū)塊哈希值(Next Block(s)):后續(xù)區(qū)塊hash值
交易總數(shù)(Number Of Transactions):交易數(shù)量
時間戳(Timestamp):時間戳
隨機(jī)數(shù)(Nonce):隨機(jī)數(shù),在比特幣系統(tǒng)中,“挖礦”就是找這個隨機(jī)數(shù)。
默克爾樹根哈希值(Merkle Root):交易記錄的默克爾根
區(qū)塊體裝的是記錄列表。
Merkle Root 怎么來的?
先說說 Merkle Root 的作用, 交易記錄發(fā)生任何變化, 這個值都會變,也就是這個值是以交易記錄為變量生成的。
生成原理,如下圖:

這是一棵二叉樹,叫做默克爾樹(也叫hash樹), 把所有記錄各自hash值作為葉子節(jié)點, 兩個葉子節(jié)點hash值合起來
又進(jìn)行一次hash計算,生成父節(jié)點;直到最終的樹根。樹根hash值就是Merkle Root。
一個區(qū)塊格式:https://blockchain.info/block/0000000000000000003e1641219b1291b53e0c609d53f4d56aadcf0646cdfd36
鏈
所有區(qū)塊通過 Previous Block 或 Next Block 順序一個鏈條。區(qū)塊鏈系統(tǒng),例如比特幣的區(qū)塊鏈系統(tǒng)中每個節(jié)點都維護(hù)著一條這樣的鏈條,區(qū)塊鏈的主要概念就是這么來的。

區(qū)塊鏈工作流程
以上我們大致了解了交易記錄、區(qū)塊、鏈等概念,現(xiàn)在我們把這些概念串起來,看看區(qū)塊鏈的工作流程。

- 發(fā)生交易記錄時發(fā)送節(jié)點全網(wǎng)廣播記錄。
- 節(jié)點監(jiān)聽到新的交易記錄。
- 節(jié)點對交易記錄進(jìn)行驗證并放入節(jié)點緩存區(qū)。
- 節(jié)點開始"算題",爭取到記賬權(quán),打包記錄生成區(qū)塊,并向全網(wǎng)廣播進(jìn)行共識。
- 經(jīng)過共識的區(qū)塊被追加到區(qū)塊鏈的尾部。
上文提到的"全網(wǎng)廣播",實際上不需要讓全網(wǎng)所有節(jié)點都收到,只要大部分節(jié)點就行了。對于那些沒有收到的,丟失的區(qū)塊,區(qū)塊鏈系統(tǒng)是具有容錯能力的,如果某個節(jié)點么有收到特定區(qū)塊,這個節(jié)點將會發(fā)現(xiàn)自己缺失的區(qū)塊,可以提出自己下載區(qū)塊的請求。
共識機(jī)制
以上流程中,最為重要的就是區(qū)塊的共識機(jī)制了。共識,是指要讓全網(wǎng)大多數(shù)節(jié)點(至少51%)都認(rèn)為數(shù)據(jù)真是可靠的過程。目前主流的共識機(jī)制有:工作量證明(PoW)、權(quán)益證明機(jī)制(PoS)、授權(quán)股權(quán)證明機(jī)制(DPOS)和拜占庭共識算法(PBFT)。 比特幣中使用的就是工作量證明算法,也就是上面所說的"挖礦",這里重點來講講"挖礦"。
節(jié)點監(jiān)聽全網(wǎng)記錄數(shù)據(jù),通過基本的合法性驗證之后把記錄暫存起來,接下來就開始工作量證明了。回憶下我們在前文中介紹的區(qū)塊的格式,區(qū)中區(qū)塊頭有一個隨機(jī)數(shù)字段:Nonce。節(jié)點礦機(jī)不斷的嘗試不同隨機(jī)數(shù),直到找到這個隨機(jī)數(shù),然后把記錄打包生成區(qū)塊,把這個區(qū)塊廣播出去,經(jīng)過其他節(jié)點驗證通過之后再鏈接到區(qū)塊鏈中。比特幣的PoW中, 平均每10分鐘有一個節(jié)點找到(產(chǎn)生)一個區(qū)塊,如果兩個節(jié)點同時一個時間內(nèi)找到區(qū)塊,那么網(wǎng)絡(luò)將根據(jù)后續(xù)節(jié)點和區(qū)塊生成情況來決定,再給六個區(qū)塊的生成時間來確定,誰最先找到誰就擁有記賬權(quán)限。
區(qū)塊鏈的運(yùn)用領(lǐng)域
隨著區(qū)塊鏈技術(shù)的成熟,基于區(qū)塊鏈技術(shù)的運(yùn)用領(lǐng)域應(yīng)還是比較廣闊的。

區(qū)塊鏈的分類
區(qū)塊鏈按照應(yīng)用場景、數(shù)據(jù)讀寫范圍來分,可以分為三類:公共區(qū)塊鏈、共同體區(qū)塊鏈和私有區(qū)塊鏈。
公共區(qū)塊鏈:指全世界任何人都可以參與,任何人都可以在上面進(jìn)行交易、讀寫、共識的區(qū)塊鏈。共有區(qū)塊鏈?zhǔn)峭耆植际降?,?shù)據(jù)公開,用戶參與度高,便于推廣,但是系統(tǒng)運(yùn)行依賴獎勵機(jī)制。應(yīng)用場景有如比特幣、以太坊等。
共同體:又稱為聯(lián)盟鏈,比如多家金融機(jī)構(gòu),每個機(jī)構(gòu)作為一個節(jié)點,一起構(gòu)成一個區(qū)塊鏈的分布式系統(tǒng)。對區(qū)塊鏈的對其僅限這些機(jī)構(gòu)之間,或共識過程的參與節(jié)點。典型應(yīng)用場景有如IBM的超級賬本(HyperLedger),騰訊等多家互聯(lián)網(wǎng)巨頭已經(jīng)參與其中;又比如騰訊云聯(lián)合微眾銀行,平安科技等二十余家金融機(jī)構(gòu)和科技企業(yè)共同發(fā)起成立了金融區(qū)塊鏈合作聯(lián)盟(簡稱“金鏈盟”),在國內(nèi)率先嘗試探索、研發(fā)、實現(xiàn)適用于金融機(jī)構(gòu)的金融聯(lián)盟區(qū)塊鏈。
完全私有鏈:
完全私有的區(qū)塊鏈?zhǔn)侵钙鋵懭霗?quán)限僅在一個組織手里的區(qū)塊鏈。讀取權(quán)限或者對外開放,或者被任意程度地進(jìn)行了限制。區(qū)塊鏈鏈一個重要的特點解決中心化信任問題,個人覺得現(xiàn)階段,私有鏈沒什么卵用。
如何判斷是否需要區(qū)塊鏈?

當(dāng)前區(qū)塊鏈存在的問題
區(qū)塊鏈技術(shù)在面臨機(jī)遇的同時,也面臨著不少問題與挑戰(zhàn)。
1、區(qū)塊鏈體積過大:隨著區(qū)塊鏈的發(fā)展,節(jié)點存儲的區(qū)塊鏈越來越大,存儲和計算負(fù)擔(dān)也越來越大。例如比特幣,完整比特幣區(qū)塊鏈大小已經(jīng)超過64GB了,客戶端要同步完整數(shù)據(jù)的話,可能三天三夜都同步不完。
2、同步確認(rèn)時間過長:全網(wǎng)節(jié)點共識的機(jī)制,共識過程時間問題還是存在不少挑戰(zhàn)。例如比特幣一次確認(rèn)時間大約為10分鐘。
3、區(qū)塊鏈發(fā)展受到現(xiàn)行體制的制約: 去中心化,自治等特征,淡化了國家監(jiān)管的概念,給傳統(tǒng)中心機(jī)構(gòu)帶來了沖擊,比如中央銀行。這也是什么現(xiàn)在各種xx幣在國內(nèi)少到打壓的原因。
開源項目
區(qū)塊鏈的開源項目也是比較多,具體可以參考這里:http://blog.csdn.net/elwingao/article/details/52679475。