幾張趣味圖帶你透徹了解區(qū)塊鏈?zhǔn)侨绾喂ぷ鞯模?/h1>
時(shí)間:2018-04-16 10:43:16
關(guān)鍵字:
區(qū)塊鏈
存儲(chǔ)技術(shù)
數(shù)據(jù)存儲(chǔ)
比特幣
手機(jī)看文章掃描二維碼
隨時(shí)隨地手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
為什么說區(qū)塊鏈?zhǔn)?ldquo;信任的機(jī)器”?它是如何工作的?這有篇最簡(jiǎn)單的解釋!
區(qū)塊鏈的游戲規(guī)則是必須有足夠的人不想依靠第三方來進(jìn)行交易。 多少人才算“足夠多”呢?最少三個(gè)。
我們假設(shè)有十個(gè)玩家想放棄銀行或任何第三方,經(jīng)相互同意,他們?cè)诓恢缹?duì)方身份的情況下,擁有對(duì)方賬戶的詳細(xì)信息。至此,游戲開始。
一個(gè)空白賬本
每個(gè)玩家都從一個(gè)空白賬本開始,隨著“游戲”的開始,每個(gè)玩家不斷往這個(gè)空賬本上記東西,交易越來越多,賬本的頁(yè)數(shù)也在不斷增加。這個(gè)賬本就是我們追蹤交易紀(jì)錄的“寄存器”。
當(dāng)有交易發(fā)生時(shí)
系統(tǒng)中的每個(gè)玩家都擁有一個(gè)空白賬本,每當(dāng)有交易發(fā)生時(shí),他們就將交易記錄在賬本上。
現(xiàn)在,假設(shè)2號(hào)玩家想給9號(hào)玩家轉(zhuǎn)10塊錢。為了進(jìn)行交易,2號(hào)在系統(tǒng)里吼一聲“大伙兒,我要給9號(hào)妹子轉(zhuǎn)10塊錢,你們快在賬本上記一下”。
接下來,每個(gè)玩家就開始檢查2號(hào)是否真的有10塊錢轉(zhuǎn)給9號(hào),如果她真的有足夠的錢,那么所有玩家都會(huì)在賬本的空白頁(yè)記下這筆轉(zhuǎn)賬。這樣,一筆交易就算完成了。
交易繼續(xù)
隨著時(shí)間的流逝,系統(tǒng)里有越來越多的玩家需要轉(zhuǎn)賬給其他人。無論他們什么時(shí)候想轉(zhuǎn)賬,都只需要在系統(tǒng)里告訴所有玩家,只要有一個(gè)人聽到了,他/她就會(huì)將這筆交易記在賬本上。
記賬繼續(xù),直到所有玩家將當(dāng)前的空白頁(yè)用完。假設(shè)一頁(yè)賬本能記十筆交易,當(dāng)十筆交易完成時(shí),那么這個(gè)頁(yè)面就不能再繼續(xù)記賬。
這時(shí)候只需將這頁(yè)記錄保存到文件夾中,然后翻到下一個(gè)空白頁(yè),繼續(xù)記賬就行。
那頁(yè)被翻過去的頁(yè)面
當(dāng)我們將記滿10筆交易記錄的頁(yè)面翻過去之前,需要使用系統(tǒng)中每個(gè)玩家都同意的“神秘鎖(密鑰)”來將它密封起來。通過密封,能夠確保一旦將這頁(yè)記錄的副本發(fā)放到每個(gè)玩家的文件夾中后,任何人都無法對(duì)它做出任何更改。一旦進(jìn)入文件夾中,它將永遠(yuǎn)被密封在里面。“密封”是這個(gè)游戲的關(guān)鍵所在。
如何密封頁(yè)面
在我們了解如何封印頁(yè)面之前,先來看看“封印”的工作原理。
魔法機(jī)器
想象一下,有一臺(tái)被厚厚的墻壁包圍著的機(jī)器,如果你從機(jī)器左邊發(fā)送一個(gè)包含著內(nèi)容的盒子進(jìn)去,在右邊,它會(huì)吐出一個(gè)包含其他內(nèi)容的盒子。
這臺(tái)機(jī)器被稱為“哈希函數(shù)”,但我們不必那么學(xué)術(shù),所以就叫它魔法機(jī)器吧。
假設(shè)你從左邊輸入數(shù)字4,我們會(huì)發(fā)現(xiàn)它從右邊吐出下面的單詞:‘dcbea‘。
是如何將數(shù)字4轉(zhuǎn)換成這個(gè)詞的?沒人知道。 但我們需要知道這是一個(gè)不可逆轉(zhuǎn)的過程。 如果我們知道右邊出來的詞語是“dcbea”,是沒法計(jì)算出從左邊給機(jī)器輸進(jìn)了什么東西,但如果我們每次從左邊給機(jī)器輸進(jìn)數(shù)字4,右邊必然會(huì)出現(xiàn)詞語“dcbea”。
讓我們?cè)囋囕斶M(jìn)不同的數(shù)字,比如“26”。我們這次得到‘94c8e‘。有趣!
如果我問你下面這個(gè)問題:
你能告訴我應(yīng)該從機(jī)器的左側(cè)輸進(jìn)什么東西,以便我能從右側(cè)得到以三個(gè)零開頭的數(shù)字或單詞?例如,000ab或00098或000fa或其他內(nèi)容。
我之前說過,這個(gè)機(jī)器有一個(gè)奇怪的屬性:如果我知道右邊輸出的東西,是沒辦法算出左邊輸進(jìn)了什么東西的。有這樣一臺(tái)機(jī)器,怎么可能回答得出上面的問題呢?
我想到一個(gè)方法,逐一嘗試每一個(gè)數(shù)字,直到我們得出以000開頭的詞語?;蛟S經(jīng)過數(shù)千次的嘗試,我們能得到這樣的結(jié)果。
當(dāng)我們給定了右邊的輸出結(jié)果,要計(jì)算出左邊輸入的內(nèi)容,是非常非常困難的。但與此同時(shí),驗(yàn)證既定的輸入內(nèi)容是否能產(chǎn)生所需的輸出結(jié)果卻非常容易。請(qǐng)記住,這臺(tái)機(jī)器每次都會(huì)針對(duì)一個(gè)詞語給出相同的輸出結(jié)果。
如果我給你一個(gè)數(shù)字,比如72533,然后問你“這個(gè)數(shù)字輸進(jìn)機(jī)器中,能得到一個(gè)以000開頭的詞語或數(shù)字嗎?” 你所需要做的就是把數(shù)字扔進(jìn)機(jī)器中,看看你在右邊得到了什么就行。
這臺(tái)機(jī)器最重要的特性就是:給定一個(gè)輸出,計(jì)算輸入非常困難,但如果有輸入和輸出,很容易就能驗(yàn)證輸入是否能夠得到這個(gè)輸出。
如何用這臺(tái)機(jī)器封存賬本頁(yè)
我們將使用這臺(tái)魔術(shù)機(jī)器為我們的頁(yè)面生成一個(gè)“ 印章 ”。
假如我給你兩個(gè)盒子。第一個(gè)盒子包含數(shù)字20893。然后,我問你:“你能算出一個(gè)數(shù)字,使它加上第一個(gè)盒子中的數(shù)字,然后送入機(jī)器,最后會(huì)給我們一個(gè)以三個(gè)零開始的單詞嗎?”在之前我們說過了,算出這個(gè)數(shù)字的唯一方法就是遍嘗宇宙中的每一個(gè)數(shù)字。
經(jīng)過成千上萬次嘗試,我們偶然發(fā)現(xiàn)一個(gè)數(shù)字21191,當(dāng)它加上20893(即21191 + 20893 = 42084)并送入機(jī)器時(shí),會(huì)產(chǎn)生一個(gè)滿足我們要求的詞。
在這種情況下,數(shù)字21191就成為20893號(hào)的印章。假設(shè)有一個(gè)頁(yè)面上記有數(shù)字20893,為了封印該頁(yè)面,我們將在其上面放置一個(gè)標(biāo)記為“21191”的徽章。一旦密封號(hào)碼(即21191)能夠恰好“卡”在頁(yè)面上,頁(yè)面就被密封。
密封號(hào)碼被稱為“工作量證明”,意思是這個(gè)數(shù)字是辛苦算出它來的證明。
如果有人想驗(yàn)證頁(yè)面上的記錄是否被更改,他所要做的就是將頁(yè)面上的內(nèi)容與密封號(hào)碼一起添加到魔法機(jī)器中。如果機(jī)器得出的結(jié)果是以三個(gè)零的打頭的字,則內(nèi)容沒有被修改過。如果出來的單詞不符合我們的要求,那我們可以丟棄該頁(yè)面了,因?yàn)樗膬?nèi)容已經(jīng)被修改過了。
我們將使用類似的密封方法來密封我們所有的記錄頁(yè)面,并最終將它們安排在我們各自的文件夾中。
為了密封記錄交易內(nèi)容的頁(yè)面,我們需要計(jì)算出一個(gè)數(shù)字將它附加到交易列表中,然后輸入機(jī)器中,最后得出一個(gè)以000開頭的結(jié)果。
注意:“以三個(gè)零開頭的詞”只是我舉例來演示哈希函數(shù)的工作原理,真正的哈希結(jié)果比這更復(fù)雜。
一旦在機(jī)器上計(jì)算出該數(shù)字,該頁(yè)面就被該數(shù)字封印了。隨便一個(gè)人都可以通過封印密碼驗(yàn)證頁(yè)面內(nèi)容的完整性。
現(xiàn)在讓我們回到記錄完第十條交易的時(shí)間。只要這個(gè)頁(yè)面被用完了,每個(gè)玩家就會(huì)開始計(jì)算密封這個(gè)頁(yè)面的“封印密碼”。第一個(gè)計(jì)算出來的玩家會(huì)將封印密碼告訴系統(tǒng)內(nèi)的所有玩家。
一聽到封印密碼,每個(gè)玩家就開始驗(yàn)證這個(gè)密碼是否正確,如果密碼正確,每個(gè)玩家都用這個(gè)號(hào)碼標(biāo)記他們的頁(yè)面,并將其放在他們的文件夾中。
但如果有人,比如7號(hào)玩家說“這個(gè)封印密碼不正確,我驗(yàn)證不出來”時(shí)該怎么辦?這種情況極少發(fā)生,如果發(fā)生了,那么可能有以下原因:
1、他可能誤解了網(wǎng)絡(luò)中公布的交易;
2、他可能誤寫了網(wǎng)絡(luò)中公布的交易;
3、他可能為了自身的利益原因,試圖搞欺詐。
不管原因是什么,7號(hào)玩家只有一個(gè)選擇——丟棄他的頁(yè)面并從別人那里復(fù)制該頁(yè)面,以便他也可以將它放在文件夾中。
如果他不把他的頁(yè)面放在文件夾中,他就不能繼續(xù)記錄系統(tǒng)中交易,因此他也就不能繼續(xù)成為這個(gè)系統(tǒng)中的一份子。
有一個(gè)問題,如果我們都知道有一個(gè)人能算出密封號(hào)碼并將它公之于眾,為什么還需要每個(gè)人花費(fèi)時(shí)間資源去算呢,坐著等結(jié)果不就好了嗎?
因?yàn)橛袌?bào)酬!第一個(gè)算出來的人是能獲得酬勞的。這就是區(qū)塊鏈中的激勵(lì)機(jī)制。
舉個(gè)例子,假如5號(hào)玩家第一個(gè)算出了封印密碼,他就能獲得1塊錢的獎(jiǎng)金。在比特幣區(qū)塊鏈上,這個(gè)獎(jiǎng)金就是比特幣。獎(jiǎng)金促使每個(gè)玩家繼續(xù)為系統(tǒng)工作。
朋友們,這就是區(qū)塊鏈工作的原理。在這里,將賬本的每個(gè)頁(yè)面視為一個(gè)塊,整個(gè)賬本視為一條鏈,這就是區(qū)塊鏈。