Wie funktioniert die Änderung bei einer Bitcoin-Transaktion?

Es scheint, dass beim Senden einer Bitcoin-Transaktion alle Münzen in der Sendeadresse für diese Transaktion ausgegeben werden, aufgeteilt in den Betrag, den Sie senden wollten, und "Wechselgeld", das an Sie zurückgeht, aber an einem anderen (neu erstellten ) Empfangsadresse.

Das macht es etwas schwierig, Ihr Guthaben im Block-Explorer zu verfolgen (zumal die neue Empfangsadresse anscheinend nirgendwo im Bitcoin-Client angezeigt wird).

Muss es so funktionieren oder ist das ein konkretes Implementierungsdetail der Client-Software?

Müssen Sie auch warten, bis das Wechselgeld bestätigt ist, bevor Sie es wieder ausgeben können?

Ich habe das gleiche Problem. Die Frage, die ich habe, gibt die Spezifikation ( github.com/bitcoin/bips/blob/master/bip-0032.mediawiki ) vor, was passieren soll? Oder liegt es am Geldbeutel, nach bestem Wissen und Gewissen zu entscheiden, was zu tun ist? Und zweitens, wenn Wallets tun dürfen, was sie wollen, wie kann eine App dann alle Adressen durchlaufen, die von einem anderen Wallet verwendet werden könnten, um Geld zu überweisen? Es scheint fast unmöglich, weil es so aussieht, als könnte eine Brieftasche tun, was sie will. Es könnte Ihre Gelder an einem obskuren Ort verstecken, wenn es keinen Konventionen folgt.

Antworten (3)

Lassen Sie uns zunächst den Unterschied zwischen Konten und Adressen klären.

"Konten" werden verwendet, damit die Leute ihre Gelder bequem verfolgen können. Dies wird hauptsächlich verwendet, um die Herkunft der Mittel zu verfolgen. Da dies nur zu Ihrer Nachverfolgung dient, können Sie Bitcoins von einem Konto auf ein anderes verschieben, indem Sie einfach eine Zahl von einer Spalte in eine andere verschieben. Es sind keine Transaktionen erforderlich. (Das ist so, als ob Sie wissen, dass Sie Ihrem Sohn 25 Dollar für Taschengeld schulden und 200 Dollar für Lebensmittel veranschlagt haben.)

"Adressen" werden verwendet, um Bitcoins in Transaktionen zu empfangen. Die Coins werden an eine Adresse gesendet. Der Kunde verknüpft jede Adresse mit einem Konto und fügt erhaltene Gelder diesem Konto hinzu. Dies geschieht einfach aus praktischen Gründen, damit die Leute indirekt nachverfolgen können, an welche Adresse Gelder gesendet wurden. Sie können jedoch eine beliebige Anzahl von Adressen mit demselben Konto verknüpfen.

Veränderung ergibt sich aus der Art und Weise, wie Bitcoins ausgegeben werden. Um eine bestimmte Anzahl von Bitcoins auszugeben, müssen Sie Bitcoins von Transaktionsausgaben auf Konten ziehen, die Sie kontrollieren. Beachten Sie, dass es im Ausgabenteil keine Rolle spielt, um welche Adresse es sich handelt oder mit welchem ​​Konto diese Adresse verknüpft ist. Wenn Sie Bitcoins von einem bestimmten Konto ausgeben, bedeutet das nur, dass Sie dieses Konto mit dem von Ihnen gesendeten Betrag belasten. Das bedeutet nicht, dass die Gelder von Adressen stammen, die mit diesem Konto verknüpft sind. Denken Sie daran, dass die Zuordnung zwischen Adressen und Konten nur zum Empfangen , nicht zum Senden dient. (Wie wenn Sie Geld für Lebensmittel ausgeben, ist es nicht so, dass Sie bestimmte Rechnungen für Lebensmittel haben. Sie haben nur einen budgetierten Betrag.)

Wenn Sie also Transaktionsausgaben einziehen, bilden Sie einen Haufen Bitcoins, der groß genug für die Zahl ist, die Sie zu senden versuchen. Normalerweise ist es nicht genau, da Sie eine vollständige Ausgabe beanspruchen müssen. Der Überschuss bildet also das „Wechselgeld“.

Da mit dem Senden von Bitcoins keine Adresse verbunden ist, gibt es keine bestimmte Adresse, an die die Änderung gesendet werden sollte. Um die Anonymität zu wahren, erstellt der Client also eine neue, nur um die Änderung aus dieser Transaktion zu erhalten. Da diese Adresse nicht wirklich mit einem Konto verknüpft ist und nicht verwendet werden sollte, um weitere Bitcoins zu erhalten (weil dies den Leuten sinnlos sagen würde, dass derselbe Empfänger die Münzen wie diese Änderung erhalten hat), zeigt der Client sie nicht an.

Da der Client Coins auf eine bestimmte Weise verwaltet, macht es keinen Sinn, zu versuchen, Coins, die er verwaltet, mit irgendeiner Art von Explorer anzuzeigen. Es wird speziell versucht, die Tatsache zu verschleiern, dass alle Münzen verwandt sind. Diese Arten von Diensten dienen der Überwachung der erhaltenen Gelder, nicht der verwalteten Gelder.

Die Informationen in Davids Antwort sind korrekt, aber sie beantworten möglicherweise nicht die eigentliche Frage – es ist unklar, ob sich die Frage auf Änderungen im Allgemeinen oder speziell auf das Senden von Änderungen an eine neue Adresse bezieht.

Im letzteren Fall muss nichts hinzugefügt werden. Wenn es aber um die Veränderungspraxis im Allgemeinen ging, dann ja, sie ist notwendig.

Der Grund dafür ist, dass ein Output, wenn er als Input verwendet wird, vollständig ausgegeben werden muss. Angenommen, jemand sendet Ihnen 10 BTC, diese 10 BTC sind eine einzelne Ausgabe. Sie können einen Teil dieser Münze nicht ausgeben, genauso wie Sie nicht einen Teil einer physischen Münze abschneiden und ihren Wert behalten könnten.

Der Grund dafür ist, dass eine Ausgabe eigentlich ein Skript ist, und um eine Ausgabe auszugeben, übertragen Sie einfach die Lösung an dieses Skript. Dieser Output wird in seiner Gesamtheit zu einem Input – und wenn Sie das Wechselgeld nicht einbeziehen würden, würde die Differenz zwischen den Inputs und Outputs in Transaktionsgebühren fließen.

Clientspezifisch ist , wie mit dieser Änderung umgegangen wird: Der Satoshi-Client sendet sie an eine neue Adresse, während andere Clients die Änderung einfach an eine der Ausgangsadressen zurücksenden können.

Die Änderung ist eine Ausgabe wie jede andere, was bedeutet, dass Sie auf Bestätigungen warten müssen – aber Sie können diese Änderung trotzdem verwenden, um sofort eine weitere Transaktion zu senden, Sie müssen nur warten, bis die erste Transaktion vor der zweiten bestätigt wird man kann.

Muss es so funktionieren oder ist das ein konkretes Implementierungsdetail der Client-Software?

Ja, dies wird durch das Bitcoin-Protokoll selbst implementiert , aber es ist nur eine bewährte Methode, Adressen nicht wiederzuverwenden. Da wir es mit einer pseudo-anonymen Kryptowährung zu tun haben, wäre es sinnvoll, die „Anonymität“ zu erhöhen, je mehr wir tun können.
Sie können Ihre Brieftasche jedoch dazu zwingen, "Wechselgeld" an eine statische und dauerhafte Adresse zu senden, ohne bei jeder Transaktion eine neue Wechseladresse zu generieren. Dadurch wird Ihre Privatsphäre erheblich eingeschränkt und der Transaktionsverlauf wird nicht "verschleiert", wie es beabsichtigt ist .

Müssen Sie auch warten, bis das Wechselgeld bestätigt ist, bevor Sie es wieder ausgeben können?

Nein, Sie können die Wechselmünzen auch mit 0 Bestätigungen ausgeben.

Mit Ausnahme von Coinbase-Coins (dh frisch abgebauten Coins, die 100 Blöcke benötigen, um zu reifen) können Sie Coins mit 0 Bestätigungen von Befehlszeilen-Wallets und vielen anderen ausgeben. Dies wird vom Protokoll selbst zugelassen, aber viele Clients erlauben Benutzern möglicherweise nicht, txs zu senden, bis die Eingaben mindestens 1 Bestätigung oder sogar mehr haben.

DENKEN SIE DARAN, dass die Ausgabe von 0 Bestätigungs-Coins aus nicht vertrauenswürdigen Quellen aufgrund eines möglichen „Pseudo-Double-Spending“-Angriffs dazu führen kann, dass Transaktionen aus dem Netzwerk-Mempool entfernt werden. Wenn Sie Ihr eigenes Wechselgeld mit 0 Bestätigungen ausgeben, vertrauen Sie sich selbst als dem ursprünglichen Absender, daher ist dies kein Problem (es sei denn, die ursprüngliche Transaktion, die die „Wechselgeld“-Coins generierte, war mit 0 Bestätigungen von einem nicht vertrauenswürdigen Absender.)