- 一本書(shū)讀懂區(qū)塊鏈
- 凌峰
- 8538字
- 2019-01-05 05:41:19
區(qū)塊鏈技術(shù):老技術(shù)成就新突破
在前面的章節(jié)中,我們用“烏特村”的例子形象地對(duì)比了傳統(tǒng)貨幣和加密貨幣,并模擬了烏特幣交易的過(guò)程。從本章開(kāi)始,將介紹區(qū)塊鏈核心技術(shù)的有關(guān)知識(shí)。由于比特幣是區(qū)塊鏈技術(shù)目前最有代表性的應(yīng)用,在以下的介紹中,相關(guān)具體實(shí)例還將以比特幣為主進(jìn)行說(shuō)明。
區(qū)塊鏈并非一項(xiàng)創(chuàng)新技術(shù),而是將許多跨領(lǐng)域技術(shù)集成在一起,從某種角度來(lái)看是一種架構(gòu)的創(chuàng)新。其中涉及密碼學(xué)、數(shù)學(xué)、經(jīng)濟(jì)模型、點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)等。為便于理解,我們不采取從底層到應(yīng)用層的技術(shù)性的介紹方式,而是假設(shè)我們都是“中本聰”,以問(wèn)題為導(dǎo)向,在尋找解決方案的過(guò)程中逐步深入地來(lái)理解。
在“烏特村”的例子中,我們看到,記賬的形式代替了貨幣,村民每家每戶(hù)都有賬本來(lái)維持彼此之間的信任關(guān)系。區(qū)塊鏈技術(shù)核心也是如此,通過(guò)讓每個(gè)用戶(hù)都掌握所有數(shù)據(jù)來(lái)創(chuàng)造信任。從信息技術(shù)的角度來(lái)看,這個(gè)“賬本”本質(zhì)上是一個(gè)數(shù)據(jù)庫(kù),而且是分散到每個(gè)用戶(hù)的數(shù)據(jù)庫(kù),在計(jì)算機(jī)領(lǐng)域,通常稱(chēng)之為“分布式數(shù)據(jù)庫(kù)”。
分布式數(shù)據(jù)庫(kù)
我們使用的絕大部分程序都需要數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)程序運(yùn)行所需要的參數(shù)、用戶(hù)所保存的各類(lèi)數(shù)據(jù)。與分布式數(shù)據(jù)庫(kù)相對(duì)應(yīng)的是單機(jī)數(shù)據(jù)庫(kù),顧名思義,單機(jī)數(shù)據(jù)庫(kù)一般是保存在一臺(tái)主機(jī)上,分布式數(shù)據(jù)庫(kù)則需要一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)來(lái)予以支持。
在分布式數(shù)據(jù)庫(kù)的計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)中,每臺(tái)計(jì)算機(jī)構(gòu)成一個(gè)網(wǎng)絡(luò)上的節(jié)點(diǎn),且都有數(shù)據(jù)庫(kù)的完整副本(有的情況下也可能是部分?jǐn)?shù)據(jù)庫(kù)的副本),這些位于不同地點(diǎn)的計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)相連,形成了在物理上分離、在邏輯上集中的完整的大型數(shù)據(jù)庫(kù)。
分布式數(shù)據(jù)庫(kù)當(dāng)然不是因?yàn)閰^(qū)塊鏈或比特幣才出現(xiàn)的,它的出現(xiàn)是應(yīng)對(duì)大數(shù)據(jù)時(shí)代海量數(shù)據(jù)處理的需求。能夠滿(mǎn)足人們需要的分布式數(shù)據(jù)庫(kù)一般應(yīng)具有以下特征:(1)較強(qiáng)的擴(kuò)展性,能夠動(dòng)態(tài)地增加存儲(chǔ)節(jié)點(diǎn),這樣才能適應(yīng)數(shù)據(jù)容量海量增加的需要;(2)較高的并發(fā)性,也就是對(duì)于大規(guī)模用戶(hù)的服務(wù)請(qǐng)求能夠妥善安全地處理;(3)較好的容錯(cuò)性,分布式存儲(chǔ)對(duì)數(shù)據(jù)保存的質(zhì)量提出更高的要求,雖然當(dāng)前的計(jì)算機(jī)通信速度已經(jīng)很快,不同數(shù)據(jù)庫(kù)節(jié)點(diǎn)的物理距離可以忽略不計(jì),但是對(duì)于海量數(shù)據(jù)來(lái)說(shuō),其調(diào)度與處理必須有較好的容錯(cuò)性、備份和恢復(fù)機(jī)制來(lái)保障數(shù)據(jù)安全。
至此,作為“中本聰”的我們,想出了用分布式數(shù)據(jù)庫(kù)作為“賬本”的好主意。雖然通常意義上的“分布式數(shù)據(jù)庫(kù)”在架構(gòu)等方面和區(qū)塊鏈意義上的“分布式數(shù)據(jù)庫(kù)”特征不同,甚至有較大差異,但是在“分布”和“數(shù)據(jù)庫(kù)”這兩個(gè)基本方面是相似的。當(dāng)然,這里“數(shù)據(jù)庫(kù)”不是孤零零存在的靜態(tài)數(shù)據(jù)文件,一般情況下也包括讀取和寫(xiě)入等功能。
“賬本”有了,我們可以自己“記賬”(操作數(shù)據(jù)庫(kù))了,但是,目前只能操作自己的賬本,要想影響到別人的賬本,比如說(shuō)告訴張三、李四有關(guān)交易信息,首要的前提是,張三和李四得有溝通的渠道。那么,從目前來(lái)看,解決問(wèn)題的方案大致有兩種:一種是以第三方的服務(wù)器作為中轉(zhuǎn),服務(wù)器作為中介負(fù)責(zé)把每個(gè)人的記賬信息傳給其他所有人,就類(lèi)似在張三和李四之間設(shè)立一個(gè)郵局,在里面交換信息;另外一種是,節(jié)點(diǎn)之間直接通信,張三和李四之間通過(guò)信鴿直接溝通交流。
第一種方案顯然又回到了傳統(tǒng)“中心化”的路上,同時(shí),第三方服務(wù)器還需要付出很多額外成本。因此,第二種顯然會(huì)成為我們這些“中本聰”們的選擇。實(shí)現(xiàn)這種節(jié)點(diǎn)之間的直接通信,在計(jì)算機(jī)領(lǐng)域叫作點(diǎn)對(duì)點(diǎn)(Peer to Peer)技術(shù),也有人稱(chēng)之為對(duì)等計(jì)算。
點(diǎn)對(duì)點(diǎn)技術(shù)
點(diǎn)對(duì)點(diǎn)技術(shù)一般被簡(jiǎn)稱(chēng)為“P2P”,看起來(lái)或聽(tīng)起來(lái)是不是有點(diǎn)熟悉?的確,不少人可能會(huì)想起互聯(lián)網(wǎng)金融:不同客戶(hù)通過(guò)專(zhuān)業(yè)網(wǎng)絡(luò)平臺(tái)實(shí)現(xiàn)借貸雙方確立借貸關(guān)系并完成相關(guān)交易。“P2P”金融借用了點(diǎn)對(duì)點(diǎn)技術(shù)概念的一些內(nèi)容,但更多的是指“客戶(hù)到客戶(hù)”,雖然沒(méi)有專(zhuān)業(yè)的金融機(jī)構(gòu),還是存在某種程度中心化作用的第三方的撮合平臺(tái)。我們下面要談到的是真正的點(diǎn)對(duì)點(diǎn)技術(shù),沒(méi)有任何第三方存在,是完全意義上的一個(gè)節(jié)點(diǎn)對(duì)另外一個(gè)節(jié)點(diǎn)的信息傳遞。
傳統(tǒng)的網(wǎng)絡(luò)應(yīng)用通常分為服務(wù)器端和客戶(hù)端,在程序運(yùn)行時(shí),大部分?jǐn)?shù)據(jù)保存在服務(wù)器上,根據(jù)用戶(hù)的不同需要,客戶(hù)端負(fù)責(zé)與服務(wù)器進(jìn)行各類(lèi)交互,按照一定的方式將數(shù)據(jù)或處理過(guò)的數(shù)據(jù)呈現(xiàn)給用戶(hù)。
點(diǎn)對(duì)點(diǎn)技術(shù)形成的架構(gòu)則不同,其不同節(jié)點(diǎn)之間是直接通信的,不存在一個(gè)中心化的服務(wù)器,每個(gè)參與的節(jié)點(diǎn)既是服務(wù)器也是客戶(hù)端,都共享出其自身一部分計(jì)算資源,通過(guò)這些共享資源,對(duì)等的每個(gè)節(jié)點(diǎn)(Peer)彼此間能夠直接訪問(wèn),而不要另外中心化的服務(wù)器。
與分布式數(shù)據(jù)庫(kù)一樣,點(diǎn)對(duì)點(diǎn)技術(shù)同樣不是新技術(shù)。自從網(wǎng)絡(luò)產(chǎn)生以來(lái)就一直存在,由于網(wǎng)絡(luò)帶寬等客觀條件,這種計(jì)算模式并沒(méi)有被廣泛應(yīng)用。隨著互聯(lián)網(wǎng)傳輸速度的加快及個(gè)人計(jì)算機(jī)計(jì)算能力的增強(qiáng),點(diǎn)對(duì)點(diǎn)技術(shù)開(kāi)始發(fā)揮越來(lái)越重要的作用,許多基于P2P技術(shù)的知名應(yīng)用應(yīng)運(yùn)而生,很多大家熟悉的軟件,比如eMule、BT、QQ、Skype、PPLive等,都用到了點(diǎn)對(duì)點(diǎn)技術(shù)。
點(diǎn)對(duì)點(diǎn)技術(shù)的特點(diǎn)也是很明顯的:首先就是去中心化,網(wǎng)絡(luò)資源分散在不同的結(jié)點(diǎn)上,信息的傳輸直接在結(jié)點(diǎn)之間進(jìn)行,可以無(wú)須中間環(huán)節(jié)和服務(wù)器的介入,避免了可能的瓶頸。去中心化的特點(diǎn)進(jìn)而帶來(lái)極強(qiáng)的擴(kuò)展性、健壯性,從擴(kuò)展性這方面來(lái)看,新加入的節(jié)點(diǎn)帶來(lái)了需求,也帶來(lái)了新的資源和服務(wù)能力。比如,就文件下載來(lái)說(shuō),如果用傳統(tǒng)的下載方式,節(jié)點(diǎn)增加會(huì)使得下載速度變慢,但是,在點(diǎn)對(duì)點(diǎn)技術(shù)支持下的網(wǎng)絡(luò)卻不同,節(jié)點(diǎn)增多,反而提升了服務(wù)能力,下載速度反而會(huì)加快;在健壯性方面,由于資源和服務(wù)能力是分散在各個(gè)節(jié)點(diǎn)上的,因而各類(lèi)風(fēng)險(xiǎn)也就自然分散,這使其具有更強(qiáng)的耐攻擊性和高容錯(cuò)性,部分節(jié)點(diǎn)遭到破壞對(duì)其他部分的影響很小,一般情況下,在部分結(jié)點(diǎn)失效時(shí)能夠自動(dòng)調(diào)整。
除此之外,點(diǎn)對(duì)點(diǎn)技術(shù)實(shí)現(xiàn)的網(wǎng)絡(luò)的性?xún)r(jià)比也比較高,它可以有效地將計(jì)算任務(wù)或存儲(chǔ)資料分布到所有節(jié)點(diǎn)上,利用閑置的計(jì)算能力達(dá)到高性能計(jì)算和海量存儲(chǔ)的目的。同時(shí),由于信息傳輸分散在各節(jié)點(diǎn)之間,因而用戶(hù)隱私信息被竊聽(tīng)和泄漏的可能性大大縮小。
通過(guò)點(diǎn)對(duì)點(diǎn)技術(shù),我們解決了無(wú)中心服務(wù)器條件下信息傳遞的“橋梁”問(wèn)題。搭建好了“橋梁”, “中本聰”們必須考慮所傳遞信息應(yīng)該如何構(gòu)成,這就得談?wù)剠^(qū)塊和鏈的問(wèn)題。
區(qū)塊和鏈
在人們的日常生活中,任何數(shù)據(jù)或信息的集合都需要一定的構(gòu)成和排列方式,比如書(shū)信有書(shū)信的形式,不同的公文也有各自的內(nèi)容和格式要求,程序代碼更是如此。
在計(jì)算機(jī)的世界,同樣如此。信息如何組合,數(shù)據(jù)庫(kù)怎么構(gòu)成,對(duì)于程序來(lái)說(shuō)是很重要的問(wèn)題。因此,大部分?jǐn)?shù)據(jù)庫(kù)都有一定的結(jié)構(gòu),只有這樣才能更好地對(duì)數(shù)據(jù)進(jìn)行管理。就區(qū)塊鏈說(shuō),“結(jié)構(gòu)”的設(shè)計(jì)不僅是要有利于數(shù)據(jù)存取,更要能實(shí)現(xiàn)區(qū)塊鏈無(wú)法篡改、不可逆等需求。
對(duì)于區(qū)塊鏈來(lái)說(shuō),每個(gè)節(jié)點(diǎn)擁有的分布式數(shù)據(jù)庫(kù)的基本單位可以看作是“區(qū)塊”,區(qū)塊之間根據(jù)一定的規(guī)則,以一定的方式鏈接起來(lái)形成了鏈狀結(jié)構(gòu)。每個(gè)區(qū)塊主要包括:區(qū)塊大小、區(qū)塊頭、交易數(shù)量、交易構(gòu)成。區(qū)塊頭又包括:區(qū)塊版本號(hào)、前一個(gè)區(qū)塊的哈希值、當(dāng)前區(qū)塊中所有交易的哈希值、時(shí)間戳、目標(biāo)值、隨機(jī)數(shù)等。這些概念看不懂也沒(méi)關(guān)系,先明白每個(gè)區(qū)塊大致構(gòu)成即可。
我們先從整體上看看區(qū)塊鏈交易的過(guò)程,為了理解方便,我們還是借用一下“烏特幣”作為計(jì)量單位來(lái)舉例說(shuō)明。假設(shè)烏特村興旺發(fā)達(dá),人口總數(shù)增加到了1萬(wàn)人,使用烏特幣作為數(shù)字貨幣,區(qū)塊鏈上已經(jīng)包含了100萬(wàn)條交易信息,占用了5000個(gè)區(qū)塊,大家可以理解為:有一個(gè)賬本,已經(jīng)用了5000頁(yè),記載了100萬(wàn)個(gè)交易記錄。
有一天,甲發(fā)起了某項(xiàng)交易,要向乙支付100烏特幣,區(qū)塊鏈的廣播機(jī)制將這個(gè)信息通知給了其他人,同樣地,10分鐘之內(nèi),其他人之間也有99項(xiàng)交易的廣播信息,這些交易在沒(méi)完成前姑且稱(chēng)之為“未驗(yàn)證的交易”,總數(shù)量是100筆。可能有人會(huì)問(wèn),這個(gè)例子中為什么非得等10分鐘或是100筆?因?yàn)椋阂粡男軄?lái)考慮,積攢一定數(shù)量的交易請(qǐng)求后再統(tǒng)一操作節(jié)省計(jì)算資源;二從本書(shū)的角度來(lái)看,取100這個(gè)整數(shù)便于敘述和理解。
每個(gè)節(jié)點(diǎn)在收到100條新增交易信息驗(yàn)證請(qǐng)求后開(kāi)始一系列處理:取得第5000個(gè)區(qū)塊的哈希值(暫時(shí)不用理解其意思,只需要明白它是一種加密后的結(jié)果即可);取得操作時(shí)的具體日期和時(shí)間;取得包括最新100條交易信息在內(nèi)的所有交易記錄的哈希值;開(kāi)始計(jì)算目標(biāo)值和隨機(jī)數(shù)構(gòu)成的一道數(shù)學(xué)題。
最終,在1萬(wàn)個(gè)節(jié)點(diǎn)中,丙的節(jié)點(diǎn)最先計(jì)算出了數(shù)學(xué)難題,取得了所有節(jié)點(diǎn)的共識(shí)后,丙勝出了,獲得了“記賬權(quán)”,也就是說(shuō):由丙節(jié)點(diǎn)構(gòu)造第5001個(gè)區(qū)塊,其他9999個(gè)節(jié)點(diǎn)復(fù)制丙的。為了鼓勵(lì)這種記賬“勞動(dòng)”,丙獲得了若干烏特幣。
到此為止,甲和乙的交易完成,1萬(wàn)個(gè)節(jié)點(diǎn)中的相關(guān)數(shù)據(jù)都進(jìn)行了更新。從上面的過(guò)程可以看出“中本聰”或區(qū)塊鏈的邏輯:通過(guò)哈希值對(duì)信息進(jìn)行加密,通過(guò)記錄時(shí)間戳為數(shù)據(jù)操作保留時(shí)間標(biāo)記,再通過(guò)“后區(qū)塊”記錄“前區(qū)塊”的哈希值確保塊塊相連的鏈狀結(jié)構(gòu)。這種結(jié)構(gòu)與由時(shí)間戳構(gòu)成的線性時(shí)序鏈,再輔之以分布存儲(chǔ)等其他技術(shù)共同形成了區(qū)塊鏈不可更改、不可逆的特征。當(dāng)然,區(qū)塊本身所涉及的哈希值、時(shí)間戳等,我們將在下面一一介紹。
哈希運(yùn)算
不同的任務(wù)決定了不同的數(shù)據(jù)結(jié)構(gòu),對(duì)于區(qū)塊鏈來(lái)說(shuō),在沒(méi)有中心服務(wù)器的前提下,如何確保數(shù)據(jù)的準(zhǔn)確、安全是很重要的。因此,“中本聰”想到了在區(qū)塊結(jié)構(gòu)中引入哈希運(yùn)算和時(shí)間戳等內(nèi)容。
這里所說(shuō)的哈希運(yùn)算可以簡(jiǎn)單地理解為一種加密手段,哈希值表示用來(lái)這種加密手段得到的結(jié)果;時(shí)間戳是一種時(shí)間表示方法,確保了交易先后順序。進(jìn)一步來(lái)說(shuō),哈希值是哈希函數(shù)運(yùn)算的結(jié)果,它通過(guò)壓縮數(shù)據(jù)的方式來(lái)提取摘要信息,進(jìn)而將數(shù)據(jù)打亂混合后,通常用一個(gè)短的隨機(jī)字母和數(shù)字組成的字符串來(lái)代表。舉個(gè)簡(jiǎn)單的例子,任意大小的數(shù)據(jù)都可以被計(jì)算出一段哈希值,只要原數(shù)據(jù)有任何更改,哈希值也會(huì)變化。我們看看具體例子(以下哈希值用編程語(yǔ)言Python生成):
“bcstime.com”(不含引號(hào))的哈希值是“8de72518d3a5b189cd 5d1cc3ed49ffd3dd717c14b36160f92634314af1c9de88”。
“ bcstime.com”(不含引號(hào),注意b前面多了個(gè)空格)的哈希值是“8c4fb2d9d661a6fa073975c093bb1b3bf0b50bb25398dac9dc7046e9a7920433”。
經(jīng)常下載軟件的朋友,應(yīng)該記得在很多軟件網(wǎng)站的下載頁(yè)面都能看到類(lèi)似的一組數(shù)字,有的稱(chēng)之為校檢碼,就是為了確保軟件沒(méi)有被人動(dòng)過(guò)手腳。事實(shí)上,即使是幾十萬(wàn)字的文章,有一處變化,哈希值也會(huì)發(fā)生改變。
哈希值同樣不是什么新技術(shù),很多編程語(yǔ)言能夠很方便地計(jì)算哈希值。對(duì)于區(qū)塊鏈來(lái)說(shuō),哈希值的幾個(gè)特點(diǎn)很重要:一是不可能從哈希值推出原來(lái)的數(shù)據(jù);二是不管原始數(shù)據(jù)多么復(fù)雜,計(jì)算哈希值的時(shí)間是一樣的;三是任何更改都會(huì)導(dǎo)致哈希值變化。
靈活地運(yùn)用哈希值的這些特點(diǎn),能夠保障數(shù)據(jù)不被篡改,確保區(qū)塊鏈數(shù)據(jù)的安全和正確。如前所述,區(qū)塊鏈中不僅保存了原始數(shù)據(jù)、交易記錄,還保存了與之相關(guān)的哈希值。
時(shí)間戳
在任何交易中,時(shí)間都是最重要的元素,比如合同什么時(shí)候生效,什么時(shí)候付款,什么時(shí)候交貨等。對(duì)于區(qū)塊鏈這樣的分布式系統(tǒng)來(lái)說(shuō),時(shí)間因素更為重要,它表明了交易的前后順序,對(duì)于維護(hù)區(qū)塊鏈正常運(yùn)行具有關(guān)鍵作用。
在這方面,“中本聰”想到了時(shí)間戳。所謂時(shí)間戳,指的是,一個(gè)能表示一份數(shù)據(jù)在某個(gè)特定時(shí)間之前已經(jīng)存在的、完整的、可驗(yàn)證的數(shù)據(jù),通常是一個(gè)字符序列,唯一地標(biāo)識(shí)某一刻的時(shí)間。在當(dāng)前絕大部分計(jì)算機(jī)系統(tǒng)中,時(shí)間戳具體是指從格林尼治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的秒數(shù)。比如“2018-04-05 00:00:00”轉(zhuǎn)換為時(shí)間戳就是“1522857601”。
時(shí)間戳能為用戶(hù)提供一份電子證據(jù),以證明用戶(hù)的某些數(shù)據(jù)的產(chǎn)生時(shí)間,廣泛地運(yùn)用在知識(shí)產(chǎn)權(quán)保護(hù)、合同、金融、股票交易等領(lǐng)域。當(dāng)然,時(shí)間戳同樣不是新技術(shù)。據(jù)媒體報(bào)道,2008年11月25日,深圳市龍崗區(qū)法院公開(kāi)宣判一系列知識(shí)產(chǎn)權(quán)糾紛案,其中“利龍湖”一案系國(guó)內(nèi)首例時(shí)間戳技術(shù)司法應(yīng)用案例。對(duì)于區(qū)塊鏈而言,每個(gè)區(qū)塊的時(shí)間戳形成了一個(gè)時(shí)間遞增的鏈條,為數(shù)據(jù)的運(yùn)用增加了時(shí)間的維度,能夠證實(shí)特定數(shù)據(jù)必然在某特定時(shí)刻是的確存在的,這同樣保證了數(shù)據(jù)庫(kù)的不可篡改,同時(shí)實(shí)現(xiàn)了信息的可追溯。
挖礦與共識(shí)機(jī)制
哈希運(yùn)算和時(shí)間戳有利于防止區(qū)塊中的數(shù)據(jù)被篡改,但是如何正常地修改數(shù)據(jù),特別是更新全部節(jié)點(diǎn)的數(shù)據(jù),是個(gè)頗為復(fù)雜的事情。作為一個(gè)分布式的數(shù)據(jù)庫(kù),成功更新數(shù)據(jù)的一個(gè)重要標(biāo)志是保證數(shù)據(jù)的一致性。
這方面的挑戰(zhàn)是,不同的節(jié)點(diǎn)所處的物理環(huán)境和計(jì)算環(huán)境不同,如果由每個(gè)節(jié)點(diǎn)自行修改數(shù)據(jù)的話,那么在龐大的節(jié)點(diǎn)量且網(wǎng)絡(luò)環(huán)境不佳的情況下,就難以保證數(shù)據(jù)的統(tǒng)一完整。想象一下,假如有1萬(wàn)個(gè)節(jié)點(diǎn),接收一個(gè)需要更新的交易數(shù)據(jù)包,任何掉線、斷線或網(wǎng)路阻塞,都可能造成不同節(jié)點(diǎn)的數(shù)據(jù)不完整或不一致。且自行修改數(shù)據(jù)還面臨潛在的道德風(fēng)險(xiǎn)。
為了解決這個(gè)問(wèn)題,“中本聰”想到了一個(gè)解決方案,它的基本邏輯是這樣的:由一個(gè)節(jié)點(diǎn)負(fù)責(zé)根據(jù)交易信息構(gòu)造區(qū)塊數(shù)據(jù),然后,其他節(jié)點(diǎn)“復(fù)制”其區(qū)塊數(shù)據(jù)。能夠修改區(qū)塊數(shù)據(jù)的資格,人們稱(chēng)之為“記賬權(quán)”。
實(shí)現(xiàn)這個(gè)方案首先要確定由哪個(gè)節(jié)點(diǎn)來(lái)構(gòu)造新的區(qū)塊數(shù)據(jù),如果固定地由某個(gè)節(jié)點(diǎn)來(lái)進(jìn)行,就破壞了區(qū)塊鏈技術(shù)“去中心化”的特點(diǎn),形成了新的中心化的服務(wù)器節(jié)點(diǎn)。但如果沒(méi)有固定節(jié)點(diǎn)來(lái)修改,那么如何選擇節(jié)點(diǎn)呢?“中本聰”的做法是讓每個(gè)節(jié)點(diǎn)都有權(quán)修改,但前提是通過(guò)一定的競(jìng)爭(zhēng)機(jī)制來(lái)獲得記賬權(quán)。那么,怎么保證節(jié)點(diǎn)有興趣參與記賬工作呢?答案就是,給予成功實(shí)現(xiàn)記賬的節(jié)點(diǎn)一定的獎(jiǎng)勵(lì),用比特幣系統(tǒng)來(lái)舉例子就是獎(jiǎng)賞一定的比特幣。“挖礦”的含義主要也來(lái)源于此,可以簡(jiǎn)單理解為,通過(guò)爭(zhēng)奪記賬權(quán)來(lái)獲得相關(guān)區(qū)塊鏈系統(tǒng)所發(fā)行的加密貨幣。
如上所述,如果有很多節(jié)點(diǎn)都想要參與記賬,必須有一種競(jìng)爭(zhēng)機(jī)制來(lái)選擇出一個(gè)節(jié)點(diǎn),這種機(jī)制至少要滿(mǎn)足兩個(gè)基本要求,一是篩選出有意挖礦的節(jié)點(diǎn),二是在諸多挖礦的節(jié)點(diǎn)中最終確定一個(gè)節(jié)點(diǎn)獲得記賬權(quán)。在計(jì)算機(jī)的世界中,這種機(jī)制當(dāng)然與“計(jì)算”有關(guān)。最初被區(qū)塊鏈技術(shù)運(yùn)用的機(jī)制為“工作量證明機(jī)制”(Pow),通俗點(diǎn)說(shuō),就是必須證明某個(gè)節(jié)點(diǎn)完成工作任務(wù)了,然后才能給予記賬權(quán)。那么這個(gè)工作的要求是什么呢?就是解一道題,舉個(gè)例子來(lái)說(shuō):
給定一個(gè)字符串,假設(shè)是“bcstime.com”。問(wèn):這個(gè)字符串加上什么數(shù)字后的哈希值,是以“0”開(kāi)頭的?
在前面我們已經(jīng)談過(guò)哈希值了,它的一個(gè)特點(diǎn)是不可逆的。也就是說(shuō),得到一個(gè)哈希值,是不可能反過(guò)來(lái)推出原始數(shù)據(jù)的。但是如果只是反求出某種特征的數(shù)字,范圍就大大縮小,還是很可行的。比如,找前幾位是“0”的哈希值(當(dāng)然,位數(shù)越多難度越大)。那么,怎么找呢?只能一個(gè)個(gè)計(jì)算,也就是逐個(gè)“猜”,專(zhuān)業(yè)點(diǎn)的說(shuō)法叫“哈希碰撞”。
從下圖可以看出,假如是按照順序測(cè)試的話,“bcstime.com12”是第一個(gè)符合條件的,節(jié)點(diǎn)測(cè)試出符合要求的結(jié)果,就表明它已經(jīng)有了工作量,之后這個(gè)節(jié)點(diǎn)就要對(duì)其他節(jié)點(diǎn)進(jìn)行廣播,也就是告訴大家,“找到了答案,完成了計(jì)算結(jié)果,請(qǐng)大家見(jiàn)證一下”。

(字符串“bcstime.com”和不同數(shù)字組合生成的哈希值)
其他節(jié)點(diǎn)接收到信息后首先進(jìn)行驗(yàn)證,然后根據(jù)時(shí)間戳等看看信息是否完整,如果沒(méi)有問(wèn)題,就把新的區(qū)塊數(shù)據(jù)追加到已有的區(qū)塊鏈上。
上述談到的“工作量證明機(jī)制”是共識(shí)機(jī)制的一種。共識(shí)機(jī)制主要解決由誰(shuí)來(lái)構(gòu)造區(qū)塊和如何維護(hù)區(qū)塊鏈數(shù)據(jù)一致性的問(wèn)題,也就是說(shuō)某個(gè)節(jié)點(diǎn)完成了工作量后,必須告訴其他節(jié)點(diǎn)新的區(qū)塊數(shù)據(jù),在上述過(guò)程中,還存在一個(gè)問(wèn)題:在一個(gè)分布式的網(wǎng)絡(luò)節(jié)點(diǎn)環(huán)境中,信息在傳遞中會(huì)出現(xiàn)各種各樣的情況,比如有的是網(wǎng)絡(luò)堵塞,有的是節(jié)點(diǎn)硬件損壞,此外還存在各種人為的風(fēng)險(xiǎn)。
解決這個(gè)問(wèn)題的理論基礎(chǔ)就是拜占庭容錯(cuò)(Byzantine Fault-Tolerant, BFT),這是一個(gè)從20世紀(jì)80年代開(kāi)始被研究,目前已經(jīng)比較成熟的理論,而且有不少算法已經(jīng)實(shí)現(xiàn)了這個(gè)理論。從區(qū)塊鏈的角度來(lái)通俗地理解,就是在多節(jié)點(diǎn)的信息傳遞過(guò)程中,通過(guò)一定的算法來(lái)確保正確的信息被大部分節(jié)點(diǎn)所接受。除了工作量證明機(jī)制之外,還有權(quán)益證明機(jī)制、股份授權(quán)證明機(jī)制和Pool驗(yàn)證池。由于工作量證明機(jī)制是區(qū)塊鏈技術(shù)第一個(gè)應(yīng)用——比特幣所使用的,因此,我們對(duì)此進(jìn)行了簡(jiǎn)單介紹,因?yàn)楸緯?shū)不是技術(shù)書(shū)籍,其他機(jī)制就不再展開(kāi),有興趣的讀者可以參閱其他資料。
分叉
通過(guò)挖礦等運(yùn)算,區(qū)塊鏈增加了新的區(qū)塊數(shù)據(jù),區(qū)塊鏈的鏈條變“長(zhǎng)”了。但是,也會(huì)出現(xiàn)一種特殊的情況,就是“分叉”。這個(gè)很好理解,“區(qū)塊鏈”是一個(gè)鏈條,前后區(qū)塊緊密相連,那么如果有不同的節(jié)點(diǎn)同步挖礦,又同時(shí)完成了工作量,他們各自生成了新的區(qū)塊,比如新區(qū)塊a、新區(qū)塊b……這樣就形成了分叉,一個(gè)區(qū)塊鏈分成了兩個(gè)區(qū)塊鏈,甚至更多。
在一般情況下,區(qū)塊鏈應(yīng)該是包含最多區(qū)塊的那個(gè)鏈,但是在分叉的情況下怎么辦呢?對(duì)于這種情況,區(qū)塊鏈系統(tǒng)并不會(huì)馬上確認(rèn),哪個(gè)節(jié)點(diǎn)合理、哪個(gè)節(jié)點(diǎn)不合理,而是保留這些分支,然后在后續(xù)挖礦的活動(dòng)中,通過(guò)計(jì)算得出分叉的區(qū)塊鏈哪個(gè)工作量最大,就選擇哪個(gè),從而保持區(qū)塊鏈最長(zhǎng)鏈的唯一性,進(jìn)而成功地解決分叉問(wèn)題。
分叉問(wèn)題還涉及區(qū)塊鏈的區(qū)塊間隔時(shí)間,比特幣的區(qū)塊間隔時(shí)間是10分鐘,大致上可以簡(jiǎn)單地理解為:每10分鐘做一次記賬操作,這一操作中形成的區(qū)塊數(shù)據(jù)中包括了區(qū)塊鏈系統(tǒng)中這10分鐘所有的交易。之所以如此設(shè)定,是因?yàn)橐胶庥涃~確認(rèn)的速度和低分叉概率,也就是說(shuō),時(shí)間越短,就有可能產(chǎn)生更多的分叉,這對(duì)于區(qū)塊鏈來(lái)說(shuō)并不是好消息,相應(yīng)地,更長(zhǎng)的間隔雖然會(huì)減少分叉數(shù)量,卻會(huì)導(dǎo)致更長(zhǎng)的清算時(shí)間。
加密貨幣
可以把加密貨幣理解為區(qū)塊鏈的一種應(yīng)用,但區(qū)塊鏈不等于加密貨幣或比特幣。截至目前,區(qū)塊鏈最大的應(yīng)用是在加密貨幣領(lǐng)域,區(qū)塊鏈的特點(diǎn)、優(yōu)勢(shì)及風(fēng)險(xiǎn)等很多都體現(xiàn)在加密貨幣上。因此,在本書(shū)的相關(guān)章節(jié)中,特別是第一部分有關(guān)區(qū)塊鏈基礎(chǔ)知識(shí)的介紹中,很多例子都與比特幣或加密貨幣有關(guān)。需要說(shuō)明的是,本書(shū)統(tǒng)一用“加密貨幣”來(lái)指稱(chēng)以區(qū)塊鏈技術(shù)為基礎(chǔ)的非法定的數(shù)字貨幣。至于加密貨幣及相關(guān)具體概念,會(huì)在“區(qū)塊鏈與貨幣”這一章詳細(xì)介紹。
錢(qián)包
前面提到了挖礦,那么挖礦的“成果”放在哪里?獲得的收益又在哪里保存呢?回答這個(gè)問(wèn)題就不得不引出在區(qū)塊鏈中的一個(gè)重要角色:“錢(qián)包”。這個(gè)概念雖然很符合人們?nèi)粘I钪械慕?jīng)驗(yàn),也就是存放“錢(qián)”的地方。但是,就區(qū)塊鏈而言,“錢(qián)包”的概念不是那么簡(jiǎn)單。
錢(qián)包本質(zhì)上就是計(jì)算機(jī)程序,主要負(fù)責(zé)維護(hù)管理區(qū)塊鏈系統(tǒng)的每個(gè)節(jié)點(diǎn),雖然不少人也稱(chēng)之為區(qū)塊鏈的“客戶(hù)端”,但嚴(yán)格地說(shuō),這樣理解并不準(zhǔn)確,因?yàn)椤胺?wù)器—客戶(hù)端”通常是指?jìng)鹘y(tǒng)的中心化的架構(gòu),在區(qū)塊鏈系統(tǒng)中,每個(gè)節(jié)點(diǎn)既擔(dān)負(fù)著服務(wù)器的功能,也實(shí)現(xiàn)著客戶(hù)端的作用。這樣看來(lái),用非技術(shù)性的概念——“錢(qián)包”稱(chēng)之還算合適。當(dāng)然,作為一個(gè)比喻性的概念,“錢(qián)包”即使在區(qū)塊鏈技術(shù)出現(xiàn)之前也被使用,在傳統(tǒng)的互聯(lián)網(wǎng)支付領(lǐng)域,也不排除借用這一概念。但在本書(shū)中,除非特殊說(shuō)明,“錢(qián)包”指的是區(qū)塊鏈節(jié)點(diǎn)的密鑰和地址等管理工具。
理解錢(qián)包還必須弄清與之有關(guān)的概念。“錢(qián)包地址”,可以理解為銀行卡號(hào),在計(jì)算機(jī)的世界中,信息的傳輸在底層技術(shù)層面都是以“地址”來(lái)標(biāo)識(shí)接收和發(fā)送方的,一個(gè)人可以擁有多個(gè)錢(qián)包地址,每個(gè)錢(qián)包地址只能對(duì)應(yīng)一個(gè)私鑰。在一個(gè)錢(qián)包中,可以擁有多個(gè)錢(qián)包地址。“密鑰”是密碼學(xué)上的概念,公開(kāi)密鑰的算法屬于不對(duì)稱(chēng)加密算法,該算法擁有兩個(gè)密鑰:公鑰和私鑰,通過(guò)公鑰可以算出錢(qián)包地址,使用私鑰加密的數(shù)據(jù)可以用公鑰解密,反之亦可。在區(qū)塊鏈系統(tǒng)中,私鑰的持有者就是加密貨幣的所有者。
錢(qián)包有不同的分類(lèi)。冷錢(qián)包是離線狀態(tài)下的錢(qián)包,即私鑰存儲(chǔ)的位置不能被網(wǎng)絡(luò)所訪問(wèn),如硬件錢(qián)包等;熱錢(qián)包則是把私鑰存儲(chǔ)在能被網(wǎng)絡(luò)訪問(wèn)的位置,例如,交易所的賬戶(hù)、在線錢(qián)包網(wǎng)站、手機(jī)App錢(qián)包等,這些都可以看作是熱錢(qián)包。通常而言,冷錢(qián)包更加安全,熱錢(qián)包使用更加方便。還有“全節(jié)點(diǎn)錢(qián)包”和“輕錢(qián)包”的分類(lèi),前者除了保存私鑰外還保存了區(qū)塊鏈上所有的數(shù)據(jù),后者則沒(méi)有保存所有區(qū)塊數(shù)據(jù),只保存跟自己相關(guān)的數(shù)據(jù)。此外,還存在一種“中心化的錢(qián)包”,也就是把相關(guān)數(shù)據(jù)保存在加密貨幣交易所或線上區(qū)塊鏈保險(xiǎn)柜(一種在線的網(wǎng)絡(luò)服務(wù))的錢(qián)包。此外,根據(jù)錢(qián)包運(yùn)行的終端環(huán)境不同,可以分為電腦端錢(qián)包、手機(jī)錢(qián)包及在線錢(qián)包。
上述介紹的具體技術(shù)或概念看起來(lái)有些散,但卻是對(duì)于理解區(qū)塊鏈特點(diǎn)最為關(guān)鍵的。通過(guò)以上內(nèi)容,我們可以大概總結(jié)出區(qū)塊鏈的主要特征:一是具有分布式特點(diǎn)的數(shù)據(jù)庫(kù);二是通過(guò)加密算法、時(shí)間戳實(shí)現(xiàn)防篡改、可追溯;三是通過(guò)共識(shí)機(jī)制確保新增數(shù)據(jù)的正確和一致性。用工信部區(qū)塊鏈白皮書(shū)的解釋就是,區(qū)塊鏈?zhǔn)欠植际綌?shù)據(jù)存儲(chǔ)、點(diǎn)對(duì)點(diǎn)傳輸、共識(shí)機(jī)制、加密算法等計(jì)算機(jī)技術(shù)在互聯(lián)網(wǎng)時(shí)代的創(chuàng)新應(yīng)用模式。
需要說(shuō)明的是,在不同的上下文環(huán)境中,“區(qū)塊鏈”的內(nèi)涵及其外延可能稍有不同,有時(shí)指的是區(qū)塊鏈這種包含其他具體技術(shù)的底層技術(shù)集成或模式,有時(shí)指的是具體的區(qū)塊鏈應(yīng)用所形成的網(wǎng)絡(luò)系統(tǒng),有的人還把區(qū)塊鏈等同于比特幣或加密貨幣……為了統(tǒng)一表述,方便讀者理解,有必要在這里約定一下有關(guān)概念的內(nèi)涵:在本書(shū)中,“區(qū)塊鏈”“區(qū)塊鏈技術(shù)”指的就是區(qū)塊鏈這種集成技術(shù),前者側(cè)重總稱(chēng),后者更強(qiáng)調(diào)技術(shù);“區(qū)塊鏈網(wǎng)絡(luò)”指的是基于區(qū)塊鏈技術(shù)構(gòu)建的分布式數(shù)據(jù)庫(kù)系統(tǒng)。相應(yīng)地,“比特幣”指的是總稱(chēng),“比特幣網(wǎng)絡(luò)”指的是由分布在全世界比特幣節(jié)點(diǎn)構(gòu)成的網(wǎng)絡(luò)系統(tǒng)。
此外,需要特別說(shuō)明的是,區(qū)塊鏈的確可以實(shí)現(xiàn)去中心化的架構(gòu),但區(qū)塊鏈并非完全排斥中心,“去中心化”不等于完全的無(wú)中心化,還有“多中心”等可以選擇。采用何種具體架構(gòu)完全依賴(lài)于不同的應(yīng)用場(chǎng)景;同時(shí),從嚴(yán)格意義上來(lái)說(shuō),區(qū)塊鏈生態(tài)本身也存在不少另類(lèi)“中心化”的可能,比如算力越來(lái)越集中等問(wèn)題。為了表達(dá)統(tǒng)一,本書(shū)總體上,在籠統(tǒng)的概念層次,認(rèn)同“去中心化”是區(qū)塊鏈的一個(gè)相對(duì)明顯的特點(diǎn)和優(yōu)勢(shì)。此方面的內(nèi)容,在后續(xù)相關(guān)章節(jié)中也會(huì)有具體說(shuō)明。
- 微信價(jià)值完全開(kāi)發(fā)攻略
- 區(qū)塊鏈行業(yè)詞典
- 開(kāi)微店,超簡(jiǎn)單:裝修、經(jīng)營(yíng)、推廣一本通
- 進(jìn)出口單證
- 用戶(hù)增長(zhǎng)方法論:找到產(chǎn)品長(zhǎng)盛不衰的增長(zhǎng)曲線
- 數(shù)據(jù)產(chǎn)品經(jīng)理:實(shí)戰(zhàn)進(jìn)階
- 移動(dòng)電商3.0
- 電子商務(wù)基礎(chǔ)(第6版)
- Hyperledger Fabric菜鳥(niǎo)進(jìn)階攻略
- 微信公眾號(hào)運(yùn)營(yíng):排名優(yōu)化+轉(zhuǎn)發(fā)提升+打賞暴增+用戶(hù)留存
- 社交新零售:圈層經(jīng)濟(jì)的整合與變現(xiàn)
- 社交電商全運(yùn)營(yíng)手冊(cè):戰(zhàn)略框架+案例解析+實(shí)戰(zhàn)技巧
- 互聯(lián)網(wǎng)+ 電商平臺(tái)設(shè)計(jì)與運(yùn)營(yíng)
- 鏈路營(yíng)銷(xiāo):觸發(fā)消費(fèi)者購(gòu)買(mǎi)的十大關(guān)鍵點(diǎn)
- 農(nóng)產(chǎn)品電商平臺(tái)體系建設(shè)與線上線下協(xié)調(diào)發(fā)展研究