7 個步驟入門區塊鏈

買賣虛擬貨幣
2017 年是比特幣大爆發的一年。在潛水這麼多年之後,比特幣的價格一下子從 1000 美元左右飛漲至將近 20000 美元。多少人搖身一變,成了“密碼學貨幣交易專家”。

趕上好時候確實可以狠賺一筆,不過醒醒吧,盛宴已散。

儘管讓人們腎上腺素爆棚的主要還是飛速攀升的市值,但這波熱潮最初還是由技術掀起的。區塊鏈技術依然有巨大潛力。現在正是業務開發人員、企業家和個人愛好者懷著一腔熱血上車的時候。不過熱血翻湧之餘,首先還是應該增進一下對區塊鏈技術的瞭解。

只可惜,目前講解區塊鏈技術的文章不是涉及太多複雜的技術術語,就是太過膚淺,缺乏深度。這兩種型別的文章都不便於讀者清楚地理解文章內容。怎麼辦呢?我建議你不妨就從這篇文章開始。只要 10 分鐘,就能瞭解區塊鏈技術為什麼這麼具有顛覆性了。花這點時間還是物超所值的。祝閱讀愉快。

引言

首先,區塊鏈是一種電子化資料的儲存方法。資料是以區塊的形式出現的,想象一下有很多儲存著數字化資料的區塊。這些區塊都連結在了一起,為其內部資料賦予了不可變性。當一個資料塊被連結到了這條鏈上,其內部資料就再也無法更改了。一旦某個區塊被新增到了鏈上,裡面的資料對任何人都是公開可見的。這項技術具有非凡的革新意義,可以用來記錄我們能想到的幾乎所有資料(例如,產權、身份、餘額、病歷等等),同時不存在被篡改記錄的風險。假設我買了一套房子,把產權證拍照上傳到了區塊鏈上,我就可以證明我在那個時刻享有這套房產的所有權。一旦這個資訊上鍊,就沒人能夠更改它(好吧,還是有辦法更改的,這裡有一篇進階閱讀材料,我建議你稍後閱讀)。因此,區塊鏈是一種儲存資料且保證資料不被篡改的方法。這聽上去不錯,不過隨之而來的問題是:我們是怎麼實現這樣的技術的?

(校對注:吹毛求疵來說,這一段表述並非無懈可擊,但姑且可以這麼先記著。)

第一階——交易資料

好吧,我們先拿比特幣區塊鏈做個例子。比特幣區塊鏈是現存歷史最悠久的區塊鏈。在比特幣區塊鏈上,每個區塊的大小在 1 MB 左右。至截稿日,這條鏈上已經累積了 52.5 萬個區塊,鏈上儲存的資料總量約為 52.5 萬 MB 。(校對注:其實遠遠沒有 52.5 MB,因為在早期,很多區塊都沒有打滿 1MB。另,截至今日(2019 年 4 月

24 日,已經積累了 57.3 萬個區塊,總資料量約 250 GB。)

比特幣區塊鏈上僅儲存 比特幣的交易資料 。它就像是一個龐大的交易記錄庫,可追溯至第一筆比特幣交易。在本文中,我們假設有一條儲存交易資料的區塊鏈,就像比特幣區塊鏈那樣。

第二階——(透過雜湊運算)連結區塊

想象有三個儲存著交易資料的區塊(如圖一所示)。

這三個區塊內都存有一些交易資料。這沒什麼特別的。就好比是三個獨立的 word 文件,裡面描述了交易的內容和餘額變化情況。文件 1 會按照時間順序從第一筆交易開始記錄,直到資料量達到 1 MB 為止,之後的交易會記錄在文件 2 中,直到資料量達到 1 MB 為止,以此類推。這些文件就是資料塊。它們一個接著一個聯絡(連結)在一起。為此,每個區塊會根據其內部資料串生成一個特殊的(數字)簽名。如果這個區塊中的資料發生任何變動,即使只改變了一個數字,這個區塊的簽名也會發生改變。這是如何實現的?欲知詳情,請閱讀步驟三中的 雜湊運算 部分。

(校對注:如上文所述,實際情形中的區塊並不是個個都接近區塊大小的上限,實際資料大小要看把區塊打包上鍊的礦工在區塊中記錄了多少交易,而他們並不會等到有了 1MB 交易資料才開始動手。實際情形見下文)

假設區塊 1 中記錄了兩筆交易,分別是交易 1 和交易 2 。這兩筆交易的總資料量達到了 1 MB (實際上一個區塊中包含的交易筆數遠不止這點)。根據這個區塊內的資料串會生成一個簽名。假設這個簽名是 “X32” 。如下圖所示:

請記住,即使區塊 1 中儲存的資料改動了一個數字,也會得到一個完全 不同的簽名 !只要將區塊 1 的簽名新增到區塊 2 中,就可以將區塊 1 的資料與區塊 2 關聯起來。區塊 1 的簽名也包含在區塊 2 的資料串內,因此這個簽名與區塊 2 中的其它資料一樣,成了區塊 2 簽名的資料基礎。如下圖所示:

正是這些簽名將區塊連結在了一起,形成了一條區塊鏈。現在加上區塊 3 ,整條鏈的情況如下圖所示:

現在,假設區塊 1 中的資料被 更改 了。比方說 Damian 和 George 之間的交易被更改了。Damian 向 George 傳送了 500 個而非 100 個比特幣。由於區塊 1 中的資料串改變了,其簽名也相應改變了。更改過資料之後,區塊 1 的簽名不再是 “X32” ,而是變成了 “W10” ,如下圖所示:

這樣一來,區塊 1 的新簽名 “W10” 跟之前新增進區塊 2 資料串的舊簽名 “X32” 產生了衝突。區塊 1 和區塊 2 之間的連結就斷了。這條鏈上的其他使用者就會知道區塊 1 中的資料被更改了。為了維護區塊鏈的不可變性,其他使用者會拒絕同步更改後的交易資訊,依舊維持原有的交易記錄(即 Damian 向 George 傳送 100 BTC )不變,整條鏈依舊保持完整。這就意味著,要想不露痕跡地篡改交易,必須將區塊 2 資料串中區塊 1 的舊簽名替換成新簽名。然而,一旦區塊 2 中的資料串發生變化,區塊 2 的簽名也會隨之發生變化。假設區塊 2 的簽名從 “9BZ” 變成了“PP4” 。那麼區塊 2 和區塊 3 之間的連結就斷了!

區塊鏈上的區塊對所有人都是可見的。因此,如果篡改者真想要不露痕跡地篡改交易,就必須保證篡改之後的區塊仍然都聯絡在一起(否則人們就很容易發現哪個區塊跟其他區塊並不相連,進而判斷出該區塊已經被改過了)。也就是說,改掉一個區塊必須為後續的所有區塊計算新的簽名。可以認為這幾乎是不可能的,但要理解這是為什麼,請看下文。

第三階——生成簽名(雜湊值)

那麼,我們以區塊 1 為例再畫一個示意圖。假設區塊 1 只記錄一筆交易,即 Thomas 向 David 傳送 100 BTC 。需要根據這個資料串生成一個簽名。在區塊鏈上,這個簽名是透過密碼學雜湊函式生成的。密碼學雜湊函式是一個極其複雜的數學公式:將任意資料串作為輸入值代入公式,可以得到一個獨一無二的 64 位輸出值。例如,你可以將 “Jinglebells” 一詞代入這個雜湊函式(雜湊函式的種類有很多,這只是其中一例),得到的輸出為:

761A7DD9CAFE34C7CDE6C1270E17F773025A61E511A56F700D415F0D3E199868

只要這個輸入中有一個字元發生變化,包括改變大小寫或是增加空格和標點,就會得到截然不同的輸出。如果你在這個輸入後面加上一個句號變成了“Jinglebells.”,得到的輸出就變成了:

B9B324E2F987CDE8819C051327966DD4071ED72D998E0019981040958FEC291B

如果我們把句號去掉,還是能得到跟之前一樣的輸入:

761A7DD9CAFE34C7CDE6C1270E17F773025A61E511A56F700D415F0D3E199868

對於同一個密碼學雜湊函式來說,相同的輸入必定會得到相同的輸出,不同的輸入必定會得到不同的輸出。比特幣區塊鏈就是利用雜湊函式為區塊生成簽名的,將區塊中的資料作為輸入,得到的輸出就是區塊的簽名。我們再來看看只含有一筆交易( Thomas 向 David 傳送 100 BTC )的區塊 1 示意圖。

假設區塊 1 中的 資料串 如下所示:

Block 1 Thomas -100 David +100

將這個資料串輸入雜湊函式,得到的輸出(簽名)如下所示:

BAB5924FC47BBA57F4615230DDBC5675A81AB29E2E0FF85D0C0AD1C1ACA05BFF

這個簽名會被新增進區塊 2 的中。再假設現在 David 向 Jimi 轉了 100 BTC ,這筆交易被打包進了區塊 2 。那麼如下圖所示:

區塊 2 的資料串如下所示:

Block 2 David -100 Jimi +100 BAB5924FC47BBA57F4615230DDBC5675A81AB29E2E0FF85D0C0AD1C1ACA05BFF

將這個資料串輸入雜湊函式,得到的輸出(簽名)如下所示:

25D8BE2650D7BC095D3712B14136608E096F060E32CEC7322D22E82EA526A3E5

這就是區塊 2 的簽名。每一個區塊都會透過這個密碼學雜湊函式生成一個數字簽名。雜湊函式種類繁多,比特幣區塊鏈用的是 SHA-256 雜湊演算法。

但是,(僅有上述措施顯然還不夠)如果有人想篡改區塊中的資料,TA 可以在篡改之後生成新的簽名,塞下一個區塊中,然後逐個逐個區塊生成新的簽名,這些改動後的區塊還是形成了一條鏈,他人就沒法分辨出資料已經被更改過了。如何防止這種情形呢?

答案是隻有符合特定要求的雜湊值(簽名)才會被區塊連結受。這就是第四階中介紹的挖礦。

第四階——什麼是合格的簽名?由誰來簽署區塊?

並非所有的簽名都符合要求。區塊鏈協議會預先確定一些要求,比如,在比特幣區塊鏈上,只有以連續的零開頭的數字簽名相對應的區塊才能上鍊。例如,只有在數字簽名以不少於 連續 10 個零 開頭的情況下,對應的區塊才能上鍊。

然而,由第三小節可知,每個資料串對應的雜湊值都是 唯一 的。如果一個區塊的簽名(雜湊值)開頭少於 10 個零呢?為了獲得符合條件的區塊簽名,需要反覆改變輸入的資料串,直到能生成以連續 10 個零開頭的簽名為止。但由於交易資料和後設資料(區塊編號、時間戳等等)需要保持原樣(否則意義就改變了),每個區塊裡面還另外新增了一段特定長度的、可以改動的資料。想把區塊新增到鏈上時,人們可以不斷改變這段資料,直到找到一個合格的簽名,然後確定下這段資料的具體值。這段資料就是區塊的 nonce 。nonce 不是預先確定的資料,而是應實際需要而找出的一串完全隨機的數字(注:圖中所示的其他資料可以由任意字元組成,nonce 只能由數字組成)。

綜上所述,區塊包含:1)交易資料;2)上一個區塊的簽名;3)nonce 。這種透過反覆更改 nonce、對區塊資料進行雜湊運算、尋找合格簽名的過程就叫做 挖礦 ,也就是 礦工 所做的事。礦工投入大量電力,轉化成算力,不斷代入 nonce 進行雜湊運算,直到找到合格的簽名(輸出)為止。礦工手中掌握的算力越多,雜湊運算的速度就越快,搶先找到合格簽名的可能性就越高。這是一種 反覆試錯 的過程,如下圖所示:

區塊鏈網路上的任何使用者都可以透過下載並啟動 挖礦軟體 來參與挖礦,實際上,這就是用他們的硬體計算能力來計算區塊的 nonce 。以比特幣區塊鏈上的 Block #521,477 為例:

可以看出,這個區塊的雜湊值(簽名)和上一個區塊的雜湊值都是以相同數量的零開頭的。找到這樣一個雜湊值並非易事,需要付出大量算力和時間,或者 運氣爆棚 。沒錯,有時候運氣爆棚的礦工在幾分鐘之內就能算出合格的簽名,花的算力也很少。Block #523034 就是一個極其罕見的例子。一個算力很少的小礦工很快就找到了合格的簽名,而其他礦工的算力加起來是他的 7 萬億倍。相比之下,贏得 Powerball 彩票頭獎的概率是 2.92 億分之一,而這位幸運兒挖到礦的概率是中頭獎的 1/24000 。

不要小看這些零。這一小節的重點是,找到一個合格的簽名很 難。

第五階——區塊鏈的不可變性是如何是實現的?

正如第三階中所述,更改某個區塊會導致它的簽名改變,與後續區塊記錄的對不上,從而與後面的區塊斷開連結。要想讓網路中的其他參與者接受這個被更改過的區塊,就要把它跟後面的區塊重新連結起來。也就是說,一個區塊的簽名變了,跟在它後面的所有區塊的簽名都要改變,才能讓別人覺得這是一條前後一致的鏈。

你想起什麼事沒有?

如第四節所述,簽名必須符合要求!雖然更改所有區塊的簽名看似可行,但是要花費很多成本和時間,因此被認為是不可能的,原因如下:

假設有一個礦工 惡意 篡改了某個區塊內的交易,然後根據雜湊運算為這個區塊連同跟在它後面的所有區塊生成了新的簽名,以此讓網路中的其他參與者都接受被篡改過的交易。問題在於,網路中的其他礦工也在原來的鏈上不斷為新的區塊計算簽名。隨著新的區塊不斷上鍊,作惡的礦工也要重新計算這些區塊的簽名。他必須保證所有區塊都連結在一起,包括不斷被新增到鏈上的新區塊。除非這個礦工擁有的算力超過全網其他人的總算力,否則他永遠趕超不了其他礦工。

(校對注:這一段的實際意思是,只要礦工都在自己看到的最長區塊鏈上挖礦,所有算力就會隨時間自然匯聚到一條主鏈上,而攻擊者只有製造出一條比當前主鏈更長的鏈,才能成功改變大家共同認可的交易記錄。這種始終以最長鏈為主鏈(有效鏈)的原則,就是所謂的 “最長鏈規則”,是 Nakamoto Concensus(中本聰共識機制)的一部分。另,並不是所有區塊鏈都採用了中本聰共識。)

如今有數百萬使用者在比特幣區塊鏈上挖礦,由此可以推定某個惡意參與者或實體的算力是不可能超過全網剩餘算力的。這就意味著網路中的其他參與者不可能接受任何對區塊鏈的修改,從而實現了區塊鏈的不可變性。一旦資料被新增到區塊鏈上,就無法再修改了。

只有一種例外,就是惡意參與者的算力真的超過全網其他人的算力總和。從理論上來說,這種情況下是有可能篡改區塊鏈的(即改變大家共同認可的歷史記錄)。這就叫做 51% 攻擊(我寫了另一篇文章來解釋這種情形),過去也有很多區塊鏈遭受過這種攻擊。

(校對注:目前為止,遭受過 51% 攻擊的著名區塊鏈有 bitGold、Verge、Ethereum Classic。)

實際上,對比特幣區塊鏈發動 51% 攻擊所能獲得的收益遠抵不上高昂的攻擊成本。要想獲得足夠多的算力,除了要負擔硬體、冷卻裝置和儲存空間方面的成本,還要承擔被千夫所指的風險,更重要的是,會對被攻擊區塊鏈的生態系統造成極大的損害,攻擊所得的收益也會大幅貶值。51% 攻擊實際上就是以一己之力對抗區塊鏈上的其他使用者。這也就是為何參與挖礦的使用者人數越多,整條鏈的安全性就越高。

恭喜你已經又進了一階!現在,你應該已經理解(大型)區塊鏈被認為具有不可更改性的原因了吧。不過現在又出現一個很重要的問題:如何防止礦工將偽造的交易資料新增到區塊鏈上?從技術上來說是做不到的。關於區塊鏈交易的詳細解釋可參見這篇文章。

(校對注:只有私鑰掌控者才能花費相應地址中的資金,而礦工並不知道你的私鑰,他人只能透過你公開的公鑰來驗證某筆交易是不是你發起的。所以偽造交易並不可行)

第六階——如何治理區塊鏈?由誰決定規則?

……區塊鏈協議自動以最長鏈上的交易記錄為準,將這條鏈視為代表絕大多數參與者的鏈。打造最長鏈需要消耗全網絕大部分算力。被篡改過的區塊就與最長鏈斷開了連結,因此會被全網絕大多數節點自動拒絕。

在比特幣區塊鏈上, 所有交易歷史和錢包餘額都是公開可見的(blockchain.info)。任何人都可以檢視任一錢包的餘額情況,或是始自(2009 年 1 月 3 日的)第一筆交易的所有交易記錄。雖然任何人都能檢視錢包餘額,但是這些錢包的所有者大多都是不為人知的。例如,一個錢包裡存有 6.9 萬個比特幣,至本文截稿之時價值約 5 億美元。這個錢包在 2015 年 4 月使用過一次,之後就再也沒有過交易。

(校對注:這一部分其實並沒有回答 “由誰決定規則” 的問題,只大概說明了 “根據現有規則,這種技術是可以實現的”。公鏈治理是一個複雜的問題,也超出了這篇文章需要說明的範圍了。)

第七階——這些對密碼學貨幣有何意義?

密碼學貨幣從本質上來說都是比特幣的變體。絕大多數加密貨幣都是按照自己的區塊鏈協議搭建的,遵循不同於比特幣的規則。比特幣應當被歸類為一種貨幣,也就是說它明確具備貨幣功能。門羅幣也是一種具有相同功能的加密貨幣,不過它的區塊鏈協議還增加了一些規則來增強隱私性(提高交易溯源的難度)。

不過,用區塊鏈發行的資產可以被賦予很多種不同的用途,這點由發行方決定,如此發行的資產一般被稱為“代幣”。這些代幣可以賦予其所有人某種權利,例如博彩執照、社交媒體渠道、 水電等等。所有這些資產交易都記錄在不同的區塊鏈上,並且可以透過幣安之類的交易所進行線上交易。

代幣其實是一種新型網際網路貨幣,可能會影響到一部分行業,其中一個典型的例子就是股票市場。在未來,公司股份之類的產權很有可能會以代幣的形式儲存到區塊鏈上。區塊鏈不僅限於以代幣的形式代表實物價值,也可以安全地記錄病歷、身份、歷史記錄、納稅記錄等資料。這就是區塊鏈技術的偉大之處,還不提區塊鏈的另一個重要特性:去中心化。

原文連結: https://blog.goodaudience.com/blockchain-for-beginners-what-is-blockchain-519db8c6677a
作者: Jimi S.
翻譯&校對: 閔敏 & 阿劍

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;