Was macht der Bitcoin-Client, wenn er widersprüchliche Transaktionen erhält?

Ich bin davon ausgegangen, dass die zweite Transaktion einfach als ungültig verworfen wird, während die erste bei 0/unbestätigt wartet, bis sie tatsächlich in einen Block gelangt (was einen "-rescan" oder ähnliches erfordert, wenn die zweite tatsächlich in der Blockchain landet stattdessen). Aber ist dies der Fall? Was passiert eigentlich im Standardclient, wenn zwei widersprüchliche Transaktionen empfangen werden?

Nehmen Sie der Einfachheit halber an, dass die Person, die den Client betreibt, der Empfänger von mindestens einer der Transaktionen ist und nicht Mining betreibt.

Ich weiß, was passieren soll, ist, dass es alle widersprüchlichen Transaktionen ignoriert und die erste, die es empfängt, behält, bis eine widersprüchliche Transaktion in die Blockkette gelangt. Dann soll es die ursprüngliche Transaktion vergessen und bei derjenigen bleiben, die in die Kette gelangt ist, selbst wenn diese Kette anschließend ungültig wird. Irgendwie schrullig, und das soll es tun! Es besteht Einigkeit darüber, dass der Kunde damit nicht gut umgeht und möglicherweise nicht einmal das tut, was er soll.
Aber was macht es gerade?
Ich weiß nicht, deshalb habe ich eher kommentiert als geantwortet.

Antworten (1)

Ich kann nicht dafür sprechen, was es jedes Mal tut, aber ich habe gerade den Kommentar von Herrn Schwartz getestet, also kann ich dafür sprechen, was es dieses eine Mal getan hat. Ich habe eine geografisch entfernte Maschine, auf der eine identische Kopie von Bitcoin läuft, und meinen lokalen PC (mit identischen Brieftaschen) ferngesteuert. Ich habe innerhalb weniger Millisekunden identische widersprüchliche Transaktionen für mein gesamtes Guthaben gesendet (Atomuhrsynchronisierung und Timer - nicht fragen) und wie erwartet zeigten beide Transaktionen in beiden Clients 0/unbestätigt und nur eine schaffte es in a Block. Der andere verschwand nach a-rescan

Seltsamerweise wird nach -rescander zweiten Transaktion nicht einmal in einem bitcoind listtransactionsDump angezeigt, was mir seltsam erscheint. Es sieht so aus, als ob solche fehlerhaften Transaktionen aufgezeichnet und mit einem besonderen Status gekennzeichnet werden sollten, ähnlich wie es verwaiste Blockbelohnungen sind – dies ist schließlich ein Buchhaltungssystem und unter Umständen könnte dies „Beweisvernichtung“ sein. Ich werde das nächste Mal, wenn ich auf GitHub bin, einen Kommentar abgeben und sehen, ob jemand beißt.

Vielen Dank. Ich stimme zu 100 % zu, dass der Kunde solche Transaktionen in einem besonderen Zustand speichern sollte (ungültig gemacht, in Konflikt geraten, was auch immer). Es gibt derzeit einfach keinen Code dafür. Dies sollte wahrscheinlich als Verbesserungsanfrage auf GitHub eingereicht werden, damit Leute, die nach Dingen suchen, an denen sie arbeiten können, die Möglichkeit haben, dieses Problem zu sehen.
Ich habe eigentlich nicht erwartet, dass beide Transaktionen auf beiden Clients angezeigt werden, da ein Client eine widersprüchliche Transaktion nicht passieren wird. Aber ich weiß jetzt, warum es passiert ist und wo meine Argumentation schief gelaufen ist – jeder Client hat beide Transaktionen von verschiedenen Clients erhalten, mit denen er verbunden war. Während jeder nicht beteiligte Client nur die zuerst erhaltene Transaktion behält und weiterleitet, behält ein Client zwei widersprüchliche Transaktionen, wenn es sich um Adressen in der eigenen Brieftasche dieses Clients handelt (zumindest bis eine in eine Blockade gerät).
BitcoinCharts zeigte jedoch fast sofort die korrekte Transaktion in seiner unbestätigten Liste und NUR diejenige, die schließlich bestätigt wurde, daher scheint es die beste Vorgehensweise zu sein, sich bei einem solchen Dritten zu erkundigen, anstatt dem lokalen Kunden für 0/unbestätigte Transaktionen zu vertrauen .
Sie hatten nur durch Glück „Recht“. Bis die eine oder andere Transaktion bestätigt ist, gibt es keine Möglichkeit zu wissen, welche „gewinnen“ wird. Wenn Sie unbestätigte Transaktionen annehmen möchten, ist es eine gute Idee, mehrere verschiedene Punkte im Netzwerk zu überprüfen.
Hat es das jemals in den Standard-Client geschafft? Oder gibt es andere Mittel, um verlorene Transaktionen zu erkennen?