天天看點

區塊鍊入門-概念原理篇比特币和區塊鍊核心概念區塊鍊工作流程共識機制區塊鍊的運用領域區塊鍊的分類如何判斷是否需要區塊鍊?目前區塊鍊存在的問題開源項目

2008年,中本聰釋出了一篇名為《比特币:一種點對點的電子現金系統》論文,之是以選擇在金融危機這年釋出,也許别有深意。他認為傳統貨币最根本的問題在于信任,銀行必須讓人信任它能幫我們管好錢财,但是銀行卻在用貨币制造信貸泡沫,通貨膨脹使人财富縮水。首先中本聰把比特币定義為一種點對點的電子現金系統, 目的很明确:希望這套系統不要依賴任何一個中心,比如中央銀行,是以這個系統肯定是分布式系統。

區塊鍊的概念是在中本聰設計比特币系統的時候首次提出,也是區塊鍊技術第一次得以落地并且運用得最成功的一次。比特币是一種業務場景, 區塊鍊是比特币這種業務場景實作的技術基礎,要了解區塊鍊,先簡單了解比特币的運作機制。

圖中的橙色方塊就是這套系統上的每個節點,散布在世界各地;可以認為每個節點都運作着中本聰開源的比特币用戶端,節點之間形成全網通訊。

為了安全和信任。首先來說說安全,這個應該都好了解。比如現在我們用支付寶,所有的轉賬支付行為都要經過支付寶這個中心,這個中心一旦出問題,所有使用者都受影響;這個中心一旦被黑客攻破,資料就非常容易被修改;而分布式系統中,全球每個節點既是用戶端也是伺服器,除非同時有51%以上節點被篡改,否則所有修改均無效,被“自治”,所有篡改資料難道非常大。安全上的保證也極大解決了信任問題,但是主要的還是資料控制權問題,中心化的系統,被掌握在一個中心中,比如我們的交易資料被掌握在支付寶中,鬼知道有沒有被出賣,有沒有被利用;而分布式系統中,所有資料透明,不屬于任何一個中心;人人都是資料生産者也是擁有者。

第一,比特币的稀缺性;第二,獎勵機制。首先要說兩個重要的角色: “礦工”和使用者。

沒錯,礦工就是比特币系統上的每個節點的維護者,中本聰并不親自部署這麼多節點,而是通過一種獎勵機制,讓每一個人都能參與維護擴充這套系統,這時候運作在這個節點上的機器也稱為“礦機”,礦機的主人就是礦工。在使用者交易過程中産生的記錄,如果被某個節點來幫忙驗證并記錄了,這時候礦機的主人就會得到一定的比特币作為獎勵。 具體由那個礦工來記錄?這個就比較有意思了。

發生交易時,全網節點能監聽到,通過驗證的記錄或放入節點記憶體中,然後所有的礦機都在開始“算題”,拼算力的時候來了,這批交易記錄會被配置設定一個随機數, 每個節點都在“努力”地找這個随機數,誰先找到,誰就得到了這批交易的記賬權,然後就開始驗證,驗證之後打包成一個資料塊,就是我們說的區塊了(終于提到區塊這個概念了,先别着急,後面再慢慢展開。),然後開始全網廣播,把這個區塊副本廣播出去,告訴其他節點不要努力了,我已經找到了,挖到礦了,大家看看是不是“真的”,然後其他節點停止挖礦,逐一驗證,51% 以上的節點都驗證通過之後就把這個區塊加到目前區塊鍊上的末端,交易完成。

為什麼有人願意部署礦機來挖礦, 挖礦的獎勵真的有價值麼?首先比特币是稀缺的,如果比特币可以無限的産生那就無價了。比特币總量是 2100 萬個,從 2009 年開始,每次産生一個區塊的獎勵是50個,每 4 年獎勵減一半。按照比特币大約每十分鐘産生一個區塊的速度計算,大約到 2134 年比特币全部發完。另外比特币不受一個中央控制,當大多數人都相信它具有代币價值、大多數人都願意在上面交易的時候它就有價值了,比如紙币,它就是一張紙,當大多數人都相信并認可它的價值并能流通,它就不再是一張紙那麼簡單了。

現在我們對以上内容進行一個總結了。

比特币是一個完全分布式系統,系統由許多節點組成。

每個節點都有記賬能力。

每一個記錄都需要公證,全網節點共識,共識方式就是以上說的“挖礦”,又叫做工作量共識方式( 共識的方式除了“挖礦”,還有很多種,後面再介紹。)

随着交易不斷進行,區塊不斷生産,每個節點上的區塊按時間順序串在一起就形成了區塊鍊條。

系統涉及幾個核心概念,節點、鍊、區塊、記錄,關系如下:

到這裡,我們對比特币系統雛形有一個大緻了解,下面我們就對這個系統中的核心概念分别展開介紹。

一個區塊由區塊頭和區塊體組成。

### 區塊頭

版本号(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。

所有區塊通過 Previous Block 或 Next Block 順序一個鍊條。區塊鍊系統,例如比特币的區塊鍊系統中每個節點都維護着一條這樣的鍊條,區塊鍊的主要概念就是這麼來的。

以上我們大緻了解了交易記錄、區塊、鍊等概念,現在我們把這些概念串起來,看看區塊鍊的工作流程。

發生交易記錄時發送節點全網廣播記錄。

節點監聽到新的交易記錄。

節點對交易記錄進行驗證并放入節點緩存區。

節點開始"算題",争取到記賬權,打包記錄生成區塊,并向全網廣播進行共識。

經過共識的區塊被追加到區塊鍊的尾部。

上文提到的"全網廣播",實際上不需要讓全網所有節點都收到,隻要大部分節點就行了。對于那些沒有收到的,丢失的區塊,區塊鍊系統是具有容錯能力的,如果某個節點麼有收到特定區塊,這個節點将會發現自己缺失的區塊,可以提出自己下載下傳區塊的請求。

以上流程中,最為重要的就是區塊的共識機制了。共識,是指要讓全網大多數節點(至少51%)都認為資料真是可靠的過程。目前主流的共識機制有:工作量證明(PoW)、權益證明機制(PoS)、授權股權證明機制(DPOS)和拜占庭共識算法(PBFT)。 比特币中使用的就是工作量證明算法,也就是上面所說的"挖礦",這裡重點來講講"挖礦"。

節點監聽全網記錄資料,通過基本的合法性驗證之後把記錄暫存起來,接下來就開始工作量證明了。回憶下我們在前文中介紹的區塊的格式,區中區塊頭有一個随機數字段:Nonce。節點礦機不斷的嘗試不同随機數,直到找到這個随機數,然後把記錄打包生成區塊,把這個區塊廣播出去,經過其他節點驗證通過之後再連結到區塊鍊中。比特币的PoW中, 平均每10分鐘有一個節點找到(産生)一個區塊,如果兩個節點同時一個時間内找到區塊,那麼網絡将根據後續節點和區塊生成情況來決定,再給六個區塊的生成時間來确定,誰最先找到誰就擁有記賬權限。

随着區塊鍊技術的成熟,基于區塊鍊技術的運用領域應還是比較廣闊的。

區塊鍊按照應用場景、資料讀寫範圍來分,可以分為三類:公共區塊鍊、共同體區塊鍊和私有區塊鍊。

公共區塊鍊:指全世界任何人都可以參與,任何人都可以在上面進行交易、讀寫、共識的區塊鍊。共有區塊鍊是完全分布式的,資料公開,使用者參與度高,便于推廣,但是系統運作依賴獎勵機制。應用場景有如比特币、以太坊等。

共同體:又稱為聯盟鍊,比如多家金融機構,每個機構作為一個節點,一起構成一個區塊鍊的分布式系統。對區塊鍊的對其僅限這些機構之間,或共識過程的參與節點。典型應用場景有如IBM的超級賬本(HyperLedger),騰訊等多家網際網路巨頭已經參與其中;又比如騰訊雲聯合微衆銀行,平安科技等二十餘家金融機構和科技企業共同發起成立了金融區塊鍊合作聯盟(簡稱“金鍊盟”),在國内率先嘗試探索、研發、實作适用于金融機構的金融聯盟區塊鍊。

完全私有鍊:

完全私有的區塊鍊是指其寫入權限僅在一個組織手裡的區塊鍊。讀取權限或者對外開放,或者被任意程度地進行了限制。區塊鍊鍊一個重要的特點解決中心化信任問題,個人覺得現階段,私有鍊沒什麼卵用。

區塊鍊技術在面臨機遇的同時,也面臨着不少問題與挑戰。

1、區塊鍊體積過大:随着區塊鍊的發展,節點存儲的區塊鍊越來越大,存儲和計算負擔也越來越大。例如比特币,完整比特币區塊鍊大小已經超過64GB了,用戶端要同步完整資料的話,可能三天三夜都同步不完。

2、同步确認時間過長:全網節點共識的機制,共識過程時間問題還是存在不少挑戰。例如比特币一次确認時間大約為10分鐘。

3、區塊鍊發展受到現行體制的制約: 去中心化,自治等特征,淡化了國家監管的概念,給傳統中心機構帶來了沖擊,比如中央銀行。這也是什麼現在各種xx币在國内少到打壓的原因。

繼續閱讀