Wie entscheidet ein Kunde, welche die längste Blockchain ist, wenn es einen Fork gibt?

Ist es nur die Blockhöhe oder ist es der Aufwand, der in die Gabeln geflossen ist? Mit anderen Worten: Berücksichtigt diese Entscheidung unterschiedliche Schwierigkeiten?

Antworten (2)

Garys Antwort ist nicht ganz richtig. Beim Vergleich zweier Ketten werden ihre Gesamtwerte verglichen. Jeder Block zählt als (2^256 / block_target); Dies ist die erwartete/durchschnittliche Anzahl von Versuchen, die zum Erstellen erforderlich waren.

Offensichtlich sind die Schwierigkeiten innerhalb einer Reihe von 2016-Blöcken alle gleich, sodass Ihnen die Punktzahl bei den meisten kleinen Reorganisationen dasselbe sagt, als würde man nur die Anzahl der Blöcke zählen. Da ein Angreifer jedoch durchaus versuchen kann, Blöcke umzuschreiben, die die Grenze des Vielfachen von 2016 überschreiten, müssen Sie dies berücksichtigen. Die eigentliche Regel bevorzugt immer die Ketten, die am meisten „Arbeit“ erforderten.

Danke Peter. Ich war verwirrt, als ich Ihre Antwort zunächst als "Dies ist die erwartete geteilt durch den Durchschnitt ..." gelesen habe. Das ist jedoch ein kleiner Punkt. Ihre Antwort scheint im Widerspruch zu @NickOdells Antwort hier zu stehen: bitcoin.stackexchange.com/questions/37273/… , die behauptet, dass es keine Punktzahl gibt, sondern eine Reihe von Regeln, die in CBlockIndexWorkComparator festgelegt sind.
Diese Antwort geht nur auf das erste Kriterium in CBlockIndexWorkComparator ein. Die anderen sind nur für Tie-Breaking.
Warum wird der Block-Hash nicht zur Berechnung der geleisteten Arbeit verwendet?
@JBaczuk Weil unter den akzeptablen Hashes jeder Hash gleich wahrscheinlich ist. Das Zählen einiger als mehr als andere würde einfach zusätzliche Varianz einführen (wobei ein Zweig ohne Verdienst zufällig mehr zählen würde als ein anderer). Der einzige praktische Effekt wäre, dass viel mehr Forks zu sehen sind und mehr Bestätigungen benötigt werden, um sicher zu sein, dass eine Transaktion eingegangen ist.

Laut Satoshi-Papier gilt:

Die Schritte zum Ausführen des Netzwerks sind wie folgt:

1) Neue Transaktionen werden an alle Knoten gesendet.

2) Jeder Knoten sammelt neue Transaktionen in einem Block.

3) Jeder Knoten arbeitet daran, einen schwierigen Proof-of-Work für seinen Block zu finden.

4) Wenn ein Knoten einen Proof-of-Work findet, sendet er den Block an alle Knoten.

5) Knoten akzeptieren den Block nur, wenn alle darin enthaltenen Transaktionen gültig und nicht bereits ausgegeben sind.

6) Nodes drücken ihre Akzeptanz des Blocks aus, indem sie daran arbeiten, den nächsten Block in der Kette zu erstellen, wobei sie den Hash des akzeptierten Blocks als vorherigen Hash verwenden.

Nodes betrachten immer die längste Kette als die richtige und werden weiter daran arbeiten, sie zu erweitern. Wenn zwei Knoten gleichzeitig verschiedene Versionen des nächsten Blocks aussenden, empfangen einige Knoten möglicherweise zuerst die eine oder die andere. In diesem Fall bearbeiten sie den ersten erhaltenen Zweig, speichern aber den anderen Zweig, falls er länger wird. Die Krawatte wird gebrochen, wenn der nächste Proof-of-Work gefunden wird und ein Ast länger wird; Die Knoten, die an dem anderen Zweig gearbeitet haben, wechseln dann zum längeren.

Das fasst es ziemlich gut zusammen. Wenn Sie mehr gültige Blöcke haben, gewinnen Sie, bis jemand mit mehr gültigen Blöcken daherkommt.

So stand es in der Zeitung und so tat es der ursprüngliche Satoshi-Code, aber das stimmt nicht mehr. Wenn Sie immer die längste Kette auswählen, gibt es einige relativ einfache Angriffe, die funktionieren, indem Sie lange und einfache Ketten erstellen. Im Jahr 2016 wurde der Bitcoin-Kerncode auf die Verwendung der „meisten Arbeit“-Kette umgestellt, die nicht unbedingt die längste ist. Hier ist das Commit … github.com/bitcoin/bitcoin/commit/…