(六)區(qū)塊的生成、驗(yàn)證及挖礦

1. 交易的傳播和驗(yàn)證

  • 交易包含兩部分:n個(gè)輸入個(gè)m個(gè)輸出,其中n>=0征懈,m>0
    輸入=要花費(fèi)的UTXO+解鎖腳本
    輸出=UTXO(幣的數(shù)量+鎖定腳本)

  • 錢包生成交易,并向鄰近節(jié)點(diǎn)傳播揩悄。節(jié)點(diǎn)對(duì)收到的交易進(jìn)行驗(yàn)證卖哎,并丟棄不合法的交易。節(jié)點(diǎn)對(duì)交易的驗(yàn)證主要包括以下幾方面:

交易的size要小于區(qū)塊的size的上限
交易輸入U(xiǎn)TXO是存在的
交易輸入U(xiǎn)TXO沒有被其它交易引用-防止雙花(Double Spending)
輸入總金額>輸出總金額(多出來的錢是給曠工的小費(fèi))
解鎖腳本驗(yàn)證成功

驗(yàn)證合格后將交易加入到本地的Transaction數(shù)據(jù)庫中删性,并轉(zhuǎn)給鄰近節(jié)點(diǎn)亏娜,鄰近節(jié)點(diǎn)再做一遍驗(yàn)證然后再轉(zhuǎn)給鄰近的節(jié)點(diǎn)。

2.區(qū)塊的生成與驗(yàn)證

區(qū)塊結(jié)構(gòu).jpeg

區(qū)塊是區(qū)塊鏈的基本結(jié)構(gòu)單元蹬挺,由區(qū)塊頭和區(qū)塊主體構(gòu)成维贺。區(qū)塊體包括交易數(shù)量和交易詳情。

  • 挖礦之前需要先構(gòu)造區(qū)塊巴帮,首先將coinbase交易打包進(jìn)區(qū)塊 溯泣,然后將交易池中高優(yōu)先級(jí)的交易打包進(jìn)區(qū)塊。
  • 優(yōu)先級(jí)=交易額度*UTXO深度/交易size(防止粉塵攻擊)榕茧,粉塵攻擊是大量低額度垃沦、低交易費(fèi)的交易以至網(wǎng)絡(luò)擁堵。從理論上說一個(gè)交易如果交易費(fèi)為零用押,隨著UTXO深度的增加肢簿,優(yōu)先級(jí)也會(huì)變高,但事實(shí)上很多曠工會(huì)直接拒絕零交易費(fèi)的交易蜻拨。
  • 創(chuàng)建區(qū)塊的頭部池充,區(qū)塊頭包括版本號(hào) 、父區(qū)塊哈希(實(shí)際上是父區(qū)塊的區(qū)塊頭哈希值缎讼,用來回溯父區(qū)塊和保證父區(qū)塊不被篡改)收夸、Merkle樹根、時(shí)間戳休涤、難度目標(biāo)值咱圆、Nonce笛辟。
  • 挖礦成功后,將計(jì)算出來的隨機(jī)數(shù)Nonce填入?yún)^(qū)塊頭部序苏,向鄰近節(jié)點(diǎn)傳播手幢。

相鄰區(qū)塊收到新區(qū)快后,立即做以下驗(yàn)證:

驗(yàn)證POW的nonce值是否符合難度值
檢查時(shí)間戳是否小于當(dāng)前時(shí)間2小時(shí)
檢查Merkle樹根是否正確
檢查區(qū)塊size是否小于區(qū)塊size的上限
第一個(gè)交易必須是coinbase交易
驗(yàn)證每個(gè)交易

時(shí)間戳

  • 礦工們在挖礦的過程中忱详,對(duì)收集到的交易記錄加蓋數(shù)字時(shí)間戳围来,并將其打包到區(qū)塊中。而時(shí)間又不能從某個(gè)中心服務(wù)器獲取匈睁,這樣會(huì)違背去中心化思想监透。其實(shí)方法也很簡單,還是利用“多數(shù)人的正義”航唆,時(shí)間來自于連接的其他節(jié)點(diǎn)時(shí)間的中位數(shù)(比平均值更不受極端數(shù)字影響)胀蛮,要求連接的節(jié)點(diǎn)數(shù)量至少為5,中位數(shù)和本地系統(tǒng)時(shí)間差別不超過70分鐘糯钙,否則會(huì)提醒你更新本機(jī)的時(shí)間粪狼。

Merkle樹

  • 這里Merkle樹其實(shí)就是一顆二叉樹,首先對(duì)交易進(jìn)行兩次SHA256運(yùn)算得到相應(yīng)的哈希值任岸,然后對(duì)哈希值兩兩組隊(duì)再進(jìn)行兩次SHA256運(yùn)算再榄,如果交易數(shù)量為奇數(shù),則對(duì)最后一個(gè)哈希值進(jìn)行復(fù)制然后再做哈希運(yùn)算享潜。比如上圖如果再有個(gè)交易9困鸥,Hash9 = SHA256(SHA256(Transaction9)),Hash99 = SHA256(SHA256(Hash9 + Hash9))剑按。以此類推最后會(huì)得到一個(gè)Merkle root存入?yún)^(qū)塊頭中疾就。這樣任何一個(gè)交易被篡改,Merkle root必然發(fā)生改變吕座,區(qū)塊頭哈希值也就隨之改變虐译,之后所有的區(qū)塊都將是無效區(qū)塊。因此Merkle樹能夠校驗(yàn)數(shù)據(jù)完整性吴趴,防止數(shù)據(jù)被篡改漆诽。

  • 通過對(duì)一個(gè)區(qū)塊頭的所有信息進(jìn)行哈希運(yùn)算得出一個(gè)哈希值,此哈希值可以唯一并且準(zhǔn)確標(biāo)識(shí)這個(gè)區(qū)塊锣枝,只要其哈希值不發(fā)生變化厢拭,就代表區(qū)塊中的信息沒有被篡改。每個(gè)區(qū)塊頭都包含上一個(gè)區(qū)塊的區(qū)塊頭哈希值撇叁,這使得每一個(gè)區(qū)塊都能找到前一個(gè)區(qū)塊供鸠,這樣一直倒推就能形成一條完整的區(qū)塊鏈。

3.挖礦

  • 為什么要挖礦陨闹?
    當(dāng)用戶發(fā)布交易后楞捂,需要有人將交易進(jìn)行確認(rèn)薄坏,寫到區(qū)塊鏈中,形成新的區(qū)塊寨闹。在一個(gè)互相不信任的系統(tǒng)中胶坠,有誰來完成這件事情呢?怎么保證這個(gè)記賬的人不作惡呢繁堡?

  • 什么是挖礦沈善?
    就是對(duì)區(qū)塊頭進(jìn)行哈希運(yùn)算,通過不斷改變區(qū)塊頭中的nonce值來得出不同的哈希值椭蹄,如果哈希值小于系統(tǒng)給定的難度目標(biāo)值闻牡,就算挖礦成功,就能獲得記賬權(quán)绳矩,同時(shí)也能獲得獎(jiǎng)勵(lì)和這個(gè)區(qū)塊內(nèi)的所有交易費(fèi)罩润。因此如果這個(gè)節(jié)點(diǎn)作惡,那么別的節(jié)點(diǎn)將不會(huì)認(rèn)可這個(gè)區(qū)塊埋酬,這個(gè)區(qū)塊將會(huì)是白挖了哨啃,而且還白白浪費(fèi)了大量的算力。因此通過挖礦來保證節(jié)點(diǎn)不作惡写妥。比特幣系統(tǒng)規(guī)定每挖21萬個(gè)區(qū)塊獎(jiǎng)勵(lì)減半,到2140年比特幣將全部被挖出审姓,礦工挖礦將沒有獎(jiǎng)勵(lì)珍特,完全靠手續(xù)費(fèi)為生。

  • 有沒有可能找不到對(duì)應(yīng)的nonce值
    nonce占4個(gè)字節(jié)魔吐,就是32位扎筒,如果遍歷整個(gè)2^32后還沒算出來,可以通過改變交易的順序來改變Merkle root酬姆,再重新遍歷nonce嗜桌。

  • 難度調(diào)整
    比特幣平均每隔10分鐘出一個(gè)區(qū)塊,而算力是不斷增大的辞色。比特幣系統(tǒng)會(huì)每隔2016個(gè)區(qū)塊調(diào)整一次難度骨宠,新目標(biāo) = 當(dāng)前目標(biāo)值*過去2016個(gè)區(qū)塊用時(shí)分鐘 / 2016分鐘,難度值越大相满,目標(biāo)值越小层亿,挖礦也就越難。

  • 礦池
    由于全網(wǎng)算力越來越大立美,挖礦難度也越來越大匿又,單個(gè)曠工挖出礦的概率越來越小,因此收入就非常不穩(wěn)定〗ㄌ悖現(xiàn)在已經(jīng)很少有個(gè)人礦工了碌更,而是很多礦工一起組成礦池裕偿。礦池管理員維護(hù)全節(jié)點(diǎn),負(fù)責(zé)打包區(qū)塊痛单,并將任務(wù)分段击费,給礦工布置挖礦任務(wù)。比如A礦工負(fù)責(zé)0到10萬的nonce值的哈希運(yùn)算桦他,B負(fù)責(zé)10萬到20萬蔫巩,這樣挖礦速度就會(huì)大大提升。同時(shí)礦池內(nèi)部也會(huì)有一個(gè)難度值快压,通過計(jì)算每個(gè)礦工找到符合礦池難度值得數(shù)量來衡量礦工的算力圆仔。

比如礦池一天挖出100個(gè)比特幣,A礦工有10次nonce值計(jì)算的哈希值小于礦池難度目標(biāo)值蔫劣,而礦池所有礦工共有1000次符合的nonce值坪郭,則A礦工提供的算力占礦池的百分之一,應(yīng)獲得1個(gè)比特幣脉幢。至于交易費(fèi)歪沃,不同的礦池有不同的分發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嫌松,一起剝皮案震驚了整個(gè)濱河市沪曙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萎羔,老刑警劉巖液走,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贾陷,居然都是意外死亡缘眶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門髓废,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巷懈,“玉大人,你說我怎么就攤上這事慌洪《パ啵” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蒋譬,是天一觀的道長割岛。 經(jīng)常有香客問我,道長犯助,這世上最難降的妖魔是什么癣漆? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮剂买,結(jié)果婚禮上惠爽,老公的妹妹穿的比我還像新娘癌蓖。我一直安慰自己,他們只是感情好婚肆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布租副。 她就那樣靜靜地躺著,像睡著了一般较性。 火紅的嫁衣襯著肌膚如雪用僧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天赞咙,我揣著相機(jī)與錄音责循,去河邊找鬼。 笑死攀操,一個(gè)胖子當(dāng)著我的面吹牛院仿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播速和,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歹垫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颠放?” 一聲冷哼從身側(cè)響起排惨,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慈迈,沒想到半個(gè)月后若贮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痒留,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蠢沿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伸头。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舷蟀,靈堂內(nèi)的尸體忽然破棺而出恤磷,到底是詐尸還是另有隱情,我是刑警寧澤野宜,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布扫步,位于F島的核電站,受9級(jí)特大地震影響匈子,放射性物質(zhì)發(fā)生泄漏河胎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一虎敦、第九天 我趴在偏房一處隱蔽的房頂上張望游岳。 院中可真熱鬧政敢,春花似錦、人聲如沸胚迫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽访锻。三九已至褪尝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間期犬,已是汗流浹背河哑。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哭懈,地道東北人灾馒。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像遣总,于是被迫代替她去往敵國和親睬罗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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