從小白白到大白白之初識區塊鏈(如何理解區塊鏈)

區塊鏈:爲何咱們須要這麼複雜的東西?網絡

「每個複雜的問題都有一個清晰、簡單而且是錯誤的答案。」 ——H.L.Mencken學習

 

放鬆點,用漫畫帶你認識:區塊鏈

想象一下,Joe是你最好的朋友。他正在海外旅遊。在他假期的第五天,他給你一個電話,「Dude,我把錢花光了,江湖救急。」你回答」立刻匯款「而後掛掉電話。加密

 

 

而後你打電話給你銀行帳戶的經理,」請從個人帳戶轉1000美圓到Joe的帳戶上「。spa

你的帳戶經理回覆,」收到,先生「。3d

他打開帳簿,查看你的帳戶以肯定你有足夠的餘額轉出1000美圓給Joe。由於你是個土豪,帳上還有大量餘額,所以,他在帳簿上登記了一個條目,正以下圖所示:blog

 

 

你打電話給Joe,告訴他,「我已經轉帳了。下一次你去銀行的時候,你就能夠取出我剛剛轉過去的1000美圓。」資源

 

 

發生了什麼事?你和Joe都委託銀行來管理大家的錢。並無物理票據的實際流動來轉移大家的錢。所需的一切不過是帳簿上的一個條目。或者更準確一點,帳簿上的一個既不受你和Joe控制、也不被大家所擁有的條目。字符串


這就是現有體系的問題。hash



爲了在咱們之間創建互信,咱們依賴於獨立第三方。

 

多少年了,咱們依賴於這些中介以信任彼此。你也許會問,「依賴他們有什麼毛病?」


毛病在於,它們清一色只是數字。若是要在社會上引起一場混亂,它須要的一切不過是一我的或者一個機構走向貪腐墮落,不管是有意識地,仍是無心識地。

 

  • 要是記錄下這筆轉帳的帳簿在一場大火中燒成灰燼了呢?
  • 要是,你的銀行經理搞錯了,寫了個1500美圓而不是1000美圓呢?
  • 要是,他根本就是有意爲之呢?

 

多年以來,咱們一直把本身全部的雞蛋都放在一個籃子裏,而且仍是別人的籃子。


會有這樣一個系統嗎,在那裏咱們無需銀行就能夠轉帳?


要回答這個問題,咱們須要挖得更深,問本身一個更好的問題(畢竟,只有更好的問題纔會導向更好的答案)。


想一下,轉帳意味着什麼?只是帳簿上的一個條目而已。那麼更好的問題將是——
是否有某種手段,能夠在咱們中間維護那本帳簿,而不是讓其餘人來爲咱們操做?


如今,總算有一個值得探究的問題了。而答案你或許已經猜到了。區塊鏈就是這個深奧問題的答案。


它就是一種在咱們中間維護帳簿而非依賴其餘人來爲咱們代勞的方法。


你能跟上來嗎?很好。由於如今許多問題已經開始在你腦海中爆炸,咱們將學習這一分散式帳簿是如何工做的。



好吧,告訴我,它是怎麼工做的?

 

這一方法的要求是:必須有足夠的人不想依賴第三方。只有這樣,這羣人才能靠本身來維護他們的帳簿。


「只讓人們在比特幣帶來的交易中獲取比特幣,或許是有意義的。一旦有足夠的人這樣想,它就會變成一個自我實現的預言。」——中本聰,2009


多少人才算是夠?至少要3個。打個比方,咱們假設有10我的想拋棄銀行以及任何第三方。根據相互之間的協議,他們能夠一直擁有彼此的帳號信息——但不知道其餘人的真實身份。

 

 

1.一個空的文件夾



一開始的時候,每一個人都掌握着一個空文件夾。正如咱們要進行的那樣,這10我的都將持續向他們的當前的文件夾中添加紙張。而這些紙張的集合將造成追蹤交易的帳簿。



2.一筆交易發生的時候



而後,這個網絡中的每一個人都將有紙筆在手。每一個人都準備着記錄下該系統內部發生的任何交易。
如今,假設#2想要轉10美圓 給#9。
爲了完成此次交易,#2吼了一嗓子,告訴每一個人,「我想轉10美圓給#9。你們都在本身的小本本上記下來!」

 

 

每一個人都瞄一下#2是否是有足夠的餘額能夠轉10美圓給#9。若是她有足夠的錢,每一個人都在本身的空白頁上爲這筆交易作了一個記錄。

 

 

這樣,一筆轉帳就被認爲是完成了。



3.交易繼續發生



時間過得很快,這個網絡中的更多人想要轉帳給其餘人。不管何時他們想要作一筆交易,他們就向其餘全部人宣告這筆交易。不管是誰,一聽到這個宣言,就在他/她本身的紙張上寫下來。
這樣的實踐持續進行,直到每一個人都用完了他們當前頁的空間。假設1頁紙能夠記錄10筆交易,一旦10筆交易完成,每一個人就都用完了空間

 

 

紙張被寫滿的時候


那麼,是時候該將這頁紙存到文件夾裏面,而後拿出一張新的紙、重複上述步驟2了。



4.存放紙張



在你將這頁紙存入咱們的文件夾以前,咱們須要使用該網絡中每一個人都贊成的惟一一把鑰匙來密封它。經過密封,咱們能夠保證,一旦該頁紙的備份已經被存入每個人的文件夾,沒有人可以對它做出任何更改——不止今天,不止明天,也不止是一年之後。一旦放入文件夾中,它將永遠呆在文件夾裏面——被封存起來。並且,若是每一個人都信任這個封條,那麼每一個人都會相信該頁紙中的內容。而這頁紙的封存手法,就是這一方法的關鍵。

[術語箱] 這一用來保護紙張內容的東西被人們稱爲「礦」,但爲了簡化它,咱們仍是稱之爲「封條」。



 

早些時候,第三方/中介爲咱們賦予信任,其形式是:不管它們在帳簿上已經寫了什麼,都永遠不可變動。在一個分散式的、去中心化的系統中,就像上述咱們的系統同樣,這種封條將提供信任替代。

 

因缺斯汀!那咱們怎麼密封這份記錄呢?



在咱們學習如何能密封這頁紙以前,咱們要知道,通常而言,封條是怎麼工做的。要作到這些,先決條件是學習一些東西,我喜歡稱之爲……

 

 

魔法機器



想象一個被厚牆圍起來的機器。若是你從左邊塞一個存有東西的盒子進去,它就會吐出一個帶着其它東西的盒子。


[術語箱] 這個機器被稱爲「哈希方程」,但咱們又沒有心情搞得那麼專業。因此,今天,它們就叫「魔法機器」。

 

 

魔法機器(又叫作 哈希方程)

 

假設,咱們從左邊塞了個數字4進去,咱們會發現,它在右邊吐出了下列字串:‘dcbea’。


數字4 是在怎麼轉化成這串字符的?沒有人知道。並且,這個過程是不可逆的。獲得了這串字符‘dcbea’,也不可能搞清楚這機器從左邊接收到了什麼。可是,任什麼時候候,你輸入數字4給這臺機器,它都老是會吐出一樣的字符,‘dcbea’。

 

 

來試試發送一個別的數字進去。26,怎麼樣?

 

 

hash(26)==94c8e
此次咱們獲得了‘94c8e’,看來字符一樣能夠包含數字。有意思!
假如我如今問你以下問題,事情會變成什麼樣?

 

 

「你能不能告訴我,要想在機器右邊獲得三個0開頭的一串字符,我該從左邊輸入什麼東西進去呢?好比,000ab,或者,00098,或者,000fa,或者其它狀況中的任何一個。」

 

 

想想這個問題吧。


我已經告訴過你,這臺機器有個屬性:在咱們從右邊獲得指望的輸出值以後,咱們沒法計算出來什麼是咱們必須從左邊輸入進去的。給咱們這樣一臺機器,咱們如何能回答我問的那個問題?


我能夠想出一個辦法。爲何咱們不一個接一個地遍歷宇宙中全部數字,直到咱們獲得一個三個0開頭的一串字符?

 

 

嘗試全部數字以算出須要的輸入值



樂觀估計,通過幾千次嘗試以後,咱們最終會獲得將在右邊產生要求的輸出值的一個數字。

 

 

在給定輸出值的時候,要算出輸入值是極其艱難的。但與此同時,若是預測的輸入值能夠產生須要的輸出值的話,它又是極爲容易驗證的。要記住,投入一個一樣數字,這臺機器每一次都會吐出一樣的字符。


若是我給你一個數字,好比72533,而後問你一個問題:「這個數字,輸入這臺機器以後,會產生一個以三個0開頭的字符串嗎」,你以爲要得出答案有多難呢?


你要作的一切,不過是丟這個數字進去,而後查看咱們在右邊獲得了什麼。就這樣。


這樣的機器最重要的屬性就是——「給定一個輸出值,要算出輸入值是極端困難的。可是,給定輸入值和輸出值,要檢驗該輸入是否會致使該輸出,倒是很是容易的。」


在這片文章剩下的部分,咱們要記住這臺魔法機器(或者說哈希方程)的這一屬性:



「給定一個輸出值,要算出輸入值是極端困難的。可是,給定輸入值和輸出值,要檢驗該輸入是否會致使該輸出,倒是很是容易的。」

如何用這樣的機器來加密一份文件?



咱們將使用這臺魔法機器爲咱們的紙張產生一個密封條。按照慣例,咱們將從一種想象的情形開始。


想象我給你了兩個盒子。第一個盒子裝着數字20893。而後我問你,「你能不能找出一個數字,加上裝在第一個盒子裏面的數字之後,輸進這臺機器,最終會給咱們一個以三個0開頭的字符?」

 

 

這種情形跟咱們在以前看到的很類似,而咱們已經知道,算出這樣一個數字的爲惟一方法就是窮舉整個宇宙中每個可能的數字。


又是幾千次嘗試以後,咱們會偶然發現一個數字,好比21191,加上20893之後(好比:21191+20893=42084)輸入機器,將產生一串符合咱們要求的字符。

 

 


在這個例子中,數字21191就成了數字20893的封條。假設如今有一張紙,數字20893寫在上面。爲了密封這頁紙(好比:使得沒有人能更改這頁紙上的內容),咱們將蓋一個帶有標籤‘21191’的徽章在上面。一旦密封數字(好比:21191)被戳在紙上,這頁紙就被密封了。

 

 

密封數字



[術語箱] 密封數字又被稱爲「工做量證實」,意思是,這一數字證實了爲了計算出它來已經付出的努力。爲了咱們的目的,咱們最好仍是稱之爲「密封數字」。
若是任何人想驗證這頁紙是否已經被替換了,他須要作的一切不過是——將這頁紙上的內容與密封數字加在一塊兒、把和值輸入那臺魔法機器。若是機器給出了一串三個0開頭的字符,那麼內容就沒有被改變。若是出現的字符不能知足咱們的要求,咱們就能夠丟掉這頁紙了,由於它的內容已經有了水分,沒有任何用處了。
咱們將使用一個簡單的密封機制來封存全部的記錄,最終在咱們各自的文件夾中編排好它們。

最後,封存咱們的文件



要密封包含着咱們網絡中交易內容的記錄,咱們將須要算出一個數字,該數字在添加到交易記錄清單上、輸入機器之後,可使咱們獲得一串三個0開頭的字符。

 

 

注意:我一直在使用的「三個0開頭的字符」,只是一個例子。它闡明瞭哈希方程是怎麼工做的。實際當中的挑戰要比這個複雜得多。

 

咱們會在這機器上花費時間與電力,然而一旦咱們算出那個數字,這頁文件就被那個數字封存起來。永遠永遠,若是有人嘗試改變這頁紙上的內容,這個密封數字容許任何人去驗證這頁紙的完整性。


如今,咱們既已知道封存記錄的手法,咱們將回到咱們在這張紙上寫完了10條交易、沒有空間書寫更多記錄的時候。


一旦每一個人都用盡一頁紙的空間、沒法記錄進一步的交易,他們就開始賣力地計算該頁紙的密封數字,使得它能夠被藏入文件夾中。在網絡中,每一個人都進行這個計算,而最先算出密封數字的那我的會向其餘全部人宣佈這個數字。

 

 

聽到密封數字以後,每一個人都當即驗證它是否能產生要求的輸出值。若是是的,每一個人都爲他們的紙張標上這個數字,而後把紙張放入文件夾中。


可是,若是對某人,好比#7來講,那個被宣佈的密封數字沒法產生要求的輸出值,怎麼辦?這種情形可並很多見。可能的緣由有:

 

  • 他可能聽錯了以前在網絡中宣佈的交易
  • 他可能寫錯了以前在網絡中宣佈的交易
  • 他可能在記錄交易的時候試圖做弊,爲了謀私,或爲討好網絡中的某些人

 

不管緣由是什麼,#7只有一個選擇——放棄他的記錄、從其餘人處得到拷貝,以使他也能夠將紙張放入文件夾。除非他不將他的紙張放入文件夾,他也就沒法繼續記錄進一步的交易,這會所以禁止他成爲網絡中的一員。

 

大部分人贊成的密封數字,不管是它是什麼,都會成爲那個可信的密封數字。

 

但是,若是他們知道其餘人會算出它而後宣佈它,爲何每一個人都要耗費資源來進行計算呢?爲何不坐視不理、等着抱大腿呢?

 

好問題。這就是激勵加入到這幅圖景的地方。每個區塊鏈的成員都有資格得到獎勵。第一個計算出密封數字的人將獲得免費的金錢做爲對他的努力(好比:付出的CPU算力和電力)的獎勵。


簡單地設想一下,若是#5爲一頁記錄算出了密封數字,他獲得了一些免費的錢做爲獎勵,假設是憑空鑄造出來的1美圓。換句話來講,#5的帳戶餘額增長了1美圓,同時沒有任何人的帳戶餘額有所減小。


這就是比特幣變爲現實的方式。它是在區塊鏈(好比:分散式的帳簿)上被用來交易的第一種貨幣。同時,人們被獎勵以比特幣做爲回報,以使在網絡上,(計算密封數字的)努力會繼續進行。


當足夠多的人持有比特幣,比特幣會升值,使得更多人想要比特幣;這會使比特幣進一步升值;這升值又使更多人想要比特幣;這願望又進一步使比特幣升值;如此循環往復。

 

這種獎勵,使得網絡中的每個人都不停歇地工做。

 

一旦每一個人都往文件夾中疊進一頁紙,他們會拿出一頁空白紙張,再一次重複整個過程——直至永遠。


*[術語箱] *將一頁紙想象爲記錄交易的一個區塊、把文件夾想象爲紙張(區塊)的鏈條,結果是,它變身成了一個區塊鏈。


老鐵,這就是區塊鏈的工做方式。






然而。我還有一件小事沒有告訴你。


想象文件夾中已經有5頁紙——都被一個密封數字加密了。若是我回溯到第二頁紙、改動交易記錄以謀私,會怎麼樣?密封數字會讓任何人察覺到交易記錄中的矛盾,對嗎?那假如我更進一步、爲修改後的交易記錄計算出了一個新的密封數字、將這替代品戳到紙上呢?
爲了防止這個問題,即有人回溯而且修改紙張(區塊)和密封數字,這裏還有一個解釋,關於一個密封數字是怎麼計算出來的。



防止對密封數字的修改

 

還記得我是怎麼跟你說的嗎?我給了你兩個盒子——一個裝着數字20893,另外一個空的讓你來計算?實際上,爲了在區塊鏈上算出密封數字,有三個盒子,而非兩個——兩個提早裝好的,一個被用來計算的。


而當全部三個盒子裏面的內容加起來、輸入魔法機器後,從機器右邊出來的答案必須知足要求的條件。


咱們已經知道了,一個盒子裝着交易記錄的清單,一個盒子將裝着密封數字。而第三個盒子,裝着此前紙張的魔法機器輸出值。


 


有了這個優雅的當心機,咱們能夠保證,每一頁紙張都依賴於它以前的紙張。所以,若是有人要修改一張歷史記錄,他將一樣必須改變該頁之後全部紙張的內容和密封數字,以使這條鏈保持一致。


若是某我的,不屬於咱們在一開始設想的10我的,試圖做弊,修改區塊鏈(保存了全部交易記錄清單紙張的文件夾)中的內容,他將不得不調整多頁紙張、爲全部這些紙張計算新的密封數字。咱們都知道計算密封數字有多麼困難。所以,這網絡中的一個壞蛋欺負不了九個老實人。


將會發生的事情是,從這個不誠實的傢伙嘗試做弊的那一晚上開始,他將要在這網絡中創造另外一個區塊鏈,但那個區塊鏈將永遠沒法遇上可信的區塊鏈——僅僅由於一個傢伙的努力和速度不可能打敗九我的積累起來的努力和速度。所以,這保證了在一個網絡中,最長的鏈就是可信的鏈。



最長的鏈就是誠實可信的鏈。

最長的鏈就是誠實可信的鏈

 



當我告訴你一個不誠實的傢伙無法欺負九個實誠人的時候,它是否點醒了你什麼?

 

萬一,不是一個,而是六我的搞事情呢?

 

在這種狀況下,這個協議將會落空,流於表面。它就是人們所知的「51%攻擊」。若是該網絡中的大部分人決定變得不誠實而且欺騙網絡中剩下的人,這個協議將沒法實現它的目標。 任什麼時候候,若是區塊鏈可能會陷落,這就是其脆弱性的惟一緣由。知道了這一點,它也就不太可能發生了。可是,咱們全部人都必須知道這個系統的這個弱點。它創建在這樣的假設之上:一羣人中的大部分都老是誠實的。

相關文章
相關標籤/搜索