一篇文章理解區塊鏈
2017年5月12日全球爆發了加密病毒WannaCry攻擊事件,全球眾多的高校、醫院、政府機構等等都遭到了攻擊,被攻擊者的電腦數據被加密,勒索人員指定需要發送一定數量的比特幣到指定的賬戶,才能解密電腦中的數據。
從此比特幣開始重新回到大眾的視野,被各大媒體爭相報道,由此也開啟了加密數字貨幣的一輪超級大牛市。由於比特幣的價格持續走高,越來越多的人也始關注這一領域,都在講區塊鏈,各大公司也在布局區塊鏈,BAT、小米、京東等等都在研究區塊鏈。那麼到底區塊鏈是什麼?它有什麼作用?
1.比特幣是什麼?它是如何運行的?
百度一下我們可以看到百度上對比特幣的定義:一種P2P形式的數字貨幣。所以比特幣的網路是一個由全球用戶組成的龐大的P2P網路。P2P網路(點對點網路)我們每個人都應該接觸過,以前經常使用的BT下載、種子下載等都是基於p2p的技術,它的核心就是每一個參與網路的節點都是對等的,它們都可以作為伺服器也可以作為客戶端。不同於我們使用的支付寶這種中心化的服務,伺服器是由支付寶公司提供和維護,一旦支付寶公司提供的伺服器被攻陷,那個整個服務就停止了。而p2p網路,即使某一個節點出現故障,它也不會影響整個網路的運行。
中心化網路(左) --- 去中心化網路(右)
普通用戶如何加入比特幣的網路?普通用戶只需要下載一個比特幣的錢包客戶端,然後在自己的電腦上運行,就加入了比特幣的網路中。當第一次運行比特幣的客戶端的時候,可以在客戶端上生成一個比特幣賬戶,然後客戶端會同步網路中的區塊數據。這個同步區塊的作用就是把比特幣網路中的歷史交易數據下載到本地。當你區塊同步完成之後,就可以使用錢包來進行發送交易,或者接收別人轉賬給你的比特幣了。
以太坊的區塊鏈網路下載下來的區塊數據,就是一個個2M大小的文件。
區塊鏈
區塊鏈?錢包下載下來的區塊數據就是區塊鏈(註:現在區塊鏈的定義其實已經發生了變化,基本上是泛指採用了類似比特幣這種去中心化技術的相關產品)。剛剛我們說到比特幣錢包客戶端第一次運行之後會把整個比特幣網路的歷史交易都下載到本地。這麼多數據的數據是如何組織的,它的數據結構是什麼樣的?
比特幣的交易都被存儲在一個1M大小的文件中(上圖是下載的以太坊區塊它的區塊大小是2M),這一個文件就叫一個區塊。一個完整的區塊結構主要由以下幾部分構成:
比特幣區塊的構成
可以看到一個區塊主要由區塊大小、區塊頭、交易計數器、和交易記錄組成。我們看看是如何記錄交易記錄的,交易記錄的格式可以簡單理解如下:
A發送給B賬戶100BTC
B賬戶收到100BTC
......
具體內容可以點擊這裡了解一個區塊中包含的詳細數據,可以在頁面中選擇json格式,方便閱讀:
https://webbtc.com/block/0000000000000000000cdc0d2a9b33c2d4b34b4d4fa8920f074338d0dc1164dc
然後一個一個的區塊是如何關聯起來的,我們再看一下區塊頭中包含的數據。
比特幣區塊頭結構
每一個區塊的區塊頭都會記錄它的父區塊頭的哈希值,也就是上一個區塊的id,這樣每一個區塊就通過區塊頭中的前一區塊的id連起來了,所以這就是區塊鏈,這和數據結構中的鏈表結構是一樣的。
區塊鏈的結構
現在比特幣的完整區塊鏈大小是151GB,並且隨著時間的增長交易的增加,會一直增大。
比特幣區塊增長情況
所以為了更少的佔用用戶的電腦存儲資源,現在也有很多的輕錢包(lightweight)的客戶端,它們大多數是只同步最近時間的區塊數據,對歷史數據,不同步或者只同步歷史區塊的頭信息。還有一種是第三方的錢包,它們是由第三方的服務商維護一台伺服器用來同步比特幣的所有區塊,然後提供的錢包,直接在它維護的伺服器中查詢數據,當然這樣會減弱比特幣的去中心化特性。
礦工
我們第一次運行客戶端,在歷史區塊同步完成之後,這個時候還會有新的交易記錄產生。這個交易是如何寫入到區塊鏈中的?一個新的區塊是如何生產的?
當我們下載好比特幣客戶端,假設創建了一個賬戶A,同步完成最新的區塊數據之後,發送一筆交易給賬戶B,這個時候比特幣客戶端會把這一條交易信息廣播到比特幣的網路中,但是這個時候B不會立即就收到這一筆轉賬,這一筆交易必須被礦工寫到一個區塊中,並且這個區塊被加到當前網路中的最長鏈上,這樣B賬戶的客戶端才會同步這一個區塊,然後你的發送的信息B賬戶也就收到了。所以也說區塊鏈是一個分散式賬本,而礦工就是記賬的人。礦工會使用挖礦軟體,加入區塊鏈網路,它的主要工作是挖礦,比特幣的程序中規定每隔10分鐘會產生一個區塊,這個10分鐘不是固定的是大約10分鐘,它是根據當前挖礦的難度來的,挖礦的過程可以簡單理解為,比特幣程序為整個網路中的礦工出了一個數學題,解開這個題目的平均時間是10分鐘。解開這個題目的礦工就挖到了一個新區塊,同時也能得到12.5個比特幣獎勵,但是它同時需要把網路中等待寫入區塊的交易信息,寫入到區塊,並把該區塊加入到最長的區塊鏈中,然後廣播到網路中,這些交易,以及礦工獲得的獎勵才生效。
現在隨著挖礦設備的計算能力越來越強大,所以挖礦難度也在越來越難,普通的個人用戶用個人計算機基本上是不可能再挖出比特幣了。現在都是經過優化的ASIC礦機。當然由此也誕生了礦池,礦池的作用就是集合大家的算力,到礦之後,再根據算力貢獻情況分給用戶。
共識機制
上面我們提到了,比特幣礦工需要記過無數次的計算,得出一個正確答案之後才能挖到一個新的區塊得到記賬權.得到記賬權之後,還需要把交易信息寫入到區塊,寫入到區塊之後,需要把區塊打包發送到網路。各個客戶端接收到最新區塊由於網路原因會出現前後順序不一的情況,所以還要保證全網最長鏈數據一致性。這就需要一種演算法或者機制來確保誰能夠獲得記賬權,如何獲得記賬權,以及如何保證全網數據的一致性。這種機制就是共識機制。如果區塊鏈是比特幣運行的核心,那麼共識機制就是比特幣運行的靈魂。其實共識機制和傳統的分散式資料庫的共識機制是有一些相似的,它們都遵從下面的規則:
Append only 只允許添加區塊,不允許刪除或者修改
強調序列化
少數服從多數原則
分離覆蓋的問題:即長鏈覆蓋短鏈區塊,多節點覆蓋少數節點日誌
目前主流的共識機制有如下幾種:
工作量證明機制(Proof of Work, POW),需要挖礦目(比特幣使用的方式)
股權證明機制(Proof of Stake, POS)
授權股權證明機制(DPOS)
PFBT(拜占庭共識演算法)不同的共識機制適用於不同的場景.現在也沒有一種共識機制是完美的.每一種演算法都有它的優缺點.
這裡有主流共識機制的介紹:https://bitsharestalk.org/index.php?topic=4031.0
總結
讀完上面的內容相信你已經明白了什麼是區塊鏈。
所以為什麼說比特幣是去中心化的?就是因為它是基於p2p網路的,所有參與網路的客戶端都即是客戶端又是服務端。網路不會因為某一個節點的崩潰就發生癱瘓。
為什麼說區塊鏈上的數據是可信任的不可逆的?這也是因為區塊鏈中的數據一旦記錄,便不可刪除,不可修改,只能添加新的數據。當然這裡面其實也有51%攻擊,分叉等情況,以及不同的共識演算法可能系統能夠穩定運行的節點要求也不一樣。
PS:
區塊鏈分叉是什麼?
大區塊是什麼?
隔離見證&閃電網路是什麼?
比特幣解決了什麼問題?
去百度一下吧。
文/鄧志強
下期預告:
如何在以太坊區塊鏈上進行智能合約開發?
鎖定關注海鼎Fun,第一時間獲取喲
無
海鼎Fun
有料,有愛,有夢想
空·
TAG:海鼎Fun |