Transaktionsgebühr mit mehreren UTXOs auf verschiedenen Adressen

Ein Beispielszenario, um meine Frage zu veranschaulichen:

Bob hat eine Bitcoin Adresse, auf welche er 10mal einen Bitcoin geschickt bekommt. (10 Transaktionen)

Alice hat eine BitBox02, auf welche sie auf 10 Adressen jeweils immer einen BTC geschickt bekommt. (10 Transaktionen)

Beide haben zehnmal 1btc UTXOs. (so wie ich es verstanden hab?)
Jetzt wollen beide 5btc verschicken,
wer muss mehr Transaktionsgebühren zahlen?

Um das überhaupt vergleichen zu können, muss man auch von einer gleichen sat/vbyte Rate ausgehen nehm ich mal an, oder?

Beide Zahlen gleich viel Gebühren, denke ich. Liegt daran, dass jede transaktion eine separate UTXO erzeugt. Da beide Personen jeweils 10 UTXO haben, zahlen beide denke ich das gleiche.
TIPP: Für etwas mehr privacy eine generierte Adresse möglichst nur 1 mal nutzen.
Lg

4 „Gefällt mir“

Dann gibt es ja wirklich kein grund, eine adresse zu reusen, bringt nur nachteile

1 „Gefällt mir“

Den gab es so gut wie noch nie und vernünftige Wallet-Software wird in der Regel von sich aus auch kein Address Reuse anbieten. Man könnte, wenn man unbedingt möchte, Best Practice ist es nicht und hat meines Erachtens nur Nachteile. Bei Address Reuse sieht ein Empfänger mehr Funds der Sende-Adresse, als er sehen müsste/sollte.

Ja, ist so. Die Gebühren hängen nur von der Anzahl der Inputs und Outputs einer Transaktion und damit der Gesamtgröße einer Transaktion ab. Es spielt keine Rolle, ob die UTXOs für die Inputs zuvor auf nur eine oder jeweils unterschiedliche Adressen gesendet wurden.

2 „Gefällt mir“

Wie groß eine UTXO ist spielt auch keine Rolle? Also ob eine UTXO 500sats oder 3btc groß ist, Gebühren bleiben gleich

Die Gebühren sind von der Datenmenge abhängig und nicht von der BTC-Menge.

2 „Gefällt mir“

Und wie werden UTXO´s dann konsolidiert? Ich dachte das, wenn mehrere UTXOs auf die gleiche Adresse geschickt werden, diese dann zu einer größeren UTXO zusammengefügt werden? (nehme an das ist dann falsch?)

Demnach hätte Adress reuse sozusagen immer zur konsolidierung der UTXO geführt.

Ist ja auch genau so. Du backst beim Konsolidieren aus mehreren kleinen Input-UTXOs dann z.B. eine neue große UTXO.

Beim Bauen der Konsolidierungstransaktion hast du doch freie Hand, wie du konsolidieren möchtest (außer du hast eine Scheiß-Wallet, die die Bits nicht wert ist). Du könntest aus z.B. 30 Inputs auch 5 neue Outputs, alles von und auf dieselbe Adresse machen oder alles von und auf individuelle Adressen, wenn dir danach ist.

Wer ein analoges Bild zum besseren Verständnis braucht, kann sich vielleicht mit folgender Allegorie behelfen: eine Transaktion ist wie ein Schmelztiegel, der Miner eine Münzschmelz/präge-Anstalt; alle Inputs einer Transaktion sind Coins verschiedener Größe und können nur im ganzen Stück in den Schmelztiegel (eine Transaktion) und werden dort zusammengeschmolzen; die Outputs sind wiederum mindestens eine oder mehrere Coins, die der Schmelzer aus dem Tiegel neu gießen kann; mehr Coins, als vorher „eingeschmolzen“, kann nicht in die Outputs verteilt werden; das, was im Tiegel kleben bleibt, ist die Schmelzgebühr (Transaction Fee) für den Schmelzer aka Miner; ein UTXO als Input-Coin muss stets vollständig eingeschmolzen werden, geht nicht anders, vergisst man Wechselgeld-Coins zu gießen oder baut eine fehlerhafte Transaktion aka Schmelzauftrag, freut sich der Schmelzer, weil dann ganz viel im Tiegel für ihn übrig bleibt, wie letztens Mitte Dezember passiert ist.

1 „Gefällt mir“

Okay und wenn dem so ist, dann müssten die Fees entsprechend höher sein wenn ich 1 BTC in 10x 0,1 BTC UTXOs (einzelne Adressen) versende, da 10 inputs im Vergleich zu 1x 1BTC UTXO auf einer Adresse, richtig?

An sich müsste es auch wieder einen Unterschied machen, ob man dann auf 1x neue Adresse oder 10x neue Adresse verschickt (1 BTC kann ja auch wieder auf 10 neue UTXO zerlegt werden)

Wieso soll ich nur so viele Outputs wie Inputs erzeugen können?

Klassisch ist es doch bereits so, dass eine TX eine Ziel-Adresse, sowie eine Change-Adresse als Output beinhaltet, nicht?

Kann ich also technisch nicht 1x 1 (+Fee) BTC UTXO auf → 10x 0.1 BTC UTXOs aufteilen? (1 Input → 10 Outputs + ( 11. Change wg. Mining Fee)

Können dann auf einer Adresse überhaupt mehrere UTXOs liegen? Wir verwenden ja an sich für jede TX eine neue Adresse in einer ordentlichen Wallet und wenn ich mehrere UTXOs auf eine Adresse sende, werden diese auf dieser ja konsolidiert.

Korrekt, denn 10 Inputs verbrauchen 10x soviel Platz wie 1 Input in einer Transaktion, die Outputs mal unberücksichtigt gelassen. Analog auch für Outputs.

Ja, meistens wird man auf das Wechselgeld nicht pfeifen wollen.

Es gilt immer Fee = Summe(Inputs) - Summe(Outputs). Wenn du also z.B. einen UTXO in Höhe von 1,05BTC hast, dann könntest du diesen als einen Input nehmen, den auf zehn je 0,1BTC Outputs aufteilen, bei Transaktionsgebühren von 1sat/vB und Native Segwit Adressen zahlst du dann minimal 420sat Fee und dein 11. Output als Wechselgeld wäre dann 0,0499958 BTC.
Die Transaktion hätte folgende Dimensionen:
Transaction size in raw bytes: 502
Transaction size in virtual bytes: 419,5
Transaction size in weight units: 1678

Nachrechnen kann man das z.B. hier: Bitcoin Transaction Size Calculator oder Transaction size calculator | Bitcoin Optech

Ja, auf einer einzelnen Adresse können praktisch beliebig viele einzelne UTXOs liegen. Wie sinnvoll das ist, ist eine andere Frage. Stell dir vor, du schriebest auf deine Visitenkarte eine Bitcoin-Spendenadresse und wärest ganz fleissig beim Verteilen deiner Visitenkarten. Deine Visitenkartenempfänger hast du derart smart beeindruckt, daß diese kaum an sich halten können und viele senden dir zum Dank oder aus Gefälligkeit ein paar kSats an diese eine Bitcoin-Adresse. Schwupps hast du zig UTXOs auf nur einer Adresse. (Man wird ja träumen dürfen… lol!)

Ein anderes Beispiel wären all die Spenden, die Bitcoiner „auf“ die P2PKH-Adresse 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa der Coinbase des Genesis-Blocks von Satoshi Nakamoto gesendet haben. Stand jetzt 31.12.2022 22:25 nach mempool.space sind da 3621 UTXOs mit insgesamt 18,55564626BTC drauf. (Die 50BTC auf dem Coinbase-P2PK kann Satoshi niemals ausgeben, das geht mit dem aktuellen Bitcoin Code technisch nicht. Er wird’s verschmerzen können.)

3 „Gefällt mir“

Blockzitat
Ja, auf einer einzelnen Adresse können praktisch beliebig viele einzelne UTXOs liegen. Wie sinnvoll das ist, ist eine andere Frage. Stell dir vor, du schriebest auf deine Visitenkarte eine Bitcoin-Spendenadresse und wärest ganz fleissig beim Verteilen deiner Visitenkarten. Deine Visitenkartenempfänger hast du derart smart beeindruckt, daß diese kaum an sich halten können und viele senden dir zum Dank oder aus Gefälligkeit ein paar kSats an diese eine Bitcoin-Adresse. Schwupps hast du zig UTXOs auf nur einer Adresse. (Man wird ja träumen dürfen… lol!)
Ein anderes Beispiel wären all die Spenden, die Bitcoiner „auf“ die P2PKH-Adresse 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa der Coinbase des Genesis-Blocks von Satoshi Nakamoto gesendet haben. Stand jetzt 31.12.2022 22:25 nach mempool.space sind da 3621 UTXOs mit insgesamt 18,55564626BTC drauf. (Die 50BTC auf dem Coinbase-P2PK kann Satoshi niemals ausgeben, das geht mit dem aktuellen Bitcoin Code technisch nicht. Er wird’s verschmerzen können.)

Wir kommen der Sache näher - also gehen wir mal davon aus, kein ordentliches Wallet und es landen mehrere UTXO auf einer Adresse. Wann und wodurch werden diese dann konsolidiert?

Haben UTXO eine Art UTXO-ID? Ich ging immer davon aus, dass wäre die Adresse aber wenn eine Adresse doch mehrere unkonsolidierte UTXOs enthalten kann, müssten diese anderweitig im coin control z.b. identifizierbar sein, wie?

Findet die Konsolidierung dadurch statt, dass mehrere UTXO egal ob von einer oder mehreren Adressen zeitgleich auf eine neue Adresse geschickt werden? (Wurden sie also vorher nicht konsolidiert, weil sie nicht in einer TX zeitgleich auf die Adresse, sondern in zeitlich versetzten Spenden, gesendet wurden?)

Sorry, ich bin etwas langsam. ^^ und wünsche ein frohes Neues!

Hier wurde das UTXO Modell einschließlich der Frage der Konsolidierung ausführlich erklärt: Was ist ein “Unspent Transaction Output” (UTXO) und was muss man beachten?

2 „Gefällt mir“

Zur ersten Frage: Ja, ein UTXO wird über die Transaktions-ID und die Output-Nr. „vout“ referenziert, aus der er entstanden ist. Ein UTXO ist ja immer ein Output einer früheren Transaktion.
Um dich jetzt etwas aus der Spur zu bringen, vielleicht um deinen Lernwillen zu steigern: in der Bitcoin-Blockchain gibt es überhaupt keine Adressen, nirgends! Adressen sind nur so etwas wie Kochrezepte für die Wallet-Software und ein Vehikel für uns Kohlenwasserstoff-Einheiten. Mehr sag’ ich jetzt nicht. :grin:

Ich empfehle, mal die Grundlagen hier durchzuarbeiten:
Basic stuff: https://learnmeabitcoin.com/beginners/transactions
Ausführlicher:

Ich verstehe unter Konsolidierung von Bitcoins, daß man mehrere kleinere UTXOs zu einem oder wenigen größeren UTXOs zusammenfasst, also mit einer Transaktion neue größere UTXOs generiert. Ob die neuen UTXOs dann auf eine neue oder die ursprüngliche Adresse gehen, kann sich der Konsolidierer selbst aussuchen. Best Practice wäre eine neue Adresse, technisch aber nicht vorgeschrieben.

2 „Gefällt mir“

Ja, du würdest dir wahrlich an den Kopf greifen, wüsstest du warum ich diese Fragen stelle. :smiley:

Die Bitcoin Script Formate sind mir halbwegs bekannt und auch das die „Adressen“ ein PKH sind, wenn du dies meinst.
Seed-Private Key-Public Key-Adresse | wobei x/z/yPubs Auskunft über alle Pubkeys und Adressen geben, richtig?

TXID kannte ich in dem Sinne auch bereits, okay so weit so gut.

Kann man sagen, clients haben dabei einen Standard Prozess? Wie du bereits sagst → Best Practice wäre eine neue Adresse.

Mir wäre kein Client mit einer konkreten „Konsolidierungs-Funktion“ bekannt. Also liegt es sozusagen dem TX-Script des jeweiligen clients zu Grunde, ob mehrere UTXO bei einer Transaktion zu einer neuen zusammengefasst oder einzeln an die neue Adresse geschickt werden?

Wie in diesem geposteten Link dargestellt: Was ist ein "Unspent Transaction Output" (UTXO) und was muss man beachten?

Werden multiple UTXO (von mehreren Adressen?) auf eine neue Adresse Transferiert und damit eine neue größere UTXO geschaffen? (Konsolidierung)
Zudem wird genannt, dass eine UTXO im sog. Payment Batching auf mehrere neue Adressen versandt und damit in multiple kleinere UTXO aufgespalten werden kann?

Ich glaube du stellst dir das Thema abstrakter und komplizierter vor als es eigentlich ist. Wenn man dauernd von „UTXO“ spricht vergisst man vielleicht schnell dass es einfach nur Outputs sind die man ausgeben kann. Inputs und Outputs sind hier halt einfach abgehobene Informatik Begriffe für die Münzen und Geldscheine die bei einer Transaktion verwendet bzw. benötigt werden.

Es ist wirklich nahezu gleich wie mit echten Geldscheinen.

Du kannst einen 100€ Schein in 20 neue 5€ Scheine wechseln. Oder umgekehrt. Was in den Bitcoin Transaktionen passiert ist vom Prinzip her nichts anderes.

Es wird auch nichts „aufgespalten“ oder „versendet“. Bitcoin ist ein Kassenbuch. Neue Einträge werden hinzugefügt womit ältere Einträge eine neue Bedeutung bekommen, z.B. dass etwas ausgegeben wurde.

Ich würde mich auch nicht zu sehr an diesem Begriff der „Konsolidierung“ aufhängen, auch wenn ich den wahrscheinlich selbst im Beitrag zu oft benutzt habe. Das ist kein offizielles Bitcoin Feature oder so, sondern einfach eine umgangssprachliche Bezeichnung für Transaktionen in denen man Kleingeld gewechselt hat. :sweat_smile:

Für deine Wallet ist das eine ganz normale Transaktion. Sie geht halt nur an eine eigene Adresse.

Ja, UTXO werden für eine Transaktion nach einem Algorithmus gewählt der z.B. nach Gebühren optimiert ist. Das klingt jetzt wieder kompliziert, aber genau das hast du auch schon tausendmal gemacht.

Du siehst den zu zahlenen Betrag an der Supermarktkasse, schaust in deinen Geldbeutel und dann geht bei dir der Coin Selection Algorithmus los mit der Frage wie du am geschicktesten diesen Betrag mit deinen Münzen und Scheinen bezahlst. Dabei hast du verschiedene Prioritäten im Kopf, z.B.

  • möglichst wenig Kleingeld
  • möglichst vermeiden große Scheine anzubrechen
  • möglichst viel Kleingeld loswerden

Die Prioritäten bei einer Bitcoin Transaktionen gehen in eine ähnliche Richtung. Mehr dazu: In welcher Reihenfolge werden die UTXOs von der BitBox02 verwendet/ausgegeben? - #5 von sutterseba

Nochmal: Adressen spielen (bei diesem Thema) eigentlich keine Rolle.

Die Adresse ist nur der Name auf dem Briefkasten damit die Nutzer sich identifizieren können. Ob du jetzt bei dir im Garten zwei Briefkästen mit jeweils 4 Briefen oder einen mit 8 Briefen stehen hast spielt keine Rolle. Wenn du diese Briefe weiter schicken willst musst du jeden einzelnen davon sowieso in die Hand nehmen.

Lies dir vielleicht im oben verlinkten Beitrag auch mal die ganzen Antworten darunter durch. Da wurden viele Fragen gestellt die bei dir vielleicht auch noch offen sind.

4 „Gefällt mir“

Ja korrekt, dann passt das ja alles so. Ich versuche mir das eigentlich nicht abstrakt vorstellen sondern im programmier-technisch relevanten Bezug zu verstehen. Daher vielen Dank nochmal für die Klarstellungen deinerseits!

Entsprechend verstehe ich auch, dass es idR. einen coin-selection automatismus mit entsprechenden Präferenzen als auch eine manuelle Option zur Coin-selection gibt.

Ich hänge mich nicht an dem Begriff der Konsolidierung auf, der eine Post hatte mich nur eher mehr verwirrt als aufgeklärt, da ich nicht verstanden habe, wie es möglich wäre, mehrere UTXO in einer Transaktion auf eine neue eigene Adresse zu schicken, ohne diese in eine große UTXO umzuwandeln.

Mache ich.
Bin nur unsicher, ob ich das nicht verstehe oder wir einfach an einander vorbei reden.

Auch das ist mir eigentlich klar, die Adressen sind doch aber die niedrigste „Verwaltungsstufe“ sozusagen? Wenn Adressen aus dem jeweiligen Public Key gehasht werden, liegen die UTXO schlussendlich ja in diesem „Briefkasten“/Adresse, welche mit meinen anderen daraus gehashten Adressen einem Public Key (aus dem sie gehasht wurden) zugehörig ist.

Also grundsätzlich habe ich verstanden, dass UTXO über die TXID identifiziert und in der coin-selection gemanaged werden.

Ja, blöd von mir ausgedrückt aber die alte UTXO(=Eintrag?) wird schon aufgelöst bzw. reduziert und ggf. mehrere neue hinzugefügt?

Verstanden, so meine ich es auch die ganze Zeit.

Also wäre der Briefkasten selbst dabei der Public Key? Sorry, solche Beispiele sorgen bei mir eigentlich nur zu mehr Verwirrung.

Diese Antwort von dir hat es für mich nochmal klargestellt, dass es dir dabei um die outputs in den jeweiligen Transaktionen und damit die outpoints zur identifikation auf der gleichen Adresse geht. Das habe ich jetzt denke verstanden. :slight_smile:

Eine Wallet wird natürlich bei einer solchen Transaktion erstmal nur einen großen UTXO erstellen.

Aber du kannst auch manuell die Outputs deiner Transaktion festlegen, auch wenn das bei einer eigenen Adresse ziemlich sinnlos ist. Wenn du hingegen eine Exchange bist und an Kunden auszahlen willst, ist das sehr hilfreich.

Das sind Sachen die du im Testnet ungestört ausprobieren kannst, dann versteht man das auch direkt besser. Mit der Sparrow Wallet kannst du z.B. ganz einfach Batchen (also mehrere neue Outputs erstellen).

Adressen sind nur ein Konstrukt auf Nutzerebene und existieren im Bitcoin Netzwerk wie oben bereits erwähnt wurde nicht. Du hast selbst schon Public Key Hashes erwähnt, aber das sind keine fertigen Adressen.

Die „niedrigste Verwaltungsstufe“ ist das Locking Script eines Outputs. Weiter runter geht es nicht mehr. Hier ist festgelegt was passieren muss damit der Output ausgegeben werden darf.

Entscheidend hier zu verstehen ist, und deshalb versucht man bei diesem Thema immer von den Adressen abzulenken, dass es völlig egal ist ob zwei Outputs auf der gleichen Adresse „liegen“ oder nicht. Denn ich muss beide Locking Scripts unabhängig voneinander lösen.

Wenn du das im Detail verstehen willst musst du dich mit Bitcoin Script beschäftigen:

In der Bitcoin Blockchain wird nichts aufgelöst oder reduziert, falls du das meinst. Ob ein Output unspent ist erschließt sich die Node nur und merkt sich das ( → Chainstate).

Stell dir vor du gehst durch ein Kassenbuch. Einträge die noch nicht ausgegeben wurden merkst du dir oder schreibst dir eine Notiz. Wenn in einem neuen Eintrag auf einen älteren verwiesen wird (der noch nicht ausgegeben wurde) dann akzeptierst du das und merkst dir das dieser Eintrag jetzt zukünftig nicht mehr ausgegeben werden kann.

An den alten Einträgen selbst veränderst du nichts da das gar nicht nötig ist.

1 „Gefällt mir“

Hätte doch noch mal eine Frage:

Ich hab als Beispiel eine 1btc UTXO

Wenn ich davon 0.6btc verschicke, gibt es ein Input und drei Outputs (Zieladresse, Gebührenadresse und der Rest der UTXO zurück auf die eigene Adresse)

Wenn ich aber alles verschicke, also 1btc, gibt es ein Input und nur zwei Outputs (Zieladresse und Gebührenadresse)

Dass heißt, ganze UTXOs zu verschicken ist günstiger als Teile der UTXO, oder?

Es gibt weder eine Gebührenadresse noch wird die Netzwerkgebühr explizit in der Transaktion angegeben.

Die Differenz von Inputs und Outputs impliziert stattdessen die Netzwerkgebühr, so wie du im Restaurant mit einem zu großen Geldschein und einem „Stimmt so“ das Trinkgeld implizierst.

Wenn du einen 1 BTC UTXO ausgeben willst und nur einen 0.6 BTC Output in der Transaktion hast würdest du 0.4 BTC an die Miner zahlen. Deswegen braucht man in den allermeisten Fällen einen Change Output.

Je weniger Outputs du erstellst, desto kleiner und damit günstiger ist die Transaktion.

Du kannst UTXO nur vollständig ausgeben. Es ist aber natürlich günstiger wenn du einen UTXO nur an einen neuen Output ausgibst und den Change Output nicht brauchst (bzw. es keine weiteren Empfänger gibt).

3 „Gefällt mir“