
什麼是區塊鍊?
區塊鍊,英文 Blockchain,本質上是一種去中心化的分布式資料庫。任何人隻要架設自己的伺服器,接入區塊鍊網絡,都可以成為這個龐大網絡的一個節點。
區塊鍊既然本質是資料庫,裡面究竟存儲了什麼東西呢?讓我們來了解一下區塊鍊的基本單元:區塊(Block)。
一個區塊分為兩大部分:
1.區塊頭
區塊頭裡面存儲着區塊的頭資訊,包含上一個區塊的哈希值(PreHash),本區塊體的哈希值(Hash),以及時間戳(TimeStamp)等等。
2.區塊體
區塊體存儲着這個區塊的詳細資料(Data),這個資料包含若幹行記錄,可以是交易資訊,也可以是其他某種資訊。
剛才提及的哈希值又是什麼意思呢?
想必大家都聽說過MD5,MD5就是典型的雜湊演算法,可以把一串任意長度的明文轉化成一串固定長度(128bit)的字元串,這個字元串就是哈希值。
而在我們的區塊鍊中,采用的是一種更為複雜的雜湊演算法,叫做SHA256。最新的資料資訊(比如交易記錄)經過一系列複雜的計算,最終會通過這個雜湊演算法轉化成了長度為256bit的哈希值字元串,也就是區塊頭當中的Hash,格式如下:
a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0
區塊與Hash是一一對應的,Hash可以當做是區塊的唯一辨別。
不同的區塊之間是如何進行關聯的呢?依靠Hash和PreHash來關聯。每一個區塊的PreHash和前一個區塊的Hash值是相等的。
什麼是挖礦?
為什麼要計算區塊的哈希值呢?
既然區塊鍊是一個鍊狀結構,就必然存在鍊條的頭節點(第一個區塊)和尾節點(最後一個區塊)。一旦有人計算出區塊鍊最新資料資訊的哈希值,相當于對最新的交易記錄進行打包,新的區塊會被建立出來,銜接在區塊鍊的末尾。
新區塊頭的Hash就是剛剛計算出的哈希值,PreHash等于上一個區塊的Hash。區塊體的Data存儲的是打包前的交易記錄,這部分資料資訊已經變得不可修改。
這個計算Hash值,建立新區塊的過程就叫做挖礦。
用于進行海量計算的伺服器,叫做礦機。
操作計算的從業人員,叫做礦工。
計算哈希值究竟難在哪裡?咱們來做一個最粗淺的解釋,哈希值計算的公式如下:
Hash = SHA-256(最後一個區塊的Hash + 新區塊基本資訊 + 交易記錄資訊 + 随機數)
其中,交易記錄資訊也是一串哈希值,它的計算涉及到一個資料結構 Merkle Tree。有興趣的小夥伴可以查閱相關資料,我們暫時不做展開介紹。
這裡關鍵的計算難點在于随機數的生成。猥瑣的區塊鍊發明者為了增大Hash的計算難度,要求Hash結果的前72bit必須都是0,這個幾率實在是太小太小。
由于(最後一個區塊的Hash + 新區塊基本資訊 + 交易記錄資訊)是固定的,是以能否獲得符合要求的Hash,完全取決于随機數的值。挖礦者必須經過海量計算,反複生成随機數進行“撞大運”一般的嘗試,才有可能得到正确的Hash,進而挖礦成功。
同時,區塊頭内還包含着一個動态的難度系數,當全世界的硬體計算能力越來越快的時候,區塊鍊的難度系數也會水漲船高,使得全網平均每10分鐘才能産生出一個新區塊。
小夥伴們明白挖礦有多麼難了吧?需要補充的是,不同的區塊鍊應用在細節上是不同的,這裡所描述的挖礦規則是以比特币為例。
區塊鍊的應用
比特币(BitCoin)的概念最初由中本聰于2008年提出,而後根據這一思路設計釋出了開源軟體以及建構其上的P2P網絡。比特币是一種P2P形式的數字貨币。點對點的傳輸意味着一個去中心化的支付系統。
什麼是P2P網絡呢?
傳統的貨币都是由中央銀行統一發行,所有的個人儲蓄也是由銀行統一管理,這是典型的中心化系統。
而比特币則是部署在一個全世界衆多對等節點組成的去中心化網絡之上。每一個節點都有資格對這種數字貨币進行記錄和發行。
至于比特币底層的資料存儲,正是基于了區塊鍊技術。比特币的每一筆交易,都對應了區塊體資料中的一行,簡單的示意如下:
交易記錄的每一行都包含時間戳、交易明細、數字簽名。
表格中隻是為了友善了解。實際存儲的交易明細是匿名的,隻會記錄支付方和收款方的錢包位址。
至于數字簽名呢,可以了解為每一條單筆交易的防僞辨別,由非對稱加密算法所生成。
接下來說一說比特币礦工的獎勵:
比特币協定規定,挖到新區塊的礦工将獲得獎勵,從2008年起是50個比特币,然後每4年減半,目前2018年是12.5個比特币。流通中新增的比特币都是這樣誕生的,也難怪大家對挖掘比特币的工作如此趨之若鹜!
區塊鍊的優勢和劣勢
區塊鍊的優勢:
1.去中心化
區塊鍊不依賴于某個中心節點,整個系統的資料由全網所有對等節點共同維護,都可以進行資料的存儲和檢驗。這樣一來,除非攻擊者黑掉全網半數以上的節點,否則整個系統是不會遭到破壞的。
2.資訊不可篡改
區塊内的資料是無法被篡改的。一旦資料遭到篡改哪怕一丁點,整個區塊對應的哈希值就會随之改變,不再是一個有效的哈希值,後面連結的區塊也會随之斷裂。
區塊鍊的劣勢:
1.過度消耗能源
想要生成一個新的區塊,必須要大量伺服器資源進行大量無謂的嘗試性計算,嚴重耗費電能。
2.資訊的網絡延遲
以比特币為例,任何一筆交易資料都需要同步到其他所有節點,同步過程中難免會受到網絡傳輸延遲的影響,帶來較長的耗時。
幾點補充:
1.本漫畫部分内容參考了阮一峰的博文《區塊鍊入門教程》,感謝這位大神的科普。
2.由于篇幅有限,關于Merkle Tree 和 非對稱加密 的知識暫時沒有展開細講,有興趣的小夥伴們可以查閱資料進行更深一步的學習。
—————END—————
推薦閱讀
- IntelliJ IDEA的這個接口調試工具真是太好用了!
- 外包程式員 == 二等公民?
- 大家心心念念的權限管理功能,這次安排上了!
- 懶人 IDEA 插件推薦: EasyCode 一鍵幫你生成所需代碼~
- Lombok,嗯,真香香香香香香!
- Java8 的 Stream API 的确牛X,但性能究竟如何呢?
- 遠端辦公一周,為啥比上班一個月還累?
- 這幾個IDEA進階調試技巧,用了都說好!
- 2019 我的 Github 開源之路!
- Github标星25K+Star,SpringBoot實戰電商項目mall出SpringCloud版本啦!
- 涵蓋大部分核心元件使用的 Spring Cloud 教程,一定要收藏哦!
- 我的Github開源項目,從0到20000 Star!
歡迎關注,點個在看