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.
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:
nBits
wie 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.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).
Nick Odell
Morsecoder