官术网_书友最值得收藏!

第二節(jié) 通過比特幣理解區(qū)塊鏈

在比特幣網(wǎng)絡(luò)中,人與人之間的關(guān)系沒有并且不需要類似于銀行的中心機(jī)構(gòu),那么,在一個(gè)沒有中心化機(jī)構(gòu)的情況下,比特幣是如何發(fā)行的?如何交易的?同時(shí)如何對交易進(jìn)行記賬的呢?

一、比特幣的發(fā)行機(jī)制

首先,規(guī)定了比特幣的發(fā)行機(jī)制。可以理解一下,比特幣網(wǎng)絡(luò)是一個(gè)巨大的賬本,平均每10分鐘比特幣網(wǎng)絡(luò)誕生一頁的賬本,稱為“區(qū)塊”,每個(gè)區(qū)塊被打上時(shí)間戳,按照嚴(yán)格的先后次序連接起來形成一個(gè)賬本,稱為“區(qū)塊鏈”。比特幣網(wǎng)絡(luò)規(guī)定比特幣的總量為2100萬個(gè),每個(gè)比特幣的產(chǎn)生伴隨著每一個(gè)區(qū)塊的產(chǎn)生,也就是每一個(gè)區(qū)塊的問世和發(fā)行。比特幣網(wǎng)絡(luò)還規(guī)定,最開始每個(gè)區(qū)塊的比特幣獎(jiǎng)勵(lì)是50個(gè),然后每21萬個(gè)區(qū)塊減半一次。一直到2140年,所有的比特幣發(fā)行完畢。

21萬個(gè)區(qū)塊,算一算,平均每10分鐘出1個(gè)區(qū)塊,出21萬個(gè)區(qū)塊需要多久呢?在比特幣系統(tǒng)里面,打包一個(gè)區(qū)塊的時(shí)間大約是10分鐘。21萬個(gè)區(qū)塊就是每210萬分鐘,新幣的發(fā)行速度就會發(fā)生一次減半,換算成年呢,就是大約3.995年,約為4年。計(jì)算如下:

根據(jù),每10分鐘1個(gè)區(qū)塊計(jì)算:

每年產(chǎn)生的區(qū)塊數(shù)量=1年的分鐘數(shù)/10=(365天×24小時(shí)/天×60分鐘/小時(shí))/10=52560個(gè)/年

比特幣網(wǎng)絡(luò)產(chǎn)生21萬個(gè)區(qū)塊所需年數(shù)=210000/52560≈3.9954年

前面21萬個(gè)區(qū)塊產(chǎn)生的比特幣數(shù)量=前4年比特幣網(wǎng)絡(luò)產(chǎn)生的比特幣數(shù)量=210000×50個(gè)=1050萬個(gè)

由此可知,比特幣每產(chǎn)生21萬個(gè)區(qū)塊區(qū)塊獎(jiǎng)勵(lì)減半一次,意味著比特幣網(wǎng)絡(luò)每4年的比特幣產(chǎn)量減半。2009年第一個(gè)區(qū)塊出現(xiàn)時(shí),隨區(qū)塊產(chǎn)生了50個(gè)比特幣,2013年每個(gè)區(qū)塊產(chǎn)生25個(gè)比特幣,2017年每個(gè)區(qū)塊產(chǎn)生12.5個(gè)比特幣,按照這樣的趨勢,大約到 2040年,比特幣總數(shù)2100萬個(gè)將完全發(fā)行完畢,見下表。

二、區(qū)塊鏈的區(qū)塊高度

按照上面的計(jì)算可以知道,比特幣網(wǎng)絡(luò)產(chǎn)生21萬個(gè)區(qū)塊所需的天數(shù),理論上需要1458.3天,也就是3.99年。這也就是大眾說的“比特幣每四年減半”的由來。比特幣第一次減半發(fā)生在2012年12月28日,當(dāng)日開始,比特幣的區(qū)塊獎(jiǎng)勵(lì)由一開始的50個(gè)比特幣變?yōu)?5個(gè)比特幣,而2016年7月8日開始,比特幣第二次減半,也就是每個(gè)區(qū)塊伴隨的比特幣獎(jiǎng)勵(lì)為12.5個(gè)。

怎么去計(jì)算現(xiàn)在的區(qū)塊是第多少個(gè)呢?人們是用“區(qū)塊高度”來計(jì)量的。所謂區(qū)塊高度是從比特幣誕生之后,最新的區(qū)塊是第幾個(gè)區(qū)塊。打開任意一個(gè)比特幣的區(qū)塊瀏覽器,可以看到現(xiàn)在出來的最新的區(qū)塊高度。通過區(qū)塊高度,可以計(jì)算大概還有多久比特幣會進(jìn)行下一次減半、多久會進(jìn)行難度的調(diào)整、多久會進(jìn)行一次大事件。如下圖所示,筆者當(dāng)前查看到的區(qū)塊高度是516463,即意味著比特幣網(wǎng)絡(luò)已經(jīng)產(chǎn)生了516463個(gè)區(qū)塊。

三、比特幣價(jià)值傳遞機(jī)制

先看看現(xiàn)實(shí)生活中人們是怎樣轉(zhuǎn)賬給朋友的。

回顧一下第一章第一節(jié)提到的那個(gè)故事,小王給小李通過銀行卡轉(zhuǎn)賬了1000元,這個(gè)時(shí)候銀行會在小王的銀行賬號上進(jìn)行1000元的減法,在小李的銀行賬號上進(jìn)行1000元的加法,以完成這筆交易。整體過程大概是這樣的:一般小王會先讓小李把銀行卡號發(fā)給他。小王登錄銀行網(wǎng)銀,找到轉(zhuǎn)賬菜單,輸入小李的銀行卡號,然后再輸入金額1000元,屏幕上可能會顯示若干元的轉(zhuǎn)賬手續(xù)費(fèi),這時(shí)候小王點(diǎn)擊確定,然后提交給銀行后臺去處理。銀行處理完畢,小王的賬戶會減少1000元,小李的銀行卡賬戶里會增加1000元。

比特幣是如何進(jìn)行交易和轉(zhuǎn)賬的呢?

對于比特幣的交易,首先的轉(zhuǎn)賬交易會經(jīng)歷一系列的過程。以小王給小李轉(zhuǎn)賬1個(gè)比特幣為例,對其過程進(jìn)行說明。

1)轉(zhuǎn)賬發(fā)起人向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送交易請求。

在比特幣網(wǎng)絡(luò)中,比特幣網(wǎng)絡(luò)發(fā)布交易請求的過程和現(xiàn)實(shí)生活進(jìn)行網(wǎng)銀轉(zhuǎn)賬的方式比較類似,發(fā)布交易請求包含如下步驟:

第一步,登錄比特幣錢包。比特幣錢包類比為銀行卡的網(wǎng)銀。

第二步,選擇轉(zhuǎn)出方的比特幣錢包地址。錢包地址相當(dāng)于銀行卡號,選擇轉(zhuǎn)出方的比特幣錢包地址也就是選擇從自己哪個(gè)比特幣地址進(jìn)行轉(zhuǎn)賬,類似于選擇自己轉(zhuǎn)出的銀行卡賬號。錢包地址就相當(dāng)于實(shí)體錢包里的一張張銀行卡,這個(gè)地址符號是一長串30位大小寫字母和數(shù)字組成的字符串,有點(diǎn)像銀行卡賬號。

第三步,輸入對方的比特幣錢包地址。對方的錢包地址相當(dāng)于對方的銀行卡號。

第四步,輸入轉(zhuǎn)賬數(shù)額和手續(xù)費(fèi)后提交。輸入轉(zhuǎn)賬的數(shù)額以及轉(zhuǎn)賬的交易手續(xù)費(fèi)金額,簽上比特幣簽名,提交給比特幣網(wǎng)絡(luò),然后就等待這筆交易被打包處理了。

2)參與到比特幣網(wǎng)絡(luò)上的礦工對交易的有效性進(jìn)行驗(yàn)證,如果驗(yàn)證通過,這筆交易將和其他驗(yàn)證通過的交易一起被共同打包到一個(gè)區(qū)塊中。

這里需要注意的是,和人們使用銀行轉(zhuǎn)賬所不同的是,轉(zhuǎn)賬的手續(xù)費(fèi)不是固定不變的,而是用戶可以自行確定轉(zhuǎn)賬手續(xù)費(fèi)是多少,甚至可以選擇不給轉(zhuǎn)賬手續(xù)費(fèi)。如果不給手續(xù)費(fèi),可能不會被礦工記賬確認(rèn),或者比較晚或延遲被礦工確認(rèn)。

3)為了將新的區(qū)塊連接到區(qū)塊鏈的尾部,礦工基于PoW機(jī)制,利用算力,競相解答“數(shù)學(xué)難題”。最先解答出“數(shù)學(xué)難題”答案的礦工,如果其工作量被其他礦工確認(rèn),則該礦工將獲得記賬權(quán),同時(shí)獲得該新生區(qū)塊所對應(yīng)的比特幣獎(jiǎng)勵(lì)。

當(dāng)一個(gè)用戶給比特幣網(wǎng)絡(luò)提交了轉(zhuǎn)賬的請求后,需要等著礦工來打包處理。比特幣網(wǎng)絡(luò)規(guī)定,競爭計(jì)算能獲得新生的比特幣獎(jiǎng)勵(lì),誰通過競爭記賬獲得了記賬權(quán),誰就可以獲得該交易的手續(xù)費(fèi)。

比特幣網(wǎng)絡(luò)每10分鐘有一個(gè)區(qū)塊產(chǎn)生,就類似于每10分鐘有一道數(shù)學(xué)題被丟到網(wǎng)絡(luò)中,大家比賽看誰算得快,誰最先計(jì)算出正確答案,誰就算挖出了這個(gè)區(qū)塊,并獲得了區(qū)塊獎(jiǎng)勵(lì)。它記錄本區(qū)塊也就是本頁賬單,大家都要以此為準(zhǔn)。緊接著,大家在這個(gè)區(qū)塊也就是這一頁賬單的基礎(chǔ)上,爭奪下一個(gè)區(qū)塊也就是下一頁賬單的記賬權(quán)。通過這種方式,比特幣解決了在一個(gè)去中心化的體系下賬本的唯一性的權(quán)益。

他把比特幣的發(fā)行和競爭記賬綁定在了一起,記賬的人每獲得一次記賬權(quán),就會獲得系統(tǒng)產(chǎn)生的新的比特幣作為獎(jiǎng)勵(lì)。也就是說,算得最快的計(jì)算機(jī)就會“挖”到一定數(shù)量的比特幣。在每一輪競爭記賬中,誰獲得記賬權(quán),誰就獲得這一個(gè)區(qū)塊里新誕生的比特幣獎(jiǎng)勵(lì)和被記錄在賬單里的交易手續(xù)費(fèi)。所以,礦工有兩個(gè)收入來源:一個(gè)是新生區(qū)塊獎(jiǎng)勵(lì);另一個(gè)是區(qū)塊被記錄在區(qū)塊里面的所有交易的交易手續(xù)費(fèi)。

比特幣現(xiàn)在的每個(gè)區(qū)塊大小是1MB,大概能容納1000筆交易。當(dāng)網(wǎng)絡(luò)轉(zhuǎn)賬的人比較少時(shí),等待礦工確認(rèn)可能只需要等10分鐘,就能被下一個(gè)區(qū)塊確認(rèn)了。如果當(dāng)前轉(zhuǎn)賬的人比較多,則可能要排隊(duì),多等一個(gè)10分鐘,甚至更長時(shí)間。礦工們會不斷地從等待記錄的轉(zhuǎn)賬交易里面去選擇手續(xù)費(fèi)比較高的轉(zhuǎn)賬信息來進(jìn)行記賬,如果手續(xù)費(fèi)不排在前面,則可能就要排在很后面才能夠記賬了。

通過這樣的設(shè)計(jì),中本聰使得比特幣的發(fā)行、記賬和轉(zhuǎn)賬等環(huán)節(jié)環(huán)環(huán)相扣,使得整個(gè)體系能夠自發(fā)運(yùn)轉(zhuǎn)起來。

4)新生的區(qū)塊被確認(rèn)后,成功連接到區(qū)塊鏈網(wǎng)絡(luò)中,而其他比特幣節(jié)點(diǎn)對其區(qū)塊上的交易信息進(jìn)行同步。

5)轉(zhuǎn)賬的收款方最終收到轉(zhuǎn)賬發(fā)起方的1個(gè)比特幣。

四、工作量證明機(jī)制和最長鏈機(jī)制

下面再來看看,為什么說比特幣的區(qū)塊鏈賬本是無法被篡改呢?這里說的篡改是網(wǎng)絡(luò)中為了弄虛作假而對賬本進(jìn)行惡意修改。這一點(diǎn)由比特幣采用工作量證明機(jī)制和最長鏈機(jī)制來保障。

在前面,提到過比特幣的共識機(jī)制是“PoW機(jī)制”,是一種對在差不多時(shí)間內(nèi)發(fā)生的事務(wù)的先后順序達(dá)成共識的一種算法。PoW簡單理解就是一份證明,用來確認(rèn)你做過一定量的工作。監(jiān)測工作的整個(gè)過程通常效率是非常低的,而通過對工作的結(jié)果進(jìn)行認(rèn)證來證明完成了一定工作的工作量,是一種非常高效的方式。比如現(xiàn)實(shí)生活中的畢業(yè)證、駕駛證等,也是通過檢驗(yàn)完成了一定知識的學(xué)習(xí)或者駕駛過一定時(shí)間的汽車來證明你的技能的,也就是說通過這個(gè)結(jié)果證明曾經(jīng)做過這件事、曾經(jīng)耗費(fèi)過所謂的工作量。

PoW的特點(diǎn),對于執(zhí)行的一方來說難度是適中的。對于驗(yàn)證方來說是非常容易被驗(yàn)證的。礦工們進(jìn)行哈希驗(yàn)算時(shí),可以理解為是一種數(shù)學(xué)的游戲。獲得正確答案,就會獲得記賬權(quán),其他節(jié)點(diǎn)經(jīng)過非常簡單的驗(yàn)證之后,就可以同意其記賬,并同步賬本。打上時(shí)間戳后,緊接著進(jìn)行下一輪算力競賽。

比特幣區(qū)塊鏈中有一個(gè)“默認(rèn)設(shè)定”,當(dāng)由于新區(qū)塊生成或者網(wǎng)絡(luò)傳播延遲等原因造成區(qū)塊鏈產(chǎn)生分歧的狀況時(shí),因?yàn)樵诒忍貛诺木W(wǎng)絡(luò)里大家認(rèn)為最長的鏈才是正確的鏈,網(wǎng)絡(luò)上的多數(shù)人合意的結(jié)果一定會選擇最長的那條區(qū)塊鏈,這就是比特幣的最長鏈機(jī)制。如果這時(shí)候有人想把某個(gè)區(qū)塊高度上的某個(gè)交易信息進(jìn)行修改,需要做什么呢?他需要從這個(gè)區(qū)塊開始把之前所有的區(qū)塊都重新計(jì)算一遍,再把賬本同步給其他人。而在進(jìn)行計(jì)算的同時(shí),其他礦工們已經(jīng)在原來的鏈上繼續(xù)往前進(jìn)行計(jì)算了。這個(gè)惡意篡改的人,需要在很短的時(shí)間內(nèi)趕上現(xiàn)有區(qū)塊的高度,讓自己的這條區(qū)塊鏈成為最長的鏈,讓其他礦工誤以為這是正確的賬本。

最長鏈機(jī)制

由于最長鏈機(jī)制的存在,除非這個(gè)惡意篡改的人擁有非常大的算力,至少超過50%,否則基本上沒有可能進(jìn)行這樣的篡改。那么算一筆賬,現(xiàn)在全網(wǎng)算力是27.38 EH /秒,大概就是每秒進(jìn)行27.38×1018次計(jì)算,現(xiàn)在流行的主流礦機(jī)大概按每一臺的算力是40TH/秒左右。如果想擁有全網(wǎng)51%的算力,則需要至少40萬臺最新的礦機(jī),一臺礦機(jī)價(jià)格按照20000元計(jì)算,光是設(shè)備這一項(xiàng)就需要投入80億元人民幣。況且,最新的礦機(jī)生產(chǎn)趕不上銷量,經(jīng)常處于買不到現(xiàn)貨的狀態(tài)。加上老礦機(jī)不斷被淘汰,算力不斷上漲。購置設(shè)備的速度很難趕上算力上漲的速度。從投資回報(bào)率的角度來說,這項(xiàng)投資的成本需要至少80億元人民幣,如果在沒有一定的投資回報(bào)的情況下,一般人也不會有這個(gè)動力進(jìn)行算力攻擊的。從網(wǎng)絡(luò)大環(huán)境來看,前面也說過,由于去中心化的存在,整個(gè)網(wǎng)絡(luò)非常警惕比特幣發(fā)生這樣的情況。

曾經(jīng)在網(wǎng)絡(luò)上出現(xiàn)有一個(gè)礦池的算力接近50%,后來大家就逐漸把自己的算力連接到其他礦池上。其實(shí),從經(jīng)濟(jì)學(xué)的角度來說,這種51%的攻擊也是非常不科學(xué)的。試想一下,當(dāng)這個(gè)攻擊發(fā)生時(shí),比特幣的區(qū)塊鏈得到了篡改,比特幣的價(jià)格將會變得一文不值。通過這個(gè)篡改獲得的利益也會受到很大的損失。總之,想篡改比特幣賬本,簡直是比登天還要難,同時(shí)也無利可圖。

擴(kuò)展知識

如何查看當(dāng)下比特幣區(qū)塊鏈網(wǎng)絡(luò)中全網(wǎng)的算力?

【提示】:可以通過https://btc.com/stats/pool查看全網(wǎng)算力、平均礦工費(fèi)、礦工費(fèi)與區(qū)塊獎(jiǎng)勵(lì)占比的信息。

知識擴(kuò)展

比特幣是通過什么技術(shù)實(shí)現(xiàn)不可偽造的?比特幣網(wǎng)絡(luò)的每個(gè)節(jié)點(diǎn)如何信任自己收到的比特幣就是真實(shí)的比特幣呢?比特幣的余額又是如何管理的呢?

【提示】:這都和比特幣的UTXO(未花費(fèi)的交易輸出,Unspent Transaction Outputs)結(jié)構(gòu)有關(guān)系。

UTXO是比特幣交易生成及驗(yàn)證的一個(gè)核心概念,先從字面上簡單理解,UTXO并不是像傳統(tǒng)的銀行賬戶那樣去管理和記錄賬戶余額,而是基于交易數(shù)據(jù)來對未花費(fèi)的余額進(jìn)行管理。比特幣網(wǎng)絡(luò)中,比特幣用戶所擁有的比特幣是和UTXO掛鉤的,并記錄在區(qū)塊鏈中的,如何理解呢?

比特幣區(qū)塊鏈上記錄的交易,是由輸入和輸出構(gòu)成的。某個(gè)交易中消費(fèi)的比特幣數(shù)量,可以理解為這個(gè)交易的輸入,而這個(gè)交易中通過交易流轉(zhuǎn)下去的比特幣數(shù)量,可以理解成為這個(gè)交易的輸出。在不考慮開工費(fèi)的情況下,一個(gè)交易的輸入總數(shù)和輸出總數(shù)應(yīng)該是一致的。就這樣,比特幣就在一連串的交易中流轉(zhuǎn),某個(gè)交易中被流轉(zhuǎn)出來的比特幣可能誰也還沒有消費(fèi),就成了該交易中“未花費(fèi)”的“交易輸出”。而這筆交易“已經(jīng)花費(fèi)”的輸出就成了交易的接收方的輸入。交易構(gòu)成了一組鏈?zhǔn)浇Y(jié)構(gòu),所有合法的比特幣交易都可以追溯到前向一個(gè)或多個(gè)交易的輸出,這些鏈條的源頭都是挖礦獎(jiǎng)勵(lì),末尾則是當(dāng)前未花費(fèi)的交易輸出。通過UTXO的方式,傳遞每一筆交易的輸入和輸出,交易數(shù)據(jù)就在區(qū)塊鏈上得以維護(hù)。同時(shí)一個(gè)用戶的余額因此并不是作為一個(gè)數(shù)字存儲起來的,而是用他占有的UTXO的總和計(jì)算出來的。

挖礦交易(Coinbase交易)

通過UTXO結(jié)構(gòu),在比特幣世界里的每一筆交易都能夠追溯到上一筆交易,每一筆付款都可以追溯到上一筆收款。除非直接挖礦所得,提供1個(gè)比特幣,必須是從上一個(gè)交易得到的并且還沒有花費(fèi)的比特幣。一筆一筆往上追溯,可以追溯到該比特幣誕生時(shí)礦工挖出來的那個(gè)區(qū)塊。比特幣被礦工挖出來的那一筆交易是作為挖礦獎(jiǎng)勵(lì)發(fā)給礦工的,是比特幣的源頭交易,只記錄了輸出,沒有輸入信息。這一個(gè)特別的交易叫作挖礦交易。

UTXO實(shí)例

UTXO結(jié)構(gòu)在比特幣交易中是怎樣的結(jié)構(gòu)呢?這里舉一個(gè)簡單的實(shí)例。

A擁有20個(gè)比特幣的UTXO,A的賬戶余額不是簡簡單單用一個(gè)余額顯示出來的,而是分開為若干個(gè)UTXO散列開來的。有可能是由1個(gè)比特幣的UTXO和19個(gè)比特幣的UTXO組成,也有可能是2個(gè)比特幣的UTXO、3個(gè)比特幣的UTXO和15個(gè)比特幣的UTXO組成等,種種可能性都是存在的。

如下圖所示,A所持有的20個(gè)比特幣的UTXO是由5個(gè)比特幣的UTXO和15個(gè)比特幣的UTXO構(gòu)成的。其中,5個(gè)比特幣的UTXO中的3個(gè)比特幣轉(zhuǎn)賬給B時(shí),5個(gè)比特幣的UTXO就轉(zhuǎn)化成為新的UTXO,3個(gè)比特幣的UTXO與接受方B的比特幣地址關(guān)聯(lián),而剩余的2個(gè)比特幣的UTXO與持有方A的比特幣地址相關(guān)聯(lián)。

比特幣的UTXO結(jié)構(gòu)遵守兩個(gè)規(guī)則

1)交易有源頭:除了挖礦交易外,所有的交易都必須來自前面某一個(gè)或者幾個(gè)交易的UXTO,該交易必須包含一個(gè)有效的簽名,來自它所花費(fèi)的UTXO的擁有者;

2)輸入輸出持平:任何一筆交易的輸入總量必須等于輸出總量(實(shí)際情況是,一般輸出總和會小于輸入總和,差額是轉(zhuǎn)賬手續(xù)費(fèi),歸礦工所有)。

總之,UTXO模式最大的好處就是,它準(zhǔn)確、如實(shí)地記錄了每一筆交易的來源和去處,這些信息保存在區(qū)塊鏈中,任何人都無法對數(shù)據(jù)進(jìn)行修改或者刪除。只要獲取了每個(gè)地址的相關(guān)交易記錄,那么每個(gè)地址進(jìn)行的余額結(jié)算就不會出錯(cuò),也就不存在偽造比特幣的可能性,就這樣UTXO確保了比特幣不能被偽造的特性。同時(shí),每一筆輸入都可以找到相應(yīng)的輸出,也就可以避免同一份比特幣被同時(shí)重復(fù)花費(fèi)兩次的可能性,有效地避免了“雙花(Double Spend)”問題。

主站蜘蛛池模板: 平昌县| 潼关县| 手游| 杭锦旗| 普洱| 宁阳县| 阿合奇县| 新邵县| 新绛县| 武陟县| 昌吉市| 太湖县| 增城市| 沁源县| 微山县| 渑池县| 类乌齐县| 建平县| 福建省| 库尔勒市| 文安县| 泗阳县| 兴山县| 夏邑县| 嘉定区| 黄山市| 横山县| 岚皋县| 临湘市| 诸暨市| 铜山县| 行唐县| 六枝特区| 鹤庆县| 广宁县| 肥城市| 正镶白旗| 平乡县| 江川县| 滦南县| 松潘县|