很多童鞋反饋,區(qū)塊鏈技術(shù)有點(diǎn)繞,有點(diǎn)晦澀,大都是一知半解,理解不夠通徹。但在阿里技術(shù)專(zhuān)家鄭吉看來(lái),區(qū)塊鏈特別是比特幣本身,并沒(méi)有使用高大上復(fù)雜的新技術(shù),只是對(duì)現(xiàn)有技術(shù)的組合。其天才的地方體現(xiàn)在系統(tǒng)的架構(gòu)上,體現(xiàn)在把金融學(xué),貨幣學(xué),博弈學(xué),甚至是哲學(xué)思想體現(xiàn)在比特幣的系統(tǒng)架構(gòu)上。如果單純從系統(tǒng)中的技術(shù)點(diǎn)著手學(xué)習(xí)研究,那么往往就會(huì)覺(jué)得有點(diǎn)繞,有點(diǎn)晦澀。這就像我們?cè)谄綍r(shí)工作中了解某個(gè)系統(tǒng),如果首先搞清楚業(yè)務(wù)本身,了解清楚系統(tǒng)架構(gòu)的設(shè)計(jì),再去看具體的實(shí)現(xiàn)技術(shù),從大局到面到點(diǎn),那么就有豁然開(kāi)朗的感覺(jué)。
準(zhǔn)備工作
區(qū)塊鏈不是一種技術(shù)實(shí)現(xiàn),而是一個(gè)系統(tǒng)的架構(gòu)設(shè)計(jì),使用一系列的技術(shù)組合用于完成去中心化的數(shù)據(jù)存儲(chǔ)。比特幣在區(qū)塊鏈之上融入了金融學(xué),貨幣學(xué),博弈學(xué),甚至一定程度的哲學(xué)思想,用于電子貨幣的發(fā)行,運(yùn)行和交易。在學(xué)習(xí)區(qū)塊鏈之前有一些基礎(chǔ)知識(shí)需要提前掌握好,后面將不再對(duì)具體技術(shù)展開(kāi)描述,而是從這個(gè)技術(shù)解決了什么問(wèn)題,為什么要用這個(gè)技術(shù)這個(gè)角度去描述。
P2P
不可逆算法
不對(duì)稱(chēng)加密算法
Merkle樹(shù)
CAP理論
最終一致性算法
比特幣要做什么?
如果你是一個(gè)架構(gòu)師,做一個(gè)系統(tǒng)的架構(gòu),你首先要搞清楚這個(gè)系統(tǒng)要做什么?要解決一個(gè)什么問(wèn)題?帶著這個(gè)問(wèn)題進(jìn)行分析,設(shè)計(jì)系統(tǒng)整體的架構(gòu)。對(duì)于比特幣也一樣,首先搞清楚比特幣是要做什么,要解決什么問(wèn)題?然后帶著這些問(wèn)題去解析比特幣的技術(shù)實(shí)現(xiàn)。
如果用一句話來(lái)描述比特幣要做什么,那么可以這樣描述:做一個(gè)去中心化電子貨幣發(fā)行交易系統(tǒng)。這里有三個(gè)關(guān)鍵詞:
1. 去中心化
2. 電子貨幣發(fā)行
3. 電子貨幣交易
分析和設(shè)計(jì)
本章針對(duì)上述比特幣的三個(gè)關(guān)鍵詞,去中心化,電子貨幣發(fā)行,貨幣交易,進(jìn)行分析和設(shè)計(jì)。
去中心化
當(dāng)今世界的所有貨幣交易都是有一個(gè)第三方可信任的金融機(jī)構(gòu)提供服務(wù)處理,任何人不能訪問(wèn)由這個(gè)第三方機(jī)構(gòu)中心化存儲(chǔ)的數(shù)據(jù),理論上來(lái)說(shuō)如果這個(gè)金融機(jī)構(gòu)發(fā)生了欺詐或倒閉,那么存儲(chǔ)在這個(gè)機(jī)構(gòu)中的貨幣,以及所做的交易就會(huì)存在風(fēng)險(xiǎn)。 當(dāng)然比特幣的去中心化,不是因?yàn)閾?dān)心這種風(fēng)險(xiǎn),而是根本就不需要這個(gè)第三方機(jī)構(gòu)了。這也是區(qū)塊鏈的強(qiáng)大顛覆性之一,凡是需要某個(gè)第三方可信任的機(jī)構(gòu)需要安全保存處理的數(shù)據(jù),都可以去中心化安全存儲(chǔ),所有人都可以訪問(wèn)。
從技術(shù)角度分析,如何做到去中心化?
中心化對(duì)應(yīng)的就是分布式,去中心化就是分布式。把原先存儲(chǔ)在某個(gè)第三方機(jī)構(gòu),中心化存儲(chǔ)的數(shù)據(jù),進(jìn)行分布式存儲(chǔ)。
分布式存儲(chǔ)要解決的3個(gè)基本問(wèn)題
1. 網(wǎng)絡(luò)結(jié)構(gòu)
2. 數(shù)據(jù)不可篡改性
3. 最終一致性
網(wǎng)絡(luò)結(jié)構(gòu)
去中心化的分布式存儲(chǔ)是指整個(gè)發(fā)行的電子貨幣,以及貨幣交易數(shù)據(jù)由不同機(jī)構(gòu),不通個(gè)人的成千上萬(wàn)的計(jì)算機(jī)共同存儲(chǔ),共同維護(hù)了同一份相同的數(shù)據(jù),只有共同維護(hù)的這份相同的數(shù)據(jù)才是認(rèn)為最終正確的數(shù)據(jù),任何個(gè)人篡改自己的數(shù)據(jù)都沒(méi)有意義,并且存儲(chǔ)的數(shù)據(jù)所有人都可訪問(wèn)。
如果做為架構(gòu)師,你會(huì)選擇什么樣的網(wǎng)絡(luò)結(jié)構(gòu)去實(shí)現(xiàn)這個(gè)分布式存儲(chǔ)?一種方式是可采用類(lèi)似Hadoop中HDFS的方式,由某個(gè)中心節(jié)點(diǎn)NameNode進(jìn)行協(xié)調(diào)訪問(wèn),但這種方式就會(huì)帶來(lái)單點(diǎn)風(fēng)險(xiǎn),破壞了中心節(jié)點(diǎn),整個(gè)體系都將不可訪問(wèn)。或者采用Cassandra無(wú)中心化投票機(jī)制維護(hù)整個(gè)集群狀態(tài),但是這種方式在全球化開(kāi)放式部署中會(huì)導(dǎo)致根本無(wú)法收斂。
所以比特幣采用了一種更加簡(jiǎn)單直接的方式,利用P2P協(xié)議維護(hù)整個(gè)比特幣網(wǎng)絡(luò)集群,不需要某個(gè)中心節(jié)點(diǎn)協(xié)調(diào)節(jié)點(diǎn)之間的通信,不需要所有機(jī)器投票維護(hù)集群狀態(tài)。而是通過(guò)P2P協(xié)議進(jìn)行節(jié)點(diǎn)之間的數(shù)據(jù)傳輸,任何節(jié)點(diǎn)都可以隨時(shí)加入或者離開(kāi)比特幣網(wǎng)絡(luò)集群,而不會(huì)對(duì)比特幣網(wǎng)絡(luò)集群產(chǎn)生影響,也不需要特意去修復(fù)這個(gè)集群中的故障機(jī)器。
利用P2P協(xié)議進(jìn)行節(jié)點(diǎn)之間數(shù)據(jù)傳輸主要有兩個(gè)功能點(diǎn):
a. 把需要存儲(chǔ)的數(shù)據(jù)廣播到所有節(jié)點(diǎn)上進(jìn)行儲(chǔ)存。
b. 查詢(xún)整個(gè)網(wǎng)絡(luò)集群中所有節(jié)點(diǎn)的最新數(shù)據(jù),如果自己節(jié)點(diǎn)的數(shù)據(jù)與大部分節(jié)點(diǎn)的數(shù)據(jù)不一致,則更新自身的數(shù)據(jù)與大部分節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)一致。
比特幣是去中心化存儲(chǔ),最大的風(fēng)險(xiǎn)是整個(gè)比特幣網(wǎng)絡(luò)集群被破壞,篡改了整個(gè)網(wǎng)絡(luò)存儲(chǔ)的數(shù)據(jù)。但是上述第二個(gè)功能點(diǎn)能夠有效的防止這種風(fēng)險(xiǎn),由于系統(tǒng)會(huì)自動(dòng)更新為整個(gè)集群中大部分節(jié)點(diǎn)存儲(chǔ)的相同數(shù)據(jù),所以要篡改數(shù)據(jù),必須要同時(shí)篡改整個(gè)網(wǎng)絡(luò)一半以上的數(shù)據(jù),這不是說(shuō)做不到,但是比特幣利用區(qū)塊鏈的方式再加上利益博弈機(jī)制,當(dāng)你擁有這種能力的時(shí)候,也不需要去做篡改這種投入產(chǎn)出比這么低的事了,在數(shù)據(jù)不可篡改性一節(jié)中再詳細(xì)描述。
通過(guò)圖示看一下比特幣網(wǎng)絡(luò)結(jié)構(gòu)的運(yùn)行:
Jack把某一筆交易數(shù)據(jù)往A服務(wù)器上提交,A服務(wù)器驗(yàn)證數(shù)據(jù)合法性后存儲(chǔ)到自身的數(shù)據(jù)庫(kù)中,同時(shí)把這筆交易數(shù)據(jù)點(diǎn)對(duì)點(diǎn)的傳輸?shù)奖忍貛啪W(wǎng)絡(luò)集群的所有B,C,D,E節(jié)點(diǎn)上。A和所有其它的B,C,D,E節(jié)點(diǎn)保持點(diǎn)對(duì)點(diǎn)通信,自動(dòng)更新為這個(gè)集群中大多數(shù)節(jié)點(diǎn)維護(hù)的相同的數(shù)據(jù)。如果B,C,D三臺(tái)服務(wù)器保存的數(shù)據(jù)相同,但是與A,E不一致,則A和E自動(dòng)更新為與B,C,D相同的數(shù)據(jù)。所以Jack的這筆交易,需要等待這個(gè)比特幣網(wǎng)絡(luò)集群中所有節(jié)點(diǎn)都接受到,并且認(rèn)為合法存儲(chǔ)后,才認(rèn)為這筆交易成功完成。當(dāng)然在現(xiàn)實(shí)情況下,不需要等待所有節(jié)點(diǎn)都確認(rèn)完成,通常只需要少數(shù)服務(wù)器確認(rèn)完成后即可認(rèn)為交易完成,因?yàn)槊總€(gè)服務(wù)器維護(hù)的自身與整個(gè)網(wǎng)絡(luò)集群的數(shù)據(jù)狀態(tài),當(dāng)少量服務(wù)器都認(rèn)為與整個(gè)集群一致時(shí),此時(shí)從概率上就是一致的。在最終一致性一節(jié)中將繼續(xù)對(duì)這種網(wǎng)絡(luò)結(jié)構(gòu)下的數(shù)據(jù)存儲(chǔ)進(jìn)行描述。
數(shù)據(jù)不可篡改性
在設(shè)計(jì)了比特幣系統(tǒng)運(yùn)行的網(wǎng)絡(luò)結(jié)構(gòu)之后,需要考慮數(shù)據(jù)的不可篡改性,因?yàn)檫@種數(shù)據(jù)存儲(chǔ)是去中心化的,任何人都可以訪問(wèn),那么就容易被篡改,上節(jié)描述了在這種網(wǎng)絡(luò)結(jié)構(gòu)的運(yùn)行機(jī)制下,要篡改數(shù)據(jù),必須同時(shí)更改這個(gè)網(wǎng)絡(luò)集群上一半以上的節(jié)點(diǎn)數(shù)據(jù),如果每個(gè)節(jié)點(diǎn)沒(méi)有一個(gè)安全的保護(hù)機(jī)制的話,那是很容易做到被同時(shí)修改網(wǎng)絡(luò)集群中一半以上節(jié)點(diǎn)的數(shù)據(jù)。
先想想,如果你是架構(gòu)師,你會(huì)如何設(shè)計(jì)這個(gè)保護(hù)機(jī)制,確保存儲(chǔ)的數(shù)據(jù)無(wú)法被篡改?在傳統(tǒng)上,我們把交易數(shù)據(jù)一條記錄一條記錄的保存在數(shù)據(jù)庫(kù)表中,數(shù)據(jù)庫(kù)放在某個(gè)第三方機(jī)構(gòu)的服務(wù)器上,這個(gè)第三方機(jī)構(gòu)給服務(wù)器所處的網(wǎng)絡(luò),服務(wù)器,數(shù)據(jù)庫(kù)設(shè)置了嚴(yán)格的訪問(wèn)限制用于數(shù)據(jù)的安全性。但是在一個(gè)去中心化,沒(méi)有一個(gè)機(jī)構(gòu)或者一個(gè)人可以控制系統(tǒng)的訪問(wèn)權(quán)限的情況下,如何去保護(hù)數(shù)據(jù)的安全性?
一種方式是每個(gè)人把自己的插入的這條數(shù)據(jù)hash后用自己的密鑰進(jìn)行簽名,然后附帶上自己的公鑰,系統(tǒng)可以用簽名和公鑰驗(yàn)證插入的數(shù)據(jù)是否被修改過(guò)。如果把數(shù)據(jù)庫(kù)表比喻為一本帳本,表中的每一條數(shù)據(jù)就認(rèn)為是賬本中記錄的每一筆交易。這里還有兩個(gè)問(wèn)題,第一,不能隨意插入數(shù)據(jù),如果你沒(méi)有比特幣,但還是插入一條轉(zhuǎn)帳給某人的數(shù)據(jù),系統(tǒng)需要發(fā)現(xiàn)是不合法的,拒絕此次插入請(qǐng)求。第二,除了不能隨意插入和修改外,也需要防止刪除數(shù)據(jù),上述把每條記錄進(jìn)行簽名并不能阻止被惡意刪除。帶著這些問(wèn)題,如果你是架構(gòu)師,你會(huì)做什么樣的架構(gòu)設(shè)計(jì)實(shí)現(xiàn)這些需求?
這里就開(kāi)始要引出區(qū)塊鏈的設(shè)計(jì)了。上面把數(shù)據(jù)庫(kù)表比喻為一本帳本,如果系統(tǒng)中只有一張表,也就是一本帳本,那么這本帳本中的數(shù)據(jù)很容被更改。如果讓系統(tǒng)每10分鐘自動(dòng)生成一張表,也就是生成一本新帳本,新的交易記錄都記錄在新帳本中。 并且創(chuàng)建這個(gè)新帳本需要一定的條件,用當(dāng)前帳本的順序號(hào),上一個(gè)帳本的所有記錄的hash值,系統(tǒng)時(shí)間戳(10分鐘一個(gè)維度),再找一個(gè)隨機(jī)值,幾個(gè)數(shù)據(jù)加在一起Hash后滿(mǎn)足一定的條件,比如開(kāi)始多少位都是0,那么系統(tǒng)就接收這個(gè)新帳本。產(chǎn)生的新帳本通過(guò)帳本順序號(hào)串在上個(gè)帳本之后,形成一個(gè)帳本的鏈?zhǔn)浇Y(jié)構(gòu),新的帳本依賴(lài)于上一個(gè)帳本的數(shù)據(jù)和當(dāng)前系統(tǒng)時(shí)間戳,因此一旦新帳本產(chǎn)生后,歷史帳本的數(shù)據(jù)就無(wú)法被篡改,因?yàn)橐坏┐鄹模团c之后的帳本對(duì)不上,帳本被破壞,按照上節(jié)網(wǎng)絡(luò)結(jié)構(gòu)中描述的自動(dòng)更新為網(wǎng)絡(luò)集群中大部分節(jié)點(diǎn)維護(hù)的相同的帳本。
一旦形成了鏈?zhǔn)綆け竞缶蜔o(wú)法去更改某個(gè)歷史帳本中的數(shù)據(jù),更改了某個(gè)歷史帳本,那么在它之后的所有帳本都需要更改,但是每個(gè)帳本都是根據(jù)當(dāng)前的系統(tǒng)時(shí)間戳驗(yàn)證hash值是否滿(mǎn)足條件才能接收,所以無(wú)法去篡改歷史帳本的數(shù)據(jù)。所能做的只能另外投入非常大的代價(jià)再構(gòu)建一個(gè)比特幣集群,這個(gè)集群超過(guò)當(dāng)前的集群,那么數(shù)據(jù)就自動(dòng)按照新構(gòu)建的集群為準(zhǔn)。這就是多個(gè)帳本的相互保護(hù)機(jī)制比單個(gè)帳本更難以被篡改。后續(xù)貨幣的發(fā)行和交易中再會(huì)描述,當(dāng)你有能力重新構(gòu)建一個(gè)新的比特幣網(wǎng)絡(luò)集群用于去攻擊篡改數(shù)據(jù)時(shí),你獲得的收益將遠(yuǎn)遠(yuǎn)低于你投入的成本。
為了防止上個(gè)帳本的數(shù)據(jù)被篡改,產(chǎn)生新的帳本需要依賴(lài)于上一個(gè)帳本中的所有交易記錄的hash值,這樣一旦上個(gè)帳本的數(shù)據(jù)發(fā)生變化就與新帳本對(duì)應(yīng)不上。但是帳本中所有交易記錄計(jì)算hash值是一件耗時(shí)的計(jì)算,因此比特幣采用了merkle樹(shù)對(duì)某個(gè)帳本中的所有交易記錄進(jìn)行hash計(jì)算。它主要是解決帳本中交易記錄hash計(jì)算的效率問(wèn)題。如下圖HA,HB.。.HP是具體的交易記錄,每相臨的兩條交易記錄向上形成一個(gè)Hash值,再與相鄰的節(jié)點(diǎn)再往上形成hash值,一直到樹(shù)根形成所有交易記錄的唯一hash值。
之前描述的網(wǎng)絡(luò)結(jié)構(gòu)和本節(jié)描述的帳本鏈?zhǔn)浇Y(jié)構(gòu),本質(zhì)上都是用于解決去中心化的數(shù)據(jù)安全存儲(chǔ)。
最終一致性
是分布式存儲(chǔ)就繞不開(kāi)CAP理論,比特幣也一樣,比特幣采用P2P協(xié)議進(jìn)行節(jié)點(diǎn)之間的數(shù)據(jù)傳輸,放棄了CAP中的Consistency,采用了AP兩個(gè)維度。如果放棄了Consistency這個(gè)屬性,那么就產(chǎn)生了拜占庭將軍問(wèn)題,這么多節(jié)點(diǎn)如何達(dá)成數(shù)據(jù)一致性。拜占庭軍隊(duì)都是一個(gè)個(gè)小分隊(duì)組成,每個(gè)小分隊(duì)都有一個(gè)將軍負(fù)責(zé),將軍們通過(guò)號(hào)令兵傳達(dá)一系列行動(dòng),但是當(dāng)中出現(xiàn)一些叛將,故意破壞號(hào)令怎么辦?
分布式存儲(chǔ)系統(tǒng)和拜占庭將軍問(wèn)題一樣,做到一致性是很難的,在比特幣開(kāi)放式的全球化部署的系統(tǒng)集群更是如此。所以比特幣放棄了強(qiáng)一致性,并且通過(guò)P2P點(diǎn)對(duì)點(diǎn)通信,沒(méi)有中心節(jié)點(diǎn),整個(gè)集群中的服務(wù)器故障,離開(kāi),加入集群都不會(huì)對(duì)整個(gè)集群產(chǎn)生影響。
上節(jié)中描述了帳本的產(chǎn)生基本機(jī)制,用當(dāng)前帳本的順序號(hào),上一個(gè)帳本的所有記錄的hash值,系統(tǒng)時(shí)間戳(10分鐘一個(gè)維度),再找一個(gè)隨機(jī)值,幾個(gè)數(shù)據(jù)加在一起Hash后滿(mǎn)足一定的條件,比如開(kāi)始多少位都是0,那么系統(tǒng)就接收這個(gè)新帳本,這就是這個(gè)集群中所有節(jié)點(diǎn)的共識(shí),所有節(jié)點(diǎn)只接收這樣的帳本,而尋找這個(gè)隨機(jī)值是需要龐大的計(jì)算能力。在比特幣中稱(chēng)它為Proof-of-Work(POW)挖礦。
當(dāng)每隔10分鐘找到這個(gè)值,就是生成了新的帳本。但網(wǎng)絡(luò)集群都是開(kāi)放的,可能同時(shí)找到了兩個(gè)值,在集群中少部分節(jié)點(diǎn)中產(chǎn)生了2個(gè)帳本,針對(duì)這種情況比特幣系統(tǒng)設(shè)計(jì)為:整個(gè)網(wǎng)絡(luò)集群采用少數(shù)服從多數(shù)原則,集群中大部分采用了哪個(gè)帳本,少數(shù)節(jié)點(diǎn)服從多數(shù)節(jié)點(diǎn),丟棄沒(méi)被大多數(shù)采用的帳本,達(dá)到最終一致性。
電子貨幣發(fā)行
上一章節(jié)去中心化中,主要描述了一個(gè)去中心化系統(tǒng),如何做到安全的數(shù)據(jù)存儲(chǔ),不被篡改。它主要采用了P2P網(wǎng)絡(luò)結(jié)構(gòu)+區(qū)塊鏈?zhǔn)浇Y(jié)構(gòu)解決了數(shù)據(jù)的安全存儲(chǔ)。但是對(duì)于一個(gè)貨幣,還需要解決一個(gè)貨幣的發(fā)行,如何發(fā)行,發(fā)行給誰(shuí)?如何讓比特幣系統(tǒng)能夠讓所有的人自發(fā)的運(yùn)行下去?貨幣的發(fā)行需要公平,公開(kāi),公正,而且貨幣不能發(fā)行到某個(gè)第三方機(jī)構(gòu)中,任何人只要符合一定的條件就能獲取發(fā)行的貨幣。想一想,如果你是架構(gòu)師,你會(huì)如何設(shè)計(jì)系統(tǒng)去發(fā)行貨幣?
本質(zhì)上講,比特幣系統(tǒng)自身就可以尋找一個(gè)隨機(jī)值,產(chǎn)生新的帳本。但是比特幣把發(fā)行貨幣和尋找新帳本背后的計(jì)算力結(jié)合在一起。尋找新帳本需要消耗計(jì)算力,誰(shuí)找到了符合新帳本條件的隨機(jī)值,代表了他消耗了大量的計(jì)算力,新帳本一旦被系統(tǒng)接收,那么系統(tǒng)自動(dòng)在該新帳本中記錄一條轉(zhuǎn)帳給他一定個(gè)數(shù)比特幣的紀(jì)錄,就完成了貨幣的發(fā)行。
比特幣的運(yùn)行必須依賴(lài)于新帳本的產(chǎn)生,而誰(shuí)找到新帳本,誰(shuí)就能獲得系統(tǒng)自動(dòng)生成的轉(zhuǎn)帳紀(jì)錄,也就是獲得了一定數(shù)量的比特幣,這就是挖礦。這也就激勵(lì)了人們不斷的投入到挖礦中,不斷的挖出新帳本,通過(guò)激勵(lì)維持著比特幣系統(tǒng)的運(yùn)行。
這里體現(xiàn)設(shè)計(jì)天才的地方是,比特幣融入了金融學(xué),貨幣學(xué),博弈學(xué),通過(guò)系統(tǒng)形成了一定的運(yùn)行機(jī)制,激勵(lì)著人們讓這個(gè)系統(tǒng)能夠自發(fā)的運(yùn)行下去。
電子貨幣交易
上節(jié)電子貨幣發(fā)行一節(jié)中描述了,誰(shuí)通過(guò)算力找到了新的帳本,系統(tǒng)就會(huì)自動(dòng)記一筆賬,轉(zhuǎn)一定數(shù)量的比特幣給誰(shuí),他也就獲得了比特幣。那么如何確認(rèn)記錄的這筆交易是屬于你的,而不被別人拿走呢?做為架構(gòu)師的你如何解決這個(gè)問(wèn)題?
比特幣采用了非對(duì)稱(chēng)加密技術(shù)對(duì)用戶(hù)的帳戶(hù)操作,公鑰就是用戶(hù)的帳戶(hù)號(hào)碼,誰(shuí)找到了新帳本,系統(tǒng)自動(dòng)往新帳本發(fā)現(xiàn)者的公鑰帳戶(hù),記一條特定數(shù)量比特幣的紀(jì)錄。當(dāng)用戶(hù)要消費(fèi)比特幣時(shí),需要用私鑰進(jìn)行簽名,系統(tǒng)會(huì)用帳戶(hù)號(hào)碼也就是公鑰驗(yàn)證簽名是否正確,并且根據(jù)用戶(hù)的帳戶(hù)號(hào)碼從歷史的交易中計(jì)算出當(dāng)前帳戶(hù)中的真實(shí)金額,確保用戶(hù)操作的資金在帳戶(hù)真實(shí)金額之內(nèi)。這里的設(shè)計(jì)有兩個(gè)要點(diǎn):
插入的每一條紀(jì)錄都需要用私鑰簽名,系統(tǒng)用帳戶(hù)號(hào)碼也就是公鑰進(jìn)行驗(yàn)證簽名是否正確,驗(yàn)證正確則認(rèn)為合法。
如果滿(mǎn)足第一個(gè)條件,則驗(yàn)證插入的紀(jì)錄中轉(zhuǎn)帳金額是否正確,驗(yàn)證的方式是對(duì)該公鑰以往的所有交易紀(jì)錄進(jìn)行計(jì)算得出該帳戶(hù)當(dāng)前的金額,如果不超過(guò)該金額值則為合法。圖示如下:
這種機(jī)制能夠保證只能對(duì)自己的帳戶(hù)進(jìn)行操作,再結(jié)合P2P網(wǎng)絡(luò)結(jié)構(gòu)下的最終一致性原則,以及帳本的鏈?zhǔn)浇Y(jié)構(gòu),一個(gè)攻擊者需要建立超過(guò)目前比特幣網(wǎng)絡(luò)集群,并且算力超過(guò)目前的集群下才能創(chuàng)建另外一個(gè)帳本分之,而且也只能更改自己的帳戶(hù),所以這種攻擊投入和產(chǎn)出的收益極低,而對(duì)于比特幣系統(tǒng)來(lái)說(shuō),你構(gòu)建了龐大的集群以及強(qiáng)大的算力,即使攻擊成功了,獲得了一部分的收益,反過(guò)來(lái)卻讓比特幣系統(tǒng)更加的穩(wěn)健了。
區(qū)塊鏈的應(yīng)用
比特幣系統(tǒng)解決了去中心化的安全存儲(chǔ)問(wèn)題,解決了貨幣的發(fā)行問(wèn)題,解決了貨幣交易的帳戶(hù)安全問(wèn)題后,就構(gòu)建了一個(gè)當(dāng)前的比特幣電子虛擬貨幣系統(tǒng)了。而比特幣使用的區(qū)塊鏈被認(rèn)為是一個(gè)顛覆性的技術(shù),革命性的技術(shù),那他的顛覆性體現(xiàn)在什么地方呢?它不是技術(shù)上面的顛覆,主要是在思想層面上的,商業(yè)運(yùn)作模式層面上的革命性。就比如一個(gè)國(guó)家從集權(quán)式的到民主式的轉(zhuǎn)變,對(duì)這個(gè)國(guó)家和社會(huì)就是一個(gè)革命性的變化。而區(qū)塊鏈技術(shù)帶來(lái)兩個(gè)基本功能:
1. 去中心化的數(shù)據(jù)存儲(chǔ)
2. 保證帳戶(hù)的安全性
理論上讓原先需要通過(guò)某個(gè)第三方機(jī)構(gòu)提供的數(shù)據(jù)服務(wù),都可以革命性更改為去中心化的方式提供服務(wù),比如比特幣可以替代各個(gè)國(guó)家的法幣使用。區(qū)塊鏈這種特性也會(huì)衍生出各行各業(yè)的商業(yè)模式顛覆性的變化。
評(píng)論
查看更多