Avive World算力挖礦系統開發|中本聰模式挖礦案例
比特幣挖礦的工作量證明原理就是,不斷嘗試計算區塊的雜湊,直到計算出一個特定的雜湊值,它比難度值要小。
比特幣使用的SHA-256演算法可以看作對隨機輸入產生隨機輸出,例如,我們對字串Hello再加上一個數字計算兩次SHA-256,根據數字的不同,得到的雜湊是完全無規律的256位隨機數:
hash256("Hello?")=????
大約計算16次,可以得到的雜湊中找到首位是0的雜湊值,Avive World算力挖礦系統132開4277發2558,因為首位是0出現的機率是1/16:
hash256("Hello1")=ffb7a43d629d363026b3309586233ab7ffc1054c4f56f43a92f0054870e7ddc9
hash256("Hello2")=e085bf19353eb3bd1021661a17cee97181b0b369d8e16c10ffb7b01287a77173
hash256("Hello3")=c5061965d37b8ed989529bf42eaf8a90c28fa00c3853c7eec586aa8b3922d404
hash256("Hello4")=42c3104987afc18677179a4a1a984dbfc77e183b414bc6efb00c43b41b213537
hash256("Hello5")=652dcd7b75d499bcdc61d0c4eda96012e3830557de01426da5b01e214b95cd7a
hash256("Hello6")=4cc0fbe28abb820085f390d66880ece06297d74d13a6ddbbab3b664582a7a582
hash256("Hello7")=c3eef05b531b56e79ca38e5f46e6c04f21b0078212a1d8c3500aa38366d9786d
hash256("Hello8")=cf17d3f38036206cfce464cdcb44d9ccea3f005b7059cff1322c0dd8bf398830
hash256("Hello9")=1f22981824c821d4e83246e71f207d0e49ad57755889874d43def42af693a077
hash256("Hello10")=8a1e475d67cfbcea4bcf72d1eee65f15680515f65294c68b203725a9113fa6bf
hash256("Hello11")=769987b3833f082e31476db0f645f60635fa774d2b92bf0bab00e0a539a2dede
hash256("Hello12")=c2acd1bb160b1d1e66d769a403e596b174ffab9a39aa7c44d1e670feaa67ab2d
hash256("Hello13")=dab8b9746f1c0bcf5750e0d878fc17940db446638a477070cf8dca8c3643618a
hash256("Hello14")=51a575773fccbb5278929c08e788c1ce87e5f44ab356b8760776fd816357f6ff
hash256("Hello15")=0442e1c38b810f5d3c022fc2820b1d7999149460b83dc680abdebc9c7bd65cae
如果我們要找出前兩位是0的雜湊值,理論上需要計算256次,因為00出現的機率是162=256,實際計算44次:
hash256("Hello44")=00e477f95283a544ffac7a8efc7decb887f5c073e0f3b43b3797b5dafabb49b5
如果我們要找出前3位是0的雜湊值,理論上需要計算163=4096次,實際計算6591次:
hash256("Hello6591")=0008a883dacb7094d6da1a6cefc6e7cbc13635d024ac15152c4eadba7af8d11c
如果我們要找出前4位是0的雜湊值,理論上需要計算164=6萬5千多次,實際計算6萬7千多次:
hash256("Hello67859")=00002e4af0b80d706ae749d22247d91d9b1c2e91547d888e5e7a91bcc0982b87
如果我們要找出前5位是0的雜湊值,理論上需要計算165=104萬次,實際計算158萬次:
hash256("Hello1580969")=00000ca640d95329f965bde016b866e75a3e29e1971cf55ffd1344cdb457930e
如果我們要找出前6位是0的雜湊值,理論上需要計算166=1677萬次,實際計算1558萬次:
hash256("Hello15583041")=0000009becc5cf8c9e6ba81b1968575a1d15a93112d3bd67f4546f6172ef7e76
對於給定難度的SHA-256:假設我們用難度1表示必須算出首位1個0,難度2表示必須算出首位兩個0,難度N表示必須算出首位N個0,那麼,每增加一個難度,計算量將增加16倍。
對於比特幣挖礦來說,就是先給定一個難度值,然後不斷變換nonce,計算Block Hash,直到找到一個比給定難度值低的Block Hash,就算成功挖礦。
我們用簡化的方法來說明難度,例如,必須計算出連續17個0開頭的雜湊值,礦工先確定Prev Hash,Merkle Hash,Timestamp,bits,然後,不斷變化nonce來計算雜湊,直到找出連續17個0開頭的雜湊值。我們可以大致推算一下,17個十六進位制的0相當於計算了1617次,大約需要計算2.9萬億億次。
17個0=1617=295147905179352825856=2.9萬億億次
實際的難度是根據bits由一個公式計算出來,比特幣協議要求計算出的區塊的雜湊值比難度值要小,這個區塊才算有效:
Difficulty=402937298
=0x18 0455d2
=0x0455d2*28*(0x18-3)
=106299667504289830835845558415962632664710558339861315584
=0x00000000000000000455d2000000000000000000000000000000000000000000
注意,難度值的數值越小,說明雜湊值前面的0越多,計算的難度越大。
比特幣網路的難度是不斷變化的,它的難度保證大約每10分鐘產生一個區塊,而難度值在每2015個區塊調整一次:如果區塊平均生成時間小於10分鐘,說明全網算力增加,難度也會增加,如果區塊平均生成時間大於10分鐘,說明全網算力減少,難度也會減少。因此,難度隨著全網算力的增減會動態調整。
比特幣設計時本來打算每2016個區塊調整一次難度,也就是兩週一次,但是由於第一版程式碼的一個bug,實際調整週期是2015個區塊。
根據比特幣每個區塊的難度值和產出時間,就可以推算出整個比特幣網路的全網算力。
比特幣網路的全網算力一直在迅速增加。目前,全網算力已經超過了100EH/每秒,也就是大約每秒鐘計算1萬億億次雜湊:
全網算力
所以比特幣的工作量證明被通俗地稱之為挖礦。在同一時間,所有礦工都在努力計算下一個區塊的雜湊。而挖礦難度取決於全網總算力的百分比。舉個例子,假設小明擁有全網總算力的百分之一,那麼他挖到下一個區塊的可能性就是1%,或者說,每挖出100個區塊,大約有1個就是小明挖的。
由於目前全網算力超過了100EH/s,而單機CPU算力不過幾M,GPU算力也不過1G,所以,單機挖礦的成功率幾乎等於0。比特幣挖礦已經從早期的CPU、GPU發展到專用的ASIC晶片構建的礦池挖礦。
全網算力百分比
當某個礦工成功找到特定雜湊的新區塊後,他會立刻向全網廣播該區塊。其他礦工在收到新區塊後,會對新區塊進行驗證,如果有效,就把它新增到區塊鏈的尾部。同時說明,在本輪工作量證明的競爭中,這個礦工勝出,而其他礦工都失敗了。失敗的礦工會拋棄自己當前正在計算還沒有算完的區塊,轉而開始計算下一個區塊,進行下一輪工作量證明的競爭。
為什麼區塊可以安全廣播?因為Merkle Hash鎖定了該區塊的所有交易,而該區塊的第一個coinbase交易輸出地址是該礦工地址。每個礦工在挖礦時產生的區塊資料都是不同的,所以無法竊取別人的工作量。
比特幣總量被限制為約2100萬個比特幣,初始挖礦獎勵為每個區塊50個比特幣,以後每4年減半。
共識演算法
如果兩個礦工在同一時間各自找到了有效區塊,注意,這兩個區塊是不同的,因為coinbase交易不同,所以Merkle Hash不同,區塊雜湊也不同。但它們只要符合難度值,就都是有效的。這個時候,網路上的其他礦工應該接收哪個區塊並新增到區塊鏈的末尾呢?答案是,都有可能。
通常,礦工接收先收到的有效區塊,由於P2P網路廣播的順序是不確定的,不同的礦工先收到的區塊是有可能的不同的。這個時候,我們說區塊發生了分叉:
分叉
在分叉的情況下,有的礦工在綠色的分叉上繼續挖礦,有的礦工在藍色的分叉上繼續挖礦:
最長鏈共識
但是最終,總有一個分叉首先挖到後續區塊,這個時候,由於比特幣網路採用最長分叉的共識演算法,綠色分叉勝出,藍色分叉被廢棄,整個網路上的所有礦工又會繼續在最長的鏈上繼續挖礦。
由於區塊鏈雖然最終會保持資料一致,但是,一個交易可能被打包到一個後續被孤立的區塊中。所以,要確認一個交易被長久記錄到區塊鏈中,需要對交易進行確認。如果後續的區塊被追加到區塊鏈上,實際上就會對原有的交易進行確認,因為鏈越長,修改的難度越大。一般來說,經過6個區塊確認的交易幾乎是不可能被修改的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70020115/viewspace-2951696/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Avive World算力挖礦系統開發中本聰模式詳情模式
- Avive World 算力挖礦系統開發|Avive質押模式開發模式
- Avive世界挖礦(vv)系統搭建開發|中本聰挖礦模式開發模式
- Avive World算力挖礦模式系統開發新一代公鏈中本聰模式模式
- Avive World算力挖礦LP質押挖礦/系統開發技術/DAPP/DefiAPP
- CBDC挖礦中本聰模式開發系統搭建模式
- IPP算力挖礦系統開發技術|IPP挖礦模式開發模式
- 雲算力LP挖礦系統開發/雲算力挖礦模式開發技術模型模式模型
- IPP算力質押挖礦系統開發|IPP算力挖礦開發
- 雲算力挖礦/系統開發技術/LP雲算力挖礦模式開發詳情模式
- Avive World算力挖礦系統技術開發詳情/Defi/dapp/IDO/NFTAPP
- CoinMaII算力挖礦系統開發AI
- FIL NEW算力挖礦系統開發模式方案模式
- IPPSWAP孵化器挖礦系統開發|IPP算力挖礦開發
- 雲算力挖礦開發質押系統搭建(案例)
- 雲算力挖礦開發詳情版丨雲算力挖礦系統開發(開發邏輯)丨雲算力挖礦原始碼成品原始碼
- IPPswap丨DAPP質押挖礦/算力挖礦/LP挖礦系統開發詳情APP
- FIL NEW算力挖礦系統開發
- DeFI挖礦系統模式開發APP(案例)模式APP
- IPP算力挖礦|IPPSWAP質押挖礦系統開發詳情
- 雲算力挖礦app開發詳情丨雲算力挖礦系統開發(詳細及邏輯)丨雲算力挖礦原始碼APP原始碼
- ippswap挖礦系統開發原始碼|ipp算力案例原始碼
- 雲算力質押挖礦/系統開發/Defi算力質押挖礦開發技術/Defi模型模型
- 雲質押挖礦專案系統開發DeFi模式/雲算力挖礦系統開發技術講解模式
- DisruptDEX質押挖礦模式系統開發案例模式
- IPPswap孵化器|算力挖礦系統開發模式模式
- 雲算力質押挖礦開發平臺丨雲算力質押挖礦系統開發(開發專案)丨雲算力質押挖礦原始碼原始碼
- IPP算力挖礦系統/IPP原始碼/IPP挖礦系統開發技術詳情原始碼
- ACC挖礦模式系統開發模式
- 雲算力質押挖礦系統開發(邏輯及案例)丨雲算力質押挖礦系統開發(詳細及原始碼)原始碼
- 雲算力質押挖礦系統開發(詳細案例)丨雲算力質押挖礦系統開發成熟技術/原始碼流程原始碼
- SolaRoad礦池算力挖礦系統開發(詳情方案)
- Filecoin礦機挖礦系統開發(案例詳細)
- 雲算力挖礦系統開發軟體搭建
- INTO社交算力挖礦系統搭建開發技術
- 合約算力IPPswap挖礦系統開發
- IPPswap挖礦系統開發/IPP算力挖礦專案開發技術/IPP應用
- 挖礦系統開發技術詳解丨挖礦APP開發原始碼案例APP原始碼