Unklarheit im letzten Video

Roman sagt im letzten Video «Exitscam der Exchange! Schütze dich vor Verlust!» bei ca. 15:15:

Einige Miner schmeissen Transaktionen mit zu kleiner Fee nach einiger Zeit aus ihrem Mempool. Deshalb soll man nach einiger Zeit diese Transaktion mit mehr Fee einfach noch einmal machen.
Nun haben wir jedoch eine Situation, bei der es sein kann, dass dann doch beide Transaktionen den Weg in einen Block finden und die doppelte Menge Bitcoin als gewollt transferiert wird.

Ist das so, oder übersehe ich etwas?

Wenn die Transaktion aus dem Mempool geworfen wurde, ist sie doch weg.

Wie sollten dann „beide Transaktionen den Weg in einen Block finden“?

Also man sendet den double-spend raus, aber dann werden einfach zwei Transaktionen verarbeitet, falls man genug Bitcoin auf der Adresse hatte. Geht das?

Oder weiß die erste Transaktion immer, dass die Zweite darauf ausgelegt war sie zu ersetzen?

Wenn nicht immer, in welchem Fall wird die Erste überschrieben?

Es ist kein double-spend.
Die Transaktion wird ja zwei Mal gemacht.
Aber kann man sicher sein, dass die Transaktion mit zu wenig Fee niemals ausgeführt wird. (also in einen Block aufgenommen wird)

Zu einem späteren Zeitpunkt im Video sagt Roman, dass man z.B. bei Electrum ein Flag setzen kann und dadurch später einer Transaktion Fee nachschiessen kann.

Weil doch nicht nur der Mempool existiert. Meines Wissens hat jede Node ihren eigenen Mempool. Wenn nun eine Node eine Transaktion (nach langem verbleib in ihrem Mempool) aus ihrem Mempool schmeisst, dann kann doch diese Transaktion immer noch in anderen Mempools sein und vielleicht sogar irgendwann ausgeführt werden.
Wenn die Transaktion dann erneut (mit genügend Fee) gemacht wird, dann kommt im Empfänger Wallet die Transaktion zwei mal an.

Wenn du BTC sendest „verbrauchst“ du sozusagen diese utxo, diese kann kein zweites Mal ausgegeben werden.

1 „Gefällt mir“

Nehmen wir an, ich habe 10 BTC auf meinem Wallet.

Nun mache ich eine Transaktion von 1 BTC mit nur 10 Satoshi Fee an eine andere Wallet.

Diese Transaktion könnte nach 30 Tagen nicht in einen Block aufgenommen worden sein, weil die Fee für die Miner uninteressant ist. Einige Nodes haben diese Transaktion aus ihrem Mempool geschmissen, und andere nicht.

Also mache ich eine weitere Transaktion von 1 BTC an die gleiche Wallet, aber nun mit genügend Fee.

In einem Moment mit nur wenigen Transaktionen könnte doch nun ein Miner der die erste Transaktion noch im Mempool hat diese Transaktion mit nur 10 Satoshi in den nächsten Bloch aufnehmen. Auch die zweite Transaktion mit ausreichend Fee würde natürlich in diesem Block landen.

Um sicher zu sein, dass nur 1 BTC in der Zielwallet ankommt, müsste man doch sicher sein, dass die erste Transaktion aus allen Mempools rausgeschmissen wurde.

Wie kann man sich dessen sicher sein?

Das ist genau der Denkfehler. Ein UTXO kann nicht mehrfach ausgegeben werden. Weder in einem gemeinsamen Block, noch in mehreren Blöcken hintereinander. Das wäre in der Tat ein Double Spend.

Sichergestellt wird das über die Konsensregeln. Sollte ein Miner einen Block an das Netzwerk broadcasten, in dem ein UTXO zum zweiten Mal ausgegeben wird, werden die mehr als 10.000 anderen Nodes im Netzwerk das beim Validieren dieses Blocks feststellen.
Sobald die Nodes erkennen, dass der neue Block nicht den Regeln entspricht, wird er verworfen. Genau aus diesem Grund wird ein Miner solch einen Block auch gar nicht erst minen.

Im Extremfall könnte es passieren, dass zwei Miner gleichzeitig einen Block finden, wobei sich in diesen deine beiden unterschiedlichen Transaktionen des gleichen UTXOs befinden. Das Problem löst sich aber, sobald sich das Netzwerk für einen dieser Blöcke entschieden hat, also wenn der nächste Block gefunden wurde.

Wenn du eine Transaktion mit zu wenig Fee ausgestattet hast und sie im Mempool hängt gibt es mehrere Möglichkeiten:

  • Du wartest ab, ob der Mempool mal wieder fast leer ist und deine Transaktion durchkommt. Da anscheinend viele Nodes kein Zeitlimit dafür einstellen, besteht diese Chance immer. Gibt einige Threads dazu im Forum.

  • Da hast beim Erstellen der Transaktion das „Replace by Fee“ Flag gesetzt. Dann kannst du im Nachhinein noch die Fee erhöhen, obwohl die Transaktion schon an das Netzwerk übermittelt wurde. Replace by Fee können aber nicht alle Wallets.

  • Du erstellst eine Transaktion, welche einen Output deiner vorherigen Transaktion weitertransferiert. Zum Beispiel kannst du den Change UTXO der ersten Transaktion an eine andere Adresse deiner eigenen Wallet transferieren.
    Für diese zweite Transaktion stellst du eine hohe Fee ein, so dass sich beide Transaktionen zusammen für den Miner lohnen. Natürlich funktioniert das Verfahren nur, wenn du Zugriff auf wenigstens einen Output der ersten Transaktion hast, z.B. falls ein Change existiert. Einfach mal nach „Child pays for Parent“ bzw. „CPFP“ suchen.

Ich weiß leider nicht ob es auch möglich ist, den gleichen UTXO nochmal in einer Transaktion mit höherer Fee an das Netzwerk zu übermitteln. Könnte sein, dass die Nodes so einen „Double Spend Versuch“ gar nicht in ihren Mempool aufnehmen.

5 „Gefällt mir“

Es ist bei Bitcoin nicht so wie bei einer Geldbörse, dass du Geld auf einer Adresse hast und kannst dieses ausgeben. Wenn du 10 Bitcoin in einer Transaktion erhältst ist dies ein utxo (unspent transaction output), welchen du nur im kompletten ausgeben kannst. Du sendest jetzt 1 BTC an eine Adresse und erhältst (beachten wir mal nicht die Fees) 9 BTC zurück auf eine neue Adresse, sprich ein neuer utxo, welchen du wieder ausgeben kannst. Wenn nun ein Miner deine doppelte Transaktion bearbeiten will merkt er, dass die utxo bereits ausgegeben wurde und somit nicht gültig ist.

3 „Gefällt mir“

Vielen Dank für deine detaillierten Ausführungen.
Ich verstehe dass meine bisherige Vorstellung in die falsche Richtung zielt. Um den Ablauf von Transaktionen bis ins Detail zu verstehen, werde ich wohl mehr Zeit brauchen. Werde mehr im Forum stöbern. Du hast mich in die richtige Richtung geschupst! Und es wird immer spannender. :grinning:

1 „Gefällt mir“

Ja, ich habe verstanden, dass ich in die falsche Richtung überlegt habe. Vielen Dank für deine Erklärung.
Mir ist noch nicht ganz klar: Wenn die 9 BTC die zurückkommen auf eine neue Adresse gehen, dann müsste doch mein Private Key nicht mehr passen. Offensichtlich muss ich mich intensiv mit den Grundlagen beschäftigen.

Das ist richtig dein private Key passt dann auch nicht mehr. Wenn du eine HD Wallet benutzt arbeitet diese mit einem Seed (24 Wörter). Aus diesem Seed können kryptografisch unendlich viele neue private Keys abgeleitet werden ohne das du es im Vordergrund mitbekommst. Du bekommst deine 9 BTC einfach auf eine neue Adresse und kannst diese ganz einfach versenden.

2 „Gefällt mir“
1 „Gefällt mir“

Genau! Das werde ich studieren. :+1:

Hallo Matt
Ich habe gedacht, dass man (zumindest theoretisch) von einem Paper Wallet aus die eine Hälfte an eine Wallet und die andere Hälfte an eine andere Wallet senden kann. Aber so wie du das siehst geht die zweite Hälfte an irgend eine Wallet von der ich dann nichts weiss und auch keinen Privaten Schlüssel habe.
Vielleicht habe meinen Denkfehler noch nicht wirklich gefunden.

Ich bin mir nicht sicher ob ein Paperwallet einen Seed oder einen private Key beinhaltet. Wenn der Paperwallet nur einen privaten Key beinhaltet, kannst du natürlich die BTC die du nicht ausgeben möchtest zurück auf die alte Adresse schicken. Aus Gründer der Privatsphäre empfiehlt es sich für gewöhnlich, jede Adresse nur einmal zu verwenden. Außerdem wird beim Signieren der Transaktion der public Key veröffentlicht, was aktuell noch kein Sicherheitsrisiko darstellt, aber eventuell in einer fernen Zukunft.

Je nach dem was man aufschreibt :sweat_smile:

Wenn du ein Paperwallet erzeugst, dann bekommst du einen Privat- und einen Publik-Key. Man müsste vielleicht noch klären, was genau man unter einem Paperwallet versteht.

Da hast du natürlich recht. Ich hatte irgendwie das Bild eines Paperwallets mit QR Code im Kopf :sweat_smile: