Was ist das 2^187-Ziel im Ethereum-Whitepaper bezüglich PoW in Bitcoin?

Das sagt das Papier

Die genaue Bedingung ist, dass der doppelte SHA256-Hash jedes Blocks, der als 256-Bit-Zahl behandelt wird, kleiner als ein dynamisch angepasstes Ziel sein muss, das zum Zeitpunkt des Schreibens dieses Artikels ungefähr 2^187 beträgt

Ich hatte den Eindruck, dass es bei PoW darum geht, einige führende Nullen in einen Hash zu bekommen.

Kann jemand bitte erklären?

Antworten (2)

Die Leute sagen oft, dass das Ziel des Schürfens darin besteht, eine bestimmte Anzahl von „führenden Nullen“ zu erhalten, weil dies leicht zu visualisieren ist, aber eine genauere Aussage ist, dass das Ziel darin besteht , für ein bestimmtes Ziel eine xsolche zu finden , wobei wir interpretieren der 256-Bit-Hash als 256-Bit-Ganzzahl ohne Vorzeichen.int(SHA256(SHA256(x))) < TTint( )

Dies entspricht fast der Formulierung mit "führenden Nullen". Wenn Sie an zwei hexadezimale 32-Byte-Folgen denken, dann ist die mit mehr führenden Nullen die kleinere Zahl, wenn sie als Ganzzahl interpretiert wird.

Zum Beispiel hat ein neuerer BTC-Block Hash

0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6d

Das ist weniger als das Ziel

0x000000000000000000365a170000000200000000000000000000000000000000

Der Block hat zufällig mehr Nullen davor, aber einen Hash von

0x000000000000000000265a170000000200000000000000000000000000000000

hätte auch funktioniert, da es kleiner als das Ziel ist, obwohl es genauso viele Nullen hat.

Ethereum verwendet eine kompliziertere PoW-Funktion, aber die Idee ist die gleiche: Finden Sie eine Eingabe, die das Ergebnis einer Einwegfunktion minimiert. Der Unterschied besteht darin, dass Ethereum, anstatt auf einen kleinen Blockhash abzuzielen, ein Feld namens „Mix-Hash“ verwendet " das zusammen mit der Nonce als Arbeitsnachweis dient. Dies führt zu Block-Hashes, die zufällig aussehen, im Gegensatz zu BTCs, die alle viele führende Nullen haben.

1) Können Sie mir die Verwendung von 2^187 erklären? Was bedeutet es mit the target is 2^187„2) Wenn wir zwei Blöcke haben, einen mit Hash von 0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6dund einen mit Hash von 0x000000000000000000265a170000000200000000000000000000000000000000, wäre es in Ordnung, einen von ihnen auszuwählen, richtig? andere werden verworfen?
1. 2^187 ist ungefähr die ganzzahlige Form des Zielwerts zum Zeitpunkt der Abfassung des Artikels. 2. Richtig

In Bitcoin wird SHA256(SHA256(x)) Hash256 genannt, was eine 256-Bit-Ausgabe erzeugt

  • Hashing des Blocks in einem Merkle-Baum
  • Verknüpfen von Transaktionsausgaben und -eingaben
  • Hash des Blockheaders (und damit der Proof of Work und der Link zum vorherigen Block)

Dies hängt mit der Erhaltung der konsistenten 128-Bit -Sicherheit im gesamten Protokoll zusammen.


Aus dieser Antwort können Sie sehen, warum es ein sich dynamisch anpassendes Ziel und den Grund für diese Zeile gibt:

Bergbau

Der Mining-Algorithmus ist wie folgt definiert:

def mine(full_size, dataset, header, difficulty):
    target = zpad(encode_int(2**256 // difficulty), 64)[::-1]
    from random import randint
    nonce = randint(0, 2**64)
    while hashimoto_full(full_size, dataset, header, nonce) > target:
        nonce = (nonce + 1) % 2**64
    return nonce

Der Ethereum-Block hat auch keine führenden Nullen . Ethereum hat stattdessen ein Target, das dem Block-Hash von Bitcoin ähnelt.