Es erscheint nicht praktikabel, jede Transaktion auf einer Blockchain zu scannen, um den Kontostand zu ermitteln. Wenn die Blockchain wächst, scheint dies noch schwieriger und ressourcenintensiver zu sein. Vielleicht sind alle Transaktionen in etwas gruppiert, das wir früher einen Datensatz nannten, insbesondere einen Datensatz mit variabler Länge. address..trans1, trans2, etc...transN für die letzte Transaktion.
Bitcoin verwendet das sogenannte UTXO- Modell (Unspent Transaction Output).
Das erste Mal ist es nicht sehr intuitiv, weil es sich vom traditionellen Buchhaltungsmodell unterscheidet, bei dem Sie nur Geld ausgeben und an ein Konto senden.
Denken Sie an volle Sparschweine, die nicht mehr gefüllt werden können als sie sind und die Sie aufbrechen müssen, bevor Sie den Inhalt ausgeben können:
Jedes Sparschwein/UTXO ist mit einer Adresse verknüpft. Ein Bitcoin-Nutzer kann natürlich mehrere UTXOs zu seiner Adresse haben. Die Summe der UTXOs gibt die Menge an Bitcoins an, die der Adresse gehören (was eine der Funktionen von Wallets ist).
Jede Transaktionseingabe ist die Ausgabe einer vorherigen Transaktion. Obwohl Wallet-Software das Gefühl vermittelt, dass Sie Bitcoins oder Satoshis „übertragen“, geben Sie nicht von einem Konto aus, das Sie UTXO ausgeben .
Sie geben von Transaktionen aus, die zuvor an Sie getätigt wurden.
Eine etwas intuitivere Art, über Kontostandsberechnungen nachzudenken, besteht darin, sich vorzustellen, dass Sie eine echte Fiat-Brieftasche verwenden.
Wenn Sie sehen möchten, wie viel Geld Sie gerade physisch haben , würden Sie Ihre Brieftasche öffnen, alle Banknoten mit unterschiedlichen Nennwerten herausnehmen und zusammenfassen. Dadurch erhältst du dein Gleichgewicht.
Bitcoin macht etwas Ähnliches, wo eine Adresse Ihrer physischen Brieftasche ähnelt. Mit einer einzelnen Adresse können mehrere Utxos verknüpft sein. Das Guthaben für diese Adresse ist die Summe aller Utxos.
Das Wichtigste dabei ist, dass Bitcoin nur nicht ausgegebene Transaktionsausgaben verfolgt. Um also zum Gleichgewicht für die Adresse zu gelangen, muss es nur die Blockchain durchlaufen, neue Ausgaben hinzufügen, wenn sie erstellt werden, und alte entfernen, wenn sie ausgegeben werden. Darüber hinaus ist dies ein erweiterbarer Prozess. Wenn Sie den utxo-Satz ab Block 100 kennen, müssen Sie nicht ab Block 0 neu berechnen, um mit Daten aus Block 101 zu aktualisieren. Sie können Ihren Satz einfach ab Block 100 aktualisieren.
Dies ähnelt wiederum der Verwendung physischer Brieftaschen. Niemand verfolgt alle Banknoten und Münzen, die er in der Vergangenheit hatte (ausgegebene Transaktionsausgaben). Sie verfolgen nur, was sie gerade haben (utxo). Wenn eine neue Transaktion stattfindet (z. B. wenn Sie Milch kaufen), aktualisieren Sie nur den aktuellen Status Ihrer Brieftasche, indem Sie eine Notiz entfernen und das Wechselgeld zurücklegen. Sie müssen es nicht ab dem ersten Mal berechnen, als Sie Geld verwendet haben.
Bitcoin geht noch einen Schritt weiter und hat ein Konzept von Konten, bei denen es sich um mehrere Adressen handelt, die als eine Brieftasche fungieren. Eine ähnliche Analogie wäre, wenn jeder in Ihrem Haus das Geld aus all seinen Brieftaschen zusammenlegen würde, damit Sie es gemeinsam ausgeben können. Auch hier ist der Saldo eines Kontos einfach die Summe der Salden der darin enthaltenen Adressen.
Bearbeiten:
Ein Adressguthaben wird berechnet, indem alle Werte der nicht verbrauchten Transaktionsausgaben (UTXOs) addiert werden, die von dem dieser Adresse entsprechenden Schlüsselpaar ausgegeben werden können.
Um die umfassendere Frage zu beantworten: „Warum scannen Sie jede Transaktion in der gesamten Blockchain, um Ihr Guthaben zu bestimmen?“
Bitcoin Core muss den Kontostand einer Adresse nicht kennen, um eine Validierung durchzuführen. Es muss jedoch in der Lage sein, alle vorherigen Transaktionsausgaben zu durchsuchen, um neue zu validieren. Dazu durchsucht es eine generierte indizierte Datenbank (durch txid) aller Transaktionen nach den vorherigen Ausgaben, auf die von einer neuen Transaktion verwiesen wird, und überprüft, ob die Signatur die vorherige Ausgabe (UTXO) erfüllt. Beachten Sie, dass dies nur das Scannen nicht ausgegebener Ausgaben und nicht aller Transaktionen erfordert.
Die Optimierung dieser Datenspeicherung für die Kontostandsberechnung durch Indizierung nach Adresse und txid könnte die Kontostandsberechnung erleichtern, ist jedoch nicht für die Validierung erforderlich und würde zu Lasten der Effizienz der Transaktionsüberprüfung gehen. Es ist besser, dies dem Netzwerk zuliebe einer Wallet-Anwendung zu überlassen.
Vorherige Antwort:
Die vorherige Antwort erklärt, wie Transaktionen im Bitcoin-Kern indiziert werden, was einem Wallet oder Block-Explorer helfen kann, einen Adresssaldo effizienter zu bestimmen.
Sie können die Transaktionen in der Blockchain indizieren, um sie leichter durchsuchbar zu machen. Bitcoin-Core erlaubt dies über das -txindex=1
Flag.
Aus dem Bitcoin-Wiki :
txindex
| Pflegen Sie einen vollständigen Transaktionsindex, der vom RPC-Aufruf getrawtransaction verwendet wird (Standard: 0)
Caius Jard