- 解構(gòu)區(qū)塊鏈
- 凌力
- 6030字
- 2019-11-15 20:40:00
2.2 比特幣基本概念
比特幣系統(tǒng)的核心是一種區(qū)塊鏈(Blockchain)架構(gòu)。密碼學(xué)技術(shù)的綜合運用構(gòu)造出區(qū)塊鏈,比特幣的記賬等功能依靠區(qū)塊鏈來實現(xià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ū)塊就是一個數(shù)據(jù)塊,由區(qū)塊頭(block header)和區(qū)塊體(block body)兩大部分組成。區(qū)塊頭為定長80字節(jié),用于存放控制信息;區(qū)塊體為可變長度,用于存放交易記錄。區(qū)塊體與區(qū)塊頭之間存在內(nèi)在的數(shù)字化聯(lián)系,不妨稱之為一種數(shù)據(jù)纏結(jié)(data tangle),對變化十分敏感,區(qū)塊體內(nèi)容哪怕發(fā)生1比特的改變,區(qū)塊頭都能夠檢驗出來。
鏈是相鄰兩個區(qū)塊之間的數(shù)據(jù)關(guān)聯(lián)關(guān)系,與區(qū)塊頭、區(qū)塊體之間的數(shù)據(jù)纏結(jié)類似,其作用是當上一個區(qū)塊頭有任何變化,下一個區(qū)塊頭都可以檢驗出來。以此類推,欲篡改一個區(qū)塊的內(nèi)容,就必須篡改之后所有區(qū)塊頭,顯然計算工作量很大,所以越靠前(越早)的區(qū)塊就越安全。
從編號為0的第一個區(qū)塊(即創(chuàng)世區(qū)塊)開始,所有區(qū)塊依次以鏈相連,在時間軸上按序排列,形成唯一的一條區(qū)塊鏈。每經(jīng)過一個區(qū)塊生成周期,就生成一個新的區(qū)塊,區(qū)塊鏈就這樣不斷延長。比特幣系統(tǒng)規(guī)定了區(qū)塊生成周期為10分鐘左右,之所以不能完全固定時間,是因為區(qū)塊的生成受到一些不定因素的影響,例如運氣。
既然區(qū)塊是用于保存交易記錄的,又采用數(shù)據(jù)纏結(jié)方式固化了內(nèi)容,而且各區(qū)塊順序相連,不妨將比特幣區(qū)塊鏈想象為一本賬本,如圖2.3所示,一個區(qū)塊就相當于一頁,上面記錄了各種資金往來交易,內(nèi)容不能修改,每頁都被編上頁碼,不亂序、不缺頁,然后被牢牢地釘在一起,每過10分鐘被釘上新的一頁。

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

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

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

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

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

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

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

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

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

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

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

圖2.12 比特幣結(jié)點關(guān)系和信息廣播示意圖
當一個結(jié)點需要發(fā)布區(qū)塊或交易信息時,會采用如圖2.12所示的全網(wǎng)廣播方式。廣播實現(xiàn)機制為洪泛法(flooding),即結(jié)點將信息發(fā)送給3到4個鄰居,鄰居結(jié)點繼續(xù)轉(zhuǎn)發(fā)給3到4個鄰居,理想情況下(無轉(zhuǎn)發(fā)循環(huán))將形成一棵生成樹(spanning tree),到達結(jié)點數(shù)為∑4i,一般幾秒鐘內(nèi)就可覆蓋全網(wǎng)所有結(jié)點。
- 小新說運營:B端產(chǎn)品運營體系解析
- 淘寶網(wǎng)店內(nèi)容運營:內(nèi)容引流方法+淘寶平臺實戰(zhàn)
- 數(shù)據(jù)化運營管理
- 微店安裝、推廣、經(jīng)營、管理一本通
- 七天練成:超級店長訓(xùn)練系統(tǒng)
- 圈人:打造超人氣通信營業(yè)廳
- 電商運營與推廣:操作實戰(zhàn)+案例分析+策略技巧(微課版 第2版)
- 電子商務(wù)糾紛案例精解大全
- 首席視頻官:5G時代的短視頻布局與營銷革命
- 移動互聯(lián)決勝O2O
- 超級網(wǎng)紅:如何打造個人IP
- 玩轉(zhuǎn)支付寶:支付生活與電商運營
- 跨境電子商務(wù)多平臺操作實務(wù)
- 農(nóng)產(chǎn)品電子商務(wù)與網(wǎng)絡(luò)營銷
- 品牌依戀驅(qū)動下用戶在線評論信息生成機制