Stärkste vs. Längste Kette und verwaiste Blöcke

Satoshi schreibt am Ende von Seite 3 seines Whitepapers: „Wenn zwei Knoten gleichzeitig verschiedene Versionen des nächsten Blocks senden, empfangen einige Knoten möglicherweise zuerst den einen oder anderen. In diesem Fall arbeiten sie an dem ersten, den sie empfangen haben, aber Speichern Sie den anderen Zweig, falls er länger wird." Hier scheint die richtige Kette die längste zu sein, obwohl Satoshi vielleicht nur ein wenig nachlässig mit der Formulierung umgegangen ist.

Ich habe jedoch an anderen Stellen gelesen, dass Knoten die richtige Kette in Bitcoin auswählen, indem sie die Kette auswählen, die die meiste Arbeit darstellt (oder mit anderen Worten, die Kette, die am schwierigsten rückgängig zu machen wäre). Ich nenne das die stärkste Kette. Dies ist nicht unbedingt dasselbe wie die längste Kette, da beispielsweise ein Block denkbar ist, der viel mehr Hashes brauchte, um eine gültige Nonce zu finden, als zwei andere Blöcke mit einem viel einfacheren Schwierigkeitsgrad. Dieser Stapelaustausch ist ein Ort, an dem ich dies gelesen habe.

Frage 1 : Welches ist die richtige Methode, die Knoten verwenden, um die richtige Kette, längste Kette oder stärkste Kette zu bestimmen?

Meine zweite Frage ist relevanter, wenn die Antwort auf Frage 1 lautet, dass die richtige Kette die stärkste Kette ist. Es bezieht sich auf verwaiste Blöcke.

Wenn die richtige Kette die meiste Arbeit darstellt, warum sind dann verwaiste Blöcke ein solches Problem? Es scheint, als würde jeder in Sekundenschnelle davon erfahren, wenn ein Knoten einen Block löst und ihn sendet, und dann ohne verschwendete Arbeit mit dem Mining auf dem neuen Block beginnen können. Selbst wenn 2 Miner einen Block (fast) gleichzeitig lösen, sehen die meisten Blöcke die beiden neuen Blöcke und wählen den mit dem niedrigeren Header-Hash (weil es schwieriger ist, niedrigere Hashes zu finden). Es scheint, dass die Knoten in Sekundenschnelle zu einem Konsens kommen sollten, wenn die richtige Kette durch die stärkste (und nicht durch die längste) Kette ausgewählt wird. Die einzige Zeit, die ein Miner damit verbringen könnte, an der falschen Kette zu arbeiten, wäre die Zeit, die er zwischen dem Erhalt eines gelösten Blocks verbringt, der bald darauf durch einen anderen gelösten Block mit einem etwas niedrigeren Hash ersetzt wird.

Frage 2 : Sind verwaiste Blöcke ein großes Problem für Miner? Wenn die Blockgenerierungszeit stattdessen 1 Minute wäre, wären verwaiste Blöcke ein viel größeres Problem?

Antworten (1)

Die „längste“ Kette ist die mit der meisten Arbeit . Die Arbeit einer Kette entspricht der erwarteten Anzahl von Hashes, die jemand benötigen würde, um eine Kette mit derselben Anzahl von Blöcken und genau denselben Schwierigkeitsstufen zu replizieren. Derzeit fügt also jeder Block etwa 2 66 Arbeit zur Kette hinzu, da im Durchschnitt ~ 2 66 Hashes benötigt werden, um einen Block mit der aktuellen Schwierigkeit zu lösen. Blöcke mit weniger Schwierigkeit fügen weniger Arbeit hinzu. (Die aktuelle Gesamtkettenarbeit liegt bei etwa 2 80 .) Allerdings fügen zwei Blöcke im gleichen Schwierigkeitsgrad der Kette immer die gleiche Menge an Arbeit hinzu. Ein Block mit einem niedrigeren Hash wird nicht als besser angesehen als einer mit einem höheren Hash.

Satoshi war anfangs nicht klar, dass die Wahl der richtigen Kette durch einfaches Zählen der Blöcke einige extrem einfache Angriffe ermöglicht. Version 0.1 hat nur Blöcke gezählt. Deshalb steht auf dem Papier nur „am längsten“. Etwas später kam die Idee der „Kettenarbeit“ hinzu.

Das Auflösen von Waisenkindern, wie Sie vorschlagen, könnte Waisenkinder tatsächlich wahrscheinlicher machen, da Miner in einigen Fällen einen Anreiz erhalten würden, zu versuchen, den neuesten Block zu ersetzen, anstatt ihn zu erweitern, insbesondere kurz vor einer großen Schwierigkeitsanpassung oder wenn der letzte Block viele Gebühren enthält.

Verwaiste Blöcke kommen hin und wieder vor. Eligius meldet etwa 2 % verwaiste Blöcke. Sie wären in der Tat viel häufiger, wenn die Zielzeit 1 Minute wäre, da Blöcke schneller generiert würden und es daher mehr Gelegenheit für Konflikte zwischen Blöcken gäbe.

Obwohl es die Wahrscheinlichkeit von Waisenkindern erhöhen könnte, würde die Wahl der richtigen Kette auf diese Weise nicht den Nettoeffekt von Waisenkindern minimieren? Denn wenn jetzt jemand einen Block zugesendet bekommt, der letztendlich nicht der richtige Block sein wird, dann verschwendet er die ganzen 10 Minuten damit, diesen Block zu minen, bis der nächste Block gelöst ist. Es scheint, als würde das Netzwerk schneller zu einem Konsens kommen und nur die richtigen Blöcke minen.
Was Miner betrifft, die versuchen, Blöcke rückgängig zu machen, scheint es, als würden rationale Miner dies die meiste Zeit nicht tun. Jede Nonce ist wie ein Lotterielos, und wenn sie sehen, dass ein neuer Block herauskommt, kann ich nicht verstehen, warum sie ihre Lotterielose weiterhin für das Mining auf dem alten Block ausgeben sollten, anstatt auf dem neuen Block, was wahrscheinlicher ist akzeptiert. In diesen beiden Fällen, die Sie erwähnt haben, kann ich verstehen, warum sie versuchen könnten, die letzte Sperre rückgängig zu machen (obwohl die Gebühren jetzt nicht wirklich genug Anreiz zu sein scheinen), aber das scheinen eher Ausnahmen als die Regel für das zu sein, was würde passieren.
@StephenM347 Ihr System würde auch doppelte Ausgaben durch mächtige Bergleute erleichtern. Wenn Sie derzeit über einen anständigen Teil der Mining-Power verfügen und eine 1-Bestätigungs-Transaktion rückgängig machen möchten, müssen Sie zwei Blöcke hintereinander abbauen. Aber mit Ihrem System könnte der Miner stattdessen einfach den neuesten Block ersetzen, was in vielen Fällen viel einfacher wäre, als zwei Blöcke hintereinander zu lösen (abhängig von der "Stärke" des neuesten Blocks).
@StephenM347 Auf jeden Fall sind Waisenkinder kein großes Problem für das Netzwerk, daher besteht keine Notwendigkeit, Dinge zu ändern. Miner mögen keine Waisenkinder, weil sie dadurch Blöcke verlieren oder Arbeit verschwenden, aber es ist nicht wichtig, Miner glücklich zu machen.
Sind die extrem einfachen Angriffe, die Sie hier erwähnen, auf den Time Warp-Angriff beschränkt? Selbst wenn Time-Warp-Angriffe kein Thema wären, wäre es immer noch schlecht, Ketten nach ihrer Länge zu vergleichen?
@ StephenM347 Time Warp ist nicht relevant. Der extrem einfache Angriff besteht darin, dass es einfacher ist, 400.000 Blöcke mit dem Schwierigkeitsgrad 1 zu erstellen, als 1 Block mit dem aktuellen Schwierigkeitsgrad zu erstellen. Wenn also nur die Anzahl der Blöcke eine Rolle spielen würde (und es keine Kontrollpunkte gäbe), könnte die aktuelle Kette sehr leicht überholt werden.
Nun, um 400.000 Blöcke mit der minimalen Schwierigkeit abzubauen, müssten Sie die Zeitstempel so ändern, dass sie wirklich weit in der Zukunft liegen (vorausgesetzt, Sie können die Zeitschleife nicht nutzen). In diesem Fall würde die Kette nicht als richtig akzeptiert Kette. Ich denke, der Time Warp-Angriff ist relevant, weil Sie damit mehr Blöcke mit der Schwierigkeit min abbauen können, ohne die Zeitstempel weit in die Zukunft zu verschieben. Ich habe hier eine offene Frage dazu .
Wenn die "längste" Kette die mit der meisten Arbeit ist und zwei Blöcke im gleichen Schwierigkeitsgrad der Kette immer gleich viel Arbeit hinzufügen, warum ist es falsch, die Blöcke einfach zu zählen? Welche extrem einfachen Angriffe ermöglicht es?
Diese Antwort definiert "Arbeit" nicht genau. Die Arbeit eines Blocks ist tatsächlich als floor(2^256 / (target + 1)) definiert, wobei „target“ der Zielschwellenwert ist, der aus dem Feld „nBits“ des Blockheaders konvertiert wird. (Siehe die GetBlockProof-Funktion in src/pow.cpp.)
Die Geschichte war wirklich interessant.