Warum gibt es keine führenden Nullen im Ethereum-Block-Hash?

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?

Antworten (2)

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.

sehr cool, das wusste ich nicht!
Vielen Dank. Wo kann man also das Endergebnis, Ethash, für jeden Block sehen? ZB meldet diese etherchain.org/block/1268022 nicht den Ethash des Blocks?
Leider wird der Ethash nicht auf den Blockchain-Explorern veröffentlicht. Diese Zahl kann aus dem Transaktions-Hash, dem vorherigen übergeordneten Hash, dem Seed, den Blockdaten und der Nonce ermittelt werden - ich werde versuchen, den Algorithmus irgendwann auszuarbeiten.
Eine Übersicht gibt es hier: github.com/ethereum/wiki/wiki/Ethash . Im Wesentlichen gibt es keinen Grund, das Ergebnis der Berechnung tatsächlich zu veröffentlichen, da es sowieso jeder zur Überprüfung neu berechnen muss.
Was ist die Begründung für diese Designentscheidung? Warum nicht Block-Hashes als Ziele verwenden, ähnlich wie bei Bitcoin?
Bitcoin: hash(block header, nonce)< TARGET. Ethereum: Ethash(hash(block header), nonce)< TARGET. Recht?
es scheint, dass ethminer kein --check-pow mehr hat
Wie targetkönnte aus ethashund berechnet werden mix_hash?
verstehe immer noch nicht

Was Sie in Block-Explorern sehen, ist sha3der Block-Header, nicht die ethash.

Ist dieser Kommentar Ethash(hash(block header), nonce)falsch? ethereum.stackexchange.com/questions/2072/…