去中心化:比特幣如何實現(xiàn)權(quán)力下放區(qū)塊鏈
比特幣實現(xiàn)去中心化的機制并非純技術(shù)問題,而是技術(shù)手段和智能激勵工程的結(jié)合。
在本章中,我們將討論Bitcoin中的權(quán)力下放(去中心化)。在第一章中,我們研究了比特幣基礎(chǔ)的加密基礎(chǔ),并以我們稱之為ScroogeCoin的簡單貨幣來結(jié)束。ScroogeCoin在基于分類帳的加密系統(tǒng)中實現(xiàn)了很多我們想要的功能,但它有一個明顯的問題——它依賴于稱為Scrooge的集中式權(quán)限。我們在如何下放或者去中心化這個貨幣中結(jié)束了這個問題,問答這個問題將成為本章的重點。
在閱讀本章時,請注意,比特幣實現(xiàn)去中心化的機制并非純技術(shù)問題,而是技術(shù)手段和智能激勵工程的結(jié)合。在本章結(jié)尾,您應(yīng)該很贊賞這種權(quán)力是如何下放的,更一般來說,Bitcoin是如何工作的,以及為什么它是安全的。
2.1中心化與去中心化
去中心化不是比特幣唯一一個重要的概念。在各種不同的數(shù)字技術(shù)中,出現(xiàn)了中心化與去中心化競爭范式的概念。為了更好地了解它是如何在比特幣發(fā)揮作用的,在其他各種情況下理解中央沖突(這兩種范式之間的緊張關(guān)系)是有用的。
一方面,我們有了互聯(lián)網(wǎng),一個有名的去中心化系統(tǒng),歷史上競爭并戰(zhàn)勝了“圍墻內(nèi)的花園”,比如AOL和CompuServe的信息服務(wù)。然后,出現(xiàn)了電子郵件,其核心是基于簡單郵件傳輸協(xié)議(SMIP)的分散系統(tǒng),這是一種開放標(biāo)準(zhǔn)。雖然它有來自Facebook或LinkedIn郵件等專有郵件系統(tǒng)的競爭,但電子郵件仍然是個人與個人在線通信的默認(rèn)工具。就即時消息和短信來說,我們有一個不能被明確描述為集中式或分散式的混合模型。最后還有社交網(wǎng)絡(luò):盡管業(yè)余愛好者、開發(fā)者和企業(yè)家為了創(chuàng)造出主流中心化系統(tǒng)的替代品做了多次努力,但像Facebook和LinkedIn這樣的集中式系統(tǒng)仍然主宰著這個空間。事實上,這個沖突早在數(shù)字時代就有了,我們看到電話、廣播、電視和電影的歷史上也有這兩個模式間的類似斗爭。
去中心化并非全部或什么都沒有;幾乎沒有一個系統(tǒng)是完全分散式的或純粹集中的。例如,電子郵件基本上是基于標(biāo)準(zhǔn)化協(xié)議(SMTP)的分散式系統(tǒng),任何想的人都可以操作自己的電子郵件服務(wù)器。然而,市場上發(fā)生的情況是,少數(shù)集中的網(wǎng)絡(luò)郵件提供商已成為主流。同樣,雖然Bitcoin的協(xié)議是分散式的,像Bitcoin交易的服務(wù),你可以將Bitcoin轉(zhuǎn)換成其他貨幣,而錢包軟件或允許人們管理其Bitcoin的軟件可能會在不同程度上集中或分散。
考慮到這一點,讓我們將Bitcoin協(xié)議如何實現(xiàn)去中心化分解成為五個更具體的問題:
1.誰維護(hù)交易的分類賬?
2.誰擁有決定哪些交易有效的權(quán)力?
3.誰創(chuàng)造新的比特幣?
4.誰決定系統(tǒng)規(guī)則如何改變?
5.比特幣如何獲得交換價值?
前三個問題反映了比特幣協(xié)議的技術(shù)細(xì)節(jié),正是這些問題將成為本章的重點。
比特幣的不同方面落在中心化/去中心化范圍的不同點上。對等網(wǎng)絡(luò)(p2p)接近于純粹的分布式,因為任何人都可以運行Bitcoin節(jié)點,并且進(jìn)入門檻相當(dāng)?shù)汀D憧梢陨暇W(wǎng),輕松下載Bitcoin客戶端,并在筆記本電腦或PC上運行節(jié)點。目前有數(shù)千個這樣的節(jié)點。本章稍后研究的比特幣礦業(yè)在技術(shù)上也適用于任何人,但需要非常高的資本成本。因此,在比特幣礦業(yè)生態(tài)系統(tǒng)中,集權(quán)力或權(quán)力集中度較高。Bitcoin社區(qū)的許多人都認(rèn)為這是非常不方便的。第三個方面是比特幣節(jié)點運行軟件的更新,這關(guān)系到系統(tǒng)規(guī)則如何以及何時更改。可以想象,與電子郵件一樣,協(xié)議有許多互操作的實現(xiàn)。但在實踐中,大多數(shù)節(jié)點運行參考實現(xiàn),其開發(fā)人員被社區(qū)充分信任并具有很大的權(quán)力。
2.2分布式共識
我們以通用的方式討論了集權(quán)和去中心化。現(xiàn)在我們來看看比特幣在更技術(shù)層面的去中心化。在本次討論中將出現(xiàn)的一個關(guān)鍵術(shù)語是共識,具體而言,是分布式共識。建立分布式電子現(xiàn)金系統(tǒng)解決的關(guān)鍵技術(shù)問題是實現(xiàn)分布式共識。直觀地,你可以想到我們的目標(biāo)是分散ScroogeCoin,這是我們在第一章看到的假想貨幣。
分布式共識具有多種應(yīng)用,并已在計算機科學(xué)方面進(jìn)行了數(shù)十年的研究。傳統(tǒng)的激勵應(yīng)用是可靠的分布式系統(tǒng)。想象一下,您負(fù)責(zé)Facebook等大型社交網(wǎng)絡(luò)公司的后端。這種系統(tǒng)通常具有數(shù)千甚至數(shù)百萬臺服務(wù)器,這些服務(wù)器一起形成一個大量的分布式數(shù)據(jù)庫,記錄系統(tǒng)中發(fā)生的所有動作。每條信息必須記錄在該后端的幾個不同的節(jié)點上,并且節(jié)點必須與系統(tǒng)的整體狀態(tài)保持一致。
具有分布式共識協(xié)議的含義遠(yuǎn)遠(yuǎn)超出了這一傳統(tǒng)應(yīng)用。如果我們有這樣一個協(xié)議,我們可以使用它來構(gòu)建一個龐大的,分布式的鍵值存儲,將任意鍵或名稱映射到任意值。一個分布式的鍵值存儲又可以實現(xiàn)許多應(yīng)用。例如,我們可以使用它來構(gòu)建一個分布式的域名系統(tǒng),它只是人類可理解的域名與IP地址之間的映射。我們可以建立一個公共密鑰目錄,它是電子郵件地址(或某種其他形式的真實身份)與公共密鑰之間的映射。
這是最直觀的分布式共識,但對于提供技術(shù)定義是有用的,因為這將有助于我們決定給定的協(xié)議是否符合要求。
分布式共識協(xié)議:有n個節(jié)點,每個都有一個輸入值。其中有一些節(jié)點有故障或惡意。分布式共識協(xié)議具有以下兩個屬性:
·它必須終止于所有在價值上達(dá)成一致的誠實節(jié)點
··該值必須由一個誠實的節(jié)點生成
在比特幣的背景下這是什么意思?要了解分布式共識如何在比特幣中發(fā)揮作用,請記住Bitcoin是一個點對點系統(tǒng)。當(dāng)Alice想支付給Bob時,她實際上做的是將交易通過對等網(wǎng)絡(luò)廣播到所有比特幣節(jié)點。見圖2.1
圖2.1廣播一個交易為了支付Bob,Alice將交易廣播到整個Bitcoin對等網(wǎng)絡(luò)
順便提一句,你可能已經(jīng)注意到,Alice將交易廣播到所有比特幣點對點節(jié)點,但是Bob的電腦在這張圖中沒有位置。Bob當(dāng)然可以運行對等網(wǎng)絡(luò)中的一個節(jié)點。事實上,如果他希望被告知這個交易確實發(fā)生了,并且他得到了報酬,那么運行一個節(jié)點可能是個好主意。盡管如此,Bob并不需要在網(wǎng)絡(luò)上偵聽;Bob不必要通過運行一個節(jié)點來收到資金。不管他是否在網(wǎng)絡(luò)上操作一個節(jié)點,比特幣都將是他的。
究竟什么樣的節(jié)點可能希望在比特幣網(wǎng)絡(luò)上達(dá)成共識呢?鑒于各種用戶正在將這些交易廣播到網(wǎng)絡(luò),節(jié)點必須準(zhǔn)確同意廣播哪些交易以及這些交易發(fā)生的順序。這將導(dǎo)致系統(tǒng)的單個全局分類賬。回想一下,在ScroogeCoin中,為了優(yōu)化,我們將交易放在區(qū)塊中。同樣,在比特幣方面,我們在逐區(qū)塊的基礎(chǔ)上達(dá)成共識。
所以,在任何一個給定的點上,對等網(wǎng)絡(luò)(p2p)中的所有節(jié)點都有一個由一系列區(qū)塊組成的分類賬,每個區(qū)塊都包含一個已經(jīng)達(dá)成共識的交易列表。此外,每個節(jié)點都有一個聽說了,但尚未被包含在區(qū)塊鏈中的未完成交易池。對于這些交易,共識尚未產(chǎn)生,因此根據(jù)定義,每個節(jié)點可能有稍微不同版本的未完成交易池。實際上,這是因為對等網(wǎng)絡(luò)不完美,所以一些節(jié)點可能已經(jīng)聽說過其他節(jié)點沒有聽說過的交易。
節(jié)點如何在區(qū)塊上達(dá)成共識?一種做到這點的方法是:定期每隔10分鐘,系統(tǒng)中的每個節(jié)點都會提議自己未完成的交易池作為下一個區(qū)塊。然后節(jié)點執(zhí)行一些共識協(xié)議,其中每個節(jié)點的輸入是它自己提出的區(qū)塊。現(xiàn)在,一些節(jié)點可能是惡意的,并將無效的交易放入其區(qū)塊中,但是我們可以假定其他節(jié)點是誠實的。如果共識協(xié)議成功,則將選擇有效的區(qū)塊作為輸出。即使所選區(qū)塊僅由一個節(jié)點提議,只要該區(qū)塊有效,則它也是一個有效的輸出。現(xiàn)在可能有一些有效的但未完成的交易未被包含在塊中,但這不是問題。如果某些交易以某種方式?jīng)]有進(jìn)入這個特定的塊,那么它只能等待進(jìn)入下一個塊。
前一段中的方法與Bitcoin如何工作有一些相似之處,但它并不完全如此。這種方法有一些技術(shù)問題。首先,一般來說,共識是一個難題,因為節(jié)點可能會崩潰或者完全是惡意的。其次,特別是在比特幣上下文中,網(wǎng)絡(luò)是非常不完美的。它是一個對等系統(tǒng),并不是所有的節(jié)點對都相互連接。例如,由于互聯(lián)網(wǎng)連接不良,網(wǎng)絡(luò)中可能會出現(xiàn)故障,而且運行協(xié)商一致的協(xié)議,其中所有節(jié)點都必須參與,這是不可能的。最后,系統(tǒng)中會有很多延遲,因為它遍布互聯(lián)網(wǎng)。
側(cè)欄:比特幣協(xié)議必須對兩種障礙達(dá)成一致:網(wǎng)絡(luò)中的缺陷,如延遲和節(jié)點崩潰,以及一些節(jié)點故意破壞進(jìn)程的企圖。
這種高延遲的一個特定后果是沒有全球時間的概念。這意味著并不是所有的節(jié)點都能夠簡單的基于觀察時間戳來同意事件的常見排序。因此,共識協(xié)議不能包含形式的指令,“步驟1中發(fā)送第一個消息的節(jié)點必須在步驟2中執(zhí)行X”。這根本不起作用,因為并不是所有的節(jié)點都將同意在協(xié)議的步驟1中首先發(fā)送哪條消息。
不可能的結(jié)果全球時間的缺乏嚴(yán)重限制了可被用于共識協(xié)議的算法集。事實上,由于這些限制,大多數(shù)分布式共識的文獻(xiàn)有點悲觀,許多不可能的結(jié)果已被證明。一個非常有名的不可能的結(jié)果涉及拜占庭將軍的問題。在這個經(jīng)典問題上,拜占庭的軍隊被分為師,各由一個將軍指揮。將軍通過信使溝通,制定聯(lián)合行動計劃。一些將領(lǐng)可能是叛徒,有可能故意試圖破壞進(jìn)行,以便使忠誠的將軍無法達(dá)成一個統(tǒng)一的計劃。這個問題的目標(biāo)是讓所有忠誠的將軍達(dá)成同樣的計劃,沒有叛國的將軍能致使他們采取壞的計劃。已經(jīng)證明,如果有三分之一以上的將軍是叛徒,計劃是不可能實現(xiàn)的。
一個更為微妙的不可能的結(jié)果,因首先證明了它的作者的名字而廣為人知,被稱為費舍爾-林奇-帕特森不可能的結(jié)果。在某些條件下,包括以確定性方式行事的節(jié)點,他們證明即使是單一的錯誤進(jìn)程,共識也是不可能達(dá)成的。
盡管有這些不可能的結(jié)果,文獻(xiàn)中也有一些共識協(xié)議。這些協(xié)議中更廣為人知的一個是Paxos。Paxos做出了一些妥協(xié)。一方面,它從不產(chǎn)生不一致的結(jié)果。另一方面,它接受在某些條件下,即使罕見的條件下的交易,該協(xié)議可能會卡住,不取得任何進(jìn)展。
打破傳統(tǒng)假設(shè)但有一個好消息:這些不可能的結(jié)果在一個非常特殊的模型中被證明。它們旨在研究分布式數(shù)據(jù)庫,且該模型對比特幣的設(shè)置并不非常好,因為比特幣違反了模型中許多內(nèi)置的假設(shè)。在某種程度上,結(jié)果告訴我們更多關(guān)于模型,而不是關(guān)于分布式共識的問題。
具有諷刺意味的是,隨著目前的研究狀況,Bitcoin的共識在實踐中比在理論上更好。也就是說,我們觀察到了工作的共識,但沒有發(fā)展理論來充分解釋它為什么工作。但是,發(fā)展這樣的理論是重要的,因為它可以幫助我們預(yù)測不可預(yù)見的攻擊和問題,只有當(dāng)我們對比特幣共識如何工作的有了很大的理解,才能保證比特幣的安全性和穩(wěn)定性。
傳統(tǒng)模式下,比特幣違約的共識假設(shè)是什么?首先,它介紹了激勵的思想,這對于分布式共識協(xié)議是新穎的。這只能在比特幣上可能實現(xiàn),因為它是一種貨幣,因而具有激勵參與者誠實行事的自然機制。所以比特幣在一般意義上并不能很好地解決分布式共識問題,但在貨幣體系的具體情況下能得到解決。
第二,比特幣信奉隨機性的概念。我們將在接下來的兩節(jié)中看到,比特幣的共識算法在很大程度上依賴于隨機化。另外,它擺脫了共識的特定出發(fā)點和結(jié)束點的概念。相反,共識在很長一段時間內(nèi)發(fā)生,在實際系統(tǒng)中大約一個小時。但即使在那個時間結(jié)束時,節(jié)點也不能確定任何特定的交易或區(qū)塊已經(jīng)成為分類賬。相反,隨著時間的推移,你對任何區(qū)塊的看法將與最終的共識視圖相匹配的可能性增加,視圖分歧的幾率也將呈指數(shù)下降。模型中的這些差異是比特幣如何繞過分布式共識協(xié)議的傳統(tǒng)不可能結(jié)果的關(guān)鍵。
2.3使用區(qū)塊鏈的無身份共識
在本節(jié)中,我們將研究比特幣共識算法的技術(shù)細(xì)節(jié)。回想一下,比特幣節(jié)點沒有持久的長期身份。這是與傳統(tǒng)的分布式共識算法的另一個區(qū)別。缺乏身份的一個原因是,在對等的系統(tǒng)中,沒有中央權(quán)力機構(gòu)為參與者分配身份,并確保他們不會隨意創(chuàng)建新的節(jié)點。這個技術(shù)術(shù)語是Sybil攻擊。Sybils只是惡意的對手創(chuàng)建的節(jié)點副本,它看起來像有很多不同的參與者,實際上所有這些偽參與者都是由同一個對手控制的。另一個原因是匿名本質(zhì)上是比特幣的一個目標(biāo)。即使可能或容易為所有節(jié)點或所有參與者建立身份,我們也不一定要這樣做。雖然Bitcoin并沒有提供強有力的匿名保證,因為一個人所做的不同交易通常可以聯(lián)系在一起,但它確實有這樣的特性:沒有人被迫透露他們的現(xiàn)實身份,比如他們的名字或IP地址,以便參加。這是Bitcoin設(shè)計的一個重要特性和核心特征。
如果節(jié)點確實有身份,那么設(shè)計會更容易。對于初學(xué)者來說,身份將允許我們放入表單的協(xié)議指令:“現(xiàn)在具有最低數(shù)字ID的節(jié)點應(yīng)該采取一些步驟。”沒有身份,可能的指令集更受約束。但是,對于節(jié)點來說,具有身份更重要的原因是為了安全。如果節(jié)點被識別,且創(chuàng)建新的節(jié)點身份不再微不足道,那么我們就可以對惡意節(jié)點的數(shù)量做出假設(shè),從中派生出安全屬性。
我們可以通過做出較弱的假設(shè)來彌補身份缺失。假設(shè)在某種程度上有能力在系統(tǒng)中選擇一個隨機節(jié)點。一個很好的激勵類比是彩票或抽獎,或者任何數(shù)量的很難追蹤人的現(xiàn)實生活的系統(tǒng),給他們身份,然后驗證這些身份。我們在這些情況下所做令牌(代幣)或者類似的東西。這使我們隨后能夠選擇一個隨機的令牌ID,并調(diào)用該ID的所有者。所以現(xiàn)在呢,要有一個信念的飛躍,并且假設(shè)有可能以這種方式從比特幣網(wǎng)絡(luò)中選擇一個隨機節(jié)點。進(jìn)一步假設(shè),目前這個代幣生成和分配算法足夠智能,所以如果對手要嘗試創(chuàng)建很多Sybil節(jié)點,那么所有這些Sybils一起只會得到一個令牌。這意味著對手無法通過創(chuàng)建新的節(jié)點來增加他的權(quán)力。如果你認(rèn)為這里有很多假設(shè),別擔(dān)心。在本章的后面,我們將刪除這些假設(shè),并詳細(xì)顯示如何在Bitcoin中實現(xiàn)與之相當(dāng)?shù)膶傩浴?/p>
隱含的共識這種隨機節(jié)點選擇的假設(shè)有可能成為隱含的共識。我們的協(xié)議中有多個回合,每個對應(yīng)于區(qū)塊鏈中的不同塊。在每一輪中,一個隨機節(jié)點以某種方式被選擇,并且該節(jié)點提議鏈中下一個區(qū)塊。沒有一致的算法來選擇區(qū)塊,也沒有任何類型的投票。所選節(jié)點單方面提議區(qū)塊鏈中的下一個區(qū)塊將是什么。但是,如果那個節(jié)點是惡意的呢?那么有一個處理這問題的過程,但它是一個隱含的過程。其他節(jié)點將通過選擇是否在其頂部構(gòu)建區(qū)塊來隱含的接受或拒絕該區(qū)塊。如果它們接受該區(qū)塊,它們將通過擴展包含接受區(qū)塊的塊鏈來表示它們的驗收。相比之下,如果他們拒絕該區(qū)塊,他們將通過忽略該區(qū)塊來擴展鏈,并建立在他們接受的前一個區(qū)塊之上。回想一下,每個區(qū)塊包含它擴展的區(qū)塊的哈希。這是一種技術(shù)機制,允許節(jié)點示意哪個區(qū)塊是它們正在擴展的區(qū)塊。
比特幣共識算法(簡)
該算法得到了簡化,假設(shè)它具有以不易遭受Sybil攻擊的方式選擇隨機節(jié)點的能力。
1.新的交易將廣播到所有節(jié)點
2.每個節(jié)點將新的交易收集到區(qū)塊中
3.在每一輪中,一個隨機節(jié)點開始廣播它的區(qū)塊
4.其他節(jié)點只有在區(qū)塊中所有的交易都有效(未使用,有效簽名)時才接受該區(qū)塊
5.節(jié)點通過將其哈希包含在所創(chuàng)建的下一個區(qū)塊中來表示對該區(qū)塊的接受
現(xiàn)在讓我們來看看為什么這個共識算法有效。為了做到這一點,讓我們考慮一個惡意對手——我們稱之為Alice——可能會顛覆這個過程。
竊取Bitcoin Alice可以在她無法控制的地址上簡單地竊取屬于另一個用戶的比特幣嗎?不,即使是由Alice來提議區(qū)塊鏈的下一個區(qū)塊,她也不能竊取其他用戶的比特幣。這樣做將需要Alice創(chuàng)建一個使用該硬幣的有效交易。這將需要Alice偽造所有者的簽名,如果該簽名使用的是安全數(shù)字簽名方案,則她不能這樣做。所以只要底層的加密是堅實的,她就不能簡單地竊取比特幣。
拒絕服務(wù)攻擊 讓我們考慮另一次攻擊。說Alice真的不喜歡其他像Bob一樣的用戶。然后,Alice可以決定,她不會將任何鮑伯地址的交易包含在她提議進(jìn)入?yún)^(qū)塊鏈的任何區(qū)塊中。換句話說,她拒絕為Bob服務(wù)。雖然這是Alice可以嘗試的一個有效的攻擊,但幸運的是這只是一個小煩惱。如果Bob的交易沒有進(jìn)入Alice提議的下一個區(qū)塊,那么他只要等到一個誠實的節(jié)點有機會提出一個區(qū)塊,然后他的交易將進(jìn)入該區(qū)塊。所以這也不是一個很好的攻擊。
雙重攻擊Alice可能會嘗試發(fā)起雙重攻擊。為了理解這個工作原理,讓我們假設(shè)Alice是由Bob管理的一些在線商家或網(wǎng)站的客戶,他提供一些在線服務(wù)來換取比特幣的支付。比方說,Bob的服務(wù)允許下載一些軟件。這里可能是雙重花費攻擊如何工作的。Alice在Bob的網(wǎng)站上向她的購物車添加了一個項目,服務(wù)器請求付款。然后,Alice從她的地址創(chuàng)建一個比特幣交易到Bob的地址,并將其廣播到網(wǎng)站。比方說,一些誠實的節(jié)點創(chuàng)建下一個區(qū)塊,并在該區(qū)塊中包括此交易。所以現(xiàn)在有一個由一個誠實的節(jié)點創(chuàng)建的區(qū)塊,它包含代表從Alice向商人Bob付款的一個交易。
回想一下,一個交易是一個包含Alice簽名的一個數(shù)據(jù)結(jié)構(gòu),一個支付給Bob的公鑰指令,和一個哈希。這個哈希表示一個Alice收到的先前交易輸出的指針,現(xiàn)在正在消費。該指針必須引用在共享鏈中先前區(qū)塊中的交易
注意,順便說一句,這里有兩種容易混淆的不同類型的哈希指針。區(qū)塊包括一個哈希指針,指向他們正在擴展的上一個區(qū)塊。交易包括一個或多個哈希指針,這些指針指向正在贖回的前一個交易輸出。
讓我們回到Alice如何發(fā)起雙重支付攻擊。最新的區(qū)塊由一個誠實的節(jié)點生成,并包括一個Alice支付給Bob進(jìn)行軟件下載的交易。在看到這個包含在區(qū)塊鏈中的交易的時候,Bob斷定Alice已經(jīng)支付給了他,并允許Alice下載軟件。假設(shè)下一輪中選擇的下一個隨機節(jié)點恰好由Alice控制。現(xiàn)在,既然Alice提議下一個區(qū)塊,她可以提出一個忽略了包含對Bob付款的區(qū)塊,取而代之的是一個指向前一個區(qū)塊的指針。此外,在她提議的區(qū)塊中,Alice包含一個交易,將她發(fā)送給鮑伯的硬幣轉(zhuǎn)移到她自己控制的另一個地址。這是一個經(jīng)典的雙重支付模式。由于兩筆交易花費相同的硬幣,所以只有其中之一可以包含在區(qū)塊鏈中。如果Alice成功的在區(qū)塊鏈中將付款包含在自己的地址中,那么她支付Bob的交易是無用的,因為它永遠(yuǎn)不會被包含在區(qū)塊鏈中。
圖2.2雙重支付嘗試 Alice創(chuàng)造了兩個交易:一個是她發(fā)送比特幣給Bob,另一個是她通過發(fā)送到她控制的不同地址來雙重支付這些比特幣。當(dāng)他們花費相同的比特幣時,這些交易中只有一個可以包含在區(qū)塊鏈中。箭頭中是從一個區(qū)塊到前一個區(qū)塊的指針,其擴展在它自己的內(nèi)容中包含前一個區(qū)塊的哈希。Ca用于表示Alice擁有的硬幣。
我們怎么知道這個雙重支付的嘗試是否會成功?這取決于哪一個區(qū)塊將最終導(dǎo)致長期共識鏈——一個與Alice→Bob交易或一個與Alice→Alice交易。什么決定哪個區(qū)塊將被包含進(jìn)去?誠實節(jié)點遵循延長最長有效分支的政策,那么分支機構(gòu)將擴展哪一個?這沒有正確的答案!在這一點上,兩個分支擁有相同的長度——它們只在最后一個區(qū)塊中有所不同同,而這兩個區(qū)塊都是有效的。選擇下一個區(qū)塊的節(jié)點可能決定在其中一個區(qū)塊上進(jìn)行構(gòu)建,然后,這個選擇將在很大程度上決定雙重支付是否能夠成功。
一個微妙的觀點:從道德的角度來看,包含支付給Bob的交易的區(qū)塊和包含Alice將這些硬幣花費到自己地址的交易的區(qū)塊之間有明顯的區(qū)別。但是,這個區(qū)別只是基于我們對Alice首先支付Bob,并試圖雙重支付的故事的了解。然而,從技術(shù)角度來看,這兩個交易完全相同,兩個區(qū)塊同樣有效。正在看這一點的節(jié)點確實無法告訴我們哪個是合乎道德的合法交易。
在實踐中,節(jié)點通常遵循擴展它們在對等網(wǎng)絡(luò)中首先聽到的區(qū)塊的啟發(fā)式方法。但是,這不是一個可靠的規(guī)則。在任何情況下,由于網(wǎng)絡(luò)延遲,可能很容易的是,節(jié)點首先聽到的區(qū)塊實際上是第二個創(chuàng)建的區(qū)塊。因此,至少有一些機會,下一個獲得提議區(qū)塊的節(jié)點將擴展包含雙重支付的區(qū)塊。Alice還可以進(jìn)一步嘗試通過賄賂下一個節(jié)點來增加這種情況發(fā)生的可能性。如果下一個節(jié)點以任何原因構(gòu)建在雙重支付區(qū)塊上,那么這個鏈現(xiàn)在將比包含Bob交易的那個鏈長。此時,下一個誠實節(jié)點更有可能繼續(xù)在這條鏈上構(gòu)建,因為它更長。這個過程將會持續(xù)下去,包含雙重支付的區(qū)塊將越來越有可能成為長期共識鏈的一部分。另一方面,包含與Bob交易的區(qū)塊被網(wǎng)絡(luò)完全忽略,現(xiàn)在稱之為孤立區(qū)塊。
現(xiàn)在讓我們從Bob——商人的角度重新考慮這個整體情況。了解Bob如何保護(hù)自己免受這種雙重支付攻擊是理解Bitcoin安全性的關(guān)鍵部分。當(dāng)Alice廣播代表她付給Bob的交易時,Bob正在網(wǎng)絡(luò)上收聽,甚至在下一個塊被創(chuàng)建之前聽到關(guān)于這個事務(wù)的消息。如果Bob比我們之前描述的更愚蠢,他可以在網(wǎng)站上完成結(jié)賬過程,并允許Alice在當(dāng)時下載軟件。這被稱為零確認(rèn)交易。這導(dǎo)致了比之前描述的更多更基本的雙重支付攻擊。以前,為了進(jìn)行雙重支付攻擊,我們不得不假設(shè)一個惡意參與者控制提議的下一個區(qū)塊的節(jié)點。但是如果Bob允許Alice在交易接收到區(qū)塊鏈上的單個確認(rèn)之前下載軟件,則Alice可以立即廣播雙重支付交易,而誠實節(jié)點可能將其包含在下一個區(qū)塊中,而不是支付Bob的交易。
圖2.3 Bob商人的觀點 這是Alice從Bob商人的角度看的雙重支付攻擊
為了保護(hù)自己免受此攻擊,Bob應(yīng)該等到Alice支付給他的交易包含在區(qū)塊鏈中,并且有幾個確認(rèn)后再交易。
另一方面,即使交易被包含在一個區(qū)塊中,一個謹(jǐn)慎的商人不會將該軟件發(fā)布給Alice,并將繼續(xù)等待。如果Bob看到Alice成功地發(fā)動了雙重支付攻擊,他意識到包含Alice對他支付的那塊已經(jīng)被孤立了。他應(yīng)該放棄交易,不讓Alice下載軟件。相反,盡管發(fā)生了雙重支付攻擊這種情況,接下來的幾個節(jié)點將Alice→Bob的交易創(chuàng)建在區(qū)塊上,Bob將獲得這一交易將在長期共識鏈上創(chuàng)建的信心。
一般來說,一個交易得到的確認(rèn)越多,就越有可能在長期共識鏈上。回想一下,誠實節(jié)點的行為總是擴展它們看到的最長的有效分支。包含雙重支付的較短分支趕上更長分支的機會變得越來越小,因為長分支比任何其他分支長得多。如果只有少數(shù)節(jié)點是惡意的,這一點尤其如此——對于較短的分支要迎頭趕上,必須連續(xù)挑選幾個惡意節(jié)點。
事實上,雙重支付的概率隨著確認(rèn)的數(shù)量呈指數(shù)下降。那么,如果你感興趣的交易已經(jīng)收到K確認(rèn),那么雙重支付交易出現(xiàn)在長期共識鏈上的概率指數(shù)下降為k的函數(shù)。在比特幣生態(tài)系統(tǒng)中使用的最常見的啟發(fā)式是等待六次確認(rèn)。數(shù)字六并沒有什么特別的。這僅僅是一個很好的,在你等待的時間和保證你感興趣的交易最終出現(xiàn)在共識區(qū)塊鏈上的折衷方案。
總而言之,防范無效的交易是完全加密的。但它是以共識的方式執(zhí)行的,這意味著如果一個節(jié)點嘗試包含一個加密無效的交易,則交易不會在長期共識鏈中最終出現(xiàn)的唯一原因是因為大部分節(jié)點是誠實的且不會將無效交易包含在區(qū)塊鏈中。另一方面,防止雙重支付也純粹是共識的。密碼學(xué)對此毫無意義,兩個代表雙重支付嘗試的交易從加密的角度來看都是有效的。但是,共識性決定了哪一個最終將在長期共識鏈上。最后,你永遠(yuǎn)不會百分之百地確定你感興趣的交易是在共識分支上。但是,這個指數(shù)概率保證是相當(dāng)好的,經(jīng)過約六次交易,幾乎沒有出錯的機會。
2.4獎勵和工作證明
在上一節(jié)中,我們對Bitcoin的共識性算法進(jìn)行了基本的了解,并解釋了為什么我們相信它安全是一個很好的自覺。但從本章開始的地方回想起來,Bitcoin的分布化部分是技術(shù)性機制,部分是聰明的激勵工程。到目前為止,我們主要關(guān)注的是技術(shù)機制。現(xiàn)在讓我們談?wù)勗贐itcoin上發(fā)生的激勵工程。
我們要求你早日實現(xiàn)信念的飛躍在假設(shè)我們能夠選擇一個隨機節(jié)點,也許更成問題的是,至少有50%的時間,這個過程會挑選一個誠實的節(jié)點。這種誠實的假設(shè)是特別有問題的,如果有資金鼓勵參與者顛覆這個過程,在這種情況下,我們不能真的假定一個節(jié)點將是誠實的。那么問題就變成了:我們能給節(jié)點一個誠實行為的激勵嗎?
再次考慮確認(rèn)一次后的雙重支付攻擊(圖2.3)我們可以以某種方式懲罰創(chuàng)建包含雙重支付交易的節(jié)點嗎?嗯,這不是真的。正如我們前面提到的,很難知道哪個是道義上合法的交易。但即使我們這樣做了,由于沒有身份,仍然很難懲罰節(jié)點。所以反過來,讓我們把問題拋到一邊,問我們可以獎勵那些創(chuàng)建了長期共識鏈最終區(qū)塊的節(jié)點嗎?那么,再一次,由于這些節(jié)點沒有透露他們的真實身份,我們不能把他們的現(xiàn)金郵寄到他們的家庭住址。如果有某種數(shù)字貨幣,我們可以用它來代替…你可能會看到這是怎么回事。我們將使用Bitcoin獎勵創(chuàng)建了這些區(qū)塊的節(jié)點。
我們先暫停一會。我們迄今為止所描述的一切只是一種實現(xiàn)分布式共識的抽象算法,它并不是特定于哪個應(yīng)用。現(xiàn)在我們要突破這個模式,我們將使用這樣一個事實,即我們通過這種分布式共識過程構(gòu)建的應(yīng)用實際上是一種貨幣。具體來說,我們將通過支付這種貨幣單位來鼓勵節(jié)點表現(xiàn)誠實的態(tài)度。
區(qū)塊獎勵 這怎么做?Bitcoin有兩種獨立的激勵機制。第一個是區(qū)塊獎勵。根據(jù)Bitcoin的規(guī)則,創(chuàng)建區(qū)塊的節(jié)點將在該區(qū)塊中包含一個特殊交易。這個交易是一個硬幣創(chuàng)建交易,類似于Scroogecoin中的CreateCoins,節(jié)點也可以選擇此交易的收件人地址。當(dāng)然,該節(jié)點通常會選擇屬于自己的地址。你可以獎此視為對節(jié)點的支付,以換取在共識鏈上創(chuàng)建區(qū)塊的服務(wù)。
在撰寫本文時,區(qū)塊獎勵的價值固定為25Bitcoin。但實際上,每隔21萬個區(qū)塊就減半。根據(jù)我們即將看到的區(qū)塊創(chuàng)建速度,這意味著大概每四年下降一次。我們現(xiàn)在處于第二個時期。Bitcoin存在的頭四年,區(qū)塊獎勵的是50個Bitcoin,現(xiàn)在是25個。它將要保持減半的速率。我們很快就會看到,這有一些有趣的意義。
你可能想知道為什么區(qū)塊獎勵誠實的行為。根據(jù)我們迄今為止所說的,可能會出現(xiàn)無論節(jié)點是提議有效的區(qū)塊還是惡意行為,這個節(jié)點都會獲得區(qū)塊獎勵。但是,這是錯誤的!想一想——這個節(jié)點怎么“收集”它的獎勵?只有在有爭議的區(qū)塊結(jié)束于長期共識分支的情況下才會發(fā)生這種情況,因為就像其他所有交易一樣,只有最終達(dá)成共識鏈,硬幣創(chuàng)建的交易才會被其他節(jié)點接受。這是激勵機制背后的核心理念。這是一個非常微妙但異常強大的技巧。它激勵節(jié)點以任何他們認(rèn)為將獲得其他節(jié)點來擴展它們的區(qū)塊的方式來表現(xiàn)(活動)。因此,如果大多數(shù)網(wǎng)絡(luò)遵循最長的有效分支規(guī)則,則會激勵所有節(jié)點繼續(xù)遵循該規(guī)則。這是Bitcoin的第一個激勵機制。
我們提到,每隔21萬個區(qū)塊(或大約四年),區(qū)塊獎勵減半。在圖2.4中,該曲線的斜率要減半。這是一個幾何級數(shù),你可能知道它意味著有一個有限和。它計算出來共計2100萬Bitcoin。
圖2.4 區(qū)塊獎勵每四年減半,將比特幣的總供應(yīng)量限制在2100萬
值得注意的是,這是允許創(chuàng)建新比特幣的唯一途徑。沒有其他硬幣產(chǎn)生機制,這就是為什么2100萬是有多少比特幣可以存在的一個最終和總數(shù)(至少按照現(xiàn)在的規(guī)則)。這個新的區(qū)塊創(chuàng)建獎勵實際上將在2140年用完,就像現(xiàn)在一樣。這是否意味著系統(tǒng)將在2140年停止工作,變得不完全,因為節(jié)點不再有誠實行為的動機?不完全是。區(qū)塊獎勵只是比特幣的兩個激勵機制中的第一個。
交易費用第二種激勵機制被稱為交易費。任何交易的創(chuàng)建者都可以選擇使交易輸出的總值小于其輸入的總值。無論是誰創(chuàng)建的區(qū)塊,首先將交易嵌入到區(qū)塊鏈中去收集差額,這將扮演交易費用。所以,如果你是一個創(chuàng)建一個包含200個交易區(qū)塊的節(jié)點,那么所有這200個交易費用的總和將被支付給你放入該區(qū)塊的地址。交易費純粹是自愿的,但我們預(yù)計,根據(jù)對系統(tǒng)的了解,隨著區(qū)塊獎勵開始消耗殆盡,對于用戶來說,為了獲得合理的服務(wù)質(zhì)量,包含交易費用將變得越來越重要,幾乎是強制性的。在一定程度上,這已經(jīng)開始發(fā)生了。但目前尚不清楚系統(tǒng)將如何演變;這真的取決于很多還沒有完全解決的游戲理論。這是比特幣公開研究的一個有趣的領(lǐng)域。
我們描述的共識機制仍然存在一些問題。第一個主要的是信念的飛躍,我們要求你采取某種方式,使我們可以選擇一個隨機節(jié)點。第二,我們創(chuàng)造了一個新的問題,讓節(jié)點參與這些激勵。該系統(tǒng)可能會變得不穩(wěn)定,因為激勵導(dǎo)致對于所有人都能免費地運行比特幣節(jié)點,每一個人都希望去運行來捕獲這些獎勵。第三個是一個更棘手的版本問題,一個對手可能會創(chuàng)建大量的Sybil節(jié)點來嘗試顛覆共識過程。
采礦和工作證明事實證明,所有這些問題都是相關(guān)的,所有這些問題都有相同的解決方案,這就是所謂的工作證明。工作證明背后的關(guān)鍵思想是,我們通過選擇與資源成比例的節(jié)點來近似選擇隨機節(jié)點,同時我們希望沒有人可以壟斷。例如,如果這個資源是計算能力,那么它就是一個工作系統(tǒng)證明。或者,它可能與貨幣的所有權(quán)成比例,這就是所謂的股權(quán)證明。雖然它不在比特幣中使用,但股權(quán)證明是一個合法的替代模型,它用于其他加密貨幣。我們將在第8章中看到關(guān)于股權(quán)證明和其他工作證明變體的更多信息。
回到工作證明。讓我們嘗試更好地了解根據(jù)計算能力按比例選擇節(jié)點的含義。理解這種情況的另一種方法是,我們允許節(jié)點通過使用其計算能力相互競爭,這將導(dǎo)致節(jié)點以該比例自動選擇。另一種工作證明的觀點是,我們正在適度地創(chuàng)造新的身份。這對身份創(chuàng)造是一種征稅,因此對Sybil的攻擊也是一種負(fù)擔(dān)。 這可能看起來有點模糊,所以讓我們來看看Bitcoin中使用的工作系統(tǒng)證明的細(xì)節(jié),這應(yīng)該使事情變得更加清晰。
比特幣使用哈希謎題實現(xiàn)工作證明。為了創(chuàng)建一個區(qū)塊,建議該區(qū)塊的節(jié)點需要找到一個數(shù)字,或者是隨機數(shù),這樣當(dāng)你連接了隨機數(shù),先前的哈希和包含該區(qū)塊的交易列表,采用這整個字符串的哈希,那么哈希輸出應(yīng)該是一個數(shù)字,它落入一個相對于該哈希函數(shù)大得多的輸出空間的相當(dāng)小的目標(biāo)空間。我們可以將這樣的目標(biāo)空間定義為低于某個目標(biāo)值的任何值。在這種情況下,隨機數(shù)必須滿足以下不等式:
H(nonce || prev_hash || tx || tx || ... || tx)
正如我們前面看到的,通常一個區(qū)塊包含節(jié)點提出的一系列交易。另外,一個區(qū)塊還包含一個指向前一個區(qū)塊(我們松散地使用哈希指針術(shù)語。這個指針在這個上下文中只是一個字符串,因為它不需要告訴我們在哪里找到這個區(qū)塊。我們將通過向網(wǎng)絡(luò)上的其他對等端查詢該區(qū)塊。重要的部分是在請求區(qū)塊的其他對等端時哈希作為一個ID,一旦我們獲得了該區(qū)塊,我們就可以驗證該區(qū)塊)的哈希指針。此外,我們現(xiàn)在要求一個區(qū)塊也包含一個隨機數(shù)。這個想法是,我們希望適度難的找到滿足這個必須屬性的隨機數(shù),就是將整個區(qū)塊哈希在一起,包括該隨機數(shù),這將導(dǎo)致特定類型的輸出。如果哈希函數(shù)滿足第1章中的謎題友好的屬性,那么成功解決這個哈希謎題的唯一方法就是一個接一個地嘗試足夠多的隨機數(shù),直到你幸運地得到它。具體地說,如果這個目標(biāo)空間只占整體輸出空間的百分之一,那么你必須在你得到幸運之前嘗試100個隨機數(shù)。實際上,這個目標(biāo)空間的大小幾乎不到輸出空間的百分之一。它比我們稍后看到的要小得多。
這種哈希謎題和工作證明的概念完全不需要神奇地選擇一個隨機節(jié)點。相反,節(jié)點一直簡單獨立地競爭,以解決這些散列謎題。有一段時間,其中一個節(jié)點將會幸運地找到一個滿足這個屬性的隨機數(shù)。那個幸運的節(jié)點隨后就提議下一個區(qū)塊。這就是系統(tǒng)完全分散化的原因。沒有人決定是哪個節(jié)點提議下一個區(qū)塊。
難以計算哈希謎題有三個重要的屬性。第一個是他們需要很難計算。我們說適當(dāng)?shù)碾y度,你會明白為什么這個隨著時間會有所變化。截止2014年年底,每個區(qū)塊的難度級別為10個哈希。換句話說,目標(biāo)空間的大小只是哈希函數(shù)輸出空間大小的1/10。這是一個很大的計算量——例如,對于商用筆記本電腦來說,這是不可能的。因此,只有一些節(jié)點甚至勞神地在這個區(qū)塊創(chuàng)建過程中競爭。這個反復(fù)嘗試和解決這些哈希謎題的過程被稱為比特幣挖礦,我們稱之為參與節(jié)點的礦工。盡管技術(shù)上任何人都可以稱為礦工,但由于采礦成本高,采礦生態(tài)系統(tǒng)中的權(quán)力很集中。
參數(shù)化成本第二個屬性是我們希望成本是可參數(shù)化的,而不是所有時間的固定成本。實現(xiàn)的方式是,比特幣對等網(wǎng)絡(luò)中的所有節(jié)點將自動重新計算目標(biāo),即目標(biāo)空間的大小,作為每個2016塊的輸出空間的一小部分。他們重新計算目標(biāo),使得比特幣網(wǎng)絡(luò)中產(chǎn)生的連續(xù)區(qū)塊之間的平均時間約為10分鐘。平均間隔時間為10分鐘,2016塊區(qū)塊的工作時間為兩周。換句話說,目標(biāo)的重新計算大概每兩周發(fā)生一次。
我們來想想這是什么意思。如果你是一個礦工,而且你已經(jīng)將一定數(shù)量的硬件投入比特幣礦業(yè),但整體采礦生態(tài)系統(tǒng)正在增長,更多的礦工正在進(jìn)軍,或者他們正在部署更快的硬件,這意味著在兩個星期的時間里,比預(yù)期的區(qū)塊要多一些。因此,節(jié)點將自動重新調(diào)整目標(biāo),并且你能夠找到一個區(qū)塊需要做的工作量將會增加。所以如果你投入固定的硬件投資,你發(fā)現(xiàn)區(qū)塊的速度實際上取決于其他礦工在做什么。有一個非常好的公式來捕獲這一點,這就是說,任何給定的礦工Alice將要贏得下一個區(qū)塊的概率相當(dāng)于她控制的全局哈希能力的百分比。這意味著如果Alice的采礦硬件占總哈希能力的大約百分之零點一,那么每1000個區(qū)塊中大約會有一個區(qū)塊被她發(fā)現(xiàn)。
這次調(diào)整的目的是什么?為什么要保持這個10分鐘的不變量?原因很簡單。如果區(qū)塊之間的距離非常接近,那么會有很多低效率,我們將失去在一個區(qū)塊中放置大量交易的優(yōu)化優(yōu)勢。對于數(shù)字10,沒有什么神奇的,如果你想從10分鐘降到5分鐘,那可能會很好。有很多關(guān)于山寨幣或其他加密貨幣應(yīng)該具有的理想塊延遲有很多討論。但是,盡管對理想的延遲有一些分歧,但每個人都同意應(yīng)該是一個固定的數(shù)額。它不能被允許沒有限制的下降。這就是為什么我們有自動目標(biāo)重新計算功能的原因。
這種成本函數(shù)和工作證明的設(shè)置方式使我們能夠重新構(gòu)建我們的安全假設(shè)。在這里,我們終于擺脫了我們要求你早些時候采取的最后的信念飛躍。而不是不知何故地說,大多數(shù)甚至沒有身份,也不清楚那意味著什么的節(jié)點在上下文中都是誠實的,我們現(xiàn)在可以爽快地聲明,如果大多數(shù)礦工遵照協(xié)議或者誠實的通過哈希加權(quán),比特幣的很多攻擊是不可行的。這是真的,因為如果大多數(shù)被哈希加權(quán)的礦工都是誠實的,則提議下一個區(qū)塊的競爭將自動確保至少有50%的機會在任何時候提出的下一個區(qū)塊來自一個誠實的節(jié)點。
邊欄在分布式系統(tǒng)和計算機安全性的研究領(lǐng)域,通常假設(shè)有一定百分比的節(jié)點是誠實的來表明系統(tǒng)的工作原理,即使其他節(jié)點的行為是任意的。這基本上是我們在這里所采取的方法,除了我們通過哈希加權(quán)計算節(jié)點的多數(shù)。原始的比特幣白皮書對這種類型也有分析。
但博弈論領(lǐng)域提供了一個完全不同的,可以說是更為復(fù)雜,更為現(xiàn)實的方式來確定系統(tǒng)的行為方式。在這種觀點下,我們不會講節(jié)點分解為誠實的和惡意的。相反,我們假設(shè)每個節(jié)點根據(jù)它的獎勵來行動。每個節(jié)點選擇一個(隨機)策略以最大化其收益,同時考慮到其他節(jié)點的潛在策略。如果協(xié)議和激勵設(shè)計的很好,那么大多數(shù)節(jié)點絕大多數(shù)時候都遵循這些規(guī)則。“誠實”的行為只是許多人的一個策略,我們沒有特別的道德觀念。
在博弈論的觀點中,最大的問題是默認(rèn)的礦工行為是否是“納什均衡”,也就是說,它是否代表了一個穩(wěn)定的情況,即礦工不能通過偏離誠實的行為來實現(xiàn)最高的回報。這個問題仍然是存有爭議的,也是一個積極的研究領(lǐng)域。
解決哈希謎題是概率性的,因為沒有人可以預(yù)測哪個隨機數(shù)能解決哈希謎題。唯一的辦法是一個接一個地嘗試隨機數(shù),希望一個能成功。在數(shù)學(xué)上,這個過程被稱為伯努利試驗。伯努利試驗是一個具有兩個可能結(jié)果的實驗,每個結(jié)果發(fā)生的概率在連續(xù)試驗中是固定的。這里,兩個輸出結(jié)果就是哈希是否落在目標(biāo)中,并假定哈希函數(shù)的行為像一個隨機函數(shù),這些輸出結(jié)果的概率是固定的。通常,節(jié)點嘗試伯努利試驗的許多隨機數(shù),一個離散的概率過程,可以很好地被連續(xù)概率過程近似地稱為泊松過程,過程中所發(fā)生的事件以恒定的平均速率獨立發(fā)生。所有這些的最終結(jié)果是,顯示找到下一個區(qū)塊的時間的相對可能性的概率密度函數(shù)如圖2.5所示。
圖2.5發(fā)現(xiàn)下一個區(qū)塊的時間的概率密度函數(shù)
這被稱為指數(shù)分布。有一個很小的可能性,如果一個區(qū)塊現(xiàn)在被發(fā)現(xiàn),下一個區(qū)塊將在幾秒鐘或一分鐘之內(nèi)被發(fā)現(xiàn)。而且還有一些很小的可能性,要花一個較長的時間,比如說一個小時,才能找到下一個區(qū)塊。但總的來說,網(wǎng)絡(luò)會自動調(diào)整難度,以便區(qū)塊的間隔時間長期維持在一個平均時間——10分鐘。請注意,圖2.5顯示了整個網(wǎng)絡(luò)創(chuàng)建區(qū)塊的頻率,不關(guān)心哪個礦工真正找到區(qū)塊。
如果你是一個礦工,你可能對花多長時間才能找到一個區(qū)塊感興趣。這個概率密度函數(shù)是怎么樣的?它將具有相同的形狀,但它只是在x軸上將具有不同的刻度。再次,它可以用一個很好的方程表示。
對于特定的礦工:
如果你擁有全網(wǎng)絡(luò)0.1%的哈希能力,這個方程式告訴我們,你將每隔10000分鐘找到一個區(qū)塊,這只需要一個星期。不僅你們之間區(qū)塊的平均時間是非常高的,而且你發(fā)現(xiàn)的區(qū)塊之間的時間差異也將非常高。這有一些重要的后果,我們將在第5章中看到。
簡單的驗證
現(xiàn)在讓我們看看這個工作證明函數(shù)的第三個重要屬性,即驗證一個節(jié)點是否正確計算了工作證明是微不足道的。即使它需要一個節(jié)點,平均來說,10嘗試找到一個使區(qū)塊哈希落在目標(biāo)下的隨機數(shù),該隨機數(shù)必須作為區(qū)塊的一部分發(fā)布。因此,任何其他節(jié)點都可以查看區(qū)塊內(nèi)容,將它們?nèi)抗T谝黄穑Ⅱ炞C輸出是否小于目標(biāo)。這是一個相當(dāng)重要的財產(chǎn),因為它再次允許我們擺脫集權(quán)。我們不需要任何集中的權(quán)力來驗證礦工正在做正確的工作。任何節(jié)點或任何礦工都可以立即驗證另一個礦工發(fā)現(xiàn)的區(qū)塊是否符合工作性能證明。
2.5把一切放在一起
開采成本現(xiàn)在讓我們來看看礦業(yè)經(jīng)濟學(xué)。我們提到作為一個礦工經(jīng)營相當(dāng)昂貴。在目前的困難水平上,找到一個單獨的區(qū)塊需要大約10個哈希的計算能力,區(qū)塊獎勵大約是25比特幣,這在當(dāng)前的匯率下是一筆可觀的金額。這些數(shù)字可以輕松計算一個人是否有利可圖,我們可以用簡單的語句來獲得這個決定:
假如
挖礦獎勵>挖礦成本
礦工盈利
當(dāng)
挖礦獎勵=區(qū)塊獎勵 交易費用
挖礦成本=硬件投入 運營成本(電力,冷卻,等等.)
從根本上來說,礦工獲得的礦業(yè)獎勵是按照區(qū)塊獎勵和交易費來計算的。礦工問自己如何與總支出(硬件和電費)進(jìn)行比較。
但是,這個簡單方程式有一些復(fù)雜。首先,你可能已經(jīng)注意到,硬件成本是固定成本,而電費是隨時間推移的可變成本。另一個復(fù)雜的因素是,礦工獲得的獎勵取決于他們發(fā)現(xiàn)區(qū)塊的速率,這不僅取決于硬件的能力,還取決于他們的哈希率與全局哈希率的比值。第三個復(fù)雜因素是,礦工的成本通常以美元或其他傳統(tǒng)貨幣計價,但他們的報酬是用比特幣計算的。所以這個方程在任何給定的時間都有比特幣匯率的隱藏依賴。最后,到目前為止,我們假設(shè)礦工有興趣誠實地遵守協(xié)議。但礦工可能會選擇使用其他一些采礦策略,而不是總是試圖延長最長的有效分支。所以這個方程式并沒有抓住礦工可以采用的不同策略的所有細(xì)微差別。實際上,分析它是否有意義的是一個不容易回答的復(fù)雜的博弈論問題。
在這一點上,我們已經(jīng)很好地理解了比特幣是如何實現(xiàn)分散化的。現(xiàn)在我們將再回顧一下高層次的觀點,把它們放在一起,以便更好的理解。
讓我們從身份開始吧。據(jù)我們所知,參與比特幣協(xié)議并不需要現(xiàn)實世界的身份。任何用戶都可以隨時創(chuàng)建任意數(shù)量的假名密鑰對。當(dāng)Alice想在比特幣中支付Bob時,比特幣協(xié)議并未提及Alice如何得知Bob的地址。給定這些假名密鑰對以身份,交易基本上是廣播到比特幣對等網(wǎng)絡(luò)的消息,這些消息是將硬幣從一個地址傳送到另一個地址的指令。比特幣只是交易輸出,我們將在下一章中更詳細(xì)地討論這一點。
邊欄比特幣沒有像美元這樣的固定面額,特別是沒有“1比特幣”的特殊名稱。比特幣只是交易輸出,而在當(dāng)前的規(guī)則中,它們可以具有8位小數(shù)位精度的任意值。最小可能值為0.00000001BTC(比特幣),稱為1中本聰。
比特幣對等網(wǎng)絡(luò)的目標(biāo)是將所有新交易和新區(qū)塊傳播到所有比特幣對等節(jié)點。但是網(wǎng)絡(luò)是非常不完善的,并且盡最大努力來傳遞這些信息。系統(tǒng)的安全性不是來自于對等網(wǎng)絡(luò)的完善。相反,安全來自于本章大部分章節(jié)研究的區(qū)塊鏈和共識協(xié)議。
當(dāng)我們說一個交易被包含在區(qū)塊鏈中時,我們真正的意思是交易已經(jīng)取得了大量的確認(rèn)。在我們充分相信其包含之前,沒有固定的數(shù)字來定義需要多少確認(rèn)是必要的,但是六個是一種常用的啟發(fā)式。交易獲得的確認(rèn)越多,你可以更確定此交易是共識鏈的一部分。經(jīng)常會有孤兒區(qū)塊或區(qū)塊不能進(jìn)入共識鏈。有各種各樣的原因可能導(dǎo)致區(qū)塊成為孤兒區(qū)塊。該區(qū)塊可能包含無效的交易或雙重支付的嘗試。它也可能只是網(wǎng)絡(luò)延遲的結(jié)果。也就是說,兩個礦工可能只相差幾秒鐘之內(nèi)找到新的區(qū)塊。所以這兩個區(qū)塊幾乎同時廣播到網(wǎng)絡(luò)上,其中一個將不可避免地被孤立。
最后,我們看看哈希謎題和挖礦。礦工是特殊類型的節(jié)點,他們決定在這場創(chuàng)建新區(qū)塊的游戲中競爭。只要其他礦工建立在他們的區(qū)塊上,他們就會獲得新造幣比特幣(新區(qū)塊獎勵)和現(xiàn)有比特幣(交易費)的獎勵。一個微妙但至關(guān)重要的一點:說Alice和Bob是兩個不同的礦工,Alice的計算能力是Bob的100倍。這并不意味著Alice將永遠(yuǎn)贏得比賽,找到下一個區(qū)塊。相反,Alice和Bob找到下一個塊的概率,基本符合100比1的比例。從長遠(yuǎn)來看,Bob平均發(fā)現(xiàn)區(qū)塊的數(shù)量是Alice的百分之一。
我們預(yù)計礦工通常會處于靠近經(jīng)濟均衡的地步,在這個意思上,它們在硬件和電力方面的支出大致等于他們獲得的回報。原因是如果礦工一直虧損,她可能會停止采礦。另一方面,對比采礦硬件和電力成本,如果采礦非常有利可圖,則采礦硬件將進(jìn)入網(wǎng)絡(luò)。哈希率的增加將導(dǎo)致難度增加,每個礦工的預(yù)期獎勵將會下降。
這種分布式共識的概念滲透到比特幣相當(dāng)深層次。在傳統(tǒng)貨幣中,共識確實在一定程度上發(fā)揮作用。具體來說,由一個共識程序決定了貨幣的匯率。在比特幣的世界也是如此;我們需要對比特幣的價值達(dá)成共識。但是在比特幣方面,另外,我們需要對分類賬的狀態(tài)達(dá)成共識,這就是靠區(qū)塊鏈來實現(xiàn)的。換句話說,即使你擁有再多比特幣賬戶,也要達(dá)成共識。當(dāng)我們說Alice擁有一定數(shù)額或數(shù)量的比特幣時,我們實際上意味著,在比特幣對等網(wǎng)絡(luò),如在區(qū)塊鏈中記錄的那樣,考慮所有Alice地址擁有比特幣數(shù)量的總和。這是比特幣真實性的本質(zhì):比特幣的所有權(quán)只不過是其他節(jié)點同意給定的一方擁有這些比特幣。
最后,我們需要對系統(tǒng)的規(guī)則達(dá)成共識,因為偶爾,系統(tǒng)的規(guī)則必須改變。比特幣的規(guī)則有兩種類型的變化,分別被稱為軟叉和硬叉。我們將把這些差異的討論推遲到后面的章節(jié),我們將詳細(xì)討論這些差異。
獲取一個加密的外來物品。另一個微妙的概念是引導(dǎo)。比特幣的三個不同想法之間存在棘手的相互作用:區(qū)塊鏈的安全性,采礦生態(tài)系統(tǒng)的健康狀況以及貨幣的價值。我們顯然希望區(qū)塊鏈可以保證比特幣成為一種可行的貨幣。為了使區(qū)塊鏈得到安全,對手必須無法壓倒共識程序。這反過來意味著對手不能創(chuàng)建大量的采礦節(jié)點,占據(jù)新區(qū)塊創(chuàng)建的50%或更多。
但是什么時候會實現(xiàn)呢?一個先決條件是擁有一個健康的采礦生態(tài)系統(tǒng),由大量誠實的協(xié)議跟隨節(jié)點組成。但是,這是一個前提條件——我們什么時候可以確定很多礦工會把很多的計算能力投入到這個解決哈希謎題的競爭中呢?那么,如果比特幣的匯率相當(dāng)高,那么他們只可能這樣做,因為他們收到的回報是以比特幣計算的,而他們的支出則是美元。因此,貨幣的價值越高,這些礦工的競爭將會越激烈。
但是什么能確保貨幣的高價值和穩(wěn)定的價值呢?這只有在一般用戶都信任區(qū)塊鏈的安全性的情況下才會發(fā)生。如果他們認(rèn)為網(wǎng)絡(luò)可能在任何時候被攻擊者淹沒,那么比特幣作為貨幣就不會有很大的價值。所以在區(qū)塊鏈的安全性,健康的采礦生態(tài)系統(tǒng)和匯率之間有這種互相依賴、相互依存的關(guān)系。
由于這種三向依賴的自然循環(huán),每一種的存在取決于其他方面的存在。當(dāng)比特幣第一次被創(chuàng)造時,這三個都不存在。除了Nakamoto自己經(jīng)營采礦軟件之外,沒有其他礦工。比特幣作為一種貨幣沒有很多價值。事實上,這個區(qū)塊鏈?zhǔn)遣话踩模驗闆]有大量的采礦工作,任何人都可以輕而易舉地完成這個過程。
比特幣是如何從沒有任何這些屬性到擁有所有的三個的,這沒有一個簡單的解釋。媒體的關(guān)注是故事的一部分——越多人聽到比特幣,他們對采礦的興趣就越大。他們對采礦越感興趣,人們對區(qū)塊鏈的安全性就越有信心,因為現(xiàn)在有更多的采礦活動在進(jìn)行,等等。順便說一句,每個想要成功的新的Altcoin也都必須以某種方式來解決這個由自舉引起的問題。
51%的攻擊最后,讓我們考慮一下如果共識失敗會發(fā)生什么,比如,實際上51%的攻擊者控制了Bitcoin網(wǎng)絡(luò)中的51%或以上的采礦能力。我們會考慮各種可能的攻擊,看看這些攻擊者實際上可以執(zhí)行哪些攻擊。
首先,這個攻擊者可以從現(xiàn)有的地址竊取硬幣嗎?你可能已經(jīng)猜到了,答案是否定的,因為除非你顛覆了加密技術(shù),否則從現(xiàn)有的地址竊取是不可能的。僅僅顛覆共識進(jìn)程是不夠的。這并不完全明顯。假設(shè)51%的攻擊者創(chuàng)建一個無效的區(qū)塊,它包含一個無效的交易,代表從攻擊者不會控制的現(xiàn)有地址中竊取Bitcoins,并將其轉(zhuǎn)移到自己的地址。攻擊者可以假裝這是一個有效的交易,并繼續(xù)在這個區(qū)塊上建立新的區(qū)塊。攻擊者甚至可以成功地使其成為最長的分支。但是其他誠實的節(jié)點根本不會接受這個無效交易的區(qū)塊,并且將繼續(xù)基于他們在網(wǎng)絡(luò)中找到的最后一個有效區(qū)塊進(jìn)行挖掘。那么,將會發(fā)生的是,出現(xiàn)我們稱之為鏈中的分叉。
現(xiàn)在,從攻擊者試圖花費這些無效硬幣的角度來想象這一點,并將其發(fā)送給一些商人比如Bob作為某些商品或服務(wù)的支付方式。Bob自己可能運行一個比特幣節(jié)點,它將是一個誠實的節(jié)點。Bob的節(jié)點將拒絕該分支并將其視為無效,因為它包含無效的交易。它是無效的,因為簽名沒有簽出。所以Bob的節(jié)點將簡單地忽略最長的分支,因為它是一個無效的分支。因此,顛覆共識是不夠的。你必須顛覆加密技術(shù)來竊取比特幣。所以我們得出結(jié)論,51%的攻擊者進(jìn)行這個攻擊是不可能的。
我們應(yīng)該注意,這只是一個思想實驗。實際上,如果有51%的攻擊跡象,可能會發(fā)生的情況是開發(fā)人員會注意到這一點,并作出反應(yīng)。他們將更新Bitcoin軟件,我們可能期望系統(tǒng)的規(guī)則(包括對等網(wǎng)絡(luò))可能以某種形式發(fā)生變化,從而使此攻擊更難成功。但我們不能很好的進(jìn)行預(yù)測。所以我們在一個發(fā)生了51%的攻擊的簡化模型中工作,但除此之外,系統(tǒng)的規(guī)則沒有任何變化或調(diào)整。
讓我們考慮另一次攻擊。51%的攻擊者可以抑制一些交易嗎?假設(shè)有一些用戶,卡羅爾,攻擊者真的不喜歡他。攻擊者知道卡羅爾的一些地址,并希望確保這些地址中的任何一個硬幣都不可能花費掉。那可能嗎?由于他控制了區(qū)塊鏈的共識過程,攻擊者可以簡單地拒絕創(chuàng)建任何包含卡羅爾地址的交易的新區(qū)塊。攻擊者可以進(jìn)一步拒絕創(chuàng)建基于包含這些事務(wù)的區(qū)塊。然而,他不能阻止這些交易被廣播到對等網(wǎng)絡(luò),因為網(wǎng)絡(luò)不依賴于區(qū)塊鏈或共識,我們假設(shè)攻擊者并沒有完全控制網(wǎng)絡(luò)。攻擊者無法阻止交易到達(dá)大多數(shù)節(jié)點,因此即使攻擊成功,至少攻擊正在發(fā)生也很明顯。
攻擊者可以改變塊獎勵嗎?也就是說,攻擊者可以開始假裝進(jìn)行區(qū)塊獎勵,而不是25比特幣,說100比特幣?這是對系統(tǒng)規(guī)則的更改,并且因為攻擊者不能控制所有誠實節(jié)點正在運行的Bitcoin軟件的副本,這也是不可能的。這類似于攻擊者不能包括無效交易的原因。其他節(jié)點根本無法識別區(qū)塊獎勵的增加,因此攻擊者將無法使用它們。
最后,攻擊者能否以某種方式破壞比特幣的信心?好吧,我們來想象會發(fā)生什么。如果存在各種各樣的雙重支付嘗試,即節(jié)點沒有擴展最長有效分支,以及其他嘗試攻擊的情況,那么人們可能會決定,比特幣不再作為他們可以信任的分散分類帳。人們將會對貨幣失去信心,我們預(yù)計比特幣的匯率將會暴跌。事實上,如果單單知道有一個控制51%哈希能力的組織,那么即使攻擊者不一定要試圖發(fā)動任何攻擊,人們也可能失去對比特幣的信心。所以這不僅是可能的,但實際上可能的是,任何一個51%的攻擊者都會摧毀對貨幣的信心。事實上,如果51%的襲擊能夠?qū)崿F(xiàn),這將是主要的實際威脅。考慮到對手必須投入支出攻擊比特幣并實現(xiàn)51%的大多數(shù),我們所描述的其他攻擊沒有一個從財務(wù)角度來看是真的有意義的。
希望在這一點上,你已經(jīng)真正了解Bitcoin如何實現(xiàn)分權(quán)化。你應(yīng)該對Bitcoin中的身份如何工作,交易如何傳播和驗證,P2P對等網(wǎng)絡(luò)在比特幣中的作用,如何使用區(qū)塊鏈來實現(xiàn)共識以及如何解決哈希謎題和挖掘工作有一個很好的指導(dǎo)。這些概念為理解比特幣的更細(xì)微細(xì)節(jié)和細(xì)微差別提供了堅實的基礎(chǔ)和良好的啟發(fā)點,我們將在下一章中看到。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標(biāo)注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補充。