Der Block-Hash muss unter einer bestimmten Schwierigkeit liegen, richtig? Bei Bitcoin bedeutet dies, dass es viele führende Nullen im Hashwert gibt, z. für den Bitcoin-Block #402329 ist der Hash 000000000000000006efd706f4467e2d7ed6f0fed757ca7d59e2cc8c81a2d9e3
.
Aber für die Ethereum-Blockchain ist der Hash von Block #1138224 0xa4f80a26aecb5fc975e12a9d3d0f6a7907c60b1d7e6b5205dfb4c984dad7f1ba
.
Warum gibt es keine führenden Nullen?
In der Ethereum-Blockchain wird die Schwierigkeit verwendet, um ein Ziel zu berechnen.
Hier sind die Etminer-Protokolle für Blocknummer 1257006 :
ℹ 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.
Hier ist ein Java-Snippet, um die Schwierigkeit aus dem Ziel zu berechnen:
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());
}
}
Und die Schwierigkeit wird so berechnet, 24091770185844dass sie der Schwierigkeit im Blockketten-Explorer-Bildschirm entspricht.
Wir können ethminer --check-pow <headerHash> <seedHash> <difficulty> <nonce>den Proof-of-Work wie folgt auf Gültigkeit prüfen:
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
Die GPU des Miners würde eine Reihe von zufälligen Nonces durchlaufen. Diese Nonce muss in Kombination mit Seedhash und Header-Hash unter Verwendung einer Hash-Funktion eine Zahl unterhalb des Ziels berechnen. Wenn diese berechnete Zahl unter dem Zielwert liegt, hat der Miner erfolgreich einen Block abgebaut und die Blockdetails werden an die Ethereum-Netzwerkknoten übermittelt.
Im obigen Beispiel ist der berechnete Hash Ethash größer als das Target und ist daher ein falsch geschürfter Block (der im Fehlerbericht erwähnt wird).
Bei Bitcoin ist das Ziel der Block-Hash. Wenn der Schwierigkeitsgrad steigt, werden Sie sehen, dass die Anzahl der führenden Nullen zunimmt.
Block 405390 hat 17 führende Nullen. Block 40539 hat 8 führende Nullen (abgebaut im Jahr 2010).
Das Ethereum-Ziel entspricht in gewisser Weise dem Bitcoin-Block-Hash.
Was Sie in Block-Explorern sehen, ist sha3
der Block-Header, nicht die ethash
.
Ethash(hash(block header), nonce)
falsch? ethereum.stackexchange.com/questions/2072/…
q9f
Matthias
Datenschutz ist ein Menschenrecht.eth
Tjaden Hess
Sergei Tichomirow
Константин Ван
hash(block header, nonce)
<TARGET
. Ethereum:Ethash(hash(block header), nonce)
<TARGET
. Recht?Korjavin Ivan
k06a
target
könnte ausethash
und berechnet werdenmix_hash
?Gqqnbig