Was ist ein Block?

Ich weiß, dass Bitcoin eine Blockkette hat, die meiner besten Darstellung nach eine Liste von Blöcken ist. Ich weiß, dass der Block viele Transaktionen enthält. Aber ich bin immer noch sehr verwirrt darüber, was ein Block ist und wie ein Block die Funktion der Transaktionen zu der Zeit sein kann, bevor der Block gelöst wird, und wie ein Block eine beliebige Anzahl von Transaktionen haben kann, bevor er gelöst wird und eingeschlossen.

Ich bin auch verloren in dem Prozess, einen Block zu "lösen". Ich weiß, dass Computer die Transaktion verschlüsseln müssen. Wenn ein Block aus mehreren Transaktionen besteht, würde dies bedeuten, dass Sie alle Transaktionen lösen müssen, um den Block zu erhalten.

@NickODell, ähnlich, aber ich denke, hier geht es mehr um die Struktur eines Blocks und beim anderen darum, wie man ihn angesichts des Zustands der Blockkette erstellt.

Antworten (1)

Es gibt viele Fragen zu Bitcoin SE zu Blöcken, aber bemerkenswerterweise konnte ich keine finden, die explizit darlegen, was ein Block ist.

Ein Block hat zwei Dinge: Einen Block-Header und eine Liste von Transaktionen.

Block:

  • Block-Header
    • Versionsnummer (4-Byte-Ganzzahl)
    • Vorherige Block-ID (32-Byte-Hash)
    • Merkle Root (32-Byte-Hash)
    • Zeit (4-Byte-Ganzzahl)
    • Schwierigkeit (4 Byte Integer)
    • Nonce (4-Byte-Ganzzahl)
  • Liste der Transaktionen
    • Anzahl der Transaktionen in der Liste
    • Tx1
    • Tx2
    • ...
    • TxN

Im Blockkopfteil des Blocks:

  1. Die Versionsnummer ist ein Parameter, der bei der Aktualisierung hilft, wie Blöcke vom Netzwerk behandelt werden.
  2. Der Verweis auf den Hash des vorherigen Blocks macht die Gruppe von Blöcken zu einer "Blockkette".
  3. Die Merkle-Root ist ein Hash, der verwendet werden kann, um zu beweisen, dass sich eine Transaktion im Block befindet, ohne alle Details des Blocks anzugeben (dies ist etwas kompliziert, siehe hier für weitere Informationen).
  4. Das Zeitfeld soll dem Netzwerk zeigen, wann der Block gelöst wurde, und bei der Berechnung des Schwierigkeitsparameters helfen.
  5. Die Schwierigkeit (oder nBitswie es im Code heißt) ist eine Abkürzung dafür, wie schwierig es ist, den Block zu lösen. Im Wesentlichen codiert es einen Zielwert, und der Hash des Blocks (wenn er als 256-Bit-Ganzzahl behandelt wird) muss unter diesem Zielwert liegen, um als gelöst zu gelten.
  6. Die Nonce (einmal verwendete Zahl) ist nur eine Ganzzahl, die Miner wiederholt ändern können, um den Header zu hashen und jedes Mal ein anderes Ergebnis zu erhalten, in der Hoffnung, einen Hash zu erhalten, der unter dem durch den vorherigen Parameter codierten Schwierigkeitswert liegt.

Die Liste der Transaktionen ist ziemlich einfach, es ist nur die Anzahl der Transaktionen und dann die Transaktionen selbst, die miteinander verkettet sind.

Nehmen Sie zum Beispiel den Genesis-Block. Die Rohbytes sind:

0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Wenn wir dies auflösen, können wir sehen, was darin enthalten ist:

01000000 // Version
000000000000000000000000000000000000000000000000000000000000 // Hash des vorherigen Blocks
3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a // Merkle Root
29ab5f49 // Zeit
ffff001d // Schwierigkeit
1dac2b7c // Nonce
01 // Anzahl der Transaktionen
 Tx1:
 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Wenn Sie den Block-Header des Genesis-Blocks hashen, erhalten Sie:

000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

Sehen Sie, wie es mit all diesen Nullen beginnt? Das liegt daran, dass viele, viele Versuche unternommen wurden (wobei jedes Mal die Nonce geändert wurde), bis der Miner das Glück hatte, eine Nonce zu finden, die den Block-Header-Hash auf einen ausreichend niedrigen Wert bringt (betrachten Sie den Hash als hexadezimal codierte Ganzzahl mit dem höchstwertigen Wert). Bits links und die niederwertigsten rechts).