區(qū)塊鏈的工作原理是怎樣的
掃描二維碼
隨時(shí)隨地手機(jī)看文章
區(qū)塊鏈:去中心化的分布式數(shù)據(jù)庫
大家都知道,“比特幣”是一種數(shù)字貨幣。而“區(qū)塊鏈”就是比特幣的記賬系統(tǒng)??梢园褏^(qū)塊鏈想象成一個(gè)賬本,上面記錄了全球所有的比特幣交易信息。那么,區(qū)塊鏈跟傳統(tǒng)的銀行記賬有什么區(qū)別呢?
這就涉及到區(qū)塊鏈的本質(zhì)了:區(qū)塊鏈?zhǔn)且环N去中心化的分布式數(shù)據(jù)庫。我會(huì)一一解釋這三個(gè)關(guān)鍵詞。
數(shù)據(jù)庫:
所謂“數(shù)據(jù)庫”,就是計(jì)算機(jī)上的一組表格,它可以存放大量的有結(jié)構(gòu)的信息(可以類比Excel,但遠(yuǎn)比Excel復(fù)雜)。比如我們?nèi)ャy行存款、取款、匯款,這些交易信息都是要上傳到銀行的數(shù)據(jù)庫的。
分布式:
這個(gè)數(shù)據(jù)庫可以存放在銀行的一臺(tái)超級電腦上,也可以放在多臺(tái)電腦上。比如工行可能在華北、華中、華東、華南等地區(qū)各有一臺(tái)服務(wù)器,每個(gè)地區(qū)的交易信息發(fā)送到本地區(qū)的服務(wù)器上,各個(gè)服務(wù)器之間通過銀行的內(nèi)部網(wǎng)絡(luò)連接。這就叫“分布式數(shù)據(jù)庫”。
去中心化:
傳統(tǒng)的服務(wù)器,不管是不是分布式的,都是有“管理員”的。也就是說,有一個(gè)銀行內(nèi)部的“超級用戶”可以查看所有的交易信息,并且可以隨意添加、修改這些信息。這就叫“中心化”。
而區(qū)塊鏈則是“去中心化”的。也就是說,區(qū)塊鏈這個(gè)數(shù)據(jù)庫中不存在管理員,所有人都是平等的,都有權(quán)查看、添加信息。去中心化是區(qū)塊鏈的本質(zhì)特征。
既然所有人都有權(quán)往區(qū)塊鏈上添加信息,那么這個(gè)“賬本”難道不會(huì)亂七八糟嗎?要搞清楚這點(diǎn),我們需要了解什么是“區(qū)塊”,什么是“鏈”。
何為“區(qū)塊”何為“鏈”?“區(qū)塊”是區(qū)塊鏈的基本組成。區(qū)塊就是一個(gè)數(shù)據(jù)塊。類比賬本的話,區(qū)塊就相當(dāng)于賬本上的一頁,這一頁上記錄了多條交易信息。而把這些分散在整個(gè)互聯(lián)網(wǎng)上的“頁”串成一條鏈,就可以形成一個(gè)完整的“賬本”。那么,“區(qū)塊”是怎么串成“區(qū)塊鏈”的呢?
區(qū)塊鏈賬本的記賬原理
哈希值與防篡改:
除了比特幣交易信息之外,區(qū)塊上還包含了這個(gè)區(qū)塊本身的一些特征信息??梢灶惐纫豁撋系摹绊摯a”,只不過這個(gè)“頁碼”比較復(fù)雜?!绊摯a”中最重要的,就是“哈希值”,它是理解區(qū)塊鏈可靠性的關(guān)鍵。
所謂“哈希值”,可以理解為數(shù)據(jù)的一個(gè)“指紋”。我們簽合同有時(shí)會(huì)摁手印,以后只要把自己的指紋和合同上的指紋對比一下,就可以證明合同是自己簽的。類似地,我們在網(wǎng)上下載一個(gè)軟件,有些網(wǎng)站會(huì)給出安裝包的哈希值(可能稱為CRC或SHA)。我們下載完安裝包后,只需用專門的工具計(jì)算一下這個(gè)SHA值,再跟官網(wǎng)上給的SHA值對比一下,就可以知道自己下載的和網(wǎng)站提供的是否100%一致,下載過程有沒有被人做了手腳。
不同的數(shù)據(jù),算出來的哈希值一般來說是不同的。如果已知數(shù)據(jù)A的哈希值是H,想偽造另一個(gè)數(shù)據(jù)B,使它的哈希值也是H,這是極其困難的。也就是說,哈希值具有不可偽造性,起到了“指紋”的作用。
一個(gè)區(qū)塊中,包含了兩種哈希值:“上一個(gè)區(qū)塊的哈希值”和“本區(qū)塊的哈希值”。因?yàn)槊總€(gè)區(qū)塊都包含了上一個(gè)區(qū)塊的哈希值,所有的區(qū)塊就依次連成一條(邏輯上的)鏈。“上一個(gè)區(qū)塊的哈希值”就起到了“頁碼”的作用——給頁排序。
▲區(qū)塊所包含的內(nèi)容
▲區(qū)塊連接成區(qū)塊鏈
如果一個(gè)區(qū)塊上的交易信息被人惡意篡改的話,“本區(qū)塊的哈希值”就會(huì)改變。由于區(qū)塊鏈中下一個(gè)區(qū)塊包含了“上一個(gè)區(qū)塊的哈希值”,為了讓下一個(gè)區(qū)塊依然能連到本區(qū)塊,需要修改下一個(gè)區(qū)塊。而這又導(dǎo)致下下個(gè)、下下下個(gè)。..。..區(qū)塊也必須修改。
▲篡改了一個(gè)區(qū)塊,就要修改后面所有區(qū)塊
由于區(qū)塊鏈本身的一些機(jī)制(這個(gè)機(jī)制比較細(xì)節(jié),我們這里不討論),計(jì)算一個(gè)區(qū)塊的哈希值是極其困難的,修改多個(gè)區(qū)塊的哈希值則是難上加難。這樣,篡改區(qū)塊鏈中的交易信息就成為幾乎不可能的事情。這就保證了區(qū)塊鏈的可靠性。
采礦:向區(qū)塊鏈寫入信息的方式
采礦:向區(qū)塊鏈寫入信息的方式“采礦”,就是計(jì)算出一個(gè)潛在區(qū)塊的哈希值,使這個(gè)區(qū)塊正式加入整個(gè)區(qū)塊鏈的過程。一個(gè)區(qū)塊加入?yún)^(qū)塊鏈后,其中包含的交易信息才能成為事實(shí)。由于比特幣設(shè)計(jì)者的一些考慮,采礦的過程需要消耗大量時(shí)間和資源。前面已經(jīng)提到,計(jì)算區(qū)塊的哈希值是極其困難的。具體有多困難呢?如果比特幣網(wǎng)絡(luò)中的計(jì)算機(jī)都參與哈希值的計(jì)算,平均每十分鐘才能算出一個(gè)哈希值。
從事采礦活動(dòng)的人,稱為“礦工”?;ヂ?lián)網(wǎng)上的任何人都可以加入比特幣網(wǎng)絡(luò),成為礦工。既然采礦需要消耗大量時(shí)間和資源,為什么礦工會(huì)自愿加入呢?這是因?yàn)楸忍貛艆f(xié)議規(guī)定,挖到新區(qū)塊的礦工會(huì)得到比特幣獎(jiǎng)勵(lì)。這是礦工采礦的動(dòng)力;也因?yàn)榈V工持續(xù)得挖礦,比特幣交易信息才能被確認(rèn),比特幣交易才能正常進(jìn)行。同時(shí),這也是比特幣總量唯一的增加方式。比特幣不像傳統(tǒng)貨幣,它的總量不能通過國家或機(jī)構(gòu)人為印發(fā)的方式增加,只能通過挖礦獎(jiǎng)勵(lì)的方式“自然地”增加。
如何避免主鏈分叉?
既然挖礦會(huì)有比特幣獎(jiǎng)勵(lì),比特幣的交易方也會(huì)給礦工一些手續(xù)費(fèi)作為報(bào)酬,礦工之間難免會(huì)產(chǎn)生大量競爭。如果兩個(gè)礦工同時(shí)挖到了某個(gè)區(qū)塊的下一個(gè)區(qū)塊,那么誰挖到的那個(gè)區(qū)塊有資格加入?yún)^(qū)塊鏈呢?如果都可以加入?yún)^(qū)塊鏈,區(qū)塊鏈產(chǎn)生了分叉,這樣如何保證區(qū)塊鏈的“唯一性”呢?
區(qū)塊鏈協(xié)議規(guī)定,如果一個(gè)分叉上的新增區(qū)塊達(dá)到了六個(gè),那么它就成為區(qū)塊鏈的“正統(tǒng)”;而同一時(shí)刻其他沒有達(dá)到六個(gè)區(qū)塊的分叉,就會(huì)被不幸淘汰,這些區(qū)塊上的交易信息也不會(huì)被認(rèn)可。這就避免了區(qū)塊鏈的分叉。由于一個(gè)區(qū)塊在被挖出來后,后面必須跟上六個(gè)新區(qū)塊,而平均每十分鐘才能挖到一個(gè)新區(qū)塊,這樣,一筆交易至少需要一個(gè)小時(shí)才能被確認(rèn)(被寫進(jìn)區(qū)塊鏈)。
▲礦工B:我有一句喵喵喵不知當(dāng)不當(dāng)講
綜合上文,那么比特幣交易的過程是怎樣的呢?
交易無非就是一條信息:“買方-1$,賣方+1$?!保ㄟ@里涉及到一些非對稱密碼的知識,由于不是比特幣所獨(dú)有,不作討論。)當(dāng)你發(fā)起一筆比特幣交易后,這個(gè)交易信息就會(huì)從你的設(shè)備上,逐漸發(fā)送到整個(gè)比特幣網(wǎng)絡(luò)。
為了挖礦獎(jiǎng)勵(lì),許多礦工都會(huì)收集你的交易信息,并拼命挖新的區(qū)塊。如果一個(gè)礦工挖出了一個(gè)新的區(qū)塊,他就會(huì)把你的交易信息寫入?yún)^(qū)塊。在這之后,他還需要再挖出六個(gè)新的區(qū)塊,以保證整個(gè)區(qū)塊鏈采用了這個(gè)區(qū)塊。這時(shí)你的交易信息才能正式寫入?yún)^(qū)塊鏈,得到確認(rèn)。而那些沒有挖到六個(gè)區(qū)塊的礦工的成果則會(huì)被淘汰。
這樣,雖然是多個(gè)礦工在競爭著寫入你的交易信息,最后只能有一個(gè)礦工成功地寫入。這就保證了同一次交易中,你的錢不會(huì)被扣掉兩次。
一旦一個(gè)新的區(qū)塊正式加入了區(qū)塊鏈,這個(gè)區(qū)塊就會(huì)被同步到所有礦工的機(jī)器上,新的區(qū)塊只能跟在這個(gè)區(qū)塊后面。而挖到這個(gè)區(qū)塊的礦工會(huì)獲得一些比特幣作為獎(jiǎng)勵(lì),這也是新比特幣發(fā)行的過程。
小結(jié)一下以上的要點(diǎn):
區(qū)塊鏈?zhǔn)潜忍貛沤灰椎目煽康?、唯一的賬本。
區(qū)塊鏈?zhǔn)且粋€(gè)無中心的分布式數(shù)據(jù)庫。它沒有管理員,網(wǎng)絡(luò)中的所有用戶都可以平等地向區(qū)塊鏈中寫入新的區(qū)塊。
區(qū)塊根據(jù)“上個(gè)區(qū)塊的哈希值”而連接成一條鏈。
計(jì)算哈希值的困難性,使得區(qū)塊和區(qū)塊鏈無法被篡改,保證了區(qū)塊和區(qū)塊鏈的可靠性。
一個(gè)區(qū)塊后面新增六個(gè)區(qū)塊才能使它正式加入?yún)^(qū)塊鏈,這使得區(qū)塊鏈不會(huì)產(chǎn)生分叉,保證了區(qū)塊鏈的唯一性。
但同時(shí),這也導(dǎo)致比特幣交易至少需要一個(gè)小時(shí)來確認(rèn),不具有即時(shí)性。
挖礦獎(jiǎng)勵(lì)是比特幣唯一的發(fā)行機(jī)制,也是礦工挖礦的動(dòng)力。
來源:IT之家