1. 程式人生 > >零基礎科普|區塊鏈到底是個什麼玩意兒?小白也能秒懂!

零基礎科普|區塊鏈到底是個什麼玩意兒?小白也能秒懂!

作者:Mohit Mamoria是新聞週刊《Unmade》的策劃人,熱衷於將未來的創新想法送進您的信箱。

譯者:任重遠,萬向區塊鏈區塊鏈業務專家,參與過工信部區塊鏈白皮書撰寫工作,對於區塊鏈在保險和信託行業的應用有豐富的實踐經驗。接觸區塊鏈領域兩年有餘,致力於推進區塊鏈技術在實際業務場景的落地,以及對於分散式商業價值的研究探索。

除非你遠離塵世,否則你肯定聽說過比特幣和區塊鏈這兩個名詞。畢竟,它們是媒體熱捧的金融科技弄潮兒。無論是挖過加密貨幣,亦或者是完全不理解它們原理的人都在熱烈討論。我有很多非技術領域的朋友纏了我幾周要我解釋一下什麼是比特幣和區塊鏈。而市面上和他們一樣的人成百上千。我將用樸實無華簡單可懂的詞彙,向大家解釋一下。

區塊鏈:為什麼我們需要這樣一個複雜的東東?

“對於每個複雜的問題,總是存在清晰、簡單、但是錯誤的答案”。

—— H.L.Mencken

不像其他那些網路上的帖子,會從原理上循循漸進,定義區塊鏈是什麼。我們將從問題入手,理解什麼是區塊鏈。

想象一下,JOE是小編我最好的朋友,他喜歡滿世界旅行。某次旅行的第五天,他打電話給我說:“哥們,江湖救急,我的錢要花光了!”

我回答:“馬上打來!”然後就結束通話了電話。

 然後我跑去銀行櫃檯,排了四個小時隊,終於來到了櫃員面前,說:“請你幫我轉1000塊錢給JOE”。

 櫃員看了下我的賬戶餘額,檢查下我是否有1000塊錢用來轉賬。(當然有了)然後就幫我執行了下面的操作。(有人可能會問為啥不用支付寶?不要在意這些細節嘛,我只是想把場景描述得更簡單清晰一些。)

 我打電話跟JOE說:錢轉你了,接下來你去銀行看看,順便把我轉你的1000元拿出來。

發生了什麼?我和JOE同時信任銀行來管理我們的鈔票。期間並沒有任何紙質的鈔票進行轉移。僅僅需要在賬本上面記了筆賬。更準確得說,賬本上面的這筆錢其實並不屬於我或者JOE。

這也是現有系統的問題:人們之間想要建立信任,必須要依賴於第三方機構。

多年以來,我們都是依靠著這些第三方機構來實現互現信任。現在問題來了:依賴這些第三方機構會有什麼問題?

萬一第三方機構中由於各種政策、市場、系統等因素,發生了點小問題;萬一銀行機房著火了,銀行系統癱瘓;萬一櫃員輸入的不是1000元,而是1500元;萬一他想拿著你的賬戶做點其它事情......

多年以來,我們一直是把全部雞蛋都放在一個籃子裡,其實其他人也都這樣。

有沒有一種系統可以讓我們撇開銀行仍然可以進行轉賬交易?

為了回答這個問題,我們必須仔細想想,靜下心來問一個更清晰明確的問題。

想象一下,轉賬是什麼?轉賬就是在賬本上面記了筆賬。所以這個問題可以變得更加直接了。

有沒有一種方法能讓我們自己來記賬而不需要其他人來介入?

現在我們的問題更加值得探索了。你可能已經猜到答案,區塊鏈就是這個問題的答案。

區塊鏈能夠讓我們來自己控制記賬,而不是讓給其他人來替我們做。

大家還智商線上嗎?因為接下來幾個問題可能會衝擊你的思維,我們將學習分散式的記賬是如何工作的。

告訴我吧,這貨是如何工作的?

如果我擔心被人逮住的話,我會私藏些比特幣。如果有足夠多的人這樣去想,這預言本身就能成為事實。

—— 中本聰,2009年

這種方式需要有足夠多的人一起參與,這些參與者們都不想要依賴第三方進行轉賬。因為他們自己能夠完全管理自己的賬本。

需要多少人?至少三個。

我們假設10個人想要從銀行或者其他任何第三方機構抽身。按照共識,他們可以一直擁有各方詳細的賬戶內的資訊,而並不需要知道對方的身份資訊。

1.一個空的資料夾

起初,每個人都有一個空資料夾。活動繼續,所有這10個人開始往自己的空資料夾裡面塞紙。這一堆紙將形成用來記錄並追溯交易的賬本。

2.當一筆交易發生的時候

接下來,這十個人每個人都拿著一張白紙和一支筆。每個人都準備記錄發生在他們之間的任意交易。

現在,如果2號想要給9號十塊錢。為了實現這筆交易,2號對著每個人大喊:“我要轉10元給9號啦!請大家每個人都幫我記錄在你們的紙上!”

每個人檢查了一下自己手頭的賬本(這些賬本都一樣),是否2號有夠10塊錢來轉給9號。如果她的餘額足夠,每個人都提起筆,把這件事記錄到了他們各自的白紙上

每個人都記錄完成以後,這筆交易才被認為是完成了。

3.交易持續發生

時光荏苒,越來越多的人蔘與進入這個組織,並想要把錢轉給其他人。無論何時,只要他們想要達成一筆交易,他們就會把訊息告訴給所有人。只要一個人聽到了這個訊息,他/她就會將其記錄在自己的紙上。

這樣的練習,將會持續到每個人把自己手上的賬本全部寫滿。假設一頁紙能夠記錄十筆交易資訊,只要第十筆交易完成,那每個人的空間都會被寫滿。

是時候把這張紙塞進資料夾,然後拿出來一張新紙來重複剛才步驟2中的流程了。

4.把紙塞進資料夾

在我們把紙塞進我們的資料夾之前,我們需要用一個特殊的鑰匙將這張紙戳上一個印章,這也是所有參與者都需要達成協議的操作。通過戳印,我們將確保,一旦這張紙的副本被塞進其他人的資料夾,沒有其他人能夠修改這張紙上的內容,無論今天,明天,還是在一年以後都沒有人可以更改。一旦紙張放進資料夾,它將永遠靜靜得躺在資料夾中,保持戳印狀態。如果每個人都信任這個資料夾,那他們也都能夠信任資料夾中的紙張以及紙張上的內容。這個戳印,就是這種方法的核心所在。

【Jargon Box】用來保護檔案資訊的工作叫做“挖礦”,為了儘量易於理解,我們暫時稱之為戳印。

早期,第三方機構/中間人獲取了我們的信任,讓我們以為無論他們在賬本上記了啥,我們都可以被及時通知並知曉一切。在一個分散式以及去中心化的系統中,戳印將替代他們提供信任。

有意思!那我們如何在紙上戳印?

在我們開始學習紙上戳印之前,我們先要理解印章大概是如何發揮作用的。作為知識點的預習,我想先讓大家瞭解一下一個有趣的新玩意,我稱之為 —— 魔法機器。

想象一下,一臺機器被周圍厚厚的圍牆上下覆蓋。如果你拿個裝著東西的箱子,想要從左邊放進機器,機器會幫你把它變成另一個裝著其他東西的箱子並從右邊傳送出來。

【Jargon Box】這個機器被稱為“雜湊公式”,但在這裡實在是不適合討論具體的技術細節,所以今天我們稱之為“魔法機器”。

你把一個數字4從左邊放進機器,然後你會發現右邊傳送出了一些單詞“dcbea”。

機器是如何把4變成這些單詞的?沒人知道。但是,這個過程是不可逆的。如果你把單詞“dcbea”再從右邊塞回機器,無論如何都沒有辦法逆推出左邊輸入的資訊。但是每次你把數字4從左邊塞進機器,從右邊輸出的始終是這些單詞“dcbea”。

讓我們試一下把其他數字塞進機器,比如26。

這次從機器的右側,我們得到的結果是單詞“94c8e”。非常有趣吧!單詞中也能包含一些數字。

現在問題來了:

如果我想要在機器的右側得到以三個0為開頭的五位單詞,比如說000ab,00098或者000fa之類的,我們需要從左邊把什麼樣的資訊輸入給機器呢?

請先想一想這個問題的答案。

前面已經提到過,這個機器有個機制,就是我們知道了右邊輸出結果,但是沒有辦法去逆推左邊輸入的資訊是什麼。所以我們如何回答剛才問的這個問題?

我能想到的方法,就是把所有的數字一個個從左邊往機器裡面塞,直到我們看到機器右邊給出的結果是以三個0開頭的。

樂觀得來看,可能只需要嘗試幾千次,就能夠找到問題的答案啦。

雖然想要找到這個問題的答案需要花費大力氣,來驗證左邊的數字是不是正確答案。但機器可不會犯錯,只要左邊數字不變,右邊輸出也不會變,所以想要驗證左邊是不是正確答案非常簡單。

如果我給你一個數字,72533,然後問你:“這個數字如果塞進機器的話,右邊輸出的結果是不是以三個0開頭?”

你所需要的,只是把72533從左邊扔進機器,然後在右邊看機器輸出什麼。哦,就是它!

這個機器最重要的原理就是 —— “已知一個輸出,想要得到原始的輸入結果是非常難的。但是有了輸入,想要計算出輸出結果是非常簡單的”。

讓我們再次銘記魔法機器的這一特性(或者雜湊公式):

已知一個輸出,想要得到原始的輸入結果是非常難的。但是有了輸入,想要計算出輸出結果是非常簡單的。

如何使用這些魔法機器來給紙張戳印?

我們將使用魔法機器來為紙張生成一個戳印。和先前一樣,我們會從易於理解的場景來進行描述。

想象一下,我給了你兩個盒子。第一個盒子裡面裝著數字20893。然後問你:你能夠幫我找到這樣一個數字嗎?它加上20893,得到的結果塞進魔法機器,然後會輸出一個以三個0開頭的結果。

這個場景和我們前面描述的很像,也就是隻有我們不停嘗試,才可能找到一個數字的輸出結果是以三個0開頭。

通過幾千次的嘗試,我們終於找到了這樣一個數字:21191,因為21191+20893=42084,把42084從左邊塞進魔法機器,右邊的到的結果能夠滿足要求。

在這樣的場景下,數字21191成為了20893的戳印。假設有一張記錄紙,上面寫著20893。為了把紙張給戳印(保證沒有人能夠修改內容),我們將把一個印著21191的徽章戳在紙上。一旦戳印數字21191被印在了紙上,這張紙就被戳印了。

【Jargon Box】這個戳印數字被稱為“工作量證明”,意味著這個數字是經過不懈努力的計算得到的證明結果。在這裡,我們習慣稱它為“戳印數字”。

任何人想要驗證這張紙是不是被人改動過,他只需要這樣做 —— 把紙上的資訊,加上戳印數字放進魔法機器裡。如果機器給我們的結果以三個0開頭,那我們認為紙上的內容沒有被改動過。如果結果不是以三個0開頭,我們就可以把這張紙給扔了,因為內容一旦被改動過,這張紙就完全沒有價值了。

我們將使用一種相似的戳印機制來把我們所有用來記賬的紙給戳印一遍,然後把這些紙放進對應的資料夾裡面。

終於,可以在紙上戳印了......

為了把這些記錄著網路內交易資訊的紙張戳印,我們需要找到一個數字,當它加上交易清單然後塞進魔法機器以後,我們可以在機器的右側得到一個以三個0開頭的單詞輸出。

 注:我前面使用短語“三個0開頭的單詞”只是舉個例子。用來解釋雜湊公式是如何工作的。真實的場景遠遠要比這複雜的多。

機器花費時間和電能來計算輸出結果,從而去尋找正確答案,一旦找到正確的答案,這張紙就會被帶著答案數字一起戳印。如果有人想要去更改紙張上的內容,戳印數字允許大家去魔法機器驗證紙張是否被人更改過。

既然我們已經瞭解過紙張戳印了,我們回過頭來繼續看看剛才提到的在紙上已經記錄的十筆交易,現在已經寫滿了,沒有空間再記錄新的交易。

一旦每個人用完了紙,沒法記錄更多的交易。大家一起使用魔法機器計算戳印數字。第一個在網路中找到正確戳印數字答案的人,會把這個答案告訴網路裡所有其他的人。

一聽到戳印數字,每個人驗證一下這個數字是不是正確的答案。正確的話,每個人把這個數字戳印在自己的記錄紙上,然後放進自己的資料夾。

但是如果有個人對給出答案的7號小李說,這個戳印數字不能得到三個0開頭的輸出,不是正確答案,會怎麼辦呢?這種情況很少見,可能的原因如下:

小李可能聽錯了網路中的交易。

小李可能聽漏了網路中的交易。

小李可能嘗試作弊,或者偷改交易內容。

無論是什麼樣的原因,7號小李只有一個選擇,把自己的記賬紙作廢,然後把別人的紙張複製一份,讓他放進資料夾。只有他把正確的記賬紙放進資料夾,否則他無法繼續記錄任何交易,也就是說他被記賬網路給驅逐了出去。

只要大部分人認可這個數字戳印,那就是個誠實的戳印數字。

當大家都知道其他人會計算,並通知大家戳印數字的結果,那為什麼每個人都要花時間精力去計算一遍呢?為什麼不找個沙發躺下來,舒舒服服等別人來宣佈結果?

這是個好問題。其實這也是全域性中非常刺激的一點。區塊鏈網路中的每個人都渴望獲得獎勵。第一個把正確的戳印數字計算出來以後,將會為他的付出獲得獎勵。(付出包括電腦的使用成本和電費)

想象一下,如果5號小張計算出來了正確的戳印數字,他得到了一筆獎勵,例如獎勵1元錢。這1元錢是憑空產生的,換句話說,5號小張的賬戶餘額就會增加1元,而不需要任何人的賬戶裡減少1元。

這也就是比特幣存在的意義。比特幣是區塊鏈(又或者稱為分散式賬本)上的第一種交易貨幣。越來越多的人願意付出自己的能力,維護比特幣網路的穩定,從而獲得比特幣作為獎勵。

當足夠多的人擁有了比特幣之後,比特幣的價值就提升了,使得更多的人想要擁有比特幣;這也正向提升了比特幣的價值;價值提升吸引了更多人;而更多人帶來了比特幣價值的提升。

這是一種迴圈。

獎勵使得大家都願意努力維護區塊鏈網路的穩定。一旦每個人把記賬紙塞回資料夾,他們拿出了一張新的白紙,然後一遍遍重複前面所有的操作。

【Jargon Box】把這張記賬紙想象成擁有一堆交易資訊的區塊,把資料夾想象成一張張紙(區塊)形成的鏈條,他們的組合成為了區塊鏈。

所以,區塊鏈其實就是這樣工作的......

除了有些我還沒有告訴你的內容。

想先一下,資料夾裡面已經有五張紙了 —— 每張紙都打上了戳印數字。要是我回去找到第二張紙,然後改動了紙上的一筆交易資訊呢?戳印數字是不是允許任何人來檢測交易資訊中的錯誤?那如果我為了更改後的結果,再計算一個新的戳印數字,再重新戳在記賬紙上面呢?

為了避免類似的問題,也就是有人會回去修改某張記賬紙(區塊)以及戳印數字,在計算戳印數字的時候其實有個小小的技巧。

保護戳印數字免於更改

還記得我告訴你 —— 我給你兩個盒子,一個放著數字20893,另一個是空的數字等你自己去用數字做嘗試,來找到戳印數字。事實上,為了計算區塊鏈上的戳印數字,其實一共有三個盒子(而不是兩個) —— 其中兩個是預填充的,一個是需要被計算的。 

當這三個盒子的內容都被填寫,並送入魔法機器,右側的輸出結果必須滿足幾個條件。

我們已經知道,一個盒子包含交易清單,一個盒子將會裝著戳印數字。第三個盒子,包含著前一張記賬紙經過魔法機器輸出的結果。

通過這個小把戲,我們確保了每張紙都需要緊密和前一張紙關聯。所以,如果一個人想要更改一張歷史記賬紙,他必須去改變這張紙以後所有記賬紙上面的資訊,來保證他的更改是可信的。

如果我們在文章中假設的十個人中,有一個想要作弊,更改區塊鏈(包含所有記賬紙交易資訊的資料夾)裡面的資訊,他必須去調整好幾張記賬紙,並且計算出新的戳印數字。這樣的工作量是相當大的。基本上,網路中的一個不誠實的人,很難擊敗剩下那九個誠實的人。

如果不誠實的人想要篡改記錄,會發生什麼呢?從那張被篡改資訊的紙開始,他將會網路中創造另一條區塊鏈,但這條鏈,永遠不會被其他誠實的人所接受 —— 因為一個人計算的速度不可能打敗另外9個誠實人共同的努力。所以,這樣保證了區塊鏈網路中最長的鏈其實就是最誠實的鏈。

當我告訴你不誠實的人,無法打敗9個誠實的人,你的腦中是不是又有啥新想法了?

假設,不止一個人,而是6個人都變得不誠實呢?

在這種情況下,原有的協議將會徹底崩塌。這也是常說的“51%攻擊”。如果網路中大部分人都決定要進行欺詐行為,那這協議就被人故意撕毀了。

這也是唯一已知的造成區塊鏈崩潰的原因。不過,這點基本不太可能發生,因為這是建立在大部分都是不誠實的基礎上的。

所以,這就是區塊鏈。如果你看到有人說:“臥槽,區塊鏈到底是啥”,你知道該給他們看啥了吧。把我們的連結放入你的收藏夾!

本文為萬雲BasS編譯,未經允許不可轉載,歡迎關注萬雲BasS公眾號,獲取關於區塊鏈技術更多幹貨!