Warum speichert Bitcoin alle Transaktionseingaben und -ausgaben und nicht nur ein „Konto/Saldo“-Ledger?

Soweit ich das beurteilen kann, speichert die Ethereum-Blockchain nur Konten und Guthaben – warum haben die ursprünglichen Bitcoin-Entwickler die Methode gewählt, alle Transaktionen zur Validierung zu speichern, anstatt nur Kontoguthaben? Es scheint, als würde das die Blockchain-Größe auf der Festplatte ziemlich reduzieren ...

@NateEldredge Ich frage nicht nach Blockchain-Trimmen, ich frage nach der ursprünglichen Entscheidung, diese Art von Datenbank insgesamt zu implementieren
Das ist eine ausgezeichnete Frage, die ich mir auch schon gestellt habe. Banken speichern die Seriennummern der Banknoten nicht, wenn sie Geld von einem Konto auf ein anderes überweisen – tatsächlich werden keine Banknoten übertragen. Warum also speichert Bitcoin Daten auf dieser Detailebene? Es scheint wirklich unnötig und ein Erfolgsschlager zu sein, die Datenbank von UTXOs zu pflegen

Antworten (4)

Um sicherzustellen, dass ein Adresssaldo korrekt ist, müssen Sie überprüfen, ob alle Transaktionen an dieser Adresse gültig sind. Um also eine Liste mit vertrauenswürdigen Adressen und Guthaben zu erstellen, müssen Sie zunächst die gesamte Blockchain herunterladen und verifizieren.

So wie Bitcoin funktioniert, brauchen Sie eigentlich eine Liste von nicht ausgegebenen Transaktionsausgaben (UTXOs). Wenn Sie eine neue Transaktion zum Ausgeben von Coins erstellen, belasten Sie nicht nur eine Adresse; Sie müssen auf eine oder mehrere spezifische Ausgaben früherer Transaktionen verweisen, die Sie ausgeben. Diese vorherigen Ausgaben werden dann unbrauchbar, sodass Sie sie nicht erneut ausgeben können.

Bitcoin Core generiert tatsächlich eine indizierte Datenbank aller UTXOs und bezieht sich darauf, wenn Transaktionen auf Gültigkeit geprüft werden (da dies viel schneller ist, als direkt durch die Blockchain zu suchen). Dies ist die engste Analogie zu dem von Ihnen vorgeschlagenen "Ledger".

Sobald Sie dies getan haben, können Sie die Blockchain selbst löschen und einfach die UTXO-Datenbank behalten; Das ist im Grunde das, was die -pruneOption tut (siehe Wie kann ich Bitcoin im Pruning-Modus ausführen? ). Denken Sie jedoch daran, dass Bitcoin ein Peer-to-Peer-System ist. Sie behalten also die Blockchain, damit neue Benutzer sie bei Ihnen herunterladen können.

Ah, das habe ich übersehen: Clients, die seit dem Genesis-Block nicht mehr laufen, brauchen einen Nachweis, dass jeder Kontostand korrekt ist
Die ausgewählte Antwort lautet: „Um sicherzustellen, dass ein Adresssaldo korrekt ist, müssen Sie überprüfen, ob alle Transaktionen an dieser Adresse gültig sind.“ Aber wieso? Warum kann der Adresssaldo nicht einfach anhand dessen entschieden werden, was die Mehrzahl der Distributed Ledger zeigt?
@sohrabsaran Das Hauptbuch (Blockchain) zeigt keine Adresssalden an. Außerdem gibt es nur eine Blockchain. Es gibt keine Mehrheit, noch wird irgendetwas durch Mehrheit oder "Abstimmung" getan.
Diese Antwort erklärt, wie Bitcoin ein Ein-/Ausgabesystem implementiert hat, aber nicht, warum es dies getan hat.

Genau die gleiche Frage wurde einem Bitcoin-Entwickler (Peter Todd) während der Bitcoin 2013 Conference gestellt.

Seine Antwort können Sie sich hier ansehen

Für diejenigen, die zu faul sind, sich das Video anzusehen, lautet die kurze Antwort, dass sie dies aus Sicherheitsgründen tun.

Videos können nicht wie Text nach wichtigen Bits durchsucht werden. Sich kein Video ansehen zu wollen, ist also keine Faulheit; es mag das Liefermedium nicht.
ein bisschen Humor schadet nie ;)
Humor?!? Was ist das! :)

Ein netter Artikel vom Corda-Entwickler, der erklärt, warum Corda das einfache „Account/Balance“-Ledger aufgibt und UTXO-ähnliches Ledger verwendet.
https://www.corda.net/2016/12/09/rationale-tradeoffs-adopting-utxo-style-model/

Das UTXO-Modell hat diese Vorteile:

  • Unveränderliche Ledger-Einträge bieten die üblichen Vorteile, die ein funktionalerer Ansatz mit sich bringt: Es ist einfach, eine statische Momentaufnahme der Daten zu analysieren und den Inhalt zu begründen, selbst wenn er sich ändert.
  • Da es keine Konten gibt, ist es sehr einfach, Transaktionen parallel anzuwenden, selbst für juristische Personen mit hohem Verkehrsaufkommen, vorausgesetzt, es werden ausreichend granulare Einträge vorausgesetzt.
  • Die Transaktionsreihenfolge wird trivial: Es ist unmöglich, Transaktionen falsch zu ordnen, da zur Identifizierung früherer Zustände auf Hash-Funktionen zurückgegriffen wird. Sequenznummern oder andere Dinge, die in einem vollständig verteilten System schwer bereitzustellen sind, sind nicht erforderlich.
  • Die Konfliktlösung läuft auf das Problem der doppelten Ausgaben hinaus, das äußerst minimale Anforderungen an Konsensalgorithmen stellt (da die Variable, über die Sie versuchen, einen Konsens zu erzielen, eine Reihe von booleschen Werten ist).
  • Smart Contracts sind einfach boolesche Funktionen und verändern den Zustand selbst nicht direkt. Es gibt daher keine Probleme mit staatlicher Korruption aufgrund von Dingen wie unerwartetem Wiedereintritt, wie es im Fall des DAO-Angriffs von Ethereum Anfang des Jahres der Fall war.

Kurz gesagt, der naive „Konto“-Ansatz ist völlig unsicher. Um die Unsicherheit zu beheben, ohne ein TXO-Modell zu verwenden, scheinen die Leute am Ende etwas zu schaffen, das komplexer, weniger parallelisierbar und weniger flexibel ist als das TXOUT-Modell.

Wie verhindern Sie beispielsweise, dass jemand eine Transaktion einfach erneut sendet, um eine Zahlung zu duplizieren? Die naive Lösung, jede neue Transaktion mit jedem tx in der Geschichte zu vergleichen, hat eine schreckliche Leistung und Skalierbarkeit und ist keine realistische Option. Die Verwendung einer Sequenznummer beendet die Parallelität (z. B. wenn Sie zwei Transaktionen durchführen und jemand zuerst die spätere hört, muss die erste blockiert werden; ebenso wie die Parallelität bei der Validierung) und hat den Overhead der Verfolgung von Sequenznummern.

Darüber hinaus wurden Systeme wie Bitcoin entwickelt, um Einwegadressen sowohl für den Datenschutz als auch für die effiziente Verknüpfung von Metadaten zu verwenden, z. B. woher wissen Sie, welche Rechnung bezahlt wurde? – indem Sie sehen, welche Ihrer Adressen bezahlt wurde. Wenn Sie Adressen nicht wiederverwenden, entfällt der potenzielle Nutzen des Kontomodells und Sie erhalten nur die Kosten.

Sie fragen: "Wie können Sie beispielsweise verhindern, dass jemand eine Transaktion einfach erneut sendet, um eine Zahlung zu duplizieren?", und schlagen dann einen Sequenzzählermechanismus vor. Angenommen, die Zähler sowohl des Senders als auch des Empfängers sind in dem digital signierten Transaktionspaket enthalten, das an das Netzwerk gesendet wird. Können Sie bitte näher auf die Parallelitätsbedenken eingehen? Sicherlich kann jeder Knoten eine gewisse Menge an Speicher haben, wo er einige Transaktionspakete für eine gewisse Zeit halten kann, bis die vorherigen Transaktionspakete ankommen. Das sieht nicht allzu schwierig aus, um es zu entwerfen und umzusetzen? Wenn du
Ein Zähler verhindert die Wiederholung, aber wenn das System auch nur den neuesten Zähler verfolgt, beendet es auch die Parallelität: Sie können keine weiteren Transaktionen durchführen, bis Ihre vorherige Transaktion bestätigt wurde, oder es sieht ansonsten wie ein Rollback aus. Die Verwendung eines Zählers bedeutet auch, für jedes Konto, einschließlich Konten, die jetzt leer sind, einen Zähler für immer zu verfolgen. Dadurch wird die Größe des Arbeitssatzes unbegrenzt, selbst wenn Ausgaben von 0 nicht zulässig sind.
Wenn wir einen Zähler pro Konto und durchschnittlich 5 Transaktionen pro Konto und Tag haben, dann besteht die Sorge um die Parallelität in der Verzögerung oder dem Verlust früherer Transaktionen, die für einige von mehreren Tausend Knoten auftreten. Wie werden in Bitcoin/Blockchain die Blöcke erstellt und zwischen mehreren tausend Knoten verbreitet? Sicherlich gelten die gleichen Probleme und Lösungen? Und warum sollten Zähler von anderen Konten als denen, die mit den Transaktionspaketen verbunden sind, verfolgt (überprüft) werden? Die Zählerspeicherung ist weniger problematisch als die Speicherung aller Transaktionen.
sohansaran Nebenläufigkeit bedeutet in diesem Fall, dass eine neue Transaktion nicht erstellt werden kann, bis eine vorherige irreversibel ist, ohne dass die Gefahr besteht, dass die vorherige blockiert wird, z. B. bei einer Neuorganisation.