Blocks

為什麼乙太坊區塊雜湊中沒有前導零?

  • September 15, 2017

塊雜湊必須低於一定的難度,對吧?在比特幣中,這意味著雜湊值中有許多前導零,例如。對於比特幣塊 #402329 雜湊是000000000000000006efd706f4467e2d7ed6f0fed757ca7d59e2cc8c81a2d9e3.

但對於乙太坊區塊鏈,#1138224 塊的雜湊是0xa4f80a26aecb5fc975e12a9d3d0f6a7907c60b1d7e6b5205dfb4c984dad7f1ba.

為什麼沒有前導零?

在乙太坊區塊鏈中,難度用於計算目標。

以下是區塊號1257006的 ethminer 日誌:

ℹ  35:02:42.89 ethminer  Solution found; Submitting to http://192.168.4.120:8545 ...
ℹ  35:02:42.89 ethminer    Nonce: ff4136b6b6a244ec
ℹ  35:02:42.89 ethminer    Mixhash: 47da5e47804594550791c24331163c1f1fde5bc622170e83515843b2b13dbe14
ℹ  35:02:42.89 ethminer    Header-hash: f5afa3074287b2b33e975468ae613e023e478112530bc19d4187693c13943445
ℹ  35:02:42.89 ethminer    Seedhash: 1730dd810f27fdefcac730fcab75814b7286002ecf541af5cdf7875440203215
ℹ  35:02:42.89 ethminer    Target: 00000000000baef6895d630131521d65d984555906990f43f352be4350291f92
ℹ  35:02:42.89 ethminer    Ethash: 0000000000095d18875acd4a2c2a5ff476c9acf283b4975d7af8d6c33d119c74
ℹ  35:02:42.89 ethminer  B-) Submitted and accepted.

這是一段 Java 程式碼,用於計算目標的難度:

import java.math.BigInteger;

public class DifficultyDemo {
   public static void main(String[] args) {
       BigInteger numTwoPow256 = new BigInteger("2").pow(256);
       BigInteger target = new BigInteger("00000000000baef6895d630131521d65d984555906990f43f352be4350291f92", 16);
       BigInteger difficulty = numTwoPow256.divide(target);
       System.out.println(difficulty.toString());
   }
}

並且計算難度24091770185844對應於區塊鏈瀏覽器螢幕中的難度。

我們可以使用ethminer --check-pow <headerHash> <seedHash> <difficulty> <nonce>以下方法檢查工作量證明的有效性:

beefee@Rasterbator:~$ ethminer --check-pow f5afa3074287b2b33e975468ae613e023e478112530bc19d4187693c13943445 1730dd810f27fdefcac730fcab75814b7286002ecf541af5cdf7875440203215 24091770185844 ff4136b6b6a244ec
VALID :-)
0000000000095d18875acd4a2c2a5ff476c9acf283b4975d7af8d6c33d119c74 < 00000000000baef6895d630131521d65d984555906990f43f352be4350291f93
 where 00000000000baef6895d630131521d65d984555906990f43f352be4350291f93 = 2^256 / 24091770185844
 and 0000000000095d18875acd4a2c2a5ff476c9acf283b4975d7af8d6c33d119c74 = ethash(f5afa3074287b2b33e975468ae613e023e478112530bc19d4187693c13943445, ff4136b6b6a244ec)
 with seed as 1730dd810f27fdefcac730fcab75814b7286002ecf541af5cdf7875440203215
(mixHash = 47da5e47804594550791c24331163c1f1fde5bc622170e83515843b2b13dbe14)
SHA3( light(seed) ) = 35ded12eecf2ce2e8da2e15c06d463aae9b84cb2530a00b932e4bbc484cde353

礦工的 GPU 將遍歷一系列隨機 Nonce。這個 Nonce,結合 Seedhash 和 Header-hash 使用雜湊函式需要計算一個低於 Target 的數字。如果這個計算的數字低於目標值,礦工已經成功挖出一個區塊,區塊詳情將送出給乙太坊網路節點。

在上面的範例中,計算出的 Ethash 雜湊值大於目標,因此是一個錯誤探勘的塊(在錯誤報告中提到)。

在比特幣中,目標是塊雜湊。隨著難度的增加,您會看到前導零的數量增加。

405390有 17 個前導零。區塊40539有 8 個前導零(2010 年開採)。

乙太坊目標有點等同於比特幣區塊雜湊。

引用自:https://ethereum.stackexchange.com/questions/2072