時(shí)間:2021-11-20|瀏覽:508
1、block的版本version
2、上一個(gè)block的hash值: prev_hash
3.需要寫入的交易記錄hash樹的值: merkle_root
4.更新時(shí)間: ntime
5.當(dāng)前難度: nbits
挖掘的過程是找到x使得
SHA256(SHA256(version prev_hash merkle_root ntime nbits x )) TARGET
上式的x的范圍是0~2^32,TARGET可根據(jù)當(dāng)前難度求出。x另外,你可以嘗試改變merkle_root和ntime。由于hash尋找這樣的特征x只有暴力搜索。
一旦找到了x你可以廣播一個(gè)新的block其他客戶端會驗(yàn)證你的block是否合法block被接受,因?yàn)槊恳粋€(gè)block第一筆交易必須將新產(chǎn)生的25個(gè)比特幣發(fā)送到某個(gè)地址。當(dāng)然,你會把這個(gè)地址設(shè)置為你擁有的地址來獲得這25個(gè)比特幣。
比特幣從開始到現(xiàn)在的每一筆交易記錄都保存在互聯(lián)網(wǎng)上,整個(gè)比特幣網(wǎng)絡(luò)維護(hù)著一個(gè)巨大的交易記錄文件(現(xiàn)在大約12G)。本文件的平均更新周期為10分鐘,新增交易記錄稱為一個(gè)block這個(gè)巨大的文件是一串的block組成,叫做block chain.
為什么有25個(gè)比特幣??
這是規(guī)定。最初是50個(gè)比特幣,每產(chǎn)生剩馀比特幣的一半,這個(gè)收入就減半,最終產(chǎn)生的比特幣總量接近2100萬。如果你現(xiàn)在還聲稱挖了50個(gè)比特幣,那就不會被其他客戶接受block即使是白挖。
如何保證平均更新周期為10分鐘??
TARGET越小,解出x難度越大,每產(chǎn)生2016個(gè)block(約14天),網(wǎng)絡(luò)將根據(jù)期間產(chǎn)生新的block調(diào)整平均間隔后TARGET。
計(jì)算速度最快的人總是先解決嗎??
不是。你總是想把礦業(yè)收入據(jù)為己有,所以每個(gè)人在計(jì)算的時(shí)候,發(fā)送礦業(yè)收入的地址是不一樣的,這樣merkle_root也就是說,每個(gè)人都是從不同的初始狀態(tài)開始求解的。
同時(shí)解決怎么辦??
Blockchain會有分叉,部分客戶端接受A部分接受了B直到某個(gè)分支變長,每個(gè)人都會選擇這個(gè)更長的分支。如果你挖出來的不幸沒有被選中,你的挖掘收入將無效。
既然選擇了更長的分支,我用很低的難度去解決怎么辦??
客戶端在眾多分支中找到最困難、最長的。
這些計(jì)算浪費(fèi)了嗎??
如果你想花兩次錢,你需要這樣做。挖一個(gè)新的block但是藏著不廣播,繼續(xù)挖掘。A支付比特幣,讓網(wǎng)絡(luò)上的其他人挖掘block并寫入交易記錄。找到商家B,支付比特幣,寫進(jìn)自己挖的東西block。如果你能先挖兩個(gè)block并且廣播出去,所有人都會把你更長的分支當(dāng)成現(xiàn)在的blockchain,商家A收到的比特幣不被承認(rèn)。攻擊成功的概率取決于你的計(jì)算hash速度。如果整個(gè)網(wǎng)絡(luò)的計(jì)算能力足夠高,攻擊或者成功率極低,或者成本極高。