Woher weiß jeder Miner, wann er einen Block erstellen muss?

Ich habe versucht, das Protokoll zu verstehen und verwandte Dokumente zu lesen, aber es gibt einen Punkt, an dem ich nicht weiterkomme.

Soweit ich verstehe (korrigieren Sie mich, wenn nicht), wird eine Transaktion an das Netzwerk gesendet, und einige Miner erhalten sie. Wenn eine bestimmte Anzahl von Transaktionen erreicht ist, werden sie in einen Block gepackt und das Hash Race beginnt.

Was ich nicht verstehe ist; Müssen in diesem Schema nicht alle Miner in perfekter Speicherkohärenz und Zeitsynchronisation sein, damit sie wissen, wann ein Block versiegelt werden muss, und mit der Iteration für Hashes beginnen? Oder müssen sie nicht denselben globalen Block abbauen und hashen, sondern separate Blöcke haben, die später von anderen Minern validiert werden, und Transaktionskollisionen zwischen Blöcken spielen keine Rolle?

Ich weiß, dass ich einen sehr grundlegenden Punkt im Protokoll falsch verstehe, aber ich kann nicht herausfinden, was.

Antworten (2)

Ein Miner beginnt mit der Erstellung eines neuen Blocks, sobald er einen gültigen Block von einem anderen Miner erhält. Es beginnt dann, den nächsten Block über dem gerade empfangenen Block zu konstruieren und zu hashen.

Sie hatten Recht, als Sie dachten, dass jeder Miner einen separaten Block von den anderen hat. Betrachten Sie es nicht so, als würden Miner alle zusammenarbeiten, um einen Hash für denselben Block zu finden, sondern konkurrieren miteinander, um ihren eigenen Block zum nächsten in der Kette zu machen. Wenn sie einen gültigen Block finden, senden sie ihn und andere Miner geben ihre Bemühungen auf und konzentrieren ihre Hashing-Leistung stattdessen auf den nächsten Block.

In Ordnung ... So wurden zum Beispiel die Transaktionen a, b, c und d an Miner M1 übermittelt; Die Transaktionen c, d, e, f und g wurden an Miner M2 übermittelt. Sowohl M1 als auch M2 befinden sich auf dem Kopf BC1. M1 findet einen legitimen Hash und kündigt die neue Blockchain BC2 an. Was ist jetzt mit M2? Das aktuelle BC2 enthält kein e, f und g. M2 startet möglicherweise einen neuen Blockkandidaten B3, aber dies führt dazu, dass die Transaktionen c und d dupliziert werden. Der Ex-Block B2' von M2 kann auch nicht vollständig gelöscht werden, das würde dazu führen, dass e, f und g verschwinden.
@corsel: M2 generiert einen neuen Block-Header B4, der nur Transaktionen enthält e,f,g, und beginnt mit der Suche nach einem passenden Nonce dafür.
Ah, die Blockchain ist also immer synchron und muss von der Mehrheit des Netzwerks validiert werden, während Blockkandidaten lokal sind und vollständig nach dem Willen der Miner... Wenn eine bösartige Blockchain auftaucht, wird sie von anderen Minern getestet und abgelehnt, oder der Versuch, die Geschichte durch Hashing in tiefen Ebenen zu manipulieren, schlägt fehl, da in kürzerer Zeit eine neue Kette angekündigt wird.

Ein Teil Ihres Missverständnisses ist: "Wenn eine bestimmte Anzahl von Transaktionen erreicht ist". Mining benötigt keine bestimmte Anzahl von Transaktionen; Es ist legal, einen Block ohne Transaktionen zu haben (mit Ausnahme der „Coinbase“-Blockbelohnungstransaktion). Das „Hash Race“ findet immer statt; er startet und hört nicht auf. Wenn ein Miner eine neue Transaktion erhält, fügt er sie einfach in die Transaktionen ein, die er bereits hat, generiert einen neuen Block-Header und fährt mit dem Hashing auf dem neuen Header fort. Es ist nicht erforderlich, dass alle Miner mit denselben Transaktionen arbeiten.