天天看點

區塊鍊概述什麼是區塊鍊?

什麼是區塊鍊?

用簡單的英語來了解Blockchain的3500字終極指南。

除非你活在石器時代,否則我相信你已經聽說比特币和區塊鍊的。畢竟,它們是當今流行趨勢和媒體最喜歡的話題 - 今年的流行語。即使是那些從未挖掘過加密貨币或者去了解它如何運作的人,也在談論它。我有更多非技術方面的朋友,而不是技術方面的朋友。他們幾個星期以來一直在懇求我向他們解釋這個新的流行語。我猜有成千上萬的人深有同感。當這種情況發生時,正好有一段時間我可以寫出來一些東西,讓每個人都可以為其他迷失的靈魂作出指引 - 這正是這篇文章的目的 - 用普通的英文寫成,任何普通的網際網路使用者都能了解。

區塊鍊:為什麼我們甚至需要這樣複雜的東西?

“對于每一個複雜的問題,都有一個明确,簡單和錯誤的答案。” -  HL Mencken

與網際網路上的其他文章不同,(這篇文章中)我們不會首先定義區塊鍊,而是了解它解決了什麼樣的問題。

想象一下,喬是你最好的朋友。他正在海外旅行,在他休假的第五天,他打電話給你說:“老哥,我需要一些錢。我已經把自己的花光了。“

你回複,“馬上打給你”,然後挂斷電話。

然後,你打電話給你的銀行的客戶經理并告訴他:“請将我賬戶中的1000美元轉賬到喬的賬戶。”

您的客戶經理回複說:“是的,先生。”

他打開存款記錄,檢查您的賬戶餘額,看看您是否有足夠的餘額向Joe轉賬1000美元。因為你是個有錢人,你有很多錢; 是以,他在記錄中輸入如下内容:

交易記錄

注意:我們不是在談論電腦方面的問題,這樣做是為了盡可能簡單的進行說明。

你打電話給喬,告訴他,“我已經轉賬了。下一次,你可以去你的銀行,提走我剛剛轉賬的1000美元。

剛剛發生了什麼?你和喬都信任銀行管理你的錢。實物賬單并沒有真正的轉移資金。所需要的隻是(修改)記錄中的一個條目。或者更确切地說,是記錄中的一個條目,(這個條目)既不是你也不是Joe控制或擁有的。

這是目前(銀行)系統存在的問題。

為了建立我們之間的信任,我們依靠了獨立的第三方。

多年來,我們依靠這些中間人來建構互相信任。你可能會問,“依賴他們的是什麼問題?”

問題在于它們數量上是單一。如果要在社會中注入一點點混亂,隻需要一個人/組織有意或無意就可以進行腐敗活動。

  • 如果記載交易的記錄在火災中燒毀怎麼辦?
  • 如果您的客戶經理錯誤地寫了1500美元而不是1000美元呢?
  • 如果他故意這麼做,會怎麼樣?
多年來,我們一直把所有的雞蛋放在一個籃子裡,而且這個籃子又放在另一個人的籃子裡。

有沒有一種系統可以讓我們在不需要銀行的情況下轉賬?

為了回答這個問題,我們需要進一步深入研究并問自己一個更好的問題(畢竟,隻有更好的問題才能帶來更好的答案)。

想一想,轉移金錢意味着什麼?隻是記錄中的一個條目。那麼更好的問題是 -

有沒有辦法維護由我們自己而不是别人為我們做的記錄?

現在,這是一個值得探讨的問題。答案就是你可能已經猜到的。區塊鍊正是這個深刻問題的答案。

區塊鍊是一種在我們自己之間保持這種記錄的方法,而不是依賴别人來為我們做。

你還能跟上我的節奏嗎?好。因為現在,當幾個問題開始出現時,我們将學習這個分布式記錄系統是如何工作的。

好,但告訴我,它是到底是如何工作的?

這種方法的要求是必須要有足夠的人不想依靠第三方。隻有這組人可以靠自己來維護交易記錄。

“為了以防萬一先獲得一些比特币是有意義的。如果有足夠多的人以相同的方式思考,那這就成為一種自我實作的預言。“ - 中本聰于2009年

有多少夠了?至少三個。就我們的例子而言,我們假設有十個人想要放棄銀行或任何第三方。經雙方同意,他們就能夠始終擁有對方賬戶的詳細資訊 - 在不知道對方的身份的情況下。

1.空檔案夾

首先,每個人都有一個空的檔案夾。随着我們的(系統)不斷向前發展,所有這十個人都将不斷添加頁面到他們手上的空檔案夾。這個頁面集合将會形成追蹤交易的記錄。

2.交易發生時

接下來,網絡中的每個人手中都有一張空白頁和一支筆。每個人都可以編寫系統内發生的任何交易。

現在,如果#2想要轉賬10美元給#9。

為了進行交易,#2大聲喊叫,并告訴大家,“我想将10美元轉給#9。是以,每個人,請在你的紙上記下它。“

每個人都會檢查#2是否有足夠的餘額将10美元轉給#9。如果她有足夠的餘額,每個人都會在其空白頁面上記錄這筆交易。

頁面上的第一筆交易

交易随之被認定為成功完成。

3.交易繼續發生

随着時間的推移,網絡中的更多人需要将錢轉移給其他人。每當他們想進行交易時,他們都會向其他人宣布。隻要一個人聽到了該聲明,他就會将其寫在他/她的頁面上。

這個執行個體将繼續進行,直到所有人都用完目前頁面上的空間。假設一個頁面隻有有足夠的空間來記錄十筆交易,隻要第十筆交易完成,每個人都會用盡空間。

當頁面被填滿時

現在是時候将頁面放在檔案夾中,并拿出一個新的頁面,并重複上述步驟2中的過程。

4.存儲頁面

在将頁面放到的檔案夾之前,我們需要用獨有的密碼來_加密它,并且該密碼已經被網絡中的所有人公認。通過加密它,我們将確定一旦将其副本放置在每個人的檔案夾中後,任何人都無法做出任何更改 - 今天不行,明天也不行,甚至一年之後也不行。一旦進入檔案夾,它将始終保持在檔案夾中 - 保持密封狀态。進一步說,如果每個人都相信加密,那表示每個人都信任該頁面的内容。這個頁面的加密是這種方法成功的關鍵。

Jargon Box'保護頁面的方法稱作在頁面上'挖掘‘’(即通常說的挖礦,譯者注),但為了簡單起見,我們将繼續稱其為'密封'。

在之前,第三方/中間人給了我們信任,我們相信他們在記錄中寫的任何内容都不會被改變。在像我們這樣的分布式并且去中心的系統中,這層加密将作為第三方的替代為我們提供信任。

很有趣!那麼我們對頁面如何加密?

在我們了解我們如何加密頁面之前,我們一般都會知道密封條是如何工作的。作為一個先決條件,需要先學習一些我喜歡稱之為......的東西

魔法機器

想象一下被厚厚的牆壁包圍着的機器。如果你從左邊送進去一個裝有東西的盒子,它會吐出一個裝有其他東西的盒子。

Jargon Box這台機器被稱為“散列函數”,但我們沒有心情講得過于技術化。是以,就今天來說,它們都是'魔法機器'。

魔法機器(又名哈希函數)

假設你從左邊送進去數字4,我們會發現它在右邊吐出下面的詞:'dcbea'。

它是如何将數字4轉換成這個詞的?沒人知道。而且,這是一個不可逆轉的過程。僅僅給出'dcbea'這個詞,就不可能判斷出機器在左邊被送進去了什麼東西。但是每次你把數字4送到機器上時,它總是會吐出同樣的詞'dcbea'

散列(4)== dcbea

僅僅給出'dcbea'這個詞,就不可能判斷出機器在左邊被送進去了什麼東西。但是每次你把數字4送到機器上時,它總是會吐出同樣的詞'dcbea'

讓我們嘗試以不同的号碼發送。26怎麼樣?

哈希(26)== 94c8e

我們這次得到'94c8e'。有趣!是以,詞也可以包含數字。

如果我現在問你下面的問題怎麼辦:

“你能告訴我應該從機器左側送進去什麼東西,就可以在右側得到一個以三個前導零開始的詞嗎?例如,000ab或00098或000fa或其他内容。“

對輸入進行預測

花點時間想一想這個問題。

我已經告訴過你,機器有一個屬性,我們無法計算出給定右側所期望的輸出後我們必須從左邊發送的内容。有了這樣的一個機器,你會怎麼回答我之前提出的問題?

我可以想到一種方法。為什麼不一個一個地嘗試宇宙中的每一個數字,直到我們可以得到一個以三個前導零開始的詞?

窮舉法來計算輸入

經過數千次嘗試後,我們仍舊樂觀地認為,我們最終會得到一個能夠産生正确結果的數字。

給定輸出去計算輸入是非常困難的。但同時,去驗證預測的輸入是否能産生所需的輸出總是非常容易。請記住,機器每次都會針對同一個數字吐出相同的詞。

如果我給你一個數字,比如說72533,然後問你這個問題:“這個數字被送入機器後,能否産生一個以三個前導零開始的詞?”你覺得回答這個問題有多難?

你所需要做的就是把數字扔到機器上,看看你在右邊看到了什麼。僅此而已。

這種機器最重要的特性是 - “給定一個輸出去計算輸入非常困難,但考慮到輸入和輸出,很容易驗證輸入是否能産生對應的輸出。”

在閱讀其他文章時請無比記住Magic Machines(或者Hash Functions)的這個屬性:

給定一個輸出,計算其輸入是非常困難的,但是給定一個輸入和輸出,很容易驗證輸入是否導緻相應的輸出。

如何使用這些機器來加密一個頁面?

我們将使用這台魔術機器為我們的頁面生成一個封條。像往常一樣,我們将從一個想象出來的情境開始。

想象一下,我給你兩個盒子。第一個盒子包含數字20893.然後,我問你:“你能算出一個數字,當它加到第一個盒子中的數字上并送入機器時,會給我們一個以三個前導零開始的詞嗎?”

這與我們之前看到的情況類似,我們已經了解到計算出這個數字的唯一方法是嘗試整個宇宙中可用的每個數字。

經過幾千次嘗試後,我們會偶然發現一個數字,比如說21191,當它加到20893(即21191 + 20893 = 42084)并加到機器上時,會産生一個滿足我們要求的詞。

在這種情況下,這個數字21191就成為20893号的封條。假設有一個頁面上寫有20893号碼。為了加密該頁面(即沒有人可以改變其内容),我們将在其上面放置标記為“21191”的封條。一旦密封編号(即21191)貼在在頁面上,頁面就将被加密。

密封編号

Jargon Box加密數字的那一刻被稱為“Proof Of Work”,意思是這個數字證明為了計算它已經做出了努力。對于我們的目标,我們稱之為'加密數字的那一刻'是很好的選擇。

如果有人想驗證頁面是否被更改,他所要做的就是 - 将頁面内容與密封編号一起添加到魔法機器中。如果機器發出三個前導零的字,則證明内容沒有改變過。如果出來的詞不符合我們的要求,我們可以丢棄該頁面,因為它的内容已被解密,并且已經沒用了。

(這是密碼學的加密概念,數字簽名使用類似的機制來實作,譯者注)

我們将使用類似的加密機制來加密我們所有的頁面,并最終将它們安排在我們各自的檔案夾中。

最後,加密我們的頁面......

為了加密包含了網絡上交易的頁面,我們需要計算出一個數字,當它附加到交易清單并提供給機器時,我們會在右邊得到一個以三個前導零開頭的詞。

請注意:我一直隻使用“以三個前導零開始的詞”這個短語作為例子。它示範了哈希函數的工作原理。真正的挑戰比這要更加複雜。

一旦在機器上花費時間和電力後計算出該數字,該頁就被該數字加密。如果有,任何一個人都可以嘗試改變頁面的内容,但加密數字的那一刻将允許任何人驗證頁面的完整性。

現在我們知道如何加密頁面,我們退回将回到寫完頁面上第十個交易的時間,并且我們以用盡了所有空間,不能再填寫交易。

隻要每個人都用完了用來編寫進一步的交易頁面,他們就會沉迷于計算頁面的加密數字,以便将其隐藏在檔案夾中。網絡中的每個人都會進行計算。網絡中第一個計算出加密數字的人将該加密數字公布給其他人。

聽到加密數字的那一刻,每個人都會驗證它是否産生所需的輸出。如果是這樣,每個人都用這個号碼标記他們的頁面,并将其放在他們的檔案夾中。

但是如果對某人說,#7公布的加密數字并不會産生需要的輸出?這種情況并不罕見。可能的原因可能是:

  • 他可能誤解了網絡中公布的交易
  • 他可能會寫錯了網絡中公布的交易
  • 在寫交易時,他可能會試圖欺騙或不誠實,或者在網絡上為自己或其他人謀私利。

不管什麼原因,#7隻有一個選擇 - 丢棄他的頁面并從别人那裡複制一份,以便他也可以把該頁面放在檔案夾中。除非他不把他的頁面放在檔案夾中,否則他不能繼續寫更多的交易,是以他将被禁止成為網絡中的一部分。

不管大多數人同意的加密數字是什麼,它都變成了真實的加密數字。

那麼為什麼每個人在知道其他人會計算并向他們宣布這個加密數字時花費資源進行計算呢?為什麼不坐下來等待(其他人的)公告?

很好的問題。這就是激勵機制出現的地方。作為區塊鍊一部分的每個人都有資格獲得獎勵。第一個計算出加密數字的人會因為他的努力(比如消耗的CPU運算力和電力)獲得免費的錢。

簡單地想象一下,如果#5計算出了一個頁面的加密數字,他會得到一些免費的錢,比如說1美元,這些錢是憑空而來的。換句話該加密數字,#5的賬戶餘額增加1美元,但不會減少其他人的賬戶餘額。

這就是比特币的存在的方式。它是第一個在區塊鍊(即分布式記錄)上進行交易的貨币。作為回報,為了維持網絡上的計算工作能夠持續進行,人們被授予比特币。

當有足夠多的人擁有比特币時,比特币的價值就會增長,進而使得其他人也想要獲得比特币; 這又使比特币進一步增長; 再使得更多人想要比特币; 這又使其又進一步增值; 如此往複。

獎勵使得每個人都持續在網絡中工作。

一旦所有人都将頁面收錄到他們的檔案夾中,就會産生出一個新的空白頁面,并重複整個過程 - 這會永遠繼續下去。

Jargon Box将單個頁面視為交易區塊塊,并将檔案夾視為頁面鍊(Blocks),這樣它就變成了區塊鍊。

而我的朋友們,這就是區塊鍊的工作原理。

原文釋出時間為:2018-03-09

本文作者:從流域到海域

本文來源:

騰訊雲 雲+社群

,如需轉載請聯系原作者。

繼續閱讀