Wie wird das Adressguthaben berechnet?

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.

Beachten Sie, dass „Adresse“ und „Konto“ für Bitcoin getrennte Dinge sind – von welchem ​​sprechen Sie?

Antworten (3)

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:

  1. Bob hat 1 Sparschwein, er will Alice die Hälfte des Sparschweininhalts bezahlen.
  2. Er zerbricht sein Sparschwein.
  3. Er nimmt die Hälfte davon und gibt sie Alice, die alles in ein neues Sparschwein stecken wird, das ihr gehört.
  4. Die restliche Hälfte legst du in ein neues kleineres Sparschwein, das dir gehört und darauf wartet, aufgebrochen zu werden.

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:

Berechnung des Adresssaldos

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.

Speicherstruktur

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=1Flag.

Aus dem Bitcoin-Wiki :

txindex| Pflegen Sie einen vollständigen Transaktionsindex, der vom RPC-Aufruf getrawtransaction verwendet wird (Standard: 0)

Das hat nichts mit Adressguthaben zu tun.
Ich stimme zu, der Titel scheint nicht mit der Frage übereinzustimmen. Die Frage bezieht sich mehr auf die Praktikabilität des Scannens aller Transaktionen und wie dies geschehen könnte.
Und die Antwort hat keinen Bezug dazu, da der txindex nicht einmal zur Validierung verwendet wird.
Ja, das macht Sinn, die Frage ist eher auf hohem Niveau
Ich habe gerade die Antwort aktualisiert, um die Frage besser zu beantworten.
Es gibt keinen Index von txids (oder irgendeinen Index), der zu irgendeinem Zeitpunkt während der Validierung verwendet wird.
Bezieht sich diese Antwort dann auf einen anderen utxo-Index? bitcoin.stackexchange.com/a/29782/60443
Bitcoin Core verwaltet eine Datenbank aller nicht ausgegebenen Transaktionsausgaben. Es ist kein Index, da es auf nichts anderes indexiert. Auf die ursprünglichen Transaktionen oder Blöcke, die die ausgegebenen Ausgaben erzeugt haben, wird nicht zugegriffen. Es werden nur neue Ausgaben zur Datenbank hinzugefügt und die ausgegebenen entfernt.