這應(yīng)該是目前對(duì)區(qū)塊鏈最通俗易懂的解釋了。。.
區(qū)塊鏈如何運(yùn)作的?
下面這篇文翻譯自”How Does the Blockchain Work?”全文。作者M(jìn)ichele D‘Aliessi用通俗易懂的文字闡述了區(qū)塊鏈(Blockchain)的工作原理,是一篇非常不錯(cuò)的入門(mén)文章。
先舉個(gè)例子,我和你打賭50元明天的天氣。我賭它會(huì)是晴天,你賭它會(huì)是雨天。我們會(huì)有三種方式來(lái)完成交易:
①我們信任彼此。不論結(jié)果是晴天,還是雨天,輸家要給贏(yíng)家50元。如果我們是朋友,這會(huì)是一個(gè)好的交易方式。然而,即便是朋友,也有可能會(huì)賴(lài)皮不認(rèn)輸而不愿付錢(qián),更何況是陌生人。
②我們可以訂定合約,如果有任何一方不愿付錢(qián),贏(yíng)家可以告輸家。但要花錢(qián)花時(shí)間打官司,只為了討回50元,實(shí)在是得不償失。
③我們找一個(gè)中立的第三者,每人分別先給她50元,結(jié)果揭曉后,她再把所有的錢(qián)100元給贏(yíng)家。無(wú)奈的是,這個(gè)第三者有可能卷款潛逃。
我們無(wú)法信任陌生人,也覺(jué)得打官司勞神傷財(cái)。
區(qū)塊鏈技術(shù)很有趣,因?yàn)樗鼛臀覀儗?shí)現(xiàn)第③種交易方式,而且安全、快速和便宜。
我們只需寫(xiě)幾行程序代碼,讓它執(zhí)行在區(qū)塊鏈網(wǎng)絡(luò)(Blockchain Network)上,進(jìn)行交易。
以打賭天氣的例子,這個(gè)程序會(huì)確保100元的安全,并且一到明天會(huì)自動(dòng)確認(rèn)天氣狀況,結(jié)果揭曉后,也會(huì)自動(dòng)將100元匯到贏(yíng)家的帳戶(hù)里。在區(qū)塊鏈網(wǎng)絡(luò)上的交易,是無(wú)法被篡改或終止的,而且適合于大型交易,如賣(mài)一間房子或一家公司。
比特幣是人們最熟知的采用區(qū)塊鏈技術(shù)的應(yīng)用。我們先來(lái)說(shuō)明比特幣是如何工作的,在說(shuō)明過(guò)程中一點(diǎn)一點(diǎn)帶入?yún)^(qū)塊鏈的概念。
什么是比特幣?
一塊比特幣就是一個(gè)單位的電子比特貨幣(BTC),并且就像真實(shí)的一塊錢(qián)貨幣一樣,本身是沒(méi)有價(jià)值的,只有在進(jìn)行物品交易時(shí)才會(huì)產(chǎn)生價(jià)值。
在比特幣系統(tǒng)里,有一本帳本(ledger),它是一個(gè)電子檔案,記錄著所有的交易紀(jì)錄。
▲圖1 比特幣電子帳本
這帳本不是存放在一個(gè)中央機(jī)構(gòu)(比如銀行),或者一個(gè)數(shù)據(jù)庫(kù)。它擁有無(wú)數(shù)份副本,散布存放在區(qū)塊鏈網(wǎng)絡(luò)上的每一臺(tái)電腦里,而每臺(tái)電腦我們稱(chēng)為“節(jié)點(diǎn)(node)”。
如果David想用比特幣轉(zhuǎn)帳給Sandra,他就發(fā)送一個(gè)信息告訴網(wǎng)絡(luò)說(shuō):他的帳戶(hù)減5 BTC,然后Sandra的帳戶(hù)加5 BTC。在網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都會(huì)收到信息,并且將這筆交易記錄到自己的帳本里,然后更新帳戶(hù)的余額。
▲圖2 請(qǐng)求交易信息
說(shuō)到這里,關(guān)于帳本是由一組電腦共同維護(hù),而不是由一個(gè)類(lèi)似銀行的中心機(jī)構(gòu)來(lái)掌管,有三個(gè)啟發(fā):
?在銀行系統(tǒng)中,我們只知道自己的交易紀(jì)錄和帳戶(hù)余額,而在區(qū)塊鏈網(wǎng)絡(luò)里,每個(gè)人可以知道任何人的交易紀(jì)錄。
?一般來(lái)說(shuō)你信任你的銀行,而比特幣是分布式系統(tǒng),運(yùn)行在網(wǎng)絡(luò)上,任何事情發(fā)生錯(cuò)誤,是沒(méi)有客服人員可以幫你的。
?區(qū)塊鏈不是建構(gòu)在信任情感的基礎(chǔ)上,其安全性和可靠性是通過(guò)特殊的數(shù)學(xué)函數(shù)和程序代碼達(dá)到的。
我們可以將區(qū)塊鏈定義為一個(gè)系統(tǒng),它讓一組互聯(lián)的電腦安全地共同維護(hù)一份帳本。
為了能在區(qū)塊鏈網(wǎng)絡(luò)里進(jìn)行交易,你需要一個(gè)錢(qián)包(wallet),它讓你可以存放和交易你的比特幣。只有你可以花費(fèi)你的比特幣,所以每個(gè)錢(qián)包被特殊的加密法保護(hù)著,使用一對(duì)獨(dú)特且配對(duì)的鑰匙:公鑰和私鑰,才能解鎖。
如果一個(gè)信息被公鑰加密,只有配對(duì)的私鑰才能解密讀到信息。反之,如果你用你的私鑰加密信息,只有配對(duì)的公鑰可以解密。所以當(dāng)David想要轉(zhuǎn)帳,他需要用他的私鑰將轉(zhuǎn)帳信息加密后,送到網(wǎng)絡(luò)里,然后每個(gè)節(jié)點(diǎn)使用David的公鑰將信息解開(kāi),以確認(rèn)是由David發(fā)送的。
在加密完成時(shí)會(huì)產(chǎn)生一個(gè)電子簽名,它會(huì)被節(jié)點(diǎn)們用來(lái)確認(rèn)交易信息的發(fā)送來(lái)源和真?zhèn)?。電子簽名?nèi)容是一串文字,它是由交易信息和私鑰所組成的,所以不能用在其他的交易信息上。如果你更改交易信息中任何一個(gè)字節(jié),電子簽名也會(huì)跟著改變,所以黑客很難更改你的交易信息或是得知交易金額。
▲圖3 電子簽名與加密交易
錢(qián)包的公鑰其實(shí)是網(wǎng)絡(luò)里的一個(gè)地址(send to address),所以當(dāng)你轉(zhuǎn)比特幣給某人時(shí),你其實(shí)是將比特幣轉(zhuǎn)公鑰的地址。而且你必須證明你是私鑰的所有人,才能進(jìn)行轉(zhuǎn)帳。請(qǐng)注意,在網(wǎng)絡(luò)里的交易信息已經(jīng)是被加密過(guò)的,你不用暴露你的私鑰。
每個(gè)節(jié)點(diǎn)都保有一份帳本,但節(jié)點(diǎn)是如何知道你的帳戶(hù)余額呢?區(qū)塊鏈系統(tǒng)并沒(méi)有記錄每個(gè)人的帳戶(hù)余額(注:所以帳本實(shí)際上不是圖1那樣),事實(shí)上,它只紀(jì)錄網(wǎng)絡(luò)上每筆交易紀(jì)錄(如下圖)。為了得知你的帳戶(hù)余額,你必須分析和驗(yàn)證所有曾經(jīng)跟你錢(qián)包產(chǎn)生交易的紀(jì)錄。
▲圖4 區(qū)塊鏈網(wǎng)絡(luò)的帳本
“帳戶(hù)余額”的計(jì)算和驗(yàn)證需要靠之前的交易紀(jì)錄。舉個(gè)例子,為了轉(zhuǎn)出 10 BTC給John,Mary先發(fā)起一個(gè)交易信息,它包含了之前部分的轉(zhuǎn)入交易紀(jì)錄,只要這些紀(jì)錄的轉(zhuǎn)入金額的總和剛好或大于10 BTC,即可發(fā)送信息。這些包含的交易紀(jì)錄稱(chēng)作輸入(inputs),每個(gè)節(jié)點(diǎn)會(huì)驗(yàn)證這些輸入的金額的總和是等于或大于10 BTC。這些計(jì)算和驗(yàn)證會(huì)由錢(qián)包和節(jié)點(diǎn)自動(dòng)完成,使用者不需要煩惱。
▲圖5 區(qū)塊鏈的交易信息結(jié)構(gòu)
那么,系統(tǒng)如何信任這些輸入呢?
它要確認(rèn)你的錢(qián)包在之前所有的轉(zhuǎn)入交易紀(jì)錄中是否真的有這些輸入。為了簡(jiǎn)化和加速驗(yàn)證的過(guò)程,每個(gè)節(jié)點(diǎn)會(huì)保留一份特殊的數(shù)據(jù)來(lái)達(dá)到目的,也因?yàn)檫@個(gè)驗(yàn)證過(guò)程,錢(qián)不可能會(huì)無(wú)緣無(wú)故多出來(lái)。
持有比特幣代表的是,帳本上你還未變成輸入的交易紀(jì)錄。
在比特幣網(wǎng)絡(luò)上執(zhí)行交易的程序都是開(kāi)源的,這表示任何人只要有電腦和網(wǎng)絡(luò)就可以進(jìn)行交易。然而,程序的錯(cuò)誤有可能導(dǎo)致你的比特幣會(huì)不見(jiàn)。還記得嗎?比特幣是分散式網(wǎng)絡(luò),并沒(méi)有專(zhuān)屬的客服人員替你找回遺失的錢(qián)或錢(qián)包密碼。所以你想要用比特幣進(jìn)行交易,建議使用正式的比特幣錢(qián)包軟件,并且妥善保存你的錢(qián)包密碼或私鑰。
嗯,了解,但它真的安全嗎?而且它為什么叫做區(qū)塊鏈?
任何人都可以進(jìn)到比特幣網(wǎng)絡(luò),并且只需要出示他的公鑰就可以進(jìn)行交易。如果一直使用同一個(gè)公鑰,所有的交易紀(jì)錄就會(huì)指向同一個(gè)帳戶(hù)。比特幣網(wǎng)絡(luò)允許你產(chǎn)生多個(gè)錢(qián)包,每個(gè)錢(qián)包都擁有自己的公鑰和私鑰。這么做可以讓你用不同的錢(qián)包做消費(fèi)。沒(méi)有一個(gè)公開(kāi)的方式可以知道你是這多個(gè)錢(qián)包的擁有者,除非你將每個(gè)錢(qián)包的比特幣轉(zhuǎn)到同一個(gè)錢(qián)包去。
比特幣地址(Bitcoin addresses),也就是錢(qián)包,的總數(shù)是 2^1??或1461501637330902918203684832716283019655932542976。在讓任何人都可以擁有錢(qián)包的情況下,用這么大的數(shù)字可以防止一些可能的攻擊。
話(huà)雖如此,仍然有一個(gè)安全漏洞會(huì)被利用:如果把錢(qián)轉(zhuǎn)出后馬上取消交易。交易信息會(huì)在網(wǎng)絡(luò)里的節(jié)點(diǎn)間傳遞,所以?xún)蓚€(gè)交易信息抵達(dá)同一個(gè)節(jié)點(diǎn)的時(shí)間會(huì)不一樣。黑客送出一個(gè)交易信息,在等商家把貨物寄出后,再送出一個(gè)取消交易的信息。這種情況下,有些節(jié)點(diǎn)會(huì)先收到第二個(gè)信息,而把第一個(gè)信息視為非法。如何知道交易信息之間的優(yōu)先順序?使用時(shí)間戳(timestamp),但它容易被偽造。因此這會(huì)發(fā)生一些舞弊現(xiàn)象。
節(jié)點(diǎn)間會(huì)為了交易的順序而意見(jiàn)不合,所以區(qū)塊鏈系統(tǒng)設(shè)計(jì)的一套機(jī)制讓所有節(jié)點(diǎn)可以遵循一致的交易順序。
比特幣網(wǎng)絡(luò)為了將交易信息排出順序,所以將它們包成一組,稱(chēng)為區(qū)塊(block),每個(gè)區(qū)塊包含的若干個(gè)交易信息和一個(gè)連到前個(gè)區(qū)塊的連接。隨著時(shí)間,一個(gè)區(qū)塊跟著另一個(gè)區(qū)塊,形成一條時(shí)間鏈,這就是區(qū)塊鏈。
▲圖6 區(qū)塊鏈的序列結(jié)構(gòu)
在時(shí)間序列上,同個(gè)區(qū)塊內(nèi)的交易信息被認(rèn)為是同時(shí)發(fā)生,還未被打包進(jìn)區(qū)塊的交易信息會(huì)被視為未確認(rèn)狀態(tài)。每個(gè)節(jié)點(diǎn)都可以將若干個(gè)交易信息打包成區(qū)塊發(fā)送到網(wǎng)絡(luò)上,并建議其為鏈上的最新候選區(qū)塊。
因?yàn)槿魏喂?jié)點(diǎn)都可以發(fā)送候選區(qū)塊,系統(tǒng)如何決定誰(shuí)才是可以放在鏈上的最新區(qū)塊?
區(qū)塊鏈系統(tǒng)使用加密哈希函數(shù)(cryptographic hash function)設(shè)計(jì)了一道復(fù)雜的數(shù)學(xué)題,候選區(qū)塊只要有正確答案,就可以成為鏈上的最新區(qū)塊。
這個(gè)答案是由節(jié)點(diǎn)計(jì)算后一起被打包進(jìn)區(qū)塊。答案是一個(gè)數(shù)字,得到答案的唯一方法就是用猜的,猜到對(duì)為止。一臺(tái)普通配置的電腦需要花一年的時(shí)間才能猜對(duì)答案。所謂團(tuán)結(jié)就是力量,區(qū)塊鏈網(wǎng)絡(luò)里有很多臺(tái)電腦(節(jié)點(diǎn)),一起猜,只需要平均10分鐘就可找到答案。
哪個(gè)節(jié)點(diǎn)先猜到了答案,它就先有權(quán)利將它的候選區(qū)塊放到鏈上。
要找茬的話(huà):如果兩個(gè)節(jié)點(diǎn)同時(shí)猜到答案,同時(shí)將各自的候選區(qū)塊放在鏈上,會(huì)怎么樣?每個(gè)節(jié)點(diǎn)都有一份區(qū)塊鏈副本,當(dāng)節(jié)點(diǎn)拿到其他節(jié)點(diǎn)丟出來(lái)的候選區(qū)塊(已有正確答案的),就會(huì)把區(qū)塊放到副本鏈上,同時(shí)系統(tǒng)會(huì)要求節(jié)點(diǎn)搜尋網(wǎng)絡(luò)里有沒(méi)有比它的副本鏈更長(zhǎng)的鏈,如果有,舍棄原有的鏈,取用更長(zhǎng)的鏈。
▲圖7 解決鏈模糊邏輯
事實(shí)上,節(jié)點(diǎn)同時(shí)猜對(duì)答案的發(fā)生機(jī)率很低,所以整個(gè)區(qū)塊鏈會(huì)很快地穩(wěn)定下來(lái),收斂成單一條鏈。話(huà)雖如此,不一致的鏈尾區(qū)塊仍存在潛在的安全問(wèn)題。如果區(qū)塊屬于較短的鏈尾上(如圖7的區(qū)塊B),一旦系統(tǒng)決定采用其他更長(zhǎng)的鏈(如圖7的區(qū)塊A和N),則區(qū)塊B內(nèi)的所有交易信息會(huì)被設(shè)定回到未確認(rèn)狀態(tài)。
我們來(lái)看看Mary如何利用鏈尾模糊現(xiàn)象來(lái)進(jìn)行攻擊。Mary要付錢(qián)給John,John要出貨給Mary,因?yàn)楣?jié)點(diǎn)總是取用長(zhǎng)鏈執(zhí)行其上的交易信息,這個(gè)時(shí)候Mary假造一個(gè)更長(zhǎng)的鏈,里面包含了一個(gè)取消交易的信息,于是John可能會(huì)財(cái)貨兩失。
▲圖8 Mary的攻擊方法
系統(tǒng)如何防止這類(lèi)攻擊?剛提到所有節(jié)點(diǎn)會(huì)合力找到數(shù)學(xué)題的答案才能把候選區(qū)塊放到鏈上,單靠一臺(tái)電腦去猜是非常困難,Mary必須比網(wǎng)絡(luò)上所有的節(jié)點(diǎn)更快找到答案,才可能把假造的候選區(qū)塊放到鏈上。就算她成功假造了第一個(gè)區(qū)塊,還有第二個(gè)、第三個(gè)區(qū)塊,每次都要跟整個(gè)網(wǎng)絡(luò)上節(jié)點(diǎn)們做競(jìng)賽。如果Mary用一臺(tái)超級(jí)快的電腦呢?因?yàn)榫W(wǎng)絡(luò)上有大量的節(jié)點(diǎn),Mary不可能在確切的時(shí)間點(diǎn)假造多個(gè)區(qū)塊來(lái)進(jìn)行攻擊。
如果她控制了網(wǎng)絡(luò)上一半的節(jié)點(diǎn),她有50%的機(jī)率可以成功假造區(qū)塊,但如果要連續(xù)假造兩個(gè)區(qū)塊,機(jī)率降到25%。想假造越多的區(qū)塊,Mary的成功機(jī)率越低。
比特幣區(qū)塊鏈系統(tǒng)的交易信息是被數(shù)學(xué)競(jìng)賽保護(hù)著:黑客是跟整個(gè)網(wǎng)絡(luò)做競(jìng)速。
所以,交易信息隨著時(shí)間越來(lái)越安全。越舊的區(qū)塊比越新的區(qū)塊更安全。平均10分鐘就有一個(gè)新的區(qū)塊加到鏈上,大概一個(gè)小時(shí)后,里面的交易信息有很高的機(jī)率已經(jīng)被執(zhí)行了,而且是不可逆的。
▲圖9 區(qū)塊鏈的交易安全
為了轉(zhuǎn)錢(qián)出去,你的錢(qián)包必須先驗(yàn)證有錢(qián)轉(zhuǎn)進(jìn)來(lái)過(guò),網(wǎng)絡(luò)上所有的交易都會(huì)經(jīng)過(guò)這樣的驗(yàn)證。雞生蛋,蛋生雞,但一開(kāi)始的比特幣從哪來(lái)?
為了平衡軟件錯(cuò)誤或錢(qián)包密碼遺失所造成的通貨緊縮,系統(tǒng)會(huì)把一些回饋金給解開(kāi)數(shù)學(xué)題的節(jié)點(diǎn)。為了得到回饋金而去執(zhí)行軟件的行為,稱(chēng)為“挖礦”?——?就像挖金礦一樣。
回饋金是一種激勵(lì),推動(dòng)人們?nèi)ソ⒐?jié)點(diǎn),順帶貢獻(xiàn)一些計(jì)算效能來(lái)幫助整個(gè)網(wǎng)絡(luò)的運(yùn)算和穩(wěn)定。
因?yàn)橐慌_(tái)電腦需要花很長(zhǎng)的時(shí)間解題(大約平均一年),所以幾個(gè)節(jié)點(diǎn)可以組成一個(gè)群組一起解題。這種方式會(huì)比較快,而且平分得到的回饋金。這種群組稱(chēng)為挖礦池(mining pools)。
有些挖礦池很大,可能擁有整個(gè)網(wǎng)絡(luò)超過(guò)20%的計(jì)算效能。這可能會(huì)有安全性問(wèn)題,就像剛剛Mary那個(gè)例子。但就算挖礦池得到50%的計(jì)算效能,時(shí)間越久,交易信息就越安全。
然而,有些挖礦池會(huì)限制節(jié)點(diǎn)的數(shù)量避免過(guò)大的計(jì)算效能來(lái)保障網(wǎng)絡(luò)的安全。
而且隨著時(shí)間整個(gè)網(wǎng)絡(luò)的計(jì)算效能會(huì)提升,例如技術(shù)的創(chuàng)新或節(jié)點(diǎn)數(shù)量的增加,區(qū)塊鏈網(wǎng)絡(luò)會(huì)重新調(diào)整數(shù)學(xué)題的難度,讓產(chǎn)生新的區(qū)塊的時(shí)間保持在10分鐘。這么做可以促使網(wǎng)絡(luò)的穩(wěn)定和安全。
再者,每四年挖礦的回饋金會(huì)減半,所以隨著時(shí)間人們對(duì)挖礦的興趣會(huì)減少。為了避免節(jié)點(diǎn)停止挖礦,系統(tǒng)允許每筆交易信息可以附帶一點(diǎn)回饋金,節(jié)點(diǎn)便可以獲得額外的利益。
因?yàn)檫@個(gè)機(jī)制,如果交易信息帶有較高的回饋金,就會(huì)比較快被執(zhí)行。這表示你想要你的交易快點(diǎn)被執(zhí)行,就得附加比較高的回饋金。跟銀行的手續(xù)費(fèi)來(lái)比,比特幣的交易回饋金顯得比較少,而且跟交易量無(wú)關(guān)。
▲圖10 比特幣交易
現(xiàn)在你已經(jīng)對(duì)區(qū)塊鏈有一個(gè)初步的了解,我們來(lái)快速看一下它為什么有趣。
使用區(qū)塊鏈技術(shù)有幾個(gè)相當(dāng)顯著的好處:
?你可完全控制自己的身家財(cái)產(chǎn),沒(méi)有第三方機(jī)構(gòu)組織保管或限制你使用它。
?交易成本非常低,讓我們可以實(shí)現(xiàn)小額支付(micropayments)。
?財(cái)產(chǎn)可以在幾分鐘內(nèi)就完成轉(zhuǎn)移,交易紀(jì)錄可以在幾個(gè)小時(shí)內(nèi)獲得保障。
?任何人可以在任何時(shí)間驗(yàn)證每個(gè)交易紀(jì)錄,區(qū)塊鏈具有高透明度。
?應(yīng)用區(qū)塊鏈技術(shù)可以打造任何去中心化的應(yīng)用軟件,它可以快速且安全管理和傳送數(shù)據(jù)。
然而,有一些挑戰(zhàn)需要克服:
?交易紀(jì)錄都是匿名的。一方面保障了用戶(hù)的隱私,另一方面管制機(jī)構(gòu)無(wú)法追蹤非法的交易行為。
?即使很多交易平臺(tái)興起,仍不容易使用比特幣買(mǎi)東西。
?比特幣就像其他的虛擬貨幣,非常不穩(wěn)定:在市場(chǎng)上不容易取得而且需求劇烈變化。比特幣的價(jià)格很容易受到虛擬貨幣市場(chǎng)的突發(fā)事件影響。
?區(qū)塊鏈技術(shù)還處于起步階段,每天都有新的發(fā)展讓區(qū)塊鏈更安全且穩(wěn)定。
整體來(lái)說(shuō),區(qū)塊鏈技術(shù)在許多行業(yè)上也具有潛在的革命性,例如從廣告到能源。它的主要影響力是源自于去中心化的概念和不需要無(wú)形的信賴(lài),很多的應(yīng)用正在發(fā)展中。
評(píng)論
查看更多