區塊鏈入門教程

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

區塊鏈(blockchain)是眼下的大熱門,新聞媒體大量報導,宣稱它將創造未來。

可是,簡單易懂的入門文章卻很少。區塊鏈到底是什麼,有何特別之處,很少有解釋。

區塊鏈入門教程 科技 第1張

下面,我就來嘗試,寫一篇最好懂的區塊鏈教程。畢竟它也不是很難的東西,核心概念非常簡單,幾句話就能說清楚。我希望讀完本文,你不僅可以理解區塊鏈,還會明白什麼是挖礦、為什麼挖礦越來越難等問題。

需要說明的是,我並非這方面的專家。雖然很早就關注,但是仔細地了解區塊鏈,還是從今年初開始。文中的錯誤和不準確的地方,歡迎大家指正。

一、區塊鏈的本質

區塊鏈是什麼?一句話,它是一種特殊的分布式數據庫。

區塊鏈入門教程 科技 第2張

首先,區塊鏈的主要作用是儲存信息。任何需要保存的信息,都可以寫入區塊鏈,也可以從里面讀取,所以它是數據庫。

其次,任何人都可以架設服務器,加入區塊鏈網路,成為一個節點。區塊鏈的世界里面,沒有中心節點,每個節點都是平等的,都保存著整個數據庫。你可以向任何一個節點,寫入 / 讀取數據,因為所有節點最後都會同步,保證區塊鏈一致。

二、區塊鏈的最大特點

分布式數據庫並非 新髮明,市場上早有此類產品。但是,區塊鏈有一個革命性特點。

區塊鏈沒有管理員,它是徹底無中心的。其他的數據庫都有管理員,但是區塊鏈沒有。如果有人想對區塊鏈添加審核,也做到不了,因為它的設計目標就是防止出現居於中心地位的管理當局。

正是因為無法管理,區塊鏈才能做到無法被控制。否則一旦大公司大集團控制了管理權,他們就會控制整個平台,其他使用者就都必須聽命於他們了。

但是,沒有了管理員,人人都可以往里面寫入數據,怎麼才能保證數據是可信的呢?被壞人改了怎麼辦?請接著往下讀,這就是區塊鏈奇妙的地方。

三、區塊

區塊鏈由一個個區塊(block)組成。區塊很像數據庫的記錄,每次寫入數據,就是創建一個區塊。

區塊鏈入門教程 科技 第3張

每個區塊包含兩個部分。

  • 區塊頭(Head):記錄當前區塊的元信息

  • 區塊體(Body):實際數據

區塊頭包含了當前區塊的多項元信息。

  • 生成時間

  • 實際數據(即區塊體)的 Hash

  • 上一個區塊的 Hash

這里,你需要理解什麼叫Hash,這是理解區塊鏈必需的。

區塊鏈入門教程 科技 第4張

所謂 Hash 就是計算機可以對任意內容,計算出一個長度相同的特徵值。區塊鏈的 Hash 長度是 256 位,這就是說,不管原始內容是什麼,最後都會計算出一個 256 位的二進制數字。而且可以保證,只要原始內容不同,對應的 Hash 一定是不同的。

舉例來說,字符串123的 Hash 是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六進制),轉成二進制就是 256 位,而且只有123能得到這個 Hash。

因此,就有兩個重要的推論。

  • 推論 1:每個區塊的 Hash 都是不一樣的,可以通過 Hash 標識區塊。

  • 推論 2:如果區塊的內容變了,它的 Hash 一定會改變。

四、 Hash 的不可修改性

區塊與 Hash 是一一對應的,每個區塊的 Hash 都是針對 “區塊頭”(Head)計算的。

Hash = SHA256(區塊頭)

上面就是區塊 Hash 的計算公式,Hash 由區塊頭唯一決定,SHA256是區塊鏈的 Hash 算法。

前面說過,區塊頭包含很多內容,其中有當前區塊體的 Hash(注意是 “區塊體” 的 Hash,而不是整個區塊),還有上一個區塊的 Hash。這意味著,如果當前區塊的內容變了,或者上一個區塊的 Hash 變了,一定會引起當前區塊的 Hash 改變。

這一點對區塊鏈有重大意義。如果有人修改了一個區塊,該區塊的 Hash 就變了。為了讓後面的區塊還能連到它,該人必須同時修改後面所有的區塊,否則被改掉的區塊就脫離區塊鏈了。由於後面要提到的原因,Hash 的計算很耗時,同時修改多個區塊幾乎不可能發生,除非有人掌握了全網 51% 以上的計算能力。

正是通過這種聯動機制,區塊鏈保證了自身的可靠性,數據一旦寫入,就無法被篡改。這就像歷史一樣,發生了就是發生了,從此再無法改變。

區塊鏈入門教程 科技 第5張

每個區塊都連著上一個區塊,這也是 “區塊鏈” 這個名字的由來。

五、采礦

由於必須保證節點之間的同步,所以新區塊的添加速度不能太快。試想一下,你剛剛同步了一個區塊,準備基於它生成下一個區塊,但這時別的節點又有新區塊生成,你不得不放棄做了一半的計算,再次去同步。因為每個區塊的後面,只能跟著一個區塊,你永遠只能在最新區塊的後面,生成下一個區塊。所以,你別無選擇,一聽到信號,就必須立刻同步。

所以,區塊鏈的發明者中本聰(這是假名,真實身份至今未知)故意讓添加新區塊,變得很困難。他的設計是,平均每 10 分鐘,全網才能生成一個新區塊,一小時也就六個。

這種產出速度不是通過命令達成的,而是故意設置了海量的計算。也就是說,只有通過極其大量的計算,才能得到當前區塊的有效 Hash,從而把新區塊添加到區塊鏈。由於計算量太大,所以快不起來。

這個過程就叫做采礦(mining),因為計算有效 Hash 的難度,好比在全世界的沙子里面,找到一粒符合條件的沙子。計算 Hash 的機器就叫做礦機,操作礦機的人就叫做礦工。

區塊鏈入門教程 科技 第6張

六、難度系數

讀到這里,你可能會有一個疑問,人們都說采礦很難,可是采礦不就是用計算機算出一個 Hash 嗎,這正是計算機的強項啊,怎麼會變得很難,遲遲算不出來呢?

原來不是任意一個 Hash 都可以,只有滿足條件的 Hash 才會被區塊鏈接受。這個條件特別苛刻,使得絕大部分 Hash 都不滿足要求,必須重算。

原來,區塊頭包含一個難度系數(difficulty),這個值決定了計算 Hash 的難度。舉例來說,第 100000 個區塊的難度系數是 14484.16236122。

區塊鏈入門教程 科技 第7張

區塊鏈協議規定,使用一個常量除以難度系數,可以得到目標值(target)。顯然,難度系數越大,目標值就越小。

區塊鏈入門教程 科技 第8張

Hash 的有效性跟目標值密切相關,只有小於目標值的 Hash 才是有效的,否則 Hash 無效,必須重算。由於目標值非常小,Hash 小於該值的機會極其渺茫,可能計算 10 億次,才算中一次。這就是采礦如此之慢的根本原因。

區塊頭里面還有一個 Nonce 值,記錄了 Hash 重算的次數。第 100000 個區塊的 Nonce 值是274148111,即計算了 2.74 億次,才得到了一個有效的 Hash,該區塊才能加入區塊鏈。

七、難度系數的動態調節

就算采礦很難,但也沒法保證,正好十分鐘產出一個區塊,有時一分鐘就算出來了,有時幾個小時可能也沒結果。總體來看,隨著硬件設備的提升,以及礦機的數量增長,計算速度一定會越來越快。

為了將產出速率恒定在十分鐘,中本聰還設計了難度系數的動態調節機制。他規定,難度系數每兩周(2016 個區塊)調整一次。如果這兩周里面,區塊的平均生成速度是 9 分鐘,就意味著比法定速度快了 10%,因此難度系數就要調高 10%;如果平均生成速度是 11 分鐘,就意味著比法定速度慢了 10%,因此難度系數就要調低 10%。

難度系數越調越高(目標值越來越小),導致了采礦越來越難。

八、區塊鏈的分叉

即使區塊鏈是可靠的,現在還有一個問題沒有解決:如果兩個人同時向區塊鏈寫入數據,也就是說,同時有兩個區塊加入,因為它們都連著前一個區塊,就形成了分叉。這時應該采納哪一個區塊呢?

區塊鏈入門教程 科技 第9張

現在的規則是,新節點總是採用最長的那條區塊鏈。如果區塊鏈有分叉,將看哪個分支在分叉點後面,先達到 6 個新區塊(稱為 “六次確認”)。按照 10 分鐘一個區塊計算,一小時就可以確認。

區塊鏈入門教程 科技 第10張

由於新區塊的生成速度由計算能力決定,所以這條規則就是說,擁有大多數計算能力的那條分支,就是正宗的比特鏈。

九、總結

區塊鏈作為無人管理的分布式數據庫,從 2009 年開始已經運行了 8 年,沒有出現大的問題。這證明它是可行的。

但是,為了保證數據的可靠性,區塊鏈也有自己的代價。一是效率,數據寫入區塊鏈,最少要等待十分鐘,所有節點都同步數據,則需要更多的時間;二是能耗,區塊的生成需要礦工進行無數無意義的計算,這是非常耗費能源的。

因此,區塊鏈的適用場景,其實非常有限。

  1. 不存在所有成員都信任的管理當局

  2. 寫入的數據不要求實時使用

  3. 挖礦的收益能夠彌補本身的成本

如果無法滿足上述的條件,那麼傳統的數據庫是更好的解決方案。

區塊鏈入門教程 科技 第11張

目前,區塊鏈最大的應用場景(可能也是唯一的應用場景),就是以比特幣為代表的加密貨幣。下一篇文章,我將會介紹比特幣的入門知識。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!