wer sammelt oder baut die Blöcke eigentlich ... und wie werden sie an Miner weitergegeben?

Die Frage ist nicht, ob der Block in die Blockchain aufgenommen wird, sondern wer erstellt eigentlich einen Block? Wie ist hier der Ablauf. Kann mir das jemand erklären? Ich weiß, dass Blöcke in Form eines Blockheaders zusammengefasst sind und eine Liste von Transaktionen enthalten.

  1. Wer wählt die Transaktionen aus, die in diesen Block gehen? Wenn nicht eine Person, wo im Kern ist diese enthalten
  2. Wie werden sie dann als Block gebündelt?
  3. Wie werden sie dann an die Miner weitergegeben?

Antworten (1)

  1. Wer wählt die Transaktionen aus, die in diesen Block gehen? Wenn nicht eine Person, wo im Kern ist diese enthalten

Miner wählen sie aus. Genauer gesagt wählt die von Minern ausgeführte Knotensoftware die Transaktionen aus. Die meisten Bergleute verwenden Bitcoin Core oder eine Variation davon.

  1. Wie werden sie dann als Block gebündelt?
  2. Wie werden sie dann an die Miner weitergegeben?

Wenn die Knotensoftware Transaktionen auswählt, erstellt sie eine hexadezimale Zeichenfolge für jede Transaktion, die jedes der Felder darstellt. Diese Hex-Zeichenfolge folgt demselben Format, das zum Serialisieren von Transaktionen zum Senden über das Netzwerk verwendet wird, genau wie die Hex-Darstellung der Bytes anstelle der Bytes selbst. Diese wird dann zusammen mit einigen anderen Informationen in ein JSON-Objekt im getblocktemplate- Format gepackt und über eine JSON-RPC-Schnittstelle an Mining-Software bereitgestellt.

Die Mining-Software nimmt dann die von getblocktemplate bereitgestellten Informationen, fügt ihre eigenen zusätzlichen Informationen (z. B. die Nonce) hinzu und konstruiert einen serialisierten Block . Serialisierte Blöcke sind Byte-Arrays, die alle Informationen in einem Block enthalten und das gleiche Format haben, wie sie über das Netzwerk gesendet werden. Wenn der Block gültig ist, sendet der Miner den serialisierten Block zurück an den Knoten, der ihn dann an den Rest des Bitcoin-Netzwerks sendet.


Hier ist ein Schritt-für-Schritt-Beispiel, wie eine Minerin Alice einen Block schürft.

  1. Alice betreibt Bitcoin Core, das ständig Transaktionen und andere Blöcke empfängt, validiert und weiterleitet.
  2. Alice betreibt eine Mining-Software (z. B. cgminer) und schließt hier Hashing-Maschinen (z. B. einen Antminer S9) daran an.
  3. Alice stellt ihrer Instanz von cgminer auch die Anmeldeinformationen für die JSON-RPC-Schnittstelle für ihren Bitcoin Core-Knoten zur Verfügung.
  4. cgminer verwendet getblocktemplate und sendet eine Anfrage für eine Blockvorlage an Bitcoin Core.
  5. Bitcoin Core empfängt die getblocktemplate-Anforderung und wählt Transaktionen aus seinem Pool gültiger und unbestätigter Transaktionen aus, die es im Speicher gespeichert hat. Die Transaktionen werden typischerweise nach ihren Gebührensätzen ausgewählt, wobei der höchste Gebührensatz zuerst ausgewählt wird.
  6. Bitcoin Core erstellt anhand der ausgewählten Transaktionen eine Blockvorlage und fügt alle erforderlichen zusätzlichen Informationen hinzu.
  7. Bitcoin Core antwortet cgminer über die JSON-RPC-Schnittstelle mit der fertigen Blockvorlage.
  8. cgminer empfängt die Blockvorlage und verwendet sie, um einen serialisierten Blockheader in einer für die Hash-Hardware akzeptablen Form zu erstellen
  9. cgminer sendet alle Daten, die es serialisiert hat, an die Hashing-Hardware und die Hardware berechnet SHA256-Hashes darauf, während einige Daten in den Daten erhöht werden.
  10. Die Hashing-Hardware (oder cgminer) prüft, ob ein Hash einen gültigen Arbeitsnachweis hat. Wenn dies der Fall ist, fahren Sie mit Schritt 14 fort.
  11. Sobald die Hardware alle möglichen Kombinationen erschöpft hat, kann sie versuchen, die angegebenen Daten zu verwenden, und antwortet auf cgminer
  12. cgminer sendet, wenn die Hashing-Hardware nicht mehr mit ihren Daten fortfahren kann, eine weitere getblocktemplate-Anforderung an Bitcoin Core, um einen neuen Satz von Transaktionen und Blockdaten zu versuchen.
  13. Wiederholen Sie die Schritte 4 bis 12, bis die Hash-Hardware einen Hash mit einem gültigen Arbeitsnachweis in Schritt 10 findet.
  14. Sobald ein Hash mit einem gültigen Arbeitsnachweis gefunden wurde, nimmt cgminer die Daten, die für diesen gültigen Arbeitsnachweis gehasht wurden, und kombiniert sie mit den serialisierten Transaktionen.
  15. Der serialisierte Block wird in eine hexadezimale Zeichenfolge konvertiert und mit dem Submitblock-RPC-Befehl an Bitcoin Core gesendet.
  16. Bitcoin Core nimmt die hexadezimale Zeichenfolge, die den Block darstellt, wandelt sie in ein Byte-Array um, prüft, ob der Block gültig ist, und sendet den Block, wenn dies der Fall ist, an die Knoten, mit denen er verbunden ist.
+1 für umfangreich. du scheinst mehr zu wissen als du solltest. Aber noch etwas. Wie werden diese gebündelten Blöcke im gesamten Netzwerk an andere Miner weitergegeben? Wie wird sichergestellt, dass einige der Transaktionen nicht Teil anderer Blöcke sind?
@FrankL Der Block wird Peer-to-Peer über das Netzwerk verbreitet. Irgendwann werden sie zu den Bergleuten gelangen. Wenn ein Miner den Block erhält, platziert er ihn an die Spitze seiner Kette. Danach würde er die bereits in den neuen Block aufgenommenen Transaktionen ausschließen, wenn er versucht, den nächsten Block zu minen, da dies sonst eine doppelte Ausgabe darstellen würde und der Block ungültig wäre (andere Nodes würden ihn ablehnen).