版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第9章比特幣系統(tǒng)01.比特幣簡介03.共識機制02.比特幣原理04.區(qū)塊及交易存儲結構05.比特幣運行06.比特幣錢包07.比特幣源碼解讀08.使用比特幣系統(tǒng)1比特幣簡介比特幣的起源
比特幣(Bitcoin)是區(qū)塊鏈技術中最典型、最廣泛使用的應用,區(qū)塊技術的概念基本上就是基于比特幣系統(tǒng)廣泛使用而被人熟知的,以至于很多人認為比特幣技術就是區(qū)塊鏈技術,實際上,比特幣只是區(qū)塊鏈技術的最典型應用之一。
比特幣的概念最初由中本聰(SatoshiNakamoto)首先提出的,至今為止,中本聰仍是一個網(wǎng)絡虛擬的人物,其真實身份還不為人知。2008年11月1日,中本聰在“”網(wǎng)站的密碼學郵件列表中發(fā)表了一篇論文,題為《比特幣:一種點對點式的電子現(xiàn)金系統(tǒng)》。該論文中,中本聰首次基于區(qū)塊鏈技術描述了一個去中心化的電子交易體系,并提出了一種P2P形式的虛擬的加密數(shù)字貨幣—比特幣的概念。2009年1月3日,中本聰開發(fā)出首個實現(xiàn)了比特幣算法的客戶端程序,并將其運行于網(wǎng)絡,首次“采礦”(Mining)獲得了第一區(qū)塊中第一個交易的50個比特幣,第一個區(qū)塊也被稱為創(chuàng)世區(qū)塊。標志著比特幣金融體系的正式誕生。比特幣的產(chǎn)生
不同于傳統(tǒng)的貨幣,比特幣是完全虛擬的,甚至在比特幣系統(tǒng)中,也沒有每個用戶擁有比特幣的數(shù)值。實際上,區(qū)塊鏈系統(tǒng)中存儲的是所有用戶之間的每一筆交易,每個用戶擁有的比特幣數(shù)量是根據(jù)用戶之間的一筆筆交易計算出來的。比特幣的產(chǎn)生是由作為創(chuàng)建區(qū)塊的用戶在創(chuàng)建區(qū)塊時,作為每個區(qū)塊的第一筆交易,獎勵給創(chuàng)建者的。依據(jù)共識機制,通過大量的計算產(chǎn)生來競爭創(chuàng)建區(qū)塊的權利,從而獲得比特幣,整個P2P網(wǎng)絡中眾多節(jié)點構成的分布式數(shù)據(jù)庫來確認并記錄所有的交易行為,并使用密碼學的設計來確保貨幣流通各個環(huán)節(jié)安全性。P2P的去中心化特性與算法本身確保存儲于系統(tǒng)的數(shù)據(jù)是不可修改的,從而保證上面記錄的每一筆交易是可信的,最終保證通過計算交易,獲得每個用戶擁有的比特幣數(shù)量是可信的?;诿艽a學的設計,可以使比特幣只能被擁有者轉移或支付。這同樣確保了貨幣所有權與流通交易的匿名性以及可信性。比特幣的激勵
比特幣的產(chǎn)生速度是有限制的,最開始是創(chuàng)建一個區(qū)塊獎勵50比特幣,規(guī)定每產(chǎn)生21萬個區(qū)塊,獎勵就會減半。比特幣自誕生以來,到2020年5月,已經(jīng)經(jīng)歷了三次減半。2012年11月28日,比特幣在區(qū)塊高度210000完成歷史首次減半,獎勵由50枚比特幣降至25枚。2016年7月9日,比特幣在區(qū)塊高度420000完成第二次減半,獎勵降至12.5枚。2020年5月12日,在達到區(qū)塊高度630000后,比特幣的第三次減半,獎勵進一步降至6.25枚。在2040年后,比特幣總數(shù)達到接近2100萬個比特幣,之后新的區(qū)塊不再包含比特幣獎勵,礦工的收益全部來自交易費。比特幣的單位
在比特幣基本的系統(tǒng)中有兩個基本的交易單位分別是:比特幣(Bitcoins,BTC)、聰(Satoshi),他們之間的關系是1BTC=108Satoshi,其中,Satoshi是比特幣系統(tǒng)中不可分割的最小交易單位。在實際的交易使用過程中,由于BTC和Satoshi之間間隔過大,為使用方便,人們又增加如下幾個交易單位:比特分(Bitcent,cBTC:1cBTC=0.01BTC毫比特(Milli-Bitcoins,mBTC):1mBTC=0.001BTC微比特(Micro-Bitcoins,μBTC或uBTC):1μBTC=0.000001BTC但是在系統(tǒng)中,這些存儲要轉換成BTC和Satoshi。2比特幣原理
比特幣體系結構
比特幣體系結構比特幣網(wǎng)絡層比特幣系統(tǒng)通過對等(P2P,peer-to-peer)網(wǎng)絡,將網(wǎng)絡數(shù)據(jù)廣播到各節(jié)點。在比特幣系統(tǒng)是不存在真正服務器節(jié)點,所有節(jié)點之間都是對等的。在全球運行的整個比特幣系統(tǒng)中,可以認為都是所謂的客戶端系統(tǒng),只是存在不同類型的客戶端系統(tǒng)。但是為保證比特幣系統(tǒng)在全球能夠穩(wěn)定運行,在比特幣系統(tǒng)存在全球固定的種子節(jié)點,這幾個節(jié)點在比特幣的核心源碼中已經(jīng)固定。seed.bitcoin.sipa.be
dnsseed.bluematt.meseed.bitcoin.jonasschnelli.chseed.bitcoin.sprovoost.nldnsseed.emzy.de比特幣體系結構比特幣數(shù)據(jù)層比特幣的全部數(shù)據(jù)以交易的方式存儲在區(qū)塊鏈中,每個交易由表明交易來源的交易輸入和表明交易去向的交易輸出組成,交易輸入和交易輸出都可以有多項,表示一次交易可以將先前多個賬戶中的比特幣合并后轉給另外多個賬戶。所有交易通過輸入與輸出鏈接在一起,使得每一筆交易都可追溯;未經(jīng)使用交易的輸出稱之為UTXO(UnspentTransactionOutputs)可以被新的交易引用作為其合法的輸入。被使用過交易的輸出稱之為STXO(SpentTransactionOutputs),則無法被引用作為合法輸入。比特幣使用了Merkle樹確保數(shù)據(jù)的完整性。比特幣采用了改進的非對稱橢圓曲線加密算法(EllipticCurveCryptography,ECC),用戶自己保留私鑰,對自己發(fā)出的交易進行簽名確認,并公開公鑰,比特幣采用公鑰\私鑰作為交易的賬號,使用該加密算法對交易進行數(shù)字簽名,簽名后的交易確保發(fā)生后不會被任何人修改。比特幣體系結構比特幣共識層比特幣系統(tǒng)的共識算法采用基于工作量證明算法(ProofofWork,PoW)的機制來實現(xiàn)共識,該機制最早于1998年在Bmoney設計中提出。POW通過計算來猜測一個數(shù)值(nonce),和本區(qū)塊上特定數(shù)據(jù)合并后,經(jīng)過Hash(報文摘要)運算后,如果Hash值滿足一定的條件,從而獲得創(chuàng)建區(qū)塊需求權限的共識,并獲得比特幣獎勵,這就是所謂挖礦。比特幣體系結構比特幣接口應用層在比特幣的應用層,有不同的節(jié)點類型提供的各種接口,獲得比特幣的相關信息。各節(jié)點類型如下:(1)全節(jié)點是指維持包含全部交易信息的完整區(qū)塊鏈節(jié)點,為完整區(qū)塊鏈節(jié)點。完整區(qū)塊鏈節(jié)點保存有全部的交易數(shù)據(jù),因此其所擁有的數(shù)據(jù)是完整的、所有的區(qū)塊信息,全節(jié)點包含了從第一區(qū)塊(創(chuàng)世區(qū)塊)一直到網(wǎng)絡中最新建立的區(qū)塊,是全球比特幣交易信息的一個復制信息。完整區(qū)塊節(jié)點通過比特幣網(wǎng)絡廣播獲取包含交易信息的新區(qū)塊,在驗證無誤后將此更新合并至本地的區(qū)塊鏈數(shù)據(jù)庫。(2)錢包節(jié)點是一個應用程序,為用戶提供交互界面,不同平臺有不同的錢包。用戶通過錢包進行交易和查詢自己的比特幣數(shù)量,錢包是用戶操作比特幣的接口。比特幣網(wǎng)絡比特幣采用了的P2P(peer-to-peer)網(wǎng)絡架構。P2P是指位于同一網(wǎng)絡中的每臺計算機都彼此對等的,各個節(jié)點共同提供網(wǎng)絡服務,不存在任何“特殊”節(jié)點。所謂對等是網(wǎng)絡中每個節(jié)點既是數(shù)據(jù)的提供者也是數(shù)據(jù)的使用者,節(jié)點間通過網(wǎng)絡實現(xiàn)計算機資源與信息的共享,因此每個節(jié)點地位均等。比特幣所采用的P2P網(wǎng)絡架構是一種完全去中心化的網(wǎng)絡拓撲結構,是比特幣去中心化的基石,因此,比特幣是一種點對點的數(shù)字現(xiàn)金系統(tǒng)。比特幣網(wǎng)絡實現(xiàn)時,建立與網(wǎng)絡層之上,不考慮邏輯節(jié)點之間的路由和拓撲關系,比特幣P2P網(wǎng)絡完全基于TCP構建,主網(wǎng)默認通信端口是8333,比特幣傳輸層采用TCP協(xié)議,實現(xiàn)時必然也是采用C/S架構方式。實際上,比特幣點對點之間是一種互為C/S架構,也即每個節(jié)點即是服務器端,可以等待其他節(jié)點的建立連接通信,也是可以作為客戶端,主動連接其他節(jié)點通信。比特幣網(wǎng)絡比特幣網(wǎng)絡的架構比特幣網(wǎng)絡網(wǎng)絡節(jié)點的類型:
(1)全節(jié)點,具有路由數(shù)據(jù)功能。一個節(jié)點只要是下載了完整且最新的區(qū)塊鏈數(shù)據(jù),就可以作為一個全節(jié)點。只有全節(jié)點才能真正自己去驗證交易。因為可以獨立完成交易確認和廣播,它是支撐著比特幣轉賬交易的核心力量。從整個比特幣網(wǎng)絡的角度來看,運行全節(jié)點是對比特幣網(wǎng)絡很好的支持,全節(jié)點越多,比特幣網(wǎng)絡就越安全。
(2)礦機網(wǎng)絡,在比特幣網(wǎng)絡中,任何一臺電腦都可以算力計算,獲得創(chuàng)建區(qū)塊的權利,成為挖礦機。但是單臺計算機的計算能力有限,參與全球算力競爭是,可能永遠都無法競爭獲勝,獲得創(chuàng)建區(qū)塊的比特幣。為此,參與計算競爭的計算機聯(lián)合起,共同參與競爭,當競爭勝利后,根據(jù)協(xié)議分配獲得比特幣,這就是所謂的礦池網(wǎng)絡。
(3)錢包節(jié)點,只關心和自己錢包中的地址相關部分交易,不會下載完整的區(qū)塊鏈,所以也被稱為輕節(jié)點。發(fā)起簡單支付驗證(SPV),然后向全節(jié)點請求數(shù)據(jù)來驗證交易。輕節(jié)點不能看到所有的交易歷史。比特幣網(wǎng)絡比特幣網(wǎng)絡運行過程如下:
1)新的交易向全網(wǎng)進行廣播;2)每一個節(jié)點都將收到的交易信息納入一個區(qū)塊中;3)每個節(jié)點都嘗試在自己的區(qū)塊中找到一個具有足夠難度的工作量證明;4)當一個節(jié)點找到了一個工作量證明,它就向全網(wǎng)進行廣播;5)當且僅當包含在該區(qū)塊中的所有交易都是有效的且之前未存在過的,其他節(jié)點才認同該區(qū)塊的有效性;6)其他節(jié)點表示他們接受該區(qū)塊,置于區(qū)塊鏈的末尾。比特幣系統(tǒng)更新過程
比特幣系統(tǒng)通過比特幣更新提案(BitcoinImprovementProposal,BIP)改進其運行機制,BIP是用于引入特征信息的比特幣設計文檔。通過BIP向比特幣社區(qū)提供信息的設計文檔,或描述比特幣或其流程或環(huán)境的新功能。BIP9支持多個特性同時升級,并新增投票時間區(qū)間以及新增鎖定期。BIP9將一個提案更新過程分為五個狀態(tài),MTP是最近11個塊的時間戳中位數(shù)。區(qū)塊鏈上的塊時間并不是按照高度遞增而嚴格遞增的,但MTP時間是嚴格遞增的(早期可能不能嚴格遵守)。BIP能夠進入鎖定期(即得到全網(wǎng)同意)的條件是在2016個塊中,支持的塊數(shù)量達到95%,在測試網(wǎng)絡上是75%。之后才能正式激活特性。根據(jù)BIP9,版本號4字節(jié)做以下定義:32位中前三位固定為001,剩余29個比特可以用于特性設置,用于激發(fā)某個特性,如果處理激發(fā)狀態(tài)則對應的位設置為1。比特幣系統(tǒng)更新過程有限狀態(tài)機DEFINED穩(wěn)定狀態(tài),還沒有開始升級,創(chuàng)世區(qū)塊被預定義為這個狀態(tài);STARTED提案進入投票開始狀態(tài);LOCKED_IN鎖定狀態(tài);ACTIVE激活狀態(tài);提案正式開始生效,網(wǎng)中所有區(qū)塊都已通過鎖定期;FAILED鎖定期內沒有達成投票成功的條件,不進行升級。3共識機制
比特幣共識算法
比特幣區(qū)塊鏈采用了ProofofWork(PoW)的機制來實現(xiàn)共識,比特幣系統(tǒng)所采用的工作量證明算法是,通過計算來猜測一個數(shù)值(Nonce),使得拼湊上交易數(shù)據(jù)后,進行哈希運算(Hash函數(shù)),其Hash值滿足規(guī)定的上限。Version:4字節(jié),區(qū)塊的版本號。hashPrevBlock:256位,前一個區(qū)塊的哈希值。hashMerkleRoot:256位,Merkle根哈希值。由區(qū)塊中包含的所有交易的哈希值運算得出的。nTime:4字節(jié),時間,礦工開始運算header哈希的那個時間點。nBits:4字節(jié),難度系數(shù)。Nonce:4字節(jié),滿足條件的隨機數(shù),礦工通過算力尋找的參數(shù)。比特幣共識算法
將區(qū)塊頭相關參數(shù)轉換成字節(jié)流,通過SHA265運算獲得HASH值,HASH值必須nBits設定的難度系數(shù)條件。礦工通過調整Nonce的值,來尋找滿足條件的Nonce,礦工只能通過暴力破解的方法,也即在Nonce范圍內遍歷的方法尋找滿足條件的Nonce。誰的運算速度快,也就是誰的算力大,找到符合條件的Nonce的可能性就越大。
比特幣系統(tǒng)設定一個難度目標值,如果運算哈希值小于目標值,則表示找到滿足條件的Nonce,挖礦成功。即需要滿足公式:sha256(blockheader)<=target
比特幣系統(tǒng)中第一區(qū)塊稱之為創(chuàng)世區(qū)塊,初始難度目標值為:0x00000000FFFF0000000000000000000000000000000000000000000000000000
在比特幣系統(tǒng)中,難度目標值越小,挖礦難度就越大,因為哈希值目標值的范圍會越?。环粗y度值越大,挖礦難度就越小。比特幣共識算法
為表示目標哈希值有效字節(jié)數(shù),比特幣系統(tǒng)采用壓縮表示法,由一個4字節(jié)的整數(shù)表示壓縮存儲目標值。表示方法為:
第1個字節(jié)存儲目標值有效的字節(jié)數(shù),記為Ex;后3個字節(jié)為目標值的最高3個字節(jié),記為C1。
如果目標值的最高位為1(大于0x80),需要在前面補上0x00。這里有效字節(jié)數(shù)Ex包含后3個字節(jié)C1。如上述創(chuàng)世區(qū)塊初始難度目標值去掉前面的0,其目標值FFFF0000000000000000000000000000000000000000000000000000,共28個字節(jié),由于最高位為1,因此前面補上00,因此有效字節(jié)數(shù)為:29個,16進制表示為1D,目標值最高3個字節(jié)為:00FFFF,這時壓縮表示為:0x1D00FFFF比特幣共識算法
另外一個參數(shù)是難度,是挖礦困難程度的度量,表示的是創(chuàng)世區(qū)塊的難度目標值的比值,即指:相對創(chuàng)世區(qū)塊的難度。定義如下:Difficulty=Difficulty_1_target/Cur_target
difficulty_1_target的長度為256bit,前32位為0,后面全部為1,以16進制表示為:0x00000000FFFF0000000000000000000000000000000000000000000000000000表示比特幣網(wǎng)絡創(chuàng)世區(qū)塊的難度目標值,以難度目標表示法為,0x1d00ffff。因此,創(chuàng)世區(qū)塊的難度為1.
Cur_target當前難度目標值。如上述難度目標值的難度為:0x00000000FFFF0000000000000000000000000000000000000000000000000000/0x00000000000404CB000000000000000000000000000000000000000000000000=16307.420938523983bdiff這里bdiff表示本單位是比特幣挖礦難度。比特幣共識算法
比特幣網(wǎng)絡有一個全局的區(qū)塊難度,礦池也會有一個自定義的共享難度用來設定產(chǎn)生股份的最低難度限制。
比特幣網(wǎng)絡中算力是持續(xù)波動的,比特幣系統(tǒng)通過難度目標的調整,使得平均出塊時間維持在10分鐘左右。當區(qū)塊高度為2016的整數(shù)倍時,比特幣系統(tǒng)就會在該區(qū)塊上自動調整難度目標,也就是比特幣系統(tǒng)每大約14天調整一次挖礦難度。如果上一個難度目標調整周期內,平均出塊時間超過10分鐘,那么降低挖礦難度,增大難度目標;反之則提高挖礦難度,減小難度目標。
難度目標值每過2016塊改變一次,計算公式:TarNew=TarCur*ActTime2016/TheoryTime2016
TarNew:新難度目標值;
TarCur:當前難度目標值
ActTime2016:實際2016個區(qū)塊的出塊時間
TheoryTime2016:理論2016個區(qū)塊出塊時間也就是2周比特幣共識算法
比特幣系統(tǒng)更新難度目標值的算法如下:1)當前區(qū)塊高度是否2016的整數(shù)倍,如果不是則繼續(xù)使用原來難度目標值,否則下一步;
2)計算最近2016個區(qū)塊出塊用時;
3)如果用時低于半周,則按半周計算。防止難度增加4倍以上。如果用時高于8周,則按8周計算。防止難度降低到4倍以下。
4)按照公式8-3計算新的目標難度,如果新目標值,超過最大難度限制,則按最大難度處理,
5)調整為新的難度目標。挖礦是尋找滿足條件的Nonce,由于其他數(shù)據(jù)值是固定的,因此,相當于建立一個自變量為Nonce函數(shù)映射,自變量Nonce的范圍只有4個字節(jié),而目標Hash值是一個長度32字節(jié)即256位,自變量的變化范圍遠小于應變量的范圍。必然存在可能無法找到符合提交件Nonce,未解決這個問題,比特幣系統(tǒng)采用擴展Nonce的方法,在Nonce之外,再存儲一些擴展字段,見這些擴展字段數(shù)據(jù)和Nonce以及其他頭數(shù)據(jù)一起Hash后滿足目標條件。這些擴展字段數(shù)據(jù)稱之為ExtraNonce。由于區(qū)塊中存儲的第一個交易為獎勵挖礦者的區(qū)塊交易,稱之為Coinbase交易,ExtraNonce存儲在Coinbase交易的數(shù)據(jù)區(qū)中。比特幣挖礦
找到符合條件的Nonce就可以獲得創(chuàng)建區(qū)塊的權利,創(chuàng)建區(qū)塊者將獲得一定的獎勵,包括兩部分:創(chuàng)建區(qū)塊獎勵和交易的費用獎勵,前者產(chǎn)生新的比特幣。創(chuàng)建區(qū)塊獎勵最初為50個比特幣,且每開采210000個區(qū)塊其獎勵減半,由于比特幣系統(tǒng)大約每十分鐘產(chǎn)生一個新區(qū)塊,其減半周期為4年。在2040年后,之后新的區(qū)塊不再包含比特幣獎勵,礦工的收益全部來自交易費。
挖礦計算的是基于SHA256的HASH算法,基于SHA256運算速度越快,就能獲得競爭優(yōu)勢,為此針對的SHA256算法特點,人們硬件上專門開發(fā)了有SHA256算法運算優(yōu)勢的計算機,這就是所謂礦機。評價礦機的指標主要是算力,算力單位指標定義如下:
H/s:算力最小的單位,每秒做一次SHA256運算,叫做Hash/s單位簡寫成H/s。
KH/s:1KH/s=1000H/s每秒1,000次哈希
MH/s:1MH/s=1000KH/s每106次哈希
GH/s:1GH/s=1000MH/s每秒109次哈希
TH/s:1TH/s=1000GH/s每秒1012次哈希
PH/s:1PH/s=1000TH/s每秒1015次哈希
EH/s:1EH/s=1000PH/s每秒1018次哈希比特幣挖礦
2020年7月,比特幣的全網(wǎng)算力為121.12EH/s
目前,比特幣挖礦經(jīng)歷了三個階段,CPU、GPU、ASIC。如下:
CPU(中央處理器,CentralProcessingUnit):相當于利用普通的電腦進行挖礦。CPU是只能進行順序串行處理,一個CPU只能處理一個任務,但是有很強的通用性,能處理各種不同的數(shù)據(jù)類型及任務;
GPU(圖像處理單元,GraphicsProcessingUnit):就是利用顯卡進行挖礦,這是因為
顯卡中的GPU對SHA256運算比CPU有優(yōu)勢。GPU是針對圖像像素處理的,特點是數(shù)據(jù)類型、運算類型簡單,重復性高、可并行計算等,因此GPU的設計特點是則擁有一個由數(shù)以千計的、更小的、更高效的計算核心組成的大規(guī)模并行計算架構,適合并行大量的簡單運算,因此GPU在高效并發(fā)處理方面有極大的優(yōu)勢。
ASIC(特定應用集成電路,ApplicationSpecificIntegratedCircuit):ASIC是一種專門為比特幣挖礦設計的集成電路,以2012年阿瓦隆生產(chǎn)出世界上第一臺ASIC礦機為代表。ASIC礦機則是指使用ASIC芯片作為核心運算零件的礦機,ASIC比特幣礦機是一臺專門從事比特幣采礦程序的計算機,是針對SHA256算法而進行優(yōu)化的專用挖礦硬件。比特幣挖礦
單個礦工從概率上講都可能挖礦成功,但是實際上,由于概率太低,可能十年都無法成功一次,找到一個區(qū)塊以抵消電力和硬件成本的可能性非常小。因此,礦工們合作組成礦池,匯集數(shù)以千計參與者們的算力并分享獎勵。通過參加礦池,礦工們得到整體回報的一小部分,因而減少了不確定性。
在礦池機制中,不論個人礦工所能使用的運算力多寡,只要是透過加入礦池來參與挖礦活動,無論是否有成功挖掘出有效資料塊,都可以通過由對礦池的貢獻度來獲得少量比特幣獎勵。下圖是2020年8月4日顯示的全球礦池算力圖。比特幣挖礦
礦機、礦池形成了另一個網(wǎng)絡,稱之為礦工網(wǎng)絡。礦工網(wǎng)絡分成礦機、礦池、錢包等幾個主要部分。礦工網(wǎng)絡采用的網(wǎng)絡協(xié)議稱之為挖礦協(xié)議,當前主要采用Stratum協(xié)議。Stratum協(xié)議通信格式采用JSON數(shù)據(jù)格式,傳輸層采用TCP協(xié)議,其中礦池為服務器端。Stratum協(xié)議采用主動分配任務的方式:礦池方面,隨時可以給礦工指派新任務;礦工方面,收到礦池指派的新任務時,應立即無條件轉向新任務,同時礦工可以主動向礦池申請新任務。礦工與礦池之間的通信過程如下:比特幣挖礦
1.任務訂閱
礦機啟動,和礦池建立連接后,提交subscribe方法,消息內容如下:{"id":1,"method":"mining.subscribe","params":[]}
礦池收到礦機的訂閱消息后,響應消息內容如下:
id與礦機訂閱消息中id相同。result包含三部分:
第一部分可選,對應不同方法的id;
第二部分是extraNonce1用于構建coinbase交易;
第三部分是extraNonce2的長度,礦機ExtraNonce2計數(shù)器的字節(jié)數(shù),一般為4字節(jié)。比特幣挖礦
2.請求授權
礦機以mining.authorize方法,帳號和密碼登錄到礦池,密碼可空,礦池返回true登錄成功。該方法必須是在初始化連接之后馬上進行,否則礦機得不到礦池任務。如:{"id":2,"method":"mining.authorize","params":["slu.miner1","password"]}
礦池收到礦機的授權消息后,先對礦工名進行驗證,礦工名的第一部分(“.”左邊的部分)為用戶名或子賬號名,若該用戶名不存在,則授權失敗,返回error,消息內容如下:{"id":2,"result":null,"error":[29,"Invalidusername",null]}
若成功,則返回如下消息:{"id":2,"result":true,"error":null}
只有被礦池授權的礦工才能收到礦池指派任務。比特幣挖礦
3.任務分配該命令由礦池定期發(fā)給礦機,礦池以mining.notify返回該任務。如下:比特幣挖礦
4.挖礦①構建coinbase用到的信息包括Coinb1,Extranonce1,Extranonce2_size以及Coinb2,方法如下:Coinbase=Coinb1+Extranonce1+Extranonce2+Coinb2②構建Merkleroot利用coinbase和merkle_branch,按照構造hashMerkleroot③構建區(qū)塊頭開始挖礦填充余下的5個字段,礦池可以在nNonce和Extranonce2里搜索進行挖礦,如果搜索空間還不夠,增加Extranonce2_size大小。比特幣挖礦
5.結果提交如果礦機挖礦成功發(fā)現(xiàn)一個nonce,則提交給礦池,消息格式如下:礦池返回結果,返回true表示礦池認可礦機的工作比特幣挖礦
6.難度調整當比特幣系統(tǒng)難度調整時,礦池通知礦機調整難度,消息格式如下:Server:{"id":null,"method":"mining.set_difficulty","params":[123]}其中,"params":[123]便是新難度值。123表示新難度是創(chuàng)世區(qū)塊難度的123倍。4區(qū)塊及交易存儲結構
區(qū)塊結構
區(qū)塊鏈是以塊式存儲,每個區(qū)塊都通過一個數(shù)值(前一區(qū)塊哈希值)指向前一個區(qū)塊,每個區(qū)塊都是鏈式結構中的一節(jié),區(qū)塊與區(qū)塊連成一個鏈條,從而構成了鏈式存儲。
比特幣的區(qū)塊數(shù)據(jù)里包含了比特幣鏈上的所有核心信息,在網(wǎng)站/explore可以查詢到所有的區(qū)塊信息,下表顯示了較新區(qū)塊第642274的區(qū)塊信息。區(qū)塊結構
在每個區(qū)塊中分區(qū)塊頭和區(qū)塊體。區(qū)塊頭主要用來存儲本區(qū)塊的一些相關屬性,區(qū)塊體則用來存儲交易數(shù)據(jù)記錄。區(qū)塊頭由80個字節(jié)構成,如圖所示。
其中:
所有數(shù)據(jù)采用小端格式編碼,即低有效位放在前面;
時間戳表示的是自1970年1月1日0時0分0秒以來的秒數(shù),小端格式編碼;
版本號為4字節(jié)無符號整數(shù),創(chuàng)世區(qū)塊的版本號。區(qū)塊結構
整個區(qū)塊體中實際上由一個個交易構成,每一筆交易的輸入引用的是上一筆交易的輸出。如圖9-11為比特幣系統(tǒng)中交易輸入輸出的過程:圖中可以看出,對于每個普通的交易都包含了若干個輸入和若干個輸出,且輸入和輸出的個數(shù)至少為1。一個交易的輸出可以成為另一個交易的輸入。如交易TX2由一個輸入為50K和兩個輸出分別為20K組成,假設該交易的付款方為A,而交易的收款方為B,則TX2交易表示:A消費了50K交易給B,這50K來自于交易TX0的輸出,接下來B消費了其中的40K分別在交易TX4、TX5中消費,單從交易TX2來看,如果沒有交易費用給礦工,B還有10K沒有消費。B錢包的所有余額就是計算B參與的所有交易中,沒有花費的輸出。這就是UTXO(UnspentTransactionOutputs,未使用過的交易輸出),交易過程中的錢包余額是一個錢包地址的UTXO集合。B將來再參與交易消費時,只能使用這些UTXO參與。區(qū)塊及交易信息查看
通過網(wǎng)站/btc可以在線查詢比特幣系統(tǒng)的所有區(qū)塊以及區(qū)塊中的所有交易情況。如輸入/btc/blocks?page=1,獲得當前最新挖出的區(qū)塊。圖9-12顯示2020年8月6日最新挖出的區(qū)塊。5比特幣運行
五比特幣運行
比特幣的運行機制就是,不斷產(chǎn)生新的交易以及新的區(qū)塊的過程,同時,依據(jù)比特幣機制,需要將這些交易及產(chǎn)生的區(qū)塊廣播于網(wǎng)絡,被其他節(jié)點驗證。比特幣的運行分為兩個步: 1.交易構建及驗證 2.區(qū)塊構建及傳播五比特幣運行
1.交易構建及驗證假如,A通過自己的錢包向B轉賬,交易構建過程如下:1.1構建交易。(1)交易輸入vin:從UTXO集中找到UTXO,并且獲得這些UTXO對應的交易Hash值以及在前交易中的索引,尋找最接近交易目標的前交易輸出,作為新交易的輸入。A用自己的私鑰創(chuàng)建簽名,然后對前交易的鎖定腳本進行解鎖,做為新交易的輸入,對新的交易進行簽名,生成解鎖腳本。(2)計算手續(xù)費,設定找零地址并計算找零。(3)構建交易輸出vout生成交易Hash,利用ECDSA簽名算法對交易進行簽名,生成鎖定腳本。五比特幣運行
1.2廣播驗證交易
構建交易后,該節(jié)點通過比特幣網(wǎng)絡向已連接的臨近完全節(jié)點廣播該交易,完全節(jié)點收到交易后,首先根據(jù)比特幣系統(tǒng)的要求驗證交易的正確性,包括以下信息:
①交易語法與數(shù)據(jù)是否正確;
②輸入與輸出列表都不能空;
③交易大小小于(1M);
④0<輸出值與總量<2100萬,0<輸入值與總量<2100萬,輸入值的總和小于輸出值的總和;
⑤哈希值不能為零、序列號N不能為-1
⑥驗證解鎖腳本、鎖定腳本(scriptPubkey)是
⑦交易費用要高于一定值根據(jù)本節(jié)點所存儲的區(qū)塊鏈中該交易的相關信息,驗證該交易。驗證以下信息:
①輸入交易是否是對應前交易的輸出
②如果是輸入交易coinbase交易,是否已經(jīng)過100個確認
③每一個輸入的解鎖腳本必須依據(jù)前交易中輸出交易的鎖定腳本來驗證。五比特幣運行
1.3.打包交易
每個驗證的完全節(jié)點驗證交易后,會把收到的交易放到一個叫臨時交易池。
每個交易收款方,也要驗證交易的付款方使用的未花費的交易輸出UTXO是否合法;每個交易廣播于網(wǎng)絡后,要被比特幣網(wǎng)絡中的其他節(jié)點驗證其正確性;驗證交易付款方的UTXO是否合法,以及是否存在雙花等問題。交易的接受者要驗證交易的付款方的UTXO的合法性的問題。
作為參與交易方不可能要都擁有所有區(qū)塊鏈信息,為此,采用“簡單支付驗證”(SimplifiedPaymentVerification)機制。
簡化支付驗證(SPV)方法用于允許在不存儲完整區(qū)塊鏈的情況下運行。這些類型的客戶端稱為SPV客戶端或輕客戶端。隨著比特幣采用率的增加,SPV節(jié)點正成為比特幣節(jié)點的最常見形式,尤其是對于比特幣錢包而言。
SPV節(jié)點只保存區(qū)塊頭。而需要不保存每一筆交易,因此,相比完全節(jié)點下載所有區(qū)塊信息,SPV下載的數(shù)據(jù)量大為減少。五比特幣運行
SPV節(jié)點可以做如下工作:
SPV節(jié)點可以獨立地驗證任何一筆鏈上交易的是否存在。驗證原理是,查詢每個交易的輸入交易Hash值所在的區(qū)塊,利用Merkle機制對輸入交易進行驗證。
其次,SPV節(jié)點可以獨立地驗證新的區(qū)塊是否符合工作量證明。SPV節(jié)點可以隨時從比特幣網(wǎng)絡的完全節(jié)點同步最新的區(qū)塊頭,獨立地計算新的區(qū)塊頭的哈希值,驗證其是否符合工作量證明。
最后,SPV節(jié)點封裝成錢包后可以保存自己關心的數(shù)據(jù)。普通用戶使用SPV錢包進行日常支付。SPV錢包里包含了對使用者重要的交易數(shù)據(jù)。如自己左右參與交易的信息,從而可以獲得自己的UTXO。
使用SPV簡單支付驗證,可以節(jié)省一大筆存儲空間,無論未來交易量有多大,區(qū)塊頭保存的數(shù)據(jù)(哈希值)都是固定80個字節(jié),按照每小時6個的出塊速度,每年產(chǎn)出52560個區(qū)塊。當只保存區(qū)塊頭時,每年新增的存儲需求約為4兆字節(jié)五比特幣運行
2.區(qū)塊構建及傳播對于挖礦節(jié)點,需要的比特幣的共識期間進行挖礦,如果挖礦成功,所在的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 涉及打胎的孕婦離婚協(xié)議書(2025年版)6篇
- 二零二五版居民內地與香港離婚登記手續(xù)全程輔導合同3篇
- 2025年度個人養(yǎng)老貸款保證擔保合同樣本4篇
- 二零二五美容院美容師形象設計與推廣服務合同4篇
- 2025年度個人沙石加工及銷售一體化合同4篇
- 2025年度虛擬現(xiàn)實內容制作與版權保護合同3篇
- 2025年度露營裝備租賃與售后服務合同范本3篇
- 二零二五年度高端U盤定制銷售合同范本2篇
- 二零二五版模具制造設備租賃及質量控制協(xié)議4篇
- 鄭州電力職業(yè)技術學院《色彩學》2023-2024學年第一學期期末試卷
- 垃圾處理廠工程施工組織設計
- 天皰瘡患者護理
- 2025年蛇年新年金蛇賀歲金蛇狂舞春添彩玉樹臨風福滿門模板
- 四川省成都市青羊區(qū)石室聯(lián)中學2024年八年級下冊物理期末學業(yè)水平測試試題含解析
- 門診導醫(yī)年終工作總結
- 新生物醫(yī)藥產(chǎn)業(yè)中的人工智能藥物設計研究與應用
- 損失補償申請書范文
- 壓力與浮力的原理解析
- 鐵路損傷圖譜PDF
- 裝修家庭風水學入門基礎
- 移動商務內容運營(吳洪貴)任務二 社群的種類與維護
評論
0/150
提交評論