你知道礦工在挖什么嗎盏缤?| 小白學(xué)比特幣之三

本文目錄
1. 什么是挖礦
2. 什么是礦工
3. 挖礦四步驟
-- 3.1. 驗(yàn)證交易
-- 3.2. 把交易加入?yún)^(qū)塊
-- 3.3. 驗(yàn)證區(qū)塊
-- 3.4. 把區(qū)塊加入主鏈

1. 什么是挖礦

比特幣系統(tǒng)中,挖礦主要有兩個(gè)目的:

  1. Mining nodes validate all transactions by reference to bitcoin's consensus rule. Therefore, mining provides security for bitcoin transactions by rejecting invalid or malformed transactions. (From Mastering Bitcoin)

第一個(gè)目的是蘸际,挖礦根據(jù)比特幣共識(shí)來驗(yàn)證所有交易寸爆。因此,挖礦通過拒絕非法或者異常的交易來為比特幣交易提供安全保障箍铭。

  1. Mining creates new bitcoin in each block, almost like a central bank printing new money. The amount of bitcoin created per block is limited and diminishes with time , following a fixed issuance schedule. (From Mastering Bitcoin)

第二個(gè)目的是,挖礦會(huì)在每個(gè)區(qū)塊里產(chǎn)生新的比特幣椎镣,就像中央銀行印錢一樣诈火。每個(gè)區(qū)塊所能產(chǎn)生的比特幣是有限的,并且會(huì)隨著時(shí)間遞減衣陶。

總的來說柄瑰,挖礦行為主要是為整個(gè)比特幣系統(tǒng)提供安全保障闸氮,并且產(chǎn)生新的比特幣剪况。

挖礦,其實(shí)是一種比喻的說法蒲跨。比特幣的總量是2100萬枚译断,是限量供應(yīng)。就像其他稀有金屬一樣(比如黃金)或悲,總量有限孙咪,每開采一點(diǎn),可使用量也會(huì)變少巡语。

2. 礦工

之前提到過翎蹈,比特幣是一個(gè)點(diǎn)對(duì)點(diǎn)的電子現(xiàn)金系統(tǒng)。這里的“點(diǎn)”就是節(jié)點(diǎn)(node)男公,所謂節(jié)點(diǎn)就是指運(yùn)行了比特幣軟件的計(jì)算機(jī)荤堪。每個(gè)人都可以成為一個(gè)節(jié)點(diǎn),只要你在計(jì)算機(jī)上安裝了比特幣軟件枢赔,然后你的計(jì)算機(jī)就會(huì)自動(dòng)在網(wǎng)絡(luò)上傳播比特幣交易澄阳。有些節(jié)點(diǎn)會(huì)把交易加入到區(qū)塊,放到區(qū)塊鏈上踏拜,這樣的節(jié)點(diǎn)就是挖礦節(jié)點(diǎn)(mining node)碎赢,也就是我們通常所說的礦工(miner)。當(dāng)然速梗,也可以用礦工來代指維護(hù)挖礦節(jié)點(diǎn)的人肮塞。

3. 挖礦四步驟

比特幣挖礦有四個(gè)步驟:

  1. 驗(yàn)證交易
  2. 把已驗(yàn)證交易加入?yún)^(qū)塊
  3. 驗(yàn)證區(qū)塊
  4. 把已驗(yàn)證區(qū)塊加到鏈上

3.1 驗(yàn)證交易

任何比特幣節(jié)點(diǎn)接收到一筆比特幣交易后第一件事就是驗(yàn)證這筆交易襟齿。有一個(gè)標(biāo)準(zhǔn)清單來驗(yàn)證一筆交易是否合法有效,這個(gè)清單里所包含的檢查條目有十幾條枕赵,就不一一翻譯了蕊唐,可以在這個(gè)網(wǎng)址上看到詳細(xì)條目https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch10.asciidoc

3.2 把已驗(yàn)證交易加入?yún)^(qū)塊

被驗(yàn)證過的交易會(huì)放在記憶池里 (memory pool) 或者交易池(transaction pool)里。礦工會(huì)構(gòu)建一個(gè)新的空區(qū)塊烁设,并從記憶池里收集一些交易放入到這個(gè)區(qū)塊中替梨。那么這個(gè)新的區(qū)塊包含什么東西呢?總的來說装黑,每個(gè)區(qū)塊里包含的信息如下:

  • coinbase交易
  • 已驗(yàn)證交易若干
  • 交易費(fèi)用
  • 區(qū)塊頭(Block Header)

3.2.1 Coinbase交易

coinbase交易副瀑,每個(gè)區(qū)塊里的第一筆交易就叫做coinbase交易(coinbase transaction),這筆交易里只包含了一個(gè)輸入(Input), 叫做coinbase恋谭,用來創(chuàng)建新比特幣糠睡。實(shí)際上,coinbase只是一個(gè)"空白"輸入("blank" input)疚颊。

每個(gè)新區(qū)塊所產(chǎn)生的比特幣數(shù)量是每21萬個(gè)區(qū)塊后(大約四年)自動(dòng)減半的狈孔,下面這張圖就是每21萬個(gè)區(qū)塊后,每個(gè)區(qū)塊可以產(chǎn)生的新比特幣數(shù)量材义。


比特幣產(chǎn)量圖均抽,source: http://www.lothar.com/presentations/bitcoin-brownbag/master.html

3.2.2 區(qū)塊頭(Block Header)

區(qū)塊頭主要是用來識(shí)別一個(gè)區(qū)塊,其實(shí)就像是一堆元數(shù)據(jù)(metadata)其掂,相當(dāng)于iPhone手機(jī)里的“關(guān)于本機(jī)“信息油挥。區(qū)塊頭包含的數(shù)據(jù)如下圖所示:


區(qū)塊頭結(jié)構(gòu)
  • Version,版本款熬, 指這個(gè)協(xié)議版本深寥,也就是比特幣軟件版本。

  • Previous Block Hash贤牛, 上一個(gè)區(qū)塊哈希值惋鹅。

  • Merkle Root,默克爾樹殉簸。用默克爾樹這種方法將這個(gè)區(qū)塊里的所有交易ID(TXIDs)進(jìn)行配對(duì)后闰集,進(jìn)行哈希SHA256運(yùn)算后,會(huì)產(chǎn)生一個(gè)特定的值喂链。

  • Timestamp, 時(shí)間戳返十,當(dāng)前時(shí)間,相當(dāng)于創(chuàng)建這個(gè)區(qū)塊時(shí)的時(shí)間點(diǎn)椭微。

  • Bits洞坑,用來存儲(chǔ)當(dāng)前系統(tǒng)的target用的,是難度值(Target)的簡(jiǎn)化版蝇率,系統(tǒng)將target變成bits存放在當(dāng)前區(qū)塊里迟杂。當(dāng)一個(gè)區(qū)塊頭的數(shù)據(jù)哈希SHA256運(yùn)算后得出的值刽沾,要小于或者等于這個(gè)target。


    Bits轉(zhuǎn)成Target, source: http://learnmeabitcoin.com/glossary/bits
  • Nonce, 是一個(gè)需要去“猜”的數(shù)字, 用這個(gè)數(shù)字來和區(qū)塊頭里的其他數(shù)據(jù)進(jìn)行哈希運(yùn)算(也就是猜數(shù)字)排拷。從0開始猜侧漓,如果0不對(duì),就1监氢,1不對(duì)布蔗,就2,這樣遞增下去浪腐。直到這個(gè)數(shù)字返回一個(gè)區(qū)塊哈希值小于目標(biāo)難度值(target nBits)纵揍。

礦工要“猜”的數(shù)字NONCE
礦工要“猜”的數(shù)字NONCE议街。
礦工要“猜”的數(shù)字NONCE泽谨。

用一個(gè)簡(jiǎn)單的不等式來表示就是:

Hash Function H(Nonce+一個(gè)區(qū)塊里其他數(shù)據(jù))= Block Hash ≤ 當(dāng)前Target

猜Nonce失敗特漩;source: http://learnmeabitcoin.com/glossary/nonce

Nonce和這個(gè)區(qū)塊里的其他數(shù)據(jù)經(jīng)過哈希運(yùn)算后吧雹,得到一個(gè)值,這個(gè)值要小于等于target nBits涂身。在這樣的情況下雄卷,這位礦工在這個(gè)10分鐘的競(jìng)賽中獲得了勝利。同時(shí)访得,他需要把這個(gè)得到答案的區(qū)塊傳給其他節(jié)點(diǎn)龙亲,接下來需要其他節(jié)點(diǎn)對(duì)這個(gè)區(qū)塊進(jìn)行驗(yàn)證陕凹,這樣悍抑,他就可以獲得新的比特幣以及交易費(fèi)用。


猜Nonce成功杜耙,WIN! Source: http://learnmeabitcoin.com/glossary/nonce

根據(jù)以上的描述搜骡,一個(gè)區(qū)塊包含的主要信息就如下圖所示:


比特幣區(qū)塊結(jié)構(gòu)圖 Source http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html

在網(wǎng)頁前端里顯示如下,https://blockchain.info/block-height/286819

區(qū)塊信息

3.2.3 驗(yàn)證區(qū)塊

既然一位礦工聲稱自己是第一個(gè)解出難題的人佑女,那么其他礦工需要對(duì)他的答案進(jìn)行驗(yàn)證记靡。那么,跟驗(yàn)證交易一樣团驱,驗(yàn)證區(qū)塊也需要符合一些列的標(biāo)準(zhǔn)摸吠,通過驗(yàn)證后才能成為有效區(qū)塊放到網(wǎng)絡(luò)上,這些驗(yàn)證標(biāo)準(zhǔn)是:

  • The block data structure is syntactically valid 區(qū)塊數(shù)據(jù)結(jié)構(gòu)語法有效
  • The block header hash is less than the target (enforces the Proof-of-Work) 區(qū)塊頭的哈希值小于目標(biāo)難度值
  • The block timestamp is less than two hours in the future (allowing for errors) 區(qū)塊的時(shí)間戳小于未來兩小時(shí)
  • The block size is within acceptable limits 區(qū)塊的大小是在限定范圍內(nèi)(比特幣每個(gè)區(qū)塊大小限制在1MB以內(nèi))
  • The first transaction (and only the first) is a coinbase transaction (第一筆交易是coinbase交易)
  • All transactions within the block are valid using the transaction checklist discussed in "verification of Transactions" (這個(gè)區(qū)塊里的所有交易都是合法有效的)

3.2.4 把區(qū)塊加入到主鏈接上

當(dāng)一個(gè)節(jié)點(diǎn)收到一個(gè)新的已被驗(yàn)證過的區(qū)塊后嚎花,這個(gè)節(jié)點(diǎn)會(huì)看一下這個(gè)區(qū)塊的上一個(gè)區(qū)塊哈希值寸痢,看看它的“爹”是誰,然后把這個(gè)區(qū)塊的“爹”找到紊选,把這個(gè)區(qū)塊接到它“爹”后面啼止,這樣一個(gè)區(qū)塊就被正式的納入到區(qū)塊鏈主鏈上(main chain)了道逗,一個(gè)有效的鏈才算成功的“長(zhǎng)高”了。

參考文獻(xiàn)

[1] Mastering Bitcoin 第二版 https://github.com/bitcoinbook/bitcoinbook
[2] http://learnmeabitcoin.com/glossary/nonce
[3] https://www.coindesk.com/information/how-bitcoin-mining-works/


ChangeLog

  • 20180317 更新3.2.4 把區(qū)塊加入到主鏈接上內(nèi)容
  • 20180316 修改標(biāo)題為“小白學(xué)比特幣”献烦,增加參考文獻(xiàn)
  • 20180315 修改關(guān)于coinbase交易描述
  • 20180314 修改標(biāo)題
  • 20180310 修改對(duì)于Bits的解釋滓窍;增加關(guān)于Nonce截圖;增加網(wǎng)頁前端區(qū)塊信息截圖
  • 20180307 首次發(fā)布
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巩那,一起剝皮案震驚了整個(gè)濱河市吏夯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌即横,老刑警劉巖锦亦,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異令境,居然都是意外死亡杠园,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門舔庶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛蚁,“玉大人,你說我怎么就攤上這事惕橙∏扑Γ” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵弥鹦,是天一觀的道長(zhǎng)肚逸。 經(jīng)常有香客問我,道長(zhǎng)彬坏,這世上最難降的妖魔是什么朦促? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮栓始,結(jié)果婚禮上务冕,老公的妹妹穿的比我還像新娘。我一直安慰自己幻赚,他們只是感情好禀忆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著落恼,像睡著了一般箩退。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佳谦,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天戴涝,我揣著相機(jī)與錄音,去河邊找鬼。 笑死喊括,一個(gè)胖子當(dāng)著我的面吹牛胧瓜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播郑什,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼府喳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蘑拯?” 一聲冷哼從身側(cè)響起钝满,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎申窘,沒想到半個(gè)月后弯蚜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剃法,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年碎捺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贷洲。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡收厨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出优构,到底是詐尸還是另有隱情诵叁,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布钦椭,位于F島的核電站拧额,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏彪腔。R本人自食惡果不足惜侥锦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漫仆。 院中可真熱鬧捎拯,春花似錦、人聲如沸盲厌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吗浩。三九已至,卻和暖如春没隘,著一層夾襖步出監(jiān)牢的瞬間懂扼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阀湿,地道東北人赶熟。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像陷嘴,于是被迫代替她去往敵國和親映砖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容