Ch12: Etwas über Bits, Ziel, Schwierigkeit

Wenn wir es mit einer großen Anzahl zu tun haben, z. 537.000.000 können wir es ausdrücken als:

Dies ist ein Base10-Nummerierungssystem, bei dem jede Ziffer der Nummer 10 mögliche Werte (0 bis 9) hat.

Ein Beispiel für eine dreistellige Base10-Nummer kann sein:

Wenn Sie eine Dezimalumrechnung durchführen, sollte derselbe Wert angezeigt werden:

Wir könnten auch Gleitkomma-Codierung verwenden, um 537.000.000 wie folgt darzustellen:

In den meisten Bitcoin-Artikeln wird der Begriff “ e xponent” verwendet, um “Ziffernlänge” zu beschreiben. Dies kann zu Verwirrung führen, da der Begriff „Exponent“ häufig mathematisch als „Potenz der Basis“ verwendet wird. Deshalb verwende ich “Ziffernlänge” und “Potenz”, um die Verwendung von “Exponent” zu vermeiden. Wenn Sie jedoch in Blockchain-Artikeln “Exponent” lesen, behandeln Sie ihn einfach als “Ziffernlänge” anstelle von “Potenz einer Basis”.

Bitcoin-Ziel ist auch eine große Zahl bei 256 Bit (oder 32 Byte). Ziel ist ein Wert, den der “Blockheader-Hash” erfüllen muss (kleiner oder gleich), um einen neuen Block zur Blockchain abzubauen (um ihn hinzuzufügen). Anstatt das 256-Bit- (oder 32-Byte-) Ziel in voller Länge im Blockheader zu speichern, wird es als 32-Bit- (oder 4-Byte-) “Bits” gespeichert. Somit ist “Bits” eine “kürzere Darstellung” des Ziels.

Bits ist ein Base256-Nummerierungssystem, bei dem jede Ziffer der Nummer 256 mögliche Werte (0 bis 255) hat.

Ein Beispiel für eine dreistellige Base256-Nummer kann sein:

Sie können diesen Wert in eine Dezimalzahl konvertieren:

Die 4-Byte-Bits werden unten im Gleitkomma-Codierungsformat angezeigt. Jede Ziffer enthält zwei Hexadezimalzeichen. Jedes Hexadezimalzeichen ist jeweils 4-Bit. Beachten Sie, dass das Hexadezimalzeichen eines der 16 Zeichen sein kann: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f.

Betrachten wir ein Beispiel für den Bitcoin-Block 277.316 mit Bits von 0x1903a30c

“0x” ist ein Präfix, das angibt, dass die Zahl hexadezimal ist.

Wenn wir 0x1903a30c in einem 4-Byte-Format sehen, haben wir:

Nun haben wir zwei Möglichkeiten, um das 256-Bit- (oder 32-Byte-) Ziel in voller Länge hexadezimal aus diesen kurzen 32-Bit- (oder 4-Byte-) Bits zu erhalten: den einfachen und den langwierigen Weg.

1) Einfacher Weg

0x19 ist 25 dezimal. Sie können diesen Wert von einigen Online-Rechnern abrufen (z. B. https://www.rapidtables.com/convert/number/hex-to-decimal.html) oder manuell ausführen.

“25” bedeutet hier, dass 0x1903a30c eine 25-stellige Länge oder 25-Byte-Länge ist (als 1-stellig = 1-Byte). Da der Koeffizient 0x03a30c 3 Byte beträgt, gibt es nach 0x03a30c 25 – 3 = 22 Byte Hex ’00’:

Da das Ziel 32 Byte ist, gibt es 32 – 25 = 7 Byte Hex ’00’ vor 0x03a30c

Daher haben wir auf einfache Weise ein Ziel voller Länge hexadezimal:

0x00000000000000 03a30c 0000000000000000000000000000000000000000000000

2) Mühsamer Weg

Als nächstes geben wir die Ziffernlänge = 25 (in Dezimalzahl) und die Anzahl der Koeffizienten = 3 ein. Der Koeffizient 0x03a30c wird in eine Dezimalzahl konvertiert, deren Wert 238348 beträgt:

Daher lautet das Dezimalziel:

22829202948393929850749706076701368331072452018388575715328

Und wir können das in hexadezimal konvertieren:

0x00000000000000 03a30c 0000000000000000000000000000000000000000000000

Zusammenfassend also

· Bits ist eine 32-Bit-Kurzdarstellung (4 Byte) des Ziels, die im Blockheader gespeichert ist.

· Ziel ist ein 256-Bit-Wert (32 Byte), den der Block-Header-Hash erfüllen muss (kleiner oder gleich), um einen neuen Block zur Blockchain abzubauen (hinzuzufügen).

Als nächstes werden wir uns die Schwierigkeit ansehen.

Schwierigkeit ist ein Wert, der zeigt, wie schwierig es ist, einen Blockheader-Hash zu finden, der niedriger als (oder gleich) dem definierten Ziel ist. Mit anderen Worten, die Schwierigkeit zeigt auch, wie schwierig es ist, einen neuen Block abzubauen (hinzuzufügen). Die Schwierigkeit wird gegen die Schwierigkeit des ersten Blocks (Genesis-Block) gemessen. Die erste Blockschwierigkeit ist 1. Wenn eine bestimmte Blockschwierigkeit 10 ist, ist es 10-mal schwieriger (mehr Rechenleistung), den richtigen Blockheader-Hash zu finden, als bei einer Schwierigkeit von 1. Inzwischen hat sich die Schwierigkeit um Billionen erhöht (siehe) Tabelle unten).

Die Schwierigkeitsformel ist wie folgt definiert:

Ziel (max) ist 0x1d00ffff

oder 0x00000000FFFF000000000000000000000000000000000000000000000000000000 (32 Byte)

oder 26959535291011309493156476344723991336010898738574164086137773096960 (dezimal)

Aus dieser Formel können wir ersehen, dass die Schwierigkeit umgekehrt proportional zum Ziel (aktuell) ist: Wenn die Schwierigkeit zunimmt, nimmt das Ziel (aktuell) ab, und wenn die Schwierigkeit abnimmt, nimmt das Ziel (aktuell) zu.

Das Ziel und der Schwierigkeitsgrad werden nach jeweils 2016 Blöcken (ca. 2 Wochen oder 14 Tage oder 20160 Minuten) angepasst, um sicherzustellen, dass der neue Block durchschnittlich alle 10 Minuten abgebaut (hinzugefügt) wird. Für jeden 2016-Block betrachtet jeder Knoten die letzten 2016-Blöcke und berechnet die durchschnittliche Zeit, die für das Mining eines Blocks aufgewendet wurde. Wenn dieser Wert mehr als 10 Minuten beträgt, ist das Ziel höher (der Schwierigkeitsgrad nimmt ab, um das nächste Mal leichter abzubauen). Wenn dieser Wert weniger als 10 Minuten beträgt, ist das Ziel niedriger (der Schwierigkeitsgrad erhöht sich, um das nächste Mal schwerer abzubauen).

Die Formel für das angepasste Ziel oder das neue Ziel wird unten angezeigt:

Nachdem das Ziel angepasst wurde, wird der Schwierigkeitsgrad mithilfe der folgenden Formel angepasst:

Möglicherweise stellen Sie (vom Blockchain-Explorer) fest, dass der Bitcoin-Schwierigkeitsgrad den größten Teil des Jahres 2009 bei 1 lag (siehe Tabelle unten). Dies liegt daran, dass es im Netzwerk eine feste Grenze gibt, dass die Schwierigkeit immer ≥ 1 sein muss. Selbst wenn es mehr als 14 Tage dauert, um 2016-Blöcke abzubauen, kann die Schwierigkeit nicht kleiner als 1 sein. Wenn Sie sich die folgende Tabelle ansehen, Block Nr. 32256 ist der erste Block seit Genesis Block Nr. 0, um 2016 Blöcke in weniger als 14 Tagen, dh 12 Tagen, abzubauen. Aus diesem Grund hat sich die Schwierigkeit für Block Nr. 32256 von 1 auf 1,18 erhöht. Die entsprechenden 4-Byte-Bits haben abgenommen, was auch bedeutet, dass auch das 32-Byte-Ziel abgenommen hat.

Einige Artikel verwenden “Bits” und “Ziel” synonym oder verwenden Begriffe wie: Schwierigkeitsgrad, Schwierigkeitsgrad, Ziel hat, Hash-Ziel. Dieser Artikel definiert Bits, Ziel und Schwierigkeit separat, um Verwirrung zu vermeiden. Aufgrund einer fehlerhaften Definition können Sie jedoch auf eine falsche Formel stoßen:

Die obige falsche Formel ersetzt “Ziel” durch “Schwierigkeit”. Die Formel legt nahe, dass die Schwierigkeit verringert wird, wenn ein neuer Block weniger als 10 Minuten abgebaut wird. Dies sollte jedoch nicht der Fall sein, da die Schwierigkeit erhöht werden sollte.

Ich hoffe, Sie haben jetzt ein besseres Verständnis für Bits, Ziele und Schwierigkeiten.

Erinnerung

· Bits ist eine 32-Bit-Kurzdarstellung (4 Byte) des Ziels, die im Blockheader gespeichert ist.

· Ziel ist ein 256-Bit-Wert (32 Byte), den der Block-Header-Hash erfüllen muss (kleiner oder gleich), um einen neuen Block zur Blockchain abzubauen (hinzuzufügen).

· Schwierigkeit ist ein Wert, der verwendet wird, um zu zeigen, wie schwierig es ist, einen Blockheader-Hash zu finden, der niedriger (oder gleich) dem definierten Ziel ist, gemessen an der Schwierigkeit des ersten Blocks (Genesis-Block) von 1.