老礦工的區(qū)塊鏈5000字終極指南
“老礦工”用5000字講清區(qū)塊鏈工作原理:去中心化、分布式存儲(chǔ)、哈希函數(shù)加密,這些都是什么?
除非你居住在世外桃源,要不然你一定聽說(shuō)過比特幣和區(qū)塊鏈。畢竟它們是當(dāng)下最熱門的話題之一,也被評(píng)為了年度流行語(yǔ)。即使那些沒有接觸過數(shù)字貨幣、也不知道其如何工作的人也在討論區(qū)塊鏈。
在理解這些新技術(shù)的時(shí)候,我那些沒有技術(shù)背景的朋友“懵了”,他們一連幾個(gè)星期纏著讓我解釋到底什么是區(qū)塊鏈。
作為比特幣的資深“老礦工”,我用最淺顯易懂的語(yǔ)言寫了這篇文章,幫助大家理解當(dāng)下最流行的趨勢(shì)。
區(qū)塊鏈:為什么我們需要如此復(fù)雜的東西?
“對(duì)于每個(gè)復(fù)雜的問題,都有一個(gè)看似簡(jiǎn)單明了、實(shí)際上卻是錯(cuò)誤的答案。”
—— H. L. Mencken |
和其他文章在開頭嘗試定義區(qū)塊鏈不同,我先解釋它解決的問題。
想象一下,你最好的朋友Joe正在國(guó)外旅游時(shí)候,突然給你打電話說(shuō):“我的錢完全花光了,借我點(diǎn)錢。”
因?yàn)槟闶菬嵝哪c的人,所以你說(shuō):“馬上打給你。”
然后,你打電話給你的銀行客戶經(jīng)理:“從我的賬戶轉(zhuǎn)1000美元到Joe的賬戶。”
你的客戶經(jīng)理回復(fù):“好的,先生。”
他登陸了你的賬戶,查看了一下你是否有足夠的賬戶余額進(jìn)行1000美元的轉(zhuǎn)賬。你很富有,有足夠的錢可以轉(zhuǎn)賬,于是他在一個(gè)表格中做了如下登記:
之后,你打電話告訴Joe,“我已經(jīng)給你寄了1000美元,你可以去銀行取錢了。”
整個(gè)過程中,你和Joe都信任銀行并讓它管理你的錢。上述交易過程并不涉及真金白銀,只是需要在一個(gè)表格中進(jìn)行修改。更準(zhǔn)確地說(shuō),這個(gè)表格并不是你和Joe擁有或能夠直接控制的。
這就是現(xiàn)行制度所體現(xiàn)的問題:為了建立起我們之間的相互信任,我們需要求助獨(dú)立的第三方。
多年來(lái),我們通過“中間人”才能信任彼此。你可能會(huì)問,“這種中間人制度會(huì)帶來(lái)什么問題?”
問題就在于,“中間人”的數(shù)量是有限的。只要一個(gè)人或一個(gè)組織有意無(wú)意地腐敗了,那么整個(gè)社會(huì)就將陷入混亂狀態(tài)。
- 如果表格中的交易記錄在火災(zāi)中燒毀,該怎么辦?
- 如果你的客戶經(jīng)理寫了1500美元而不是1000美元呢?
- 如果他故意這樣做呢?
多年來(lái),我們一直把所有的雞蛋都放在別人的籃子里。
是否能夠有一個(gè)系統(tǒng)可以在沒有第三方(銀行)的參與下進(jìn)行轉(zhuǎn)賬?
為了回答這個(gè)問題,我們可以想一想,轉(zhuǎn)賬的含義是什么? 只是在表格中登記的一個(gè)條目。
那么,有沒有辦法在不依靠第三方的情況下,維護(hù)我們之間的交易記錄?
你可能已經(jīng)猜到了答案——那就是區(qū)塊鏈。
區(qū)塊鏈:一種不需要依賴第三方的交易方法
區(qū)塊鏈如何實(shí)現(xiàn)自己登記交易記錄?這就需要用到分布式記賬的技術(shù)。
這種方法要求有足夠多的人選擇不依賴于第三方。 只有這樣,這些人才能依靠自己運(yùn)營(yíng)這個(gè)去中心化的系統(tǒng)。
“可以存一些比特幣,萬(wàn)一以后它漲了呢。如果這么想的人多了,那設(shè)想就變成現(xiàn)實(shí)了。”
——中本聰 |
系統(tǒng)里有多少人就算足夠多了?至少三個(gè)。 但這里,我們假設(shè)有十個(gè)人想要放棄銀行或任何其他管理交易的第三方。在彼此同意的情況下,他們一直都有對(duì)方賬戶的詳細(xì)信息但不知道對(duì)方的身份。
1. 建立一個(gè)空文件夾
每個(gè)人都從建立自己的空文件夾開始。隨著這個(gè)過程不斷推進(jìn),這十個(gè)人將不斷向他們的空文件夾中添加頁(yè)面。這個(gè)頁(yè)面集合就是追蹤交易的表格。
2. 開始交易
接下來(lái),網(wǎng)絡(luò)中的每個(gè)人手里都有一支筆,用來(lái)填寫空白頁(yè)。 每人都準(zhǔn)備好寫入系統(tǒng)內(nèi)發(fā)生的任何交易。
現(xiàn)在,假設(shè)2號(hào)想轉(zhuǎn)賬10美元給9號(hào)。
為了完成交易,2號(hào)發(fā)表聲明告訴大家,“我想轉(zhuǎn)10美元給9號(hào)。收到消息的人就在自己的空白頁(yè)上進(jìn)行交易記錄。”
每人都檢查2號(hào)的余額是否足夠,是否能將10美元轉(zhuǎn)給9號(hào)。如果她余額足夠,每個(gè)人就會(huì)在他們的空白頁(yè)面上記錄這筆交易。
3 .繼續(xù)進(jìn)行更多交易
隨著時(shí)間的推移,會(huì)有更多的人利用該網(wǎng)絡(luò)進(jìn)行轉(zhuǎn)賬交易。每當(dāng)他們想做一個(gè)交易,他們就通知其他人。只要有一個(gè)人聽到這個(gè)通知,TA就會(huì)把交易記錄寫在TA的頁(yè)面上。
記錄將繼續(xù)進(jìn)行,直到所有人都用完當(dāng)前頁(yè)面上的空間。假設(shè)一個(gè)頁(yè)面的空間只能記錄十個(gè)交易,當(dāng)?shù)谑畟€(gè)交易完成后,每個(gè)人的空間也都用完了。
當(dāng)一個(gè)頁(yè)面被填滿時(shí),就可以將其放入文件夾中,并創(chuàng)建出一個(gè)新的頁(yè)面,重復(fù)上述步驟2的過程。
4. 收起頁(yè)面
在我們將文件放進(jìn)文件夾之前,我們需要用網(wǎng)絡(luò)上每個(gè)人都同意的唯一數(shù)字來(lái)加密。通過加密,密碼副本將放入每個(gè)人的文件夾中,我們就能確保沒有人能對(duì)加密數(shù)字進(jìn)行修改,且不會(huì)隨時(shí)間而改變。不論是在今天、明天,甚至是一年之后,密碼副本一旦進(jìn)入文件夾,它將始終停留在文件夾中并處于加密狀態(tài)。而且,如果每個(gè)人都信任這一加密方式,那么他們就會(huì)相信頁(yè)面內(nèi)容。頁(yè)面的加密方式是網(wǎng)絡(luò)交易的關(guān)鍵。
保護(hù)頁(yè)面不被修改這項(xiàng)工作叫做“挖礦”。但為了簡(jiǎn)單起見,我們將繼續(xù)稱它為“加密”。
在區(qū)塊鏈出現(xiàn)前,我們相信第三方/中間人,相信他們?cè)诒砀裰械怯浀拿抗P交易都不會(huì)改變。而在剛剛描述的這種分布式和分散系統(tǒng)中,人們也會(huì)信任這一加密方式。
用來(lái)加密的魔法機(jī)器:哈希函數(shù)
在我們學(xué)習(xí)如何加密頁(yè)面之前,我們需要知道加密的原理。我稱之為“魔法機(jī)器”。
想象一臺(tái)由厚厚的墻包圍的機(jī)器。如果從左邊給機(jī)器發(fā)送一個(gè)非空的盒子,它會(huì)“吐出”一個(gè)包含其他內(nèi)容的盒子。
這臺(tái)機(jī)器被稱為“哈希函數(shù)”,但是為了方便理解,我們暫且稱它為“魔法機(jī)器”。
假設(shè)你從左邊發(fā)送數(shù)字4,它在右邊吐出單詞:'dcbea'。
它是如何將數(shù)字4轉(zhuǎn)換成'dcbea'這個(gè)詞? 沒人知道。而且,轉(zhuǎn)換過程不可逆。
即使你知道機(jī)器輸出了“dcbea”,你也無(wú)法知道對(duì)應(yīng)的輸入內(nèi)容。但是每次你把數(shù)字4輸進(jìn)機(jī)器上,它總是會(huì)吐出同一個(gè)詞“dcbea”。
圖:哈希(4)== dcbea
發(fā)送數(shù)字26會(huì)怎么樣?
圖:哈希(26)== 94c8e
我們這次得到了'94c8e'。 有趣! 所以機(jī)器輸出的結(jié)果中也會(huì)包含數(shù)字。
現(xiàn)在,如果我問你以下問題:
“我從左邊給機(jī)器輸入什么,可以從機(jī)器右邊獲得一個(gè)以三個(gè)0開頭的單詞?例如,000ab,00098,000fa或000XX。”
上面已經(jīng)提到,機(jī)器有一個(gè)屬性,即我們無(wú)法從右邊的結(jié)果逆推出左邊所輸入的內(nèi)容。
面對(duì)這樣的機(jī)器,如何解決剛才提出的問題?
我想到一種方法。 為什么不一一地嘗試宇宙中的每一個(gè)數(shù)字,直到我們得到一個(gè)以連續(xù)三個(gè)0開頭的單詞?
經(jīng)過幾千次的嘗試,最終會(huì)得到一個(gè)能夠產(chǎn)生正確結(jié)果的數(shù)字。
要計(jì)算給定輸出的輸入內(nèi)容是非常困難的。 但與此同時(shí),驗(yàn)證輸入輸出是否對(duì)應(yīng)確實(shí)很容易。請(qǐng)記住,對(duì)一個(gè)給定的數(shù)字,機(jī)器每次都會(huì)吐出相同的單詞。
如果我給你一個(gè)數(shù)字,比如說(shuō)72533,并且問你,“把這個(gè)數(shù)字輸進(jìn)機(jī)器,是否輸出了一個(gè)以三個(gè)0開頭的單詞?”,完成這個(gè)過程你覺得有多困難?
你需要做的就是把數(shù)字扔給機(jī)器,看看在右邊輸出了什么而已。
這樣的機(jī)器最重要的特性就是,給定一個(gè)輸出,計(jì)算輸入是非常困難的,但是給定輸入和輸出,驗(yàn)證輸入輸出是否對(duì)應(yīng)確實(shí)很容易。
如何加密一個(gè)頁(yè)面?
我們將使用這個(gè)神奇的機(jī)器來(lái)加密頁(yè)面。像往常一樣,我們將從一個(gè)假設(shè)開始。
想象一下,我給你兩個(gè)盒子,第一個(gè)盒子里包含了數(shù)字20893。然后,我問你,“你能算出這樣一個(gè)數(shù)字嗎:如果用它加上第一個(gè)盒子里的數(shù)字,然后發(fā)送給機(jī)器,可以得到一個(gè)以三個(gè)0開頭的單詞。”
這與我們之前看到的情況類似。我們已經(jīng)了解到,計(jì)算這樣一個(gè)數(shù)字的唯一方法是通過嘗試整個(gè)宇宙中可用的每一個(gè)數(shù)字。
經(jīng)過幾千次嘗試,我們會(huì)偶然發(fā)現(xiàn)一個(gè)數(shù)字,比如說(shuō)21191,當(dāng)用它加上20893(即21191 + 20893 = 42084)并發(fā)送給機(jī)器時(shí),會(huì)產(chǎn)生一個(gè)滿足我們要求的詞。
在這種情況下,號(hào)碼21191成為20893的封印。假設(shè)有一個(gè)頁(yè)面的內(nèi)容是20893。為了加密這個(gè)頁(yè)面(即讓人無(wú)法改變它的內(nèi)容),我們?cè)谶@頁(yè)上添加一個(gè)名為“21191”的封印。 一旦加密數(shù)字(即21191)印在頁(yè)面上,頁(yè)面就被加密了。
加密數(shù)字也可以被稱為“工作證明”,意思是這個(gè)數(shù)字證明了為了計(jì)算它所做的努力。
如果有人想驗(yàn)證頁(yè)面是否被修改,他所要做的就是將頁(yè)面內(nèi)容加上封印數(shù)字,并送到魔法機(jī)器。如果機(jī)器給出以三個(gè)0開頭的單詞,則證明頁(yè)面內(nèi)容不變。如果結(jié)果不符合我們的要求,我們可以扔掉頁(yè)面,因?yàn)樗膬?nèi)容是妥協(xié)的,是沒有用的。
我們將使用類似的加密機(jī)制來(lái)加密我們所有的頁(yè)面,并將它們放在各自的文件夾中。
為了加密包含網(wǎng)絡(luò)交易的頁(yè)面,我們需要找到一個(gè)數(shù)字,當(dāng)把它附加到交易清單上并送給機(jī)器時(shí),我們能在右邊得到一個(gè)以三個(gè)0開頭的詞。
注意:我一直只使用“以三個(gè)0開頭的詞”這個(gè)短語(yǔ)作為例子。因?yàn)樗菔玖斯:瘮?shù)如何工作。真正的計(jì)算原理比這更復(fù)雜。
在機(jī)器上花費(fèi)時(shí)間和電力后,一旦計(jì)算出這個(gè)數(shù)字,頁(yè)面就被這個(gè)數(shù)字封印了。如果有人試圖改變頁(yè)面的內(nèi)容,任何人都可以利用封印數(shù)字驗(yàn)證頁(yè)面的完整性。
現(xiàn)在我們已經(jīng)知道如何加密頁(yè)面了,我們將回到編寫第十個(gè)交易的頁(yè)面上。編寫這十個(gè)交易用盡了我們的空間。
當(dāng)每個(gè)人用來(lái)編寫進(jìn)一步交易的頁(yè)面都用完時(shí),為了獲得頁(yè)面,他們就會(huì)不停的計(jì)算加密數(shù)字,以便可以將其隱藏在文件夾中。
網(wǎng)絡(luò)中的每個(gè)人都會(huì)計(jì)算加密數(shù)字。第一個(gè)在網(wǎng)絡(luò)中找到的人會(huì)將其宣布給其他人。
一旦收到加密數(shù)字,每個(gè)人都會(huì)驗(yàn)證它是否產(chǎn)生合法的輸出。輸出如果合法,每個(gè)人都用這個(gè)數(shù)字標(biāo)記他們的頁(yè)面,并將其放在文件夾中。
但是,如果有個(gè)人說(shuō)公布的加密數(shù)字產(chǎn)生的輸出不合法,怎么辦? 這種情況并不罕見??赡苡幸韵略颍?/p>
- 他可能誤讀了網(wǎng)絡(luò)中公布的交易
- 他可能誤寫了在網(wǎng)絡(luò)中公布的交易
- 在寫交易時(shí),他可能會(huì)試圖欺騙或不誠(chéng)實(shí),或者在網(wǎng)絡(luò)上偏袒自己或其他人
不管是什么原因,這個(gè)人只有一個(gè)選擇——放棄他的頁(yè)面,并復(fù)制別人的頁(yè)面放在文件夾中。 如果他沒有把他的頁(yè)面放在文件夾中,他將無(wú)法編寫更多的交易,也會(huì)被禁止成為網(wǎng)絡(luò)的一部分。
大多數(shù)人同意的加密數(shù)字就變成了真正的加密數(shù)字。
區(qū)塊鏈的工作原理
那么,為什么每個(gè)人都努力計(jì)算加密數(shù)字,即使知道別人會(huì)計(jì)算并向他們宣布?為什么不坐下來(lái)等待通知呢?
這就是激勵(lì)機(jī)制出現(xiàn)的地方。每個(gè)人都是區(qū)塊鏈的一部分,都有資格獲得獎(jiǎng)勵(lì)。計(jì)算加密數(shù)字的第一個(gè)人將因?yàn)樗呐?即消耗的CPU功率和電力)而獲得獎(jiǎng)金。
簡(jiǎn)單想象一下,如果5號(hào)計(jì)算了一個(gè)頁(yè)面的加密數(shù)字,他會(huì)得到一些錢,比如1美元,這些錢是憑空而來(lái)的。換句話說(shuō),5號(hào)的賬戶余額增加了1美元,而其他人的賬戶余額卻不會(huì)減少。
這就是比特幣存在的方式。這是第一個(gè)在區(qū)塊鏈(分布式帳本)上交易的貨幣。為了保持人們?cè)诰W(wǎng)絡(luò)上繼續(xù)工作的動(dòng)力,人們將獲得作為回報(bào)的比特幣。
當(dāng)一定數(shù)量的人都擁有比特幣時(shí),比特幣的價(jià)值就會(huì)增長(zhǎng),那么其他人也會(huì)想購(gòu)買比特幣。這使比特幣的價(jià)格進(jìn)一步增長(zhǎng),繼而更多的人想購(gòu)買比特幣,比特幣的價(jià)格又會(huì)增長(zhǎng)。
獎(jiǎng)勵(lì)使每個(gè)人都有了繼續(xù)在網(wǎng)絡(luò)上工作的動(dòng)力。
而且,一旦所有人都將頁(yè)面收到他們的文件夾中,他們就會(huì)帶出一個(gè)新的空白頁(yè)面,這個(gè)過程在不停重復(fù)進(jìn)行。
一個(gè)頁(yè)面可以被視為一個(gè)交易塊(區(qū)塊),而文件夾可以被視為一連串頁(yè)面(區(qū)塊鏈)。
這就是區(qū)塊鏈的工作原理。
除此之外,還有一件小事。
想象一下,這個(gè)文件夾中已經(jīng)有五個(gè)頁(yè)面了——全部用加密數(shù)字進(jìn)行了加密。如果我為了自己的利益回到第二頁(yè)并修改交易,該怎么辦?加密數(shù)字可以讓任何人發(fā)現(xiàn)交易中的不一致性,對(duì)嗎?如果我繼續(xù)為已修改的交易計(jì)算一個(gè)新的加密數(shù)字,并在頁(yè)面上添加這一數(shù)字,該怎么辦呢?
為了防止某人返回并修改頁(yè)面(Block)以及加密數(shù)字,計(jì)算加密數(shù)字的方法有一些小小的改動(dòng)。
加密方式的改進(jìn)
請(qǐng)記住我給出兩個(gè)盒子的目的:一個(gè)盒子存放號(hào)碼20893,另外一個(gè)則為你的計(jì)算預(yù)留空間。實(shí)際上,為了計(jì)算區(qū)塊鏈中的加密數(shù)字,兩個(gè)盒子是不夠的,其實(shí)有三個(gè)盒子:兩個(gè)盒子作為預(yù)填盒子,另外一個(gè)盒子用于計(jì)算。
當(dāng)這三個(gè)盒子所有的內(nèi)容被發(fā)送到機(jī)器時(shí),從右邊出來(lái)的答案必須滿足要求。
我們已經(jīng)知道,一個(gè)盒子用來(lái)存放交易清單,另一個(gè)盒子用來(lái)存放封印數(shù)字。 第三個(gè)盒子包含魔法機(jī)器的前一頁(yè)輸出結(jié)果。
有了這個(gè)小技巧,我們就能確保每一頁(yè)都依賴于它的前一頁(yè)。 因此,如果有人要修改一個(gè)歷史頁(yè)面,那么他必須改變所有頁(yè)面的內(nèi)容和加密數(shù)字,以保持區(qū)塊鏈上的一致性。
如果我們開始時(shí)想象的十個(gè)人中的一個(gè)人試圖欺騙和修改區(qū)塊鏈(包含交易記錄的頁(yè)面的文件夾)的內(nèi)容,他將不得不調(diào)整幾個(gè)頁(yè)面并計(jì)算新的加密數(shù)字來(lái)加密這些頁(yè)面。我們知道計(jì)算加密數(shù)字有多困難。因此,網(wǎng)絡(luò)上一個(gè)不誠(chéng)實(shí)的人無(wú)法擊敗九個(gè)誠(chéng)實(shí)的人。
如果一個(gè)不誠(chéng)實(shí)的人試圖在一個(gè)頁(yè)面上做出欺騙行為,那會(huì)在網(wǎng)絡(luò)中創(chuàng)造另一個(gè)鏈條,但是欺騙的鏈條永遠(yuǎn)無(wú)法趕上誠(chéng)實(shí)的鏈條——因?yàn)橐粋€(gè)人的努力和速度無(wú)法擊敗九個(gè)人累積的努力和速度。因此,這個(gè)機(jī)制可以保證網(wǎng)絡(luò)中最長(zhǎng)的鏈?zhǔn)亲钫\(chéng)實(shí)的鏈。
如果,不是一個(gè)人不誠(chéng)實(shí),而是有六個(gè)人不誠(chéng)實(shí)呢?
在這種情況下,協(xié)議就變得一塌糊涂。它被稱為“51%攻擊”。如果網(wǎng)絡(luò)中的大多數(shù)人都變得不誠(chéng)實(shí),并欺騙網(wǎng)絡(luò)的其余部分,協(xié)議目的就失效了。
如果區(qū)塊鏈會(huì)崩潰,那么這可能就是唯一可能的原因。雖然這種情況不太可能發(fā)生,但是我們必須知道區(qū)塊鏈系統(tǒng)的弱點(diǎn):它建立在大多數(shù)人群總是誠(chéng)實(shí)的假設(shè)之上。
以上就是“老礦工”關(guān)于區(qū)塊鏈的全部介紹。你看懂了嗎?
原文鏈接:
https://thenextweb.com/contributors/2017/11/01/ultimate-3500-word-plain-english-guide-blockchain/
【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號(hào)“大數(shù)據(jù)文摘( id: BigDataDigest)”】