書名: 解構(gòu)區(qū)塊鏈作者名: 凌力本章字?jǐn)?shù): 6030字更新時(shí)間: 2019-11-15 20:40:00
2.2 比特幣基本概念
比特幣系統(tǒng)的核心是一種區(qū)塊鏈(Blockchain)架構(gòu)。密碼學(xué)技術(shù)的綜合運(yùn)用構(gòu)造出區(qū)塊鏈,比特幣的記賬等功能依靠區(qū)塊鏈來(lái)實(shí)現(xiàn),比特幣運(yùn)行所需要及生成的所有數(shù)據(jù)都記錄在區(qū)塊鏈上。
2.2.1 比特幣區(qū)塊鏈
比特幣區(qū)塊鏈由區(qū)塊(block)和鏈(chain)串聯(lián)構(gòu)成,如圖2.2所示為比特幣區(qū)塊鏈的基本結(jié)構(gòu)。

圖2.2 比特幣區(qū)塊鏈基本結(jié)構(gòu)示意圖
區(qū)塊就是一個(gè)數(shù)據(jù)塊,由區(qū)塊頭(block header)和區(qū)塊體(block body)兩大部分組成。區(qū)塊頭為定長(zhǎng)80字節(jié),用于存放控制信息;區(qū)塊體為可變長(zhǎng)度,用于存放交易記錄。區(qū)塊體與區(qū)塊頭之間存在內(nèi)在的數(shù)字化聯(lián)系,不妨稱之為一種數(shù)據(jù)纏結(jié)(data tangle),對(duì)變化十分敏感,區(qū)塊體內(nèi)容哪怕發(fā)生1比特的改變,區(qū)塊頭都能夠檢驗(yàn)出來(lái)。
鏈?zhǔn)窍噜弮蓚€(gè)區(qū)塊之間的數(shù)據(jù)關(guān)聯(lián)關(guān)系,與區(qū)塊頭、區(qū)塊體之間的數(shù)據(jù)纏結(jié)類似,其作用是當(dāng)上一個(gè)區(qū)塊頭有任何變化,下一個(gè)區(qū)塊頭都可以檢驗(yàn)出來(lái)。以此類推,欲篡改一個(gè)區(qū)塊的內(nèi)容,就必須篡改之后所有區(qū)塊頭,顯然計(jì)算工作量很大,所以越靠前(越早)的區(qū)塊就越安全。
從編號(hào)為0的第一個(gè)區(qū)塊(即創(chuàng)世區(qū)塊)開始,所有區(qū)塊依次以鏈相連,在時(shí)間軸上按序排列,形成唯一的一條區(qū)塊鏈。每經(jīng)過(guò)一個(gè)區(qū)塊生成周期,就生成一個(gè)新的區(qū)塊,區(qū)塊鏈就這樣不斷延長(zhǎng)。比特幣系統(tǒng)規(guī)定了區(qū)塊生成周期為10分鐘左右,之所以不能完全固定時(shí)間,是因?yàn)閰^(qū)塊的生成受到一些不定因素的影響,例如運(yùn)氣。
既然區(qū)塊是用于保存交易記錄的,又采用數(shù)據(jù)纏結(jié)方式固化了內(nèi)容,而且各區(qū)塊順序相連,不妨將比特幣區(qū)塊鏈想象為一本賬本,如圖2.3所示,一個(gè)區(qū)塊就相當(dāng)于一頁(yè),上面記錄了各種資金往來(lái)交易,內(nèi)容不能修改,每頁(yè)都被編上頁(yè)碼,不亂序、不缺頁(yè),然后被牢牢地釘在一起,每過(guò)10分鐘被釘上新的一頁(yè)。

圖2.3 比特幣賬本示意圖
2.2.2 比特幣生成
比特幣系統(tǒng)采用如下規(guī)則生成比特幣:當(dāng)一個(gè)新的區(qū)塊被生成出來(lái)并被檢驗(yàn)無(wú)誤后,系統(tǒng)認(rèn)為由于該區(qū)塊收納了一系列交易記錄,付出了記賬的勞動(dòng),就獎(jiǎng)勵(lì)該區(qū)塊生成者若干數(shù)量的比特幣。因此:
? 比特幣是由系統(tǒng)自動(dòng)生成并發(fā)放的;
? 比特幣是對(duì)記賬有功者的獎(jiǎng)賞;
? 比特幣是隨新的區(qū)塊同步增加的。
比特幣系統(tǒng)初始上線時(shí),隨著每個(gè)區(qū)塊的產(chǎn)生可同步產(chǎn)生50比特幣的獎(jiǎng)勵(lì)金,隨后以4年為獎(jiǎng)勵(lì)周期,獎(jiǎng)勵(lì)金數(shù)量依次減半。以每年365天計(jì),第一個(gè)4年周期的比特幣發(fā)行數(shù)量為:

比特幣發(fā)行總量可計(jì)算為(設(shè)i為周期序號(hào),i=0,1,2,…):

如圖2.4所示,新比特幣的生成增量呈不斷減半下降趨勢(shì)。經(jīng)過(guò)32個(gè)周期(即128年),每個(gè)區(qū)塊獎(jiǎng)勵(lì)比特幣的數(shù)量下降到50×0.532BTC≈1.16聰,由于1聰為最小計(jì)量單位,下一周期的0.58聰獎(jiǎng)勵(lì)因不足1聰而無(wú)法發(fā)放,此時(shí)約為2140年,比特幣停止增加,數(shù)量達(dá)到最大值約2100萬(wàn)比特幣(即第一個(gè)周期發(fā)放數(shù)量的2倍)。

圖2.4 比特幣生成數(shù)量變化示意圖
“我想‘倒過(guò)來(lái)’看比特幣的發(fā)行。”Alice的思維方式往往出其不意,“假定有一個(gè)保質(zhì)期100多年的2100萬(wàn)克重的蛋糕。先切出一半,在4年內(nèi)按固定周期、固定分量獎(jiǎng)給考試第一名的學(xué)生;下個(gè)4年,在剩下的蛋糕上切出一半來(lái)獎(jiǎng)勵(lì)學(xué)生,但每次獎(jiǎng)勵(lì)的分量減半了;依此類推,最后無(wú)法再切分了,差不多就算分完了這個(gè)蛋糕。”
Bob聽(tīng)得一愣一愣的,雖然認(rèn)同這個(gè)說(shuō)法,還是忍不住揶揄道:“保質(zhì)期100多年,外加考試第一名才有的吃,聽(tīng)上去一點(diǎn)食欲也沒(méi)有。”
比特幣系統(tǒng)采用這種發(fā)幣增量階梯式下降方式具有明顯的作用:初始時(shí)令比特幣數(shù)量快速增長(zhǎng)(前8年已發(fā)放總幣數(shù)的3/4),既以高額獎(jiǎng)勵(lì)達(dá)到吸引更多人加入的目的,又使得有足夠可流通的虛擬幣數(shù)量;而逐步放慢增速,則有利于控制新幣發(fā)行節(jié)奏,避免過(guò)度投放新幣帶來(lái)的通貨膨脹等問(wèn)題;總量限制一方面是最小幣值、發(fā)放規(guī)則所必然造成的,另一方面也是出于防范無(wú)限制投放引發(fā)的貨幣貶值等問(wèn)題。至于是否會(huì)造成通貨緊縮等問(wèn)題,還需要經(jīng)濟(jì)學(xué)家來(lái)回答。
2.2.3 比特幣交易
發(fā)行了新幣,就要能夠進(jìn)行交易,貨幣才有價(jià)值。比特幣采用了發(fā)行、交易統(tǒng)一的獨(dú)特方式,降低了系統(tǒng)復(fù)雜性。
交易(transaction,Tx)一般是指資金的流轉(zhuǎn),即從付款方(持有方)支付給收款方。無(wú)論是兩方的交易、還是多方對(duì)多方的交易,都可描述為一次貨幣持有者屬性的轉(zhuǎn)移。
發(fā)行新幣則被作為一次特殊的交易(稱為發(fā)幣交易),付款方是“系統(tǒng)”,或可理解為沒(méi)有普通的付款方,而是收款方“自動(dòng)”收到一筆獎(jiǎng)勵(lì)金。
比特幣系統(tǒng)設(shè)計(jì)了如圖2.5所示的交易記錄的結(jié)構(gòu),由交易輸入(Tx input,記為Tx_in)、交易輸出(Tx output,記為Tx_out)、交易條件三個(gè)要素組成,表示在符合條件的情況下一個(gè)或多個(gè)付款人支付給一個(gè)或多個(gè)收款人。需要注意的是,交易輸入、輸出的含義與人們平時(shí)慣用的“收入是錢的輸入、支付是錢的輸出”恰好相反(交易輸入指的是付款方、交易輸出指的是收款方),卻完全符合計(jì)算機(jī)技術(shù)的用法,把交易作為一個(gè)事件(模塊)來(lái)看待,那么輸入就是來(lái)源,從交易行為而言,來(lái)源就是支付的錢。

圖2.5 比特幣交易簡(jiǎn)化結(jié)構(gòu)
Bob凝視著比特幣交易結(jié)構(gòu)圖,忽然嚷嚷起來(lái):“Alice,你發(fā)現(xiàn)沒(méi)有,交易居然沒(méi)有說(shuō)明金額!付款方到底支付了多少錢?這都不說(shuō)清楚還算什么交易?”
Alice說(shuō):“對(duì)哦,難怪我看了也是怪怪的,總覺(jué)得什么地方不對(duì)勁!而且好像也沒(méi)有說(shuō)明交易時(shí)間,是不是交易信息不夠完整啊?”
比特幣交易吸取了復(fù)式記賬法的思想精髓:清晰體現(xiàn)錢的來(lái)源和去向,且收支平衡。據(jù)此比特幣系統(tǒng)制定了以下兩條規(guī)則(如圖2.6所示):
(1)規(guī)則一,當(dāng)前交易輸入來(lái)自各付款方以前的交易中獲取的收入(交易輸出),且當(dāng)前交易輸入總和等于以前的相關(guān)交易輸出總和。
(2)規(guī)則二,當(dāng)前交易輸出總和等于當(dāng)前交易輸入總和。

圖2.6 比特幣交易多輸入輸出示例
Bob不僅美美地收到了11.20BTC,而且疑問(wèn)也得到解釋。交易金額并非沒(méi)有,而是被規(guī)則一所隱含了。換句話說(shuō),只要是以前的相關(guān)交易,收入的比特幣都要在當(dāng)前交易中花完。每個(gè)付款人必須要拿得出足夠的錢才能在當(dāng)前交易中付款,一筆前交易收入的錢不夠,就要用多筆來(lái)“湊足”。支付后多余的金額,則通過(guò)“支付給自己”(即找零)來(lái)解決。
這樣的“交易鏈”會(huì)一直持續(xù)下去。一個(gè)人可以在不同的交易中獲得收入,這些收入要么在某次交易中被全部用掉了(找零體現(xiàn)為另一個(gè)交易),要么還沒(méi)有用過(guò)。可見(jiàn),每個(gè)人的總資產(chǎn)就是所有“未花出去的收入”,即未花費(fèi)的交易輸出(Unspent Tx Output,簡(jiǎn)稱UTXO)。因?yàn)橘Y產(chǎn)分散在歷史上不同的交易中,所以,在比特幣系統(tǒng)中沒(méi)有常規(guī)的余額(balance)或錢包(wallet)的概念,而是以UTXO來(lái)表達(dá),需要搜索所有交易才能統(tǒng)計(jì)出來(lái)。此外,一個(gè)人可以擁有多個(gè)虛擬“身份”,除自己外,沒(méi)有人知道圖2.7中的P1和P8是不是屬于同一人的。
如圖2.7所示,交易間形成錯(cuò)綜復(fù)雜的網(wǎng)絡(luò),但具有很強(qiáng)的規(guī)律:每個(gè)交易必有輸入;交易鏈一定是時(shí)間遞增延續(xù)(不會(huì)花費(fèi)未來(lái)的收入);一個(gè)交易輸出只能傳遞給唯一的交易(不可拆分支付,也不可雙重支付)。例如,P1用戶有5個(gè)交易的輸出未被花費(fèi),交易鏈停止延伸形成端點(diǎn),其總和即為P1的UTXO,同時(shí)也是所謂的余額。假如P1要花錢,就只能用這5個(gè)之內(nèi)的一個(gè)或多個(gè)輸出,且不能超過(guò)UTXO總額。

圖2.7 比特幣交易鏈及UTXO示意圖
Alice就不如Bob幸運(yùn),不但在一個(gè)莫名其妙的交易中付了2.83BTC,所提的疑問(wèn)還沒(méi)有答案。主要是關(guān)于“交易時(shí)間”的解釋實(shí)在沒(méi)那么簡(jiǎn)單。
比特幣系統(tǒng)認(rèn)為一個(gè)交易如果沒(méi)有通過(guò)共識(shí)機(jī)制得到全網(wǎng)驗(yàn)證、認(rèn)可并固化,則其很易被放棄、毀約、篡改,是脆弱而不穩(wěn)定的,只有當(dāng)交易被收納到比特幣賬本頁(yè)上并且區(qū)塊入鏈,才能真正確認(rèn)這筆交易的成立。因此,UTXO只認(rèn)可入鏈后的交易,那么所謂交易的時(shí)間信息實(shí)際上是借用交易所在區(qū)塊的生成時(shí)間。
比特幣系統(tǒng)還設(shè)計(jì)了“交易條件”的選項(xiàng)。交易雙方可以商定一個(gè)交易為“無(wú)條件生效(立即生效)”,也可以商定一個(gè)交易“生效時(shí)間(鎖定時(shí)間)”作為條件。如圖2.8所示,生效時(shí)間可為時(shí)間戳,或?yàn)閰^(qū)塊鏈“高度”(區(qū)塊序號(hào)),即在到達(dá)這個(gè)生效時(shí)間前,交易不會(huì)被收納入鏈,處于被鎖定狀態(tài),是無(wú)效的,交易輸入對(duì)應(yīng)的前一交易輸出被凍結(jié),當(dāng)前交易輸出同樣被凍結(jié)不能使用,直到到達(dá)生效時(shí)間并上鏈確認(rèn)后,才成為一條有效交易。在這種情形下,交易記錄中的交易時(shí)間信息也就沒(méi)有太大必要了。

圖2.8 比特幣交易的生效條件示意圖
為弄清比特幣交易的產(chǎn)生與交易的確認(rèn)之間的差異,Alice還需要尋求Bob的協(xié)助來(lái)演繹。Alice扮演Java咖啡店老板,Bob扮演一個(gè)愛(ài)貪小便宜的滑頭顧客。
“老板,來(lái)一杯拿鐵,打包帶走。”Bob總共只有0.4BTC,但誰(shuí)讓他是“月光族”呢!
“好嘞。請(qǐng)付0.28BTC。”Bob刷了手機(jī)二維碼,顯示支付成功。一筆比特幣交易被系統(tǒng)生成了。“請(qǐng)稍等,咖啡做好后馬上給您送到座位上。”Bob知道比特幣交易雖然已經(jīng)生成,但可能要十分鐘(或許更久)后才會(huì)被收納進(jìn)區(qū)塊鏈,還知道咖啡店不可能等上這么久才去做咖啡。這不,Alice已經(jīng)開始做他的拿鐵了。于是Bob沒(méi)有坐下,轉(zhuǎn)身到隔壁凱特快餐店,支付了0.3BTC買了一個(gè)比薩。幾分鐘后,Bob端著拿鐵和比薩走了。
當(dāng)晚Alice和凱特盤點(diǎn)賬目時(shí),其中一人會(huì)發(fā)現(xiàn)交易并沒(méi)有被確認(rèn),出現(xiàn)了壞賬。Bob利用“時(shí)間差”成功進(jìn)行了“雙重支付”。
2.2.4 比特幣地址
每個(gè)人在現(xiàn)實(shí)世界、虛擬空間都擁有一些標(biāo)識(shí),用來(lái)進(jìn)行唯一性定位。例如,身份證號(hào)碼、快遞收貨地址、手機(jī)號(hào)碼、銀行賬號(hào)、電子郵件地址、電腦MAC地址、互聯(lián)網(wǎng)IP地址、即時(shí)通信號(hào)碼等。這些標(biāo)識(shí)可以是自然語(yǔ)言、編碼字符串或二進(jìn)制數(shù)據(jù)。比特幣系統(tǒng)中同樣需要一種標(biāo)識(shí),用來(lái)唯一性識(shí)別轉(zhuǎn)賬資金(或獎(jiǎng)勵(lì)金)的收款人以及驗(yàn)證付款人確實(shí)是UTXO的主人。
現(xiàn)實(shí)世界的個(gè)人標(biāo)識(shí)通常具有實(shí)名性,可以明確指向一個(gè)真實(shí)存在的人或地點(diǎn),即便進(jìn)行偽裝,總會(huì)殘留下蛛絲馬跡。虛擬空間里則更為復(fù)雜,金融系統(tǒng)、通信運(yùn)營(yíng)商等出于安全考慮強(qiáng)制要求實(shí)人鑒別,但電子郵件、論壇賬號(hào)等往往是匿名的,有些人更是采用頻繁更換上網(wǎng)終端、偽造設(shè)備地址、多級(jí)跳轉(zhuǎn)等手法隱藏自己的蹤跡。深網(wǎng)(DeepNet)即運(yùn)用洋蔥路由(The Onion Router,TOR)機(jī)制,在互聯(lián)網(wǎng)上構(gòu)造獨(dú)立的通信路徑和多重加密傳輸信息,從而形成一個(gè)非常隱秘的網(wǎng)絡(luò)空間。
比特幣采用的是匿名交易的體制,為此運(yùn)用現(xiàn)代密碼學(xué)技術(shù)設(shè)計(jì)了一套既可保障資金安全又可避免暴露身份的方法。
比特幣分配給用戶一個(gè)唯一性的地址(Bitcoin address),別人可以把貨幣轉(zhuǎn)賬到這個(gè)地址,而持有者可以用這個(gè)地址來(lái)使用貨幣。一個(gè)人可以擁有并使用多個(gè)比特幣地址,但交易的每個(gè)輸入或輸出只能用其中之一。
如圖2.9所示,比特幣地址是對(duì)加密算法的密鑰進(jìn)行轉(zhuǎn)換并編碼而來(lái),由26~35個(gè)數(shù)字和字母(分大小寫)組成,一般以1或3開始。例如:
? 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
? 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
? 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy

圖2.9 比特幣地址與秘密鑰匙關(guān)系示意圖
比特幣地址與其持有者的真實(shí)身份沒(méi)有關(guān)系,用戶甚至可以離線生成比特幣地址。用戶暴露在比特幣網(wǎng)絡(luò)上的只有地址,沒(méi)有賬號(hào)。如果要付款,轉(zhuǎn)賬到這個(gè)地址就好;如果要收錢,用這個(gè)地址的錢進(jìn)行支付轉(zhuǎn)賬,能成功付款就好。
因?yàn)橛脩舨恍枰獙⒈忍貛诺刂放c“賬號(hào)”進(jìn)行關(guān)聯(lián),這就最大限度地排除了賬號(hào)注冊(cè)和登錄可能留下的身份印記。如圖2.10所示,為了正確識(shí)別一個(gè)地址的持有者,比特幣系統(tǒng)在生成地址的同時(shí),給予用戶一個(gè)對(duì)應(yīng)于該地址的唯一“秘密鑰匙”,當(dāng)用戶需要?jiǎng)佑媚硞€(gè)地址的UTXO來(lái)付款,就要用自己掌握的“秘密鑰匙”生成一份“證明文件”,表明這筆錢的擁有者“名分”,其他用戶可以用此“證明文件”來(lái)驗(yàn)證真?zhèn)巍H绻麤](méi)有持有這個(gè)“秘密鑰匙”,無(wú)法生成“證明文件”,就無(wú)權(quán)動(dòng)用這筆資金。

圖2.10 比特幣系統(tǒng)身份隔離機(jī)制
“秘密鑰匙”幾乎是比特幣擁有者與比特幣系統(tǒng)的唯一聯(lián)系,可見(jiàn)其十分關(guān)鍵。然而,成也蕭何敗也蕭何,由于比特幣系統(tǒng)的匿名性,一旦“秘密鑰匙”因電腦損壞而遺失或被破解,則根本不存在“掛失”“找回”等恢復(fù)途徑,相關(guān)聯(lián)的UTXO就再也無(wú)法認(rèn)領(lǐng)。就是出于這一原因,比特幣網(wǎng)絡(luò)中有大量的比特幣(永遠(yuǎn)不知道是哪些、有多少)好像斷了線的風(fēng)箏,失去了控制、找不到主人,永遠(yuǎn)無(wú)法被花出去了。
2.2.5 比特幣網(wǎng)絡(luò)
比特幣系統(tǒng)采用P2P對(duì)等網(wǎng)絡(luò)技術(shù)構(gòu)建,自成完整體系,形成虛擬幣產(chǎn)生、保存和交易的閉環(huán)。比特幣系統(tǒng)運(yùn)行在互聯(lián)網(wǎng)上,利用網(wǎng)絡(luò)實(shí)現(xiàn)信息交換,構(gòu)成一個(gè)相對(duì)封閉、獨(dú)立的應(yīng)用網(wǎng)絡(luò)。
如圖2.11所示,比特幣網(wǎng)絡(luò)由安裝了比特幣系統(tǒng)軟件的比特幣結(jié)點(diǎn)(node)聯(lián)網(wǎng)組成。所有比特幣結(jié)點(diǎn)完全一致、相互平等,沒(méi)有管理中心、控制中心,也沒(méi)有特權(quán)結(jié)點(diǎn)之分。每個(gè)比特幣結(jié)點(diǎn)上保存了完整的比特幣區(qū)塊鏈,形成分布式、全冗余的數(shù)據(jù)存儲(chǔ)體系。這種“全量復(fù)制”存儲(chǔ)方式的優(yōu)勢(shì)在于:

圖2.11 比特幣網(wǎng)絡(luò)和結(jié)點(diǎn)示意圖
(1)每個(gè)結(jié)點(diǎn)可不依賴于其他結(jié)點(diǎn),甚至在離線的情況下,都可以本地化查詢所有數(shù)據(jù),同時(shí)避免了許多低效的網(wǎng)絡(luò)訪問(wèn)。
(2)新加入的結(jié)點(diǎn)可從任意現(xiàn)有結(jié)點(diǎn)上獲取完整區(qū)塊鏈數(shù)據(jù)。
(3)差錯(cuò)(或造假)數(shù)據(jù)很容易運(yùn)用相互比對(duì)和共識(shí)機(jī)制來(lái)發(fā)現(xiàn)。
可見(jiàn),比特幣區(qū)塊鏈的全冗余存儲(chǔ)是保障數(shù)據(jù)一致性、安全性的重要措施之一,屬于用空間換時(shí)間(效率)、換公正(可信)的方法。在小規(guī)模系統(tǒng)中完全不成問(wèn)題,然而當(dāng)系統(tǒng)龐大到一定程度,全冗余不可避免會(huì)帶來(lái)巨大的資源浪費(fèi),特別是隨著區(qū)塊鏈不斷延伸、網(wǎng)絡(luò)結(jié)點(diǎn)日益增多、交易數(shù)量逐步上升,區(qū)塊的賬本空間、結(jié)點(diǎn)的存儲(chǔ)空間都顯得不堪重負(fù)。這里比特幣系統(tǒng)又陷入了矛盾和悖論之中:體系自然越持久、越興旺越好,而由此造成的數(shù)據(jù)堆積卻會(huì)嚴(yán)重拖累、拖慢體系的發(fā)展,為此又不希望體系太繁榮。
“我只要一朵云彩,卻要擁有整片天空!”Alice感慨道。
“天空你只是代為保管的。”Bob不太有詩(shī)情畫意,說(shuō)的話經(jīng)常會(huì)煞風(fēng)景。Alice不為所動(dòng),繼續(xù)憂心忡忡:“比特幣系統(tǒng)旨在保持‘絕對(duì)’的平等,但問(wèn)題是我只有半個(gè)比特幣,存儲(chǔ)任務(wù)卻和擁有一萬(wàn)個(gè)比特幣的人一樣重,你說(shuō)這是不是另一種不平等?”
“這大概是平等的‘代價(jià)’吧?”Bob以問(wèn)題回答問(wèn)題。
Alice點(diǎn)點(diǎn)頭,“很難想象,我的小電腦中塞進(jìn)一家銀行的所有用戶數(shù)據(jù)和交易數(shù)據(jù)會(huì)是什么情景。”
比特幣結(jié)點(diǎn)之間通過(guò)網(wǎng)絡(luò)協(xié)議相互通信,例如發(fā)布交易記錄、公布新區(qū)塊、表決采納區(qū)塊入鏈等。比特幣結(jié)點(diǎn)之間的對(duì)等特性使其無(wú)法依賴服務(wù)器等中心控制系統(tǒng),所以比特幣結(jié)點(diǎn)都是與有限數(shù)量的“鄰居”即相近的結(jié)點(diǎn)交換信息。
新上線結(jié)點(diǎn)的第一要?jiǎng)?wù)是“找鄰居”,否則該結(jié)點(diǎn)就是游離在比特幣網(wǎng)絡(luò)之外的孤點(diǎn)。初始狀態(tài)下“找鄰居”其實(shí)就是從現(xiàn)存網(wǎng)絡(luò)中獲取其他結(jié)點(diǎn)的IP地址或域名,實(shí)現(xiàn)方法有多種:
(1)早期的比特幣軟件利用IRC協(xié)議,自動(dòng)連接網(wǎng)上聊天室,得到其他用戶公布的IP地址清單,然后手工配置初始鄰居地址。但這一方法目前已不再采用。
(2)通過(guò)DNS(域名解析服務(wù)),利用比特幣軟件內(nèi)置的若干個(gè)“域名種子”(DNS seed)結(jié)點(diǎn)解析并自動(dòng)獲取本地的其他一些結(jié)點(diǎn)的IP地址。域名種子的解析內(nèi)容由可靠的開發(fā)者進(jìn)行維護(hù)。
(3)用查詢命令連接已知的種子結(jié)點(diǎn)或可信結(jié)點(diǎn),請(qǐng)求獲取其他結(jié)點(diǎn)的IP地址。
一旦配置好了鄰居結(jié)點(diǎn),就標(biāo)志著新結(jié)點(diǎn)成功連接到比特幣網(wǎng)絡(luò)。如圖2.12所示,每個(gè)比特幣結(jié)點(diǎn)與若干個(gè)其他“鄰居”結(jié)點(diǎn)保持通信關(guān)系,最終形成復(fù)雜的網(wǎng)形網(wǎng)絡(luò)。

圖2.12 比特幣結(jié)點(diǎn)關(guān)系和信息廣播示意圖
當(dāng)一個(gè)結(jié)點(diǎn)需要發(fā)布區(qū)塊或交易信息時(shí),會(huì)采用如圖2.12所示的全網(wǎng)廣播方式。廣播實(shí)現(xiàn)機(jī)制為洪泛法(flooding),即結(jié)點(diǎn)將信息發(fā)送給3到4個(gè)鄰居,鄰居結(jié)點(diǎn)繼續(xù)轉(zhuǎn)發(fā)給3到4個(gè)鄰居,理想情況下(無(wú)轉(zhuǎn)發(fā)循環(huán))將形成一棵生成樹(spanning tree),到達(dá)結(jié)點(diǎn)數(shù)為∑4i,一般幾秒鐘內(nèi)就可覆蓋全網(wǎng)所有結(jié)點(diǎn)。
- 移動(dòng)電商:建站方向
- 電商創(chuàng)業(yè)--創(chuàng)業(yè)思維+實(shí)戰(zhàn)方法+案例解析
- Photoshop淘寶網(wǎng)店設(shè)計(jì)與裝修實(shí)戰(zhàn)從入門到精通(第2版)
- 你好,短視頻!從零開始做Vlog
- 在線直播實(shí)戰(zhàn)攻略:屏幕呈現(xiàn)+內(nèi)容設(shè)計(jì)+互動(dòng)創(chuàng)新+流程規(guī)劃
- 周鴻祎自述:我的互聯(lián)網(wǎng)方法論
- 網(wǎng)店撈錢的100個(gè)精細(xì)化絕招
- 互聯(lián)網(wǎng)+跨界顛覆
- 贏在商業(yè)模式:移動(dòng)互聯(lián)網(wǎng)時(shí)代創(chuàng)新與創(chuàng)業(yè)機(jī)遇
- 大話區(qū)塊鏈
- 微博營(yíng)銷實(shí)戰(zhàn)技巧
- 短視頻營(yíng)銷:新媒體時(shí)代重構(gòu)營(yíng)銷新模式
- 互聯(lián)網(wǎng)+流通:F2R助力傳統(tǒng)產(chǎn)業(yè)創(chuàng)新與轉(zhuǎn)型
- 網(wǎng)店贏家
- 顛覆世界的互聯(lián)網(wǎng)思維