比特幣挖礦算法

基礎(chǔ)數(shù)據(jù)

發(fā)行總量:2100萬(wàn)朽肥。
新區(qū)塊生成周期:約10分鐘梗脾。
挖礦難度調(diào)整周期:每2016個(gè)區(qū)塊,大約2個(gè)星期繁涂。
挖礦獎(jiǎng)勵(lì):比特幣的挖礦獎(jiǎng)勵(lì)來(lái)源于兩部分:

  • 創(chuàng)世區(qū)塊獎(jiǎng)勵(lì)50個(gè)比特幣拱她,以后每210000個(gè)區(qū)塊減半,即約4年調(diào)整一次扔罪。目前已經(jīng)經(jīng)歷了兩次減半秉沼,當(dāng)前的挖礦獎(jiǎng)勵(lì)為12.5個(gè)比特幣。
  • 比特幣的每個(gè)交易必須支付一定數(shù)額的手續(xù)費(fèi)給礦工矿酵。這個(gè)設(shè)定是為了防止惡意節(jié)點(diǎn)發(fā)送大量的垃圾交易對(duì)比特幣網(wǎng)絡(luò)進(jìn)行DOS攻擊唬复。

挖礦算法

挖礦參考算法:挖礦算法為SHA256。在挖礦過(guò)程中全肮,礦工將比特幣的80個(gè)字節(jié)長(zhǎng)度的區(qū)塊頭數(shù)據(jù)進(jìn)行兩次SHA256運(yùn)算盅抚,運(yùn)算結(jié)果就是一個(gè)256位(32字節(jié))長(zhǎng)度的字符串。通過(guò)比較與當(dāng)前難度值的大小判斷當(dāng)前區(qū)塊是否合法倔矾。即滿足下列條件:
SHA256(SHA256(block_header))< difficulty
如果不滿足上面的條件妄均,則需要在區(qū)塊頭中改變一下隨機(jī)值柱锹,或者使用隨機(jī)數(shù)據(jù)填充coinbase交易,這樣就能改變區(qū)塊頭的數(shù)據(jù)丰包,從而找到滿足條件的區(qū)塊禁熏。這就是PoW機(jī)制的精髓所在,使用單向函數(shù)邑彪,迫使礦工不斷地嘗試隨機(jī)數(shù)找到符合條件的區(qū)塊以完成一定的計(jì)算量瞧毙,保障系統(tǒng)的安全穩(wěn)定。

實(shí)例分析

為了更加深入理解比特幣的挖礦算法寄症,以一個(gè)實(shí)際的區(qū)塊數(shù)據(jù)為例宙彪。

首先獲取區(qū)塊號(hào)為100000的區(qū)塊原始數(shù)據(jù),可以在https://webbtc.com/block/000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506.hex上獲扔星伞:

0100000050120119172a610421a6c3011dd330d9df07b63616c2cc1f1cd00200000000006657a9252aacd5c0b2940996ecff952228c3067cc38d4885efb5a4ac4247e9f337221b4d4c86041b0f2b57100401000000010000000000000000000000000000000000000000000000000000000000000000ffffffff08044c86041b020602ffffffff0100f2052a010000004341041b0e8c2567c12536aa13357b79a073dc4444acb83c4ec7a0e2f99dd7457516c5817242da796924ca4e99947d087fedf9ce467cb9f7c6287078f801df276fdf84ac000000000100000001032e38e9c0a84c6046d687d10556dcacc41d275ec55fc00779ac88fdf357a187000000008c493046022100c352d3dd993a981beba4a63ad15c209275ca9470abfcd57da93b58e4eb5dce82022100840792bc1f456062819f15d33ee7055cf7b5ee1af1ebcc6028d9cdb1c3af7748014104f46db5e9d61a9dc27b8d64ad23e7383a4e6ca164593c2527c038c0857eb67ee8e825dca65046b82c9331586c82e0fd1f633f25f87c161bc6f8a630121df2b3d3ffffffff0200e32321000000001976a914c398efa9c392ba6013c5e04ee729755ef7f58b3288ac000fe208010000001976a914948c765a6914d43f2a7ac177da2c2f6b52de3d7c88ac000000000100000001c33ebff2a709f13d9f9a7569ab16a32786af7d7e2de09265e41c61d078294ecf010000008a4730440220032d30df5ee6f57fa46cddb5eb8d0d9fe8de6b342d27942ae90a3231e0ba333e02203deee8060fdc70230a7f5b4ad7d7bc3e628cbe219a886b84269eaeb81e26b4fe014104ae31c31bf91278d99b8377a35bbce5b27d9fff15456839e919453fc7b3f721f0ba403ff96c9deeb680e5fd341c0fc3a7b90da4631ee39560639db462e9cb850fffffffff0240420f00000000001976a914b0dcbf97eabf4404e31d952477ce822dadbe7e1088acc060d211000000001976a9146b1281eec25ab4e1e0793ff4e08ab1abb3409cd988ac0000000001000000010b6072b386d4a773235237f64c1126ac3b240c84b917a3909ba1c43ded5f51f4000000008c493046022100bb1ad26df930a51cce110cf44f7a48c3c561fd977500b1ae5d6b6fd13d0b3f4a022100c5b42951acedff14abba2736fd574bdb465f3e6f8da12e2c5303954aca7f78f3014104a7135bfe824c97ecc01ec7d7e336185c81e2aa2c41ab175407c09484ce9694b44953fcb751206564a9c24dd094d42fdbfdd5aad3e063ce6af4cfaaea4ea14fbbffffffff0140420f00000000001976a91439aa3d569e06a1d7926dc4be1193c99bf2eb9ee088ac00000000

獲取的數(shù)據(jù)是16進(jìn)制的释漆,其中前80個(gè)字節(jié)是區(qū)塊頭數(shù)據(jù)。對(duì)前80個(gè)字節(jié)數(shù)據(jù)進(jìn)行雙SHA256運(yùn)算篮迎,得到當(dāng)前區(qū)塊的哈希值男图。Go語(yǔ)言代碼如下:

package main

import (
    "crypto/sha256"
    "encoding/hex"
    "fmt"
)

const HashSize = 32
type Hash [32]byte

func (hash Hash) String() string {
    for i := 0; i < HashSize/2; i++ {
        hash[i], hash[HashSize-1-i] = hash[HashSize-1-i], hash[i]
    }
    return hex.EncodeToString(hash[:])
}

func main() {
    block, _ := hex.DecodeString("0100000050120119172a610421a6c3011dd330d9df07b63616c2cc1f1cd00200000000006657a9252aacd5c0b2940996ecff952228c3067cc38d4885efb5a4ac4247e9f337221b4d4c86041b0f2b57100401000000010000000000000000000000000000000000000000000000000000000000000000ffffffff08044c86041b020602ffffffff0100f2052a010000004341041b0e8c2567c12536aa13357b79a073dc4444acb83c4ec7a0e2f99dd7457516c5817242da796924ca4e99947d087fedf9ce467cb9f7c6287078f801df276fdf84ac000000000100000001032e38e9c0a84c6046d687d10556dcacc41d275ec55fc00779ac88fdf357a187000000008c493046022100c352d3dd993a981beba4a63ad15c209275ca9470abfcd57da93b58e4eb5dce82022100840792bc1f456062819f15d33ee7055cf7b5ee1af1ebcc6028d9cdb1c3af7748014104f46db5e9d61a9dc27b8d64ad23e7383a4e6ca164593c2527c038c0857eb67ee8e825dca65046b82c9331586c82e0fd1f633f25f87c161bc6f8a630121df2b3d3ffffffff0200e32321000000001976a914c398efa9c392ba6013c5e04ee729755ef7f58b3288ac000fe208010000001976a914948c765a6914d43f2a7ac177da2c2f6b52de3d7c88ac000000000100000001c33ebff2a709f13d9f9a7569ab16a32786af7d7e2de09265e41c61d078294ecf010000008a4730440220032d30df5ee6f57fa46cddb5eb8d0d9fe8de6b342d27942ae90a3231e0ba333e02203deee8060fdc70230a7f5b4ad7d7bc3e628cbe219a886b84269eaeb81e26b4fe014104ae31c31bf91278d99b8377a35bbce5b27d9fff15456839e919453fc7b3f721f0ba403ff96c9deeb680e5fd341c0fc3a7b90da4631ee39560639db462e9cb850fffffffff0240420f00000000001976a914b0dcbf97eabf4404e31d952477ce822dadbe7e1088acc060d211000000001976a9146b1281eec25ab4e1e0793ff4e08ab1abb3409cd988ac0000000001000000010b6072b386d4a773235237f64c1126ac3b240c84b917a3909ba1c43ded5f51f4000000008c493046022100bb1ad26df930a51cce110cf44f7a48c3c561fd977500b1ae5d6b6fd13d0b3f4a022100c5b42951acedff14abba2736fd574bdb465f3e6f8da12e2c5303954aca7f78f3014104a7135bfe824c97ecc01ec7d7e336185c81e2aa2c41ab175407c09484ce9694b44953fcb751206564a9c24dd094d42fdbfdd5aad3e063ce6af4cfaaea4ea14fbbffffffff0140420f00000000001976a91439aa3d569e06a1d7926dc4be1193c99bf2eb9ee088ac00000000")
    first := sha256.Sum256(block[:80])  // 選擇區(qū)塊的前80個(gè)字節(jié),即區(qū)塊頭數(shù)據(jù)甜橱,進(jìn)行第一次哈希運(yùn)算
    second := sha256.Sum256(first[:])   // 將第一次結(jié)果繼續(xù)哈希逊笆,得到第二個(gè)結(jié)果,該結(jié)果為區(qū)塊哈希值
    fmt.Printf("blockheader is: \n%x\n", block[:80])
    fmt.Printf("doublehash is:\n%v\n", Hash(second))
}

運(yùn)行結(jié)果為:

blockheader is:
0100000050120119172a610421a6c3011dd330d9df07b63616c2cc1f1cd00200000000006657a9252aacd5c0b2940996ecff952228c3067cc38d4885efb5a4ac4247e9f337221b4d4c86041b0f2b5710
doublehash is:
000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506

可以發(fā)現(xiàn)經(jīng)過(guò)兩次SHA256運(yùn)算之后得到的結(jié)果就是區(qū)塊哈希岂傲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末难裆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子镊掖,更是在濱河造成了極大的恐慌差牛,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堰乔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡脐恩,警方通過(guò)查閱死者的電腦和手機(jī)镐侯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)驶冒,“玉大人苟翻,你說(shuō)我怎么就攤上這事∑郏” “怎么了崇猫?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)需忿。 經(jīng)常有香客問(wèn)我诅炉,道長(zhǎng)蜡歹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任涕烧,我火速辦了婚禮月而,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘议纯。我一直安慰自己父款,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布瞻凤。 她就那樣靜靜地躺著憨攒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阀参。 梳的紋絲不亂的頭發(fā)上肝集,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音结笨,去河邊找鬼包晰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛炕吸,可吹牛的內(nèi)容都是我干的伐憾。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼赫模,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼树肃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瀑罗,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胸嘴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后斩祭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劣像,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年摧玫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耳奕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诬像,死狀恐怖屋群,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坏挠,我是刑警寧澤芍躏,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站降狠,受9級(jí)特大地震影響对竣,放射性物質(zhì)發(fā)生泄漏庇楞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一柏肪、第九天 我趴在偏房一處隱蔽的房頂上張望姐刁。 院中可真熱鬧,春花似錦烦味、人聲如沸聂使。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柏靶。三九已至,卻和暖如春溃论,著一層夾襖步出監(jiān)牢的瞬間屎蜓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工钥勋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炬转,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓算灸,卻偏偏與公主長(zhǎng)得像扼劈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子菲驴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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