0.png)
1 貨幣的演變-從貝殼到比特幣
當(dāng)社會分工產(chǎn)生之后,人類就產(chǎn)生了商品交換的需求。在貨幣被發(fā)明之前,人類是以以物換物的方式進(jìn)行的。但顯然以物換物存在著商品價值無法精確衡量,效率低下的問題。試想一下,老王扛著一只羊走了一公里山路到老張家里想換幾只雞好過年,但是換6只雞老王覺得虧,換7只老張又不干。于是人類發(fā)明了貨幣,作為一般等價物,貨幣可以對商品價值進(jìn)行精確度量,利于提高商品交換的效率,老王也再也不用扛著羊走山路了,拿著貨幣去買就好。但是最早的貨幣是實物貨幣,也就是貝殼、金、銀、銅這些東西。能充當(dāng)實物貨幣的東西都具有一定的稀缺性,即一般人不是那么容易就能搜尋或挖掘到很多的,存量有限。后來隨著社會經(jīng)濟的發(fā)展,交易越來越頻繁,人們發(fā)現(xiàn)實物貨幣也存在著很多的弊端。比如易損耗,保存、攜帶都很不方便、不安全。于是紙幣就被發(fā)明出來了。紙幣最早在我國北宋年間就出現(xiàn)了,被稱為“交子”,由官方發(fā)行。相較于實物貨幣本身具有收藏價值,紙質(zhì)貨幣本身只是一張紙,并沒有什么價值,它的價值完全依賴于發(fā)行該紙幣的政府的信用。因為人們預(yù)期拿著這張紙是可以從政府那里換到金子銀子的??瓷先ミ@并沒有什么問題,但是一旦政府失信,紙幣也就形同廢紙。政府失信的事在歷史不是沒有發(fā)生過,比如清朝國庫存銀緊張時,民眾手里的銀票就只能打折換銀子,再比如民國后期,政府瘋狂印刷金圓券,物價飛漲,民眾手里的紙幣飛速貶值。政府在法定貨幣上的失信相當(dāng)于掠奪了民眾手里的財富。
現(xiàn)代社會,是不是所有的財富都需要印刷成紙幣在社會上流通呢?也不是,紙幣所代表的財富只占社會總財富很小的一部分,國家發(fā)行紙幣的總量只要滿足市場交易的需要即可,大部分財富是以數(shù)字貨幣的形式存在,每個人的財富只是一串?dāng)?shù)字,這些數(shù)字統(tǒng)統(tǒng)記錄在銀行的賬本上,當(dāng)然銀行的賬本現(xiàn)在表現(xiàn)就是計算機里的數(shù)據(jù)庫。在這種情況下,假設(shè)小李從蘇寧買了臺價值3000元的空調(diào),收銀的時候只要將小李的銀行賬戶余額C(小李)-3000,再將蘇寧的銀行賬戶余額C(蘇寧)+3000就可以了。當(dāng)然現(xiàn)在也可能需要支付寶或者銀聯(lián)等第三方支付提供商做中介完成這筆交易。銀行在修改余額即賬本數(shù)據(jù)的時候,需要做一些檢查,首先需要小李提供賬戶密碼,用以證明小李對賬戶余額具有使用權(quán),接著銀行還要檢查小李的賬戶余額是否大于等于3000,如果余額不足返回交易失敗提示。整個交易過程中,銀行作為第三方機構(gòu),獨立完成了這次交易支付。由于我們國家的國有銀行有政府做信用背書,所以小李和蘇寧都選擇相信銀行不會有欺詐行為。但是不是就完全沒有風(fēng)險了呢?并不是。即使銀行不會主觀上產(chǎn)生欺詐的想法,但同樣存在記賬錯誤,或是外來惡意攻擊的風(fēng)險。一旦銀行的賬本數(shù)據(jù)發(fā)生錯誤或被惡意篡改,小李和蘇寧將沒有辦法證明自己所擁有的準(zhǔn)確的財富。
2009年,中本聰在網(wǎng)上發(fā)表了比特幣白皮書《比特幣:⼀個點對點的電子現(xiàn)金系統(tǒng)》,宣告了比特幣的誕生。由于刻意隱藏,至今沒有人知道中本聰?shù)恼鎸嵣矸?,但是比特幣確是一個天才式的創(chuàng)造。比特幣參考了在它之前被發(fā)明的數(shù)十種加密數(shù)字貨幣所取得的成果,這些貨幣由于各種原因都失敗了,一個主要的原因是無法解決“雙重支付”問題,所謂“雙重支付”是指同一筆貨幣被重復(fù)支付給不同的賬戶。中本聰認(rèn)為之前的加密數(shù)字貨幣之所以失敗,主要是因為它們都不同程度上存在一個中心機構(gòu),一旦這個中心機構(gòu)失效,整個加密貨幣系統(tǒng)就崩潰了。所以比特幣被設(shè)計成一個去中心化的系統(tǒng),它運用分布式賬本和特有的共識機制解決了“雙重支付”問題。
2 比特幣與區(qū)塊鏈的基本原理
2.1 比特幣簡介
之前已經(jīng)介紹過,數(shù)字貨幣的本質(zhì)就是一個賬本。當(dāng)有交易發(fā)生,資金所有權(quán)發(fā)生轉(zhuǎn)移(或稱價值轉(zhuǎn)移),就通過在這個賬本上記賬來體現(xiàn)。傳統(tǒng)貨幣金融系統(tǒng),央行承擔(dān)貨幣發(fā)行的職責(zé),商業(yè)銀行承擔(dān)放貸和吸儲的職責(zé),每筆交易記錄、每個賬戶余額都存在銀行的賬本上,銀行此時是作為一個中心機構(gòu)。比特幣系統(tǒng)完全運行在互聯(lián)網(wǎng)上,并沒有一個中心機構(gòu)替用戶保存賬本。相反,每一個持有比特幣、運用比特幣完成交易的節(jié)點(完全節(jié)點)都會在本地保存一份賬本,并從網(wǎng)絡(luò)上接收新的交易數(shù)據(jù)對自己的賬本進(jìn)行更新。所以說,不同于傳統(tǒng)貨幣交易賬本由銀行私密保存,比特幣的賬本是公開的,分布式存儲在每一個參與交易的節(jié)點上。
比特幣系統(tǒng)是一種P2P網(wǎng)絡(luò)系統(tǒng),網(wǎng)絡(luò)中并不存在任何中心節(jié)點,所有P2P網(wǎng)絡(luò)中的節(jié)點地位都是相等的,每個節(jié)點從網(wǎng)絡(luò)接收資源和服務(wù)的同時也向網(wǎng)絡(luò)中的其它節(jié)點提供資源和服務(wù)。想加入比特幣網(wǎng)絡(luò)也很簡單,從比特幣官方網(wǎng)站下載比特幣客戶端并安裝到自己的計算機,保證本地存儲系統(tǒng)有足夠的空間來存儲公共賬本數(shù)據(jù),運行比特幣客戶端并聯(lián)入互聯(lián)網(wǎng),客戶端端口會自動連接到若干現(xiàn)有節(jié)點,此時這臺計算機就可以作為比特幣網(wǎng)絡(luò)中的一個節(jié)點存在了。初始加入的比特幣節(jié)點可以從其它節(jié)點接收賬本數(shù)據(jù)并保存下來。比特幣網(wǎng)絡(luò)中的節(jié)點時時刻刻都是在動態(tài)變化的,一個節(jié)點可以隨時選擇退出,重新加入時只需要連接其它節(jié)點并接收它離開期間新增的交易數(shù)據(jù)就可以。
雖然每個節(jié)點都保存有比特幣交易賬本,但為了保持所有賬本副本的一致性,每筆交易只能安排一個節(jié)點記賬,其它節(jié)點同步新增的交易數(shù)據(jù)。那到底哪個節(jié)點擁有記賬的資格呢?比特幣系統(tǒng)采用了競爭記賬的機制。所有節(jié)點共同參與一個解方程大賽,由于這個方程解空間巨大且無任何求解的規(guī)律可言,每個參與競賽的節(jié)點只能采用隨機嘗試的辦法搜索方程的解。這樣一來,解方程大賽就變成了對各節(jié)點計算機運算能力的一場考驗,擁有最強大運算能力的節(jié)點顯然可能更快找到解。一旦某個節(jié)點率先找到一個滿足要求的解,它就搶到了本次競賽的記賬權(quán)。這樣的解方程競賽大約每10分鐘在全網(wǎng)舉行一次,搶到記賬權(quán)的節(jié)點迅速將過去10分鐘全網(wǎng)發(fā)生的交易數(shù)據(jù)記錄到一個新的區(qū)塊(區(qū)塊鏈的基本單位,可以看成是一個具有特定數(shù)據(jù)結(jié)構(gòu)的文件),并將這個區(qū)塊馬上向全網(wǎng)分發(fā),網(wǎng)上的其它節(jié)點接收到這個區(qū)塊時,它就意識到本次解方程大賽已經(jīng)結(jié)束了,進(jìn)而馬上停止本輪的解方程競賽,同時開始下一輪解方程大賽。
比特幣交易的過程完全是匿名的。比特幣客戶端有錢包的功能,比特幣錢包并不存儲貨幣,存儲的是地址和私鑰。根據(jù)非對稱加密的原理,一對非對稱密鑰分為公鑰和私鑰,私鑰私密保存,公鑰可以公開出來,其它節(jié)點想給當(dāng)前節(jié)點加密發(fā)送消息時,可以用公鑰對消息進(jìn)行加密,只有擁有私鑰的節(jié)點才能對消息解密,這樣就保證了信息傳輸不會被泄漏。在比特幣網(wǎng)絡(luò),每個節(jié)點的私鑰由錢包加密存儲,用戶也可以備份成其他形式存儲。公鑰經(jīng)雙Hash運算得到的字符串,被稱為地址,其實就是另一種形式的公鑰。一個比特幣地址和它對應(yīng)的私鑰就可以看成一個賬戶,地址可以看做用戶名,私鑰看做賬戶密碼。擁有私鑰的人就擁有這個地址上的所有資金。比特幣的賬本數(shù)據(jù)中并不存在賬戶余額的概念。事實上賬本數(shù)據(jù)中如果用余額字段來表示每個節(jié)點擁有的資產(chǎn),那么余額字段的數(shù)據(jù)是很容易被惡意篡改的。既然沒有余額數(shù)據(jù),那么交易時就沒有辦法通過對相關(guān)節(jié)點余額字段的修改實現(xiàn)。事實上,比特幣交易中“花費”的是在交易中生成的“未使用的交易輸出(UTXO)”。每一筆交易轉(zhuǎn)賬相當(dāng)于將一筆錢注冊到新的地址上。比特幣地址并沒有余額,有的是遍布在賬本里所有注冊在這個地址上的UTXO。相當(dāng)于這個地址所擁有的資金分布在一筆筆交易記錄中。比特幣客戶端顯示的賬戶余額其實是對賬本數(shù)據(jù)中隸屬于當(dāng)前節(jié)點的UTXO逐一統(tǒng)計得到的結(jié)果。
2.2 比特幣交易
比特幣將貨幣、交易、賬本全都變成了一種數(shù)據(jù)結(jié)構(gòu),所以看一下一筆交易的數(shù)據(jù)結(jié)構(gòu)你會更理解。
表2-1 交易結(jié)構(gòu)
如表2-1所示,一筆交易可以包含多個輸入并形成多個輸出。尚未被“花費”的交易輸出即UTXO(unspent transaction output),所謂“花費”指將這筆錢注冊到其它地址(資金所有權(quán)轉(zhuǎn)移)。時間戳標(biāo)記這筆交易發(fā)生的時間。再來看一下交易輸出(表2-2)和輸入(表2-3)的數(shù)據(jù)結(jié)構(gòu)。
表2-2 交易輸出結(jié)構(gòu)
交易輸出的數(shù)據(jù)結(jié)構(gòu)很簡單,主要就是資金總量和鎖定腳本。資金總量表明了轉(zhuǎn)賬了多少錢。鎖定腳本其實表明了這筆錢的所有權(quán)。鎖定腳本里包含的最重要的內(nèi)容是轉(zhuǎn)賬的目標(biāo)地址,之前我們也介紹過,比特幣地址其實就是公鑰轉(zhuǎn)換得到的。交易輸出里包含了目標(biāo)地址相當(dāng)于用公鑰給這筆錢(交易輸出)上了一把鎖,只有唯一那個有對應(yīng)鑰匙(私鑰)的用戶才可以使用它。
交易輸入的數(shù)據(jù)結(jié)構(gòu)如表2-3,主要包括指向UTXO的指針和解鎖腳本。注意到,比特幣賬本里只有交易輸出才記錄了資金,交易輸入只是使用資金時用的那把鑰匙。其中指向UTXO的指針字段表明要“花費”哪個UTXO。解鎖腳本包含了用戶的私鑰,正確的私鑰可以解密UTXO鎖定腳本中的公鑰加密。解鎖腳本和鎖定腳本一起運行就可以正確使用UTXO完成交易了。
表2-3 交易輸入結(jié)構(gòu)
現(xiàn)在小李從蘇寧購買了一臺空調(diào),需要支付0.15比特幣,小李的比特幣客戶端里的錢包模塊會從所有注冊在小李地址上的UTXO中選出一個數(shù)額最合適的,假設(shè)最合適的UTXO的面值是0.2比特幣?,F(xiàn)在,小李的錢包就會創(chuàng)建一筆新的交易,輸入就是面值0.2比特幣的UTXO,生成一筆0.15比特幣的輸出(一個UTXO),輸出鎖定腳本包含蘇寧的地址。與此同時生成一筆地址為自己的輸出0.04比特幣(另一個UTXO),也就是找零。但是這里0.2-0.15-0.04=0.01,剩余的0.01比特幣作為交易費用,用來獎勵承擔(dān)記賬工作的節(jié)點,贏得記賬權(quán)的節(jié)點會自動收集的。
2.2.1 交易周期
一筆比特幣交易的生命周期從它被創(chuàng)建的那一刻開始,節(jié)點會將這筆交易在比特幣網(wǎng)絡(luò)上廣播,收到這筆交易數(shù)據(jù)的節(jié)點會對交易有效性進(jìn)行獨立檢驗。檢驗內(nèi)容包括語法和數(shù)據(jù)格式是否有誤、交易輸入和輸出是否為空等等。通過獨立驗證的交易會被放入節(jié)點自己的交易池,同時繼續(xù)向其它節(jié)點廣播,沒有通過檢驗的交易直接被拒絕并不再廣播。等到這筆交易被網(wǎng)絡(luò)上的大部分節(jié)點驗證,可能耗時不到一秒鐘,交易會最終被一個挖礦節(jié)點驗證并記錄到區(qū)塊鏈上一個還記錄有很多其他交易的區(qū)塊上(挖礦節(jié)點:參與解方程大賽并取得當(dāng)次記賬權(quán)的節(jié)點)。此時這筆交易的交易輸出(UTXO)還不能被使用,等到區(qū)塊鏈中在這個區(qū)塊之上又生成足夠多的區(qū)塊,交易才成為區(qū)塊鏈總賬簿的一部分,這時交易輸出UTXO就可以被新的資金擁有者在下一筆交易中使用了,這樣就進(jìn)入下一個交易周期了。
2.3 比特幣網(wǎng)絡(luò)與節(jié)點
比特幣運行在互聯(lián)網(wǎng)上并采用P2P協(xié)議,P2P網(wǎng)絡(luò)又稱對等網(wǎng)絡(luò),網(wǎng)絡(luò)中每個節(jié)點的地位都是相等的。比特幣設(shè)計的核心原則是去中心化,采用P2P網(wǎng)絡(luò)很好的體現(xiàn)了這個核心原則。雖然比特幣網(wǎng)絡(luò)中每個節(jié)點的地位相等,但不同節(jié)點的功能還是不一樣的。但是,任何節(jié)點都包含四個基本功能中的一個或者多個:錢包、礦工、完整區(qū)塊鏈、網(wǎng)絡(luò)路由節(jié)點。
所有節(jié)點都是網(wǎng)絡(luò)路由節(jié)點,可以對新創(chuàng)建的交易和區(qū)塊進(jìn)行驗證,對通過驗證的交易和區(qū)塊進(jìn)行轉(zhuǎn)發(fā)。
一個具備全部四個功能的節(jié)點被稱為全節(jié)點。全節(jié)點在本地存儲完整的區(qū)塊鏈數(shù)據(jù)(賬本),可以獨立的對交易和區(qū)塊數(shù)據(jù)進(jìn)行驗證而不需要依賴于其他節(jié)點。
圖2-1 全節(jié)點
全節(jié)點同時具備挖礦功能,即參加算力競賽(解方程大賽)來贏得記賬權(quán)的能力。之所以稱競爭記賬權(quán)的行為為“挖礦”。這是為了類比于傳統(tǒng)實物貨幣(金、銀)的挖掘開采行為。每個在算力競賽中獲勝的節(jié)點能夠獲得一定數(shù)量的比特幣做獎勵,目前是12.5個比特幣,獎勵的數(shù)量大約每4年會減少一半。除全節(jié)點之外,也有單獨的挖礦節(jié)點。
全節(jié)點同時具備錢包功能。錢包是用來生成并保存地址和私鑰,同時創(chuàng)建交易的模塊。
相比于全節(jié)點,有些節(jié)點只存儲了部分區(qū)塊鏈數(shù)據(jù),它通過“簡易支付驗證(SPV)”的方式來完成交易驗證,稱為SPV節(jié)點或輕量級節(jié)點。SPV節(jié)點一般具備網(wǎng)絡(luò)路由節(jié)點和錢包功能。為了讓智能手機這種資源有限的終端具備比特幣交易的能力,SPV節(jié)點現(xiàn)在越來越普遍。
2.4 比特幣區(qū)塊鏈
區(qū)塊鏈的英文名字 Block Chain 更容易理解。Block其實是一個常用的數(shù)據(jù)量大小的度量單位。比如在Linux/Unix系統(tǒng)里有一個數(shù)據(jù)塊(Data Block)的概念,數(shù)據(jù)塊是文件系統(tǒng)讀寫的最小單元,在Linux/Unix系統(tǒng)中是512個字節(jié),一個文件所占大小就是數(shù)據(jù)塊的整數(shù)倍。又比如在Google分布式文件系統(tǒng)HDFS中,也有一個塊(Block)的概念,也是數(shù)據(jù)存儲的一個基本單元,不同之處在于HDFS為了提高大數(shù)據(jù)的效率和集群的吞吐量,將一個塊的大小設(shè)置成64MB。所以區(qū)塊鏈里的“區(qū)塊”也是指一個數(shù)據(jù)單元,而“鏈”其實就是將很多數(shù)據(jù)單元(區(qū)塊)一個個串聯(lián)起來,就像一個鏈表。但是鏈表是通過指針將數(shù)據(jù)串聯(lián)起來的,而區(qū)塊鏈?zhǔn)峭ㄟ^在每個區(qū)塊中存儲前一個區(qū)塊的唯一標(biāo)識符來鏈接的。具體可以看區(qū)塊和區(qū)塊頭的數(shù)據(jù)結(jié)構(gòu)。
表2-4 區(qū)塊結(jié)構(gòu)
一個區(qū)塊主要分為兩部分:區(qū)塊頭和交易數(shù)據(jù)。區(qū)塊頭里記錄的是這個區(qū)塊的元數(shù)據(jù),具體見區(qū)塊頭數(shù)據(jù)結(jié)構(gòu)表2-5。交易數(shù)據(jù)部分記錄了從上一個區(qū)塊被挖出到當(dāng)前區(qū)塊被挖出的約10分鐘時間內(nèi),全網(wǎng)發(fā)生的所有比特幣交易。比特幣系統(tǒng)中一個區(qū)塊大小并沒有嚴(yán)格限制,區(qū)塊頭的大小固定是80個字節(jié),平均每個交易至少是250個字節(jié),而平均每個區(qū)塊至少包含超過500個交易。交易的數(shù)據(jù)結(jié)構(gòu)之前已經(jīng)介紹過,下面來看一下區(qū)塊頭的數(shù)據(jù)結(jié)構(gòu)。
表2-5 區(qū)塊頭結(jié)構(gòu)
“父區(qū)塊哈希值”字段存儲了前一個區(qū)塊數(shù)據(jù)的Hash值,嚴(yán)格來說,并不是整個區(qū)塊數(shù)據(jù)的Hash值,而是區(qū)塊頭數(shù)據(jù)的Hash值。其實是運用SHA256算法對區(qū)塊頭數(shù)據(jù)做兩次Hash運算得出的。由于每個區(qū)塊頭數(shù)據(jù)具有唯一性,它的Hash值基本可以作為區(qū)塊的主標(biāo)識符。所以將前一個區(qū)塊(父區(qū)塊)的標(biāo)識符存在當(dāng)前區(qū)塊的區(qū)塊頭里,也就相當(dāng)于將這兩個區(qū)塊連接了起來。
“Merkle根”字段相當(dāng)于是區(qū)塊內(nèi)所有交易數(shù)據(jù)的一個數(shù)字指紋,要得到Merkle根先要創(chuàng)建一棵Merkle樹。假設(shè)現(xiàn)在有A,B,C,D四筆交易,創(chuàng)建的Merkle樹圖2-2。
圖2-2 包含A、B、C、D四筆交易的Merkle樹/div>
Merkle樹是自底向上創(chuàng)建的,是一種Hash二叉樹。首先將交易數(shù)據(jù)輸入SHA256算法得到每筆交易的Hash值Ha、Hb、Hc、Hd,這四個Hash值作為葉子節(jié)點,將葉子節(jié)點Hash值兩兩連接起來繼續(xù)輸入SHA256算法可以得到上一層節(jié)點的Hash值,計算示例如下。如果葉子節(jié)點個數(shù)為奇數(shù),將最后一個節(jié)點復(fù)制一份。
Ha=SHA256(SHA256(交易A))
Hab=SHA256(SHA256(Ha+Hb))
如此循環(huán)進(jìn)行,直到只剩一個節(jié)點,也就是Merkle樹根??紤]到SHA256算法的特性,Merkle根可以看成是所有交易數(shù)據(jù)的一個歸納,也可以看成是所有交易數(shù)據(jù)的數(shù)字指紋,因為即使任意交易數(shù)據(jù)被微小篡改,它生成的Hash值也會有很大變化,而葉子節(jié)點Hash值的變化,又會影響從該葉子節(jié)點連接到Merkle根的路徑上所有節(jié)點Hash值的變化,最終使Merkle根產(chǎn)生很大的變化。因此Merkle根可以唯一標(biāo)識一批交易數(shù)據(jù),也可以驗證一批交易數(shù)據(jù)是否被篡改過。由于SHA256算法輸出固定是32個字節(jié),所以Merkle樹中所有節(jié)點包括Merkle樹根的值都固定是32個字節(jié)。Merkle樹在比特幣系統(tǒng)中的一個主要用處是可以高效的驗證一筆交易是否存在于區(qū)塊中。假設(shè)某區(qū)塊記錄了N筆交易,利用Merkle樹可以最多計算2*log2(N)次就可以判斷一筆交易是否存在于這個區(qū)塊中。
區(qū)塊頭數(shù)據(jù)結(jié)構(gòu)中的“難度目標(biāo)”字段是用來動態(tài)調(diào)節(jié)挖礦難度的,約兩周時間會調(diào)整一次,為了保證能夠在大概在10分鐘左右的時間挖出一個區(qū)塊(解出方程)。Nonce字段也是在挖礦(解方程大賽)時用到的,Nonce字段的值作為方程未知變量的一部分,不斷修改Nonce字段值以獲得滿足難度目標(biāo)的解。
區(qū)塊鏈就是就是將包含交易信息的區(qū)塊從后往前依次連接起來的數(shù)據(jù)結(jié)構(gòu)。它可以存儲在文件系統(tǒng),也可以存儲在一個簡單數(shù)據(jù)庫。區(qū)塊鏈可以被視為一個垂直的棧,第一個區(qū)塊(創(chuàng)世區(qū)塊)作為棧的底部,后續(xù)創(chuàng)建的區(qū)塊依次向上疊加,這樣就可以用一些術(shù)語,“高度”來表示當(dāng)前區(qū)塊離第一個區(qū)塊之間的距離,用“頂部”表示最新生成的區(qū)塊,用“深度”表示當(dāng)前區(qū)塊距離頂部區(qū)塊的距離。
每個區(qū)塊的區(qū)塊頭數(shù)據(jù)經(jīng)SHA256算法得到區(qū)塊Hash值,每個區(qū)塊的區(qū)塊Hash值并不存在于自身數(shù)據(jù)當(dāng)中,而是在創(chuàng)建它的子區(qū)塊(棧內(nèi)上一層區(qū)塊)時臨時計算得出并存儲在子區(qū)塊“父區(qū)塊哈希值”字段中。由于區(qū)塊Hash值可以在區(qū)塊鏈中唯一識別出一個區(qū)塊,因此通過“父區(qū)塊哈希值”就可以引用前一個區(qū)塊。這樣就通過“父區(qū)塊哈希值”字段將每個區(qū)塊依次鏈接起來形成了一條一直可以追溯到首區(qū)塊(創(chuàng)世區(qū)塊)的鏈條,見圖2-3。每個區(qū)塊都只有一個父區(qū)塊,但可能存在多個子區(qū)塊,這被稱為“區(qū)塊鏈分叉”。這種情況只在兩個礦工幾乎同時挖掘出新區(qū)塊時才可能出現(xiàn),但也只是暫時存在,很快區(qū)塊鏈系統(tǒng)就會選出工作量最大的鏈條作為主鏈。
圖2-3 區(qū)塊通過引⽤⽗區(qū)塊的區(qū)塊頭哈希值的⽅式,以鏈條的形式進(jìn)⾏相連
區(qū)塊哈希值雖然只是區(qū)塊頭數(shù)據(jù)的Hash值,但是區(qū)塊頭中包含的Merkle根字段是對所有交易數(shù)據(jù)的一個概括。上面介紹過,任何對交易數(shù)據(jù)的微篡改都會導(dǎo)致Merkle根發(fā)生很大變化,進(jìn)而導(dǎo)致區(qū)塊哈希值也發(fā)生變化。由于子區(qū)塊會存儲父區(qū)塊的區(qū)塊哈希值,所以如果父區(qū)塊任意數(shù)據(jù)有變動,就會導(dǎo)致子區(qū)塊數(shù)據(jù)產(chǎn)生變動,而子區(qū)塊數(shù)據(jù)變動又會導(dǎo)致孫區(qū)塊值發(fā)生變動,等等以此類推。很明顯,對區(qū)塊鏈中任意區(qū)塊數(shù)據(jù)的篡改都會導(dǎo)致它后續(xù)所有區(qū)塊的數(shù)據(jù)發(fā)生變動,除非將后續(xù)所有區(qū)塊都重新生成,否則無法修改區(qū)塊鏈中的數(shù)據(jù)。而重新生成區(qū)塊面臨著巨大的工作量(解出每個區(qū)塊中的方程),當(dāng)區(qū)塊的“深度”到達(dá)6時,由于巨大的工作量導(dǎo)致實際上想篡改這個區(qū)塊的數(shù)據(jù)已經(jīng)變得不可能。這種區(qū)塊鏈歷史數(shù)據(jù)不可更改的特性是區(qū)塊鏈可信的一個關(guān)鍵原因。同時,這也是比特幣安全性的一個關(guān)鍵原因。
2.5 比特幣挖礦
將比特幣網(wǎng)絡(luò)中節(jié)點之間競爭記賬權(quán)的行為稱為“挖礦”?!巴诘V”是比特幣系統(tǒng)中一個非常聰明的設(shè)計,它同時實現(xiàn)了三個目標(biāo):
(1)一種激勵機制,使得比特幣節(jié)點有動力去記錄交易數(shù)據(jù)。
(2)實現(xiàn)了新幣發(fā)行。
(3)通過工作量證明算法(解方程大賽)使得區(qū)塊鏈歷史數(shù)據(jù)實際上不可更改。
之前說節(jié)點之間競爭記賬權(quán)其實是在參加每10分鐘一場在全網(wǎng)舉行的解方程大賽。每場競賽的獲勝者將獲得本輪記賬權(quán),有權(quán)創(chuàng)建一個新區(qū)塊并將前10分鐘全網(wǎng)發(fā)生的比特幣交易記錄到新區(qū)塊。解方程大賽的規(guī)則被一個稱為“工作量證明(Proof of Work)”的算法所定義。工作量證明算法定義每輪競賽中所有挖礦節(jié)點獨立求解一道包含Hash函數(shù)的方程,誰先求出滿足難度目標(biāo)的解,誰就獲勝。
什么方程?Hash(區(qū)塊頭數(shù)據(jù))=滿足難度目標(biāo)的哈希值。
其實就是通過不斷修改區(qū)塊頭中的Nonce字段值(通常是遞增1),使得區(qū)塊頭哈希值滿足難度目標(biāo)。難度目標(biāo)就是區(qū)塊頭“難度目標(biāo)”字段值。這個難度目標(biāo)字段值通常類似于:哈希函數(shù)的輸出值十六進(jìn)制表示以0開頭。從概率角度看,平均隨機嘗試16次可以得到一個滿足難度目標(biāo)的解(十六進(jìn)制數(shù)字取值0到F)。從數(shù)字角度看,要找一個輸出小于0x10000000......0的輸入。顯然,這個字段的值可以看成一個難度閾值。如果將難度閾值繼續(xù)降低,要找到一個滿足要求的解會變得越來越困難。2014年的時候,一個礦工平均要嘗試10^15次才能找到一個合適的Nonce使得區(qū)塊頭信息哈希值足夠小。這幾年隨著計算機運算能力的快速進(jìn)步,挖礦設(shè)備越來越專業(yè),難度閾值也設(shè)置的越來越小,才能保證全網(wǎng)10分鐘左右挖出一個新區(qū)塊。難度目標(biāo)的調(diào)整是依據(jù)最新的2016個區(qū)塊(約兩周時間)與20160分鐘的比較得出的。
挖礦過程中,每次嘗試雖然是Nonce值遞增,但其實是在隨機嘗試。這是由哈希函數(shù)的三個性質(zhì)決定的:
(1)不可逆。不可能根據(jù)哈希函數(shù)的輸出值反推出輸入值。
(2)抗碰撞。兩個不同的輸入值得到相同哈希輸出的可能性極低。
(3)高靈敏。當(dāng)輸入有微小變化時哈希值輸出都會產(chǎn)生巨大的變化。
以上三個性質(zhì)保證在搜索解時,沒有辦法用前面的前一步經(jīng)驗來指導(dǎo)后續(xù)的搜索,只能一直處于隨機搜索的狀態(tài)。這保證了想?yún)⑴c挖礦或者說在工作量證明中獲勝的節(jié)點唯一的選擇就是不斷提高自己的算力,而沒有任何其它的“捷徑”,而這點正是區(qū)塊鏈安全性的基石。
挖礦是比特幣系統(tǒng)運行的核心環(huán)節(jié),但是參與挖礦的節(jié)點需要投入大量的資源,包括挖礦設(shè)備和電力消耗。顯然如果沒有激勵機制,節(jié)點是沒有動力去挖礦的。比特幣的設(shè)計是,節(jié)點挖出一個新區(qū)塊以后,它記錄的第一筆交易并不是從全網(wǎng)接收到的交易,而是自己創(chuàng)建的一筆特殊交易——創(chuàng)幣交易或者稱coinbase交易。假設(shè)A節(jié)點挖出了一個新區(qū)塊,它創(chuàng)建的創(chuàng)幣交易內(nèi)容類似于“向A節(jié)點的地址支付12.5個比特幣”。這12.5個全新的比特幣是之前不存在于區(qū)塊鏈賬本中的增量,也是作為對挖礦節(jié)點的獎勵。創(chuàng)幣交易的特殊在于不消耗UTXO,即沒有交易輸入只有交易輸出。所以給挖出新區(qū)塊的節(jié)點的獎勵包括兩部分:新幣獎勵和交易費用。目前礦工獲得的主要收益還是新幣獎勵為主,交易費用占比還比較小。
可以看出,挖礦設(shè)計的高明之處在于它不僅是一種激勵記賬的機制,同時解決了加密數(shù)字貨幣新幣發(fā)行的難題。從2009年1月每個區(qū)塊獎勵50個比特幣開始,每四年獎勵的比特幣數(shù)量減少一半(準(zhǔn)確地說是210,000個區(qū)塊),直到2100萬比特幣全部發(fā)行完畢(大約2140年),目前每個新區(qū)塊獎勵12.5個比特幣。可以看出,比特幣是一種總量有限的緊縮貨幣。
2.6 去中心化共識機制
一種貨幣體系很重要的組成部分就是要有一份所有參與者一致信任的賬本。這在傳統(tǒng)貨幣體系中很容易實現(xiàn),銀行作為貨幣體系的中心結(jié)構(gòu),保存這樣一份賬本并在新交易發(fā)生時維持對賬本的更新。但比特幣網(wǎng)絡(luò)是由分布在互聯(lián)網(wǎng)上的數(shù)以萬計的節(jié)點組成,并沒有中心機構(gòu)來保存賬本,那么那么多節(jié)點之間如何形成一份一致認(rèn)可的賬本?中本聰?shù)囊粋€主要創(chuàng)新就在于設(shè)計了一種去中心化共識機制,解決了古老的“拜占庭將軍難題”,即如何在不可信的環(huán)境中在異步節(jié)點之間達(dá)成共識。共識是網(wǎng)絡(luò)中數(shù)以萬計的獨立節(jié)點遵守了簡單的規(guī)則,獨立異步地交互形成的產(chǎn)物,主要包括以下四個方面:
(1)每個節(jié)點對接收到的交易的有效性進(jìn)行獨立檢驗
(2)每個節(jié)點通過工作量證明算法競爭記賬權(quán)并對近期的交易獨立打包記錄到新區(qū)塊
(3)每個節(jié)點對接收到的新區(qū)塊進(jìn)行獨立檢驗并組裝到區(qū)塊鏈
(4)每個節(jié)點獨立地選擇區(qū)塊鏈,在工作量證明機制下選擇累計工作量最大的區(qū)塊鏈
節(jié)點對交易數(shù)據(jù)的獨立檢驗所遵循的規(guī)則都是統(tǒng)一規(guī)定好的,可能的詐騙、錯誤等無效交易無法在網(wǎng)絡(luò)中繼續(xù)傳播。
工作量證明算法一方面實現(xiàn)了比特幣賬本不會被中心節(jié)點所控制,另一方面實現(xiàn)區(qū)塊鏈歷史數(shù)據(jù)實際不可更改。這兩點之前已經(jīng)介紹過。
每個完全節(jié)點獨立保存并更新區(qū)塊鏈。所以當(dāng)節(jié)點從網(wǎng)絡(luò)接收到一個新區(qū)塊時,它要檢驗并決定是否組裝到本地的區(qū)塊鏈上。檢驗的內(nèi)容包括:
(1)區(qū)塊的數(shù)據(jù)結(jié)構(gòu)語法上有效
(2)區(qū)塊頭的哈希值小于目標(biāo)難度(確認(rèn)包含足夠的工作量證明)
(3)第⼀個交易(有且只有第⼀個)是創(chuàng)幣交易
(4)使用檢查清單驗證區(qū)塊內(nèi)的交易并確保它們的有效性。
。。。。。。
每個節(jié)點對每個新區(qū)塊的獨立檢驗確保了礦工無法欺詐。假設(shè)一個欺詐礦工創(chuàng)建一筆交易向自己支付一大筆比特幣。接收到這個區(qū)塊的節(jié)點基于相同的檢驗規(guī)則將很快能發(fā)現(xiàn),從而選擇拒絕這個新區(qū)塊,這樣這個欺詐礦工不僅不會得到額外的錢,反而會浪費挖礦耗費的大量投入。
去中心化共識會遇到的一個情況就是區(qū)塊鏈“分叉”。當(dāng)兩個節(jié)點幾乎同時挖出新區(qū)塊時。由于互相都沒有收到對方的新區(qū)塊,所以它們會將自己挖出的新區(qū)塊廣播出去。網(wǎng)絡(luò)上的其它節(jié)點就可能在幾乎同時接收到兩個新區(qū)塊,而且都可以有效的組裝到現(xiàn)有區(qū)塊鏈上。這個時候節(jié)點會把兩個區(qū)塊都保存下來,形成區(qū)塊鏈的兩條分叉?!胺植妗敝皇菚簳r現(xiàn)象,解決辦法就是看這兩條分叉誰的工作量累計的更快,節(jié)點獨立地選擇累計工作量最大的鏈作為主鏈。當(dāng)所有節(jié)點都獨立選擇最長的鏈作為區(qū)塊鏈主鏈時,很快全網(wǎng)節(jié)點就會重新達(dá)成共識。
去中心化共識唯一的隱患是可能遭受“共識攻擊”,典型的是“51%攻擊”。之前介紹過,工作量證明算法使得區(qū)塊鏈歷史數(shù)據(jù)實際上不可更改,因為區(qū)塊的生成需要巨大的工作量,背后需要巨大的算力支撐。但是一旦網(wǎng)絡(luò)中有超過一半的算力被攻擊者掌控,它就可能篡改交易數(shù)據(jù)。針對記錄目標(biāo)交易的區(qū)塊,攻擊者重新構(gòu)造一個新區(qū)塊,并故意與之形成分叉,在新區(qū)塊中,攻擊者可以重新生成一筆與目標(biāo)交易數(shù)額相等但支付地址不同的交易,如果支付地址改為自己掌握的節(jié)點地址就可以把這筆錢轉(zhuǎn)給自己。在后續(xù)的累計工作量競賽中,攻擊者利用自己掌握的超過一半算力獲勝,進(jìn)而使得故意分叉的鏈條成為全網(wǎng)的主鏈,最終實現(xiàn)交易欺詐。所以為了保證大額交易安全,建議在大宗商品交易用比特幣支付時,接收方要等到記錄此交易的區(qū)塊深度超過6時,再進(jìn)行商品交付。
3 區(qū)塊鏈的應(yīng)用與發(fā)展
區(qū)塊鏈?zhǔn)潜忍貛诺牡讓蛹夹g(shù)之一,比特幣是區(qū)塊鏈的一個應(yīng)用,也是目前為止區(qū)塊鏈最成功的應(yīng)用。在比特幣里,區(qū)塊鏈被看成是一個分布式的公開賬本。區(qū)塊鏈可以存儲賬本,當(dāng)然也可以存儲其它數(shù)據(jù),比如合約、證書、法律文件等等,所以本質(zhì)上區(qū)塊鏈?zhǔn)且粋€分布式數(shù)據(jù)庫,可以應(yīng)用在很多領(lǐng)域。但是并不是說區(qū)塊鏈只是一個數(shù)據(jù)庫,相反區(qū)塊鏈數(shù)據(jù)存儲成flat file和Google的LevelDB數(shù)據(jù)庫,都不是區(qū)塊鏈的創(chuàng)新點。區(qū)塊鏈的核心創(chuàng)新點是去中心化共識機制。區(qū)塊鏈為了實現(xiàn)去中心化共識機制用到了很多的技術(shù),包括P2P協(xié)議、非對稱加密技術(shù)、哈希加密技術(shù)、時間戳、Merkle樹、UTXO、工作量證明算法(PoW)等。所以,可以將區(qū)塊鏈技術(shù)看成是一個技術(shù)集合。
區(qū)塊鏈脫胎于比特幣,早期大家的關(guān)注點主要是以比特幣為代表的加密數(shù)字貨幣,這兩年大家越來越關(guān)注區(qū)塊鏈技術(shù)在各個領(lǐng)域的應(yīng)用。很多人認(rèn)為,區(qū)塊鏈的現(xiàn)狀就像早期的互聯(lián)網(wǎng),區(qū)塊鏈技術(shù)給人類社會帶來的影響將不亞于互聯(lián)網(wǎng)。所以我們講區(qū)塊鏈不僅僅是指比特幣里的區(qū)塊鏈技術(shù),還包括很多在它之上的創(chuàng)新和發(fā)展。
比特幣的區(qū)塊鏈技術(shù)在應(yīng)用時存在的四個主要問題是:
(1)腳本語言太復(fù)雜,開發(fā)難度大。
(2)生態(tài)系統(tǒng)基礎(chǔ)比較差。既沒有完善的開發(fā)工具,也沒有文檔和教程。
(3)腳本語言并非圖靈完備。圖靈完備指一切可計算的問題都可以用該語言描述并計算。由于沒有圖靈完備,限制了比特幣腳本語言的用途,沒有辦法開發(fā)更高級的應(yīng)用,例如沒有辦法實現(xiàn)去中心化的交易所。
(4)比特幣區(qū)塊鏈協(xié)議的擴展性不足。比特幣系統(tǒng)中只有一種符號——比特幣,沒有辦法用戶自定義其它的符號,比如公司的股票、債券等,這使比特幣失去了在其它領(lǐng)域應(yīng)用的可能性。
(5)工作量證明算法耗費耗費大量的設(shè)備和電力資源。
2013年一位叫做 Vitalik Buterin 的俄羅斯少年發(fā)表了以太坊白皮書——《以太坊:下一代智能合約和去中心化應(yīng)用平臺》。以太坊解決了比特幣區(qū)塊鏈擴展性不足,智能記錄交易不能記錄其它數(shù)據(jù)的問題。此外,以太坊通過其豐富的編程語言和完善的開發(fā)工具,解決了針對開發(fā)者不友好的問題,它讓任何人都能很輕松的在以太坊上建立新的協(xié)議和智能合約。目前,以太坊已經(jīng)成為應(yīng)用最廣泛的區(qū)塊鏈技術(shù)。
除以太坊之外,還有很多的區(qū)塊鏈項目出現(xiàn)。這里將目前有影響力的區(qū)塊鏈項目做一個分類,大致可以分為四類:數(shù)字資產(chǎn);智能合約平臺;全球支付與結(jié)算;平臺類的應(yīng)用服務(wù)。
3.1 數(shù)字資產(chǎn)
數(shù)字資產(chǎn)分為一般數(shù)字資產(chǎn)和主打匿名應(yīng)用的匿名數(shù)字資產(chǎn)。
一般數(shù)字資產(chǎn)包括比特幣、萊特幣、新經(jīng)幣(NEM),Decred,狗狗幣Dogecoin等。以比特幣為代表它們要解決的就是跨中心情況下的支付問題。跟比特幣比較起來,其它代幣原理類似,但針對自己的使用場景有一些改進(jìn)。
萊特幣的交易確認(rèn)時間是2.5分鐘,也就是每2.5分鐘有一個區(qū)塊被挖出,相較于比特幣的10分鐘,確認(rèn)時間大大縮短,交易效率更高。
新經(jīng)幣的共識機制是重要性證明(Proof of Importance),根據(jù)交易量、活躍度等維度而不僅僅是根據(jù)工作量來決定區(qū)塊鏈的記賬權(quán)。
Decred強調(diào)社區(qū)投入、公開治理以及可持續(xù)挖礦。它的特點是共識機制采用工作量證明PoW和權(quán)益證明PoS結(jié)合的方式。相比于工作量證明算法,權(quán)益證明算法不要求挖礦節(jié)點完成大量的計算工作,而是節(jié)點能夠?qū)σ欢〝?shù)量的錢展示所有權(quán)。權(quán)益證明由于不需要挖礦,避免了類似工作量證明算法消耗大量設(shè)備和電力的問題,所以受到廣泛關(guān)注。
狗狗幣是結(jié)合Doge文化發(fā)展起來的,有自己獨特的社區(qū)文化,具有交易便捷、轉(zhuǎn)賬速度快、確認(rèn)時間短等特點,在小費、慈善等場景應(yīng)用的活躍度很高。
匿名數(shù)字資產(chǎn)要解決的是如何在保護(hù)隱私的情況下完成支付的問題。我們知道比特幣匿名機制在于你無法知道比特幣地址背后所有者的真實身份,但是比特幣區(qū)塊鏈?zhǔn)枪_賬本,每個地址的交易數(shù)據(jù)都是完全公開的。尤其是當(dāng)用戶在比特幣交易網(wǎng)站注冊時,往往會填寫身份信息,這樣就可能暴露用戶身份信息。匿名數(shù)字資產(chǎn)比較知名的有達(dá)世幣Dash、門羅幣Monero以及采用零知識證明的零幣Zcash等。
達(dá)世幣的匿名性通過“混幣”的機制實現(xiàn)。原理是先將不同人的幣先混在一起,再將各自擁有的份額拿回去,這樣就無法知道轉(zhuǎn)賬人了。
門羅幣采用“環(huán)形簽名”的機制實現(xiàn)匿名。網(wǎng)絡(luò)首先將轉(zhuǎn)賬者的密鑰對和另外一個密鑰對集合混在一起得到一個新集合,然后用集合中的私鑰逐一簽名。其它節(jié)點用公鑰解密的時候就不確定到底哪個簽名是轉(zhuǎn)賬者的簽名。
零幣特色是采用了零知識證明機制實現(xiàn)匿名。原理類似于我們?nèi)胱【频陼r,不需要向前臺提供全部個人身份信息,而是公安系統(tǒng)提供一個接口,我們把信息提供給公安系統(tǒng)的接口,公安系統(tǒng)驗證身份之后返回結(jié)果就可以了。這樣就實現(xiàn)了對酒店前臺的匿名效果。
目前,全球數(shù)字資產(chǎn)超過1000種,充當(dāng)?shù)亩际且话阖泿诺墓δ埽糜诮灰字Ц?。目前也遇到?yīng)用場景有限、自身價值波動過大等問題。
3.2 智能合約平臺
智能合約就是在區(qū)塊鏈上運行的計算機程序。當(dāng)滿足程序中預(yù)先設(shè)定的觸發(fā)條件時,智能合約自動執(zhí)行。觸發(fā)條件可以是時間、事件或者交易等。由于區(qū)塊鏈歷史數(shù)據(jù)的不可更改特性,智能合約一旦在區(qū)塊鏈上注冊之后,就不能更改,無法違約。例如,房屋租賃合同協(xié)議的智能合約,注冊之后,當(dāng)業(yè)主收到定金時會觸發(fā)執(zhí)行,自動將房屋的鑰匙密鑰發(fā)送到房客的賬戶。到了租金交付時間,合約會自動從房客的賬戶向業(yè)主轉(zhuǎn)賬預(yù)先商定的租金。
再舉一個智能合約應(yīng)用在航班延誤險的例子。我們經(jīng)常坐飛機會買飛機延誤險,但是真的延誤之后,你還要打電話咨詢、在線下開證明、找保險公司,才能執(zhí)行完你的飛機延誤險賠付。如果有智能合約,在區(qū)塊鏈上注冊好合約以后,連接到航班數(shù)據(jù),就能確保航空公司在航班延誤之后自動給你賠付了。
比特幣區(qū)塊鏈可以看做區(qū)塊鏈1.0。但比特幣區(qū)塊鏈因為不是圖靈完備的。圖靈完備是指一切可計算的問題都能計算,這樣的虛擬機或者編程語言就是圖靈完備的。比特幣區(qū)塊鏈不能支持所有種類的計算,無法為賬戶取款額度提供精細(xì)的控制,缺少更豐富的狀態(tài)記錄,導(dǎo)致比特幣區(qū)塊鏈的擴展性比較差,不能應(yīng)用在除比特幣以外的其它應(yīng)用上,無法支持復(fù)雜的智能合約。
智能合約的區(qū)塊鏈平臺被稱為區(qū)塊鏈2.0,代表項目是以太坊。針對比特幣區(qū)塊鏈擴展性差、缺少圖靈完備等特點,以太坊建立了一個可編程、圖靈完備的區(qū)塊鏈平臺。在這個平臺上,你可以通過編寫簡單的程序方便的實現(xiàn)數(shù)字資產(chǎn)的生產(chǎn),對鏈上運行的各類數(shù)字資產(chǎn)的精確控制,比如這個資產(chǎn)是待支付還是被鎖定還是有額度限制、和其他資產(chǎn)的自動兌換等等。同時,你也可以開發(fā)很多的智能合約,來實現(xiàn)非區(qū)塊鏈資產(chǎn)的功能,比如投票、對賭、條件合同等。因為要支持智能合約,以太坊上有兩類賬戶地址。一種是普通賬戶,和比特幣賬戶地址差不多,一種是合約賬戶,主要用于智能合約。簡單點說,以太坊就是區(qū)塊鏈加智能合約。
由于以太坊有著強大的可擴展性和完善的生態(tài)支持,在區(qū)塊鏈的應(yīng)用開發(fā)上,很多開發(fā)者和企業(yè)都選擇了以太坊區(qū)塊鏈作為他們的底層技術(shù)平臺。
接觸過以太坊的人都知道,除了以太坊之外,還有一個以太坊經(jīng)典,那么這兩者是什么關(guān)系呢?2016年7月份,由于以太坊網(wǎng)絡(luò)上,價值6000萬美元的以太幣(以太坊網(wǎng)絡(luò)上使用的代幣)被黑客盜取,為了追回被盜資金,以太坊創(chuàng)始人Vitalik組織并主導(dǎo)了一次硬分叉,通過在新的鏈上改寫了被黑客篡改的交易記錄實現(xiàn)資金追回。這次硬分叉將以太坊區(qū)塊鏈分成了兩條區(qū)塊鏈,由Vitalik主導(dǎo)、接受升級的區(qū)塊鏈稱為以太坊,它的代幣簡稱ETH(Ethereum,ETH),不接受這次升級的區(qū)塊鏈稱為以太坊經(jīng)典,它的代幣簡稱ETC(Ethereum Classic,ETC)。
以太幣是以太坊網(wǎng)絡(luò)上使用的代幣,是以太坊內(nèi)置的區(qū)塊鏈資產(chǎn),類似比特幣。但是以太幣的主要目的并不是交易支付,而是用于支付智能合約運行的費用。智能合約的運行需要付費,相當(dāng)于設(shè)定了一個門檻,這個門檻對于真的想做應(yīng)用的用戶來說比較低,但對于大量運行垃圾智能合約項目和攻擊者來說就是比較大的負(fù)擔(dān),因此可以有效防止惡意攻擊,確保區(qū)塊鏈的穩(wěn)定安全。
3.3 全球支付與結(jié)算
目前用于全球支付與結(jié)算的區(qū)塊鏈項目較為成功的是Ripple和Tether。以Ripple為例來介紹一下。
瑞波Ripple是目前區(qū)塊鏈金融領(lǐng)域比較成功的項目之一,支持全球不同網(wǎng)絡(luò)、不同幣種之間即時、低成本的國際支付。銀行等機構(gòu)用戶都可以利用瑞波在不同網(wǎng)絡(luò)之間發(fā)送實時的國際付款。與其他區(qū)塊鏈項目都由開發(fā)者組織進(jìn)行維護(hù)相比,瑞波的運行維護(hù)全都由一家叫Ripple Labs的公司負(fù)責(zé)。瑞波公司是一家組織嚴(yán)格,完全按照法律法規(guī)注冊的公司,并且獲得了很多大公司、投資機構(gòu)、銀行的投資,包括Google、埃森哲、渣打銀行等。這種特點也與瑞波公司的目標(biāo)客戶有關(guān)。瑞波區(qū)塊鏈不向個人開發(fā)者開放,主要面向機構(gòu)客戶特別是銀行、支付機構(gòu)等,支持機構(gòu)客戶實現(xiàn)快速、低成本的跨境匯款。瑞波公司大量與銀行等支付機構(gòu)合作,推動瑞波的應(yīng)用落地。例如2017年7月,日本和泰國之間首個基于瑞波區(qū)塊鏈的即時匯款服務(wù)正式開始。這項區(qū)塊鏈服務(wù)能實現(xiàn)個人資金從日元到泰銖的轉(zhuǎn)移,經(jīng)過2至5秒就能存到收款方的賬戶上,而現(xiàn)在兩國之間常規(guī)的匯款都需要花上兩個工作日的時間。
瑞波區(qū)塊鏈實現(xiàn)跨境支付主要通過內(nèi)置的代幣瑞波幣作為中介來實現(xiàn),瑞波幣可以兌換多種法幣。瑞波幣的發(fā)行并不是通過挖礦來實現(xiàn)的,而是通過業(yè)務(wù)開發(fā)交易來分發(fā)瑞波幣,獎勵那些更小差價的流動性提供商,另外向那些有興趣投資瑞波幣的機構(gòu)銷售瑞波幣。如果沒有挖礦,瑞波幣是如何實現(xiàn)交易確認(rèn)和記賬的呢?答案是協(xié)議共識機制。不同于工作量證明算法需要網(wǎng)絡(luò)上巨大的算力維持,瑞波區(qū)塊鏈將網(wǎng)絡(luò)上的節(jié)點分為普通節(jié)點和驗證節(jié)點,協(xié)議共識機制規(guī)定一筆交易只需要驗證節(jié)點的投票就能完成驗證和確認(rèn)。因此瑞波交易確認(rèn)的時間非常短。
瑞波幣被人詬病的一點是它的中心化運作,即由瑞波公司完全負(fù)責(zé)。而且,瑞波公司目前持有約三分之二的瑞波幣,完全有能力操縱瑞波幣的價格,這也是瑞波的一個隱患。當(dāng)然,瑞波公司也一再發(fā)表聲明,等瑞波發(fā)展成熟之后,會逐漸退出中心化團(tuán)隊的影響,比如去掉驗證節(jié)點,使瑞波真正成為一個去中心化的區(qū)塊鏈網(wǎng)絡(luò)。
3.4 平臺類應(yīng)用
平臺類應(yīng)用大多是基于以太坊設(shè)計并運行的區(qū)塊鏈項目,可以看出以太坊的可擴展性,即通過編程可以在它上面實現(xiàn)很多應(yīng)用。這里介紹三個平臺類應(yīng)用:市場預(yù)測平臺Augur,計算資源交易平臺Golem,數(shù)字代幣化平臺DigixDAO。
市場預(yù)測平臺Augur是以太坊上的第一個應(yīng)用。用戶基于數(shù)據(jù)對未來事件的結(jié)果進(jìn)行預(yù)測,預(yù)測正確的用戶會獲得獎勵,預(yù)測錯誤的用戶會失去“投注”。用戶參與預(yù)測之前,先要“下注”,即進(jìn)行資金充值,Augur會將錢存進(jìn)智能合約中,等到結(jié)果出來之后,合約自動執(zhí)行,可以有效防止用戶賴賬和中心節(jié)點作弊風(fēng)險。任何用戶都可以創(chuàng)建一個市場問題或者選擇參與某個市場問題。事件結(jié)果來自于所有持有代幣的人共同決定。注意Augur的代幣叫REP,并不是以太幣,用戶可以用以太幣購買REP。
計算交易平臺Golem允許用戶通過網(wǎng)絡(luò)交易計算資源,可以把它看做是目前共享經(jīng)濟的一個案例。兩類用戶:一類為算力資源賣家,另一類為買家。買家創(chuàng)建任務(wù)并將任務(wù)上傳到網(wǎng)絡(luò)。Golem的代幣是GNT,用于買方購買算力時支付酬勞。
數(shù)字代幣化平臺DigixDAO是一個基于以太坊區(qū)塊鏈構(gòu)建的資產(chǎn)代幣化平臺。DigixDAO的一大貢獻(xiàn)是在區(qū)塊鏈虛擬資產(chǎn)和黃金之類的實物資產(chǎn)之間建立了一種對應(yīng)關(guān)系,為實物資產(chǎn)的代幣化和文檔化提供了思路,為之后其它實體資產(chǎn)上鏈提供了一個范例。DigixDAO中的名詞“上鏈”,也就是實物資產(chǎn)上到區(qū)塊鏈上,變成區(qū)塊鏈資產(chǎn)。上鏈顯然是區(qū)塊鏈項目能夠與其它領(lǐng)域結(jié)合、落地到真實場景的必經(jīng)步驟。那DigixDAO是如何將實體資產(chǎn)上鏈的呢?主要是設(shè)計了一個證明資產(chǎn)存在和所有權(quán)的制度,并且證明記錄會通過星際文件系統(tǒng)(目標(biāo)取代HTTP協(xié)議的P2P分布式文件系統(tǒng))和以太坊永久性地發(fā)布和保護(hù)。DigixDAO獨創(chuàng)了PoA資產(chǎn)證明(Proof of Assets, PoA)。
可以通過DigixDAO的鑄幣來認(rèn)識PoA。比如現(xiàn)在要對黃金上鏈,一克黃金的價值,由黃金供應(yīng)商、托管商、審計商之類的“監(jiān)管鏈”參與者通過連續(xù)數(shù)字簽名進(jìn)行認(rèn)證,將這一克黃金的信息注冊成資產(chǎn)證明(PoA)資產(chǎn)卡,永久性地上傳到去中心化數(shù)據(jù)庫中。PoA卡被保存在以太坊錢包里,當(dāng)PoA資產(chǎn)卡被發(fā)送到鑄幣智能合約時,DigixDAO的代幣DGX就生成了。每個DGX代幣代表1克被倫敦金銀市場協(xié)會認(rèn)可的金條黃金。這就是DigixDAO的鑄幣過程。
4 總結(jié)
區(qū)塊鏈技術(shù)的核心是它能解決去中心化條件下的信任問題。并不是所有的行業(yè)都適合應(yīng)用區(qū)塊鏈,區(qū)塊鏈也不能包治百病。非常適合區(qū)塊鏈技術(shù)應(yīng)用的領(lǐng)域有以下特征:(1)目前沒有一個信任中心;(2)建立一個信任中心的成本非常高;(3)需要有顯示映射機制保障實施。
由于很多消耗了大量時間和資源成本的社會機制,都是為了在參與方之間建立信任關(guān)系,而區(qū)塊鏈可以讓人們在相互無信任的情況下,無地域限制地進(jìn)行大規(guī)模協(xié)作。顯然,區(qū)塊鏈給社會帶來了一種新的提升效率和降低成本的技術(shù)手段。目前,雖然大家對以比特幣為代表的加密數(shù)字貨幣的未來看法不一,但對區(qū)塊鏈的未來大家卻一致看好,認(rèn)為區(qū)塊鏈?zhǔn)且豁椄锩缘募夹g(shù)。
目前區(qū)塊鏈在各行業(yè)的應(yīng)用已經(jīng)逐步展開,重點應(yīng)用領(lǐng)域如圖4-1所示。在具體的行業(yè)應(yīng)用中,區(qū)塊鏈能產(chǎn)生明顯效益的地方在于優(yōu)化業(yè)務(wù)流程、降低運營成本、提升協(xié)作效率。
圖4-1 區(qū)塊鏈當(dāng)前重點應(yīng)用領(lǐng)域
該文章在 2018/3/30 9:02:12 編輯過