Ist es möglich, eine Eingabe zu einer Transaktion hinzuzufügen, die sich im Mempool befindet?
Wenn zum Beispiel jemand seinem Freund 1 BTC zahlt, kann ich die rohen Hex-Daten dieser Transaktion aus dem Mempool abrufen, bevor sie abgebaut werden.
Ich kann dann eine nicht ausgegebene Transaktion (sagen wir 3 BTC) mit meinem eigenen privaten Schlüssel signieren, als Eingabe auflisten und die rohen Hex-Daten dafür abrufen. Dann kann ich eine 3-BTC-Ausgabe zur Adresse einer anderen Person hinzufügen (die ich bezahlen möchte) und diese neue Transaktion erneut an das Netzwerk senden.
Was verhindert das?
Kurze Antwort: Nein, das ist unmöglich.
Längere Antwort: Bei einigen Transaktionen können die verwendeten Eingaben geändert werden (Anyonecanpay-Eingaben). Es ist auch möglich, Eingänge zu haben, die die erzeugten Ausgänge nicht signieren (SIGHASH_NONE). Eine Transaktion, bei der alle Eingaben dieser Art sind, ist jedoch wertlos, da jeder die Ausgaben ändern könnte, um stattdessen sich selbst gutzuschreiben.
Wenn normale SIGHaSH_ALL-Signaturen verwendet werden, wird normalerweise so ziemlich alles an einer Transaktion signiert (welche Input-Coins werden verwendet (und in welcher Reihenfolge), welche Output-Skripte werden erstellt, welcher Wert wird ihnen zugewiesen, ... Alles außer den Signaturen sich wirklich selbst (was zu einer unfreiwilligen Formbarkeit führt).
Wenn eine Eingabesignatur mit ANYONECANPAY markiert ist, signiert sie nicht die anderen verwendeten Eingabemünzen. Dies bedeutet, dass Sie eine Transaktion erstellen können, die bedeutet: "Ich möchte, dass x und y bezahlt werden, aber es ist mir egal, wer die Mittel dafür bereitstellt". Wenn alle Unterschriften in einer Transaktion JEDERKANNPAY lauten, könnten Sie zusätzliche Eingaben hinzufügen (oder vorhandene Eingaben entfernen. Eine bloße Erhöhung der Eingabegelder würde sie jedoch nur als Gebühr verbrennen.
Auf der anderen Seite gibt es SIGHASH_NONE, wodurch eine Signatur die Ausgaben der Transaktion nicht signiert. Dies scheint zu erlauben, was Sie wollen, aber falls jede Signatur SIGHASH_NONE ist, ist die Transaktion völlig unsicher, da jeder ersetzen könnte, wohin die Ausgaben gehen.
Selbst wenn eine Kombination davon theoretisch das zulassen würde, was Sie vorschlagen, trifft dies nicht auf typische Straßenbahnaktionen zu und wäre tatsächlich völlig unsicher.
Es ist nicht möglich, den Transaktionen einer anderen Person eine zusätzliche Eingabe (oder Ausgabe) hinzuzufügen, ohne sie dazu zu bringen, die neue Transaktion zu signieren, da ihre Signatur nur für die angegebenen zugrunde liegenden Eingaben und Ausgaben gültig ist.
Eine mögliche Quelle der Verwirrung ist, dass andere Aspekte einer Transaktion tatsächlich formbar sind (sie können geändert werden, bis sie durch die Integration in die Blockchain im Mining-Prozess abgeschlossen sind). Beispielsweise gibt es eine triviale Transformation zum Bilden einer neuen gültigen Signatur aus einer vorhandenen gültigen Signatur, die im Wesentlichen das Negativ davon nimmt, und führende Nullen können ebenfalls vorangestellt werden. In gewisser Weise ist dies ein Altlastenproblem, da Signaturen vor Bitcoin als wertvoll angesehen wurden, um die Authentizität anderer Daten zu bestätigen, und nicht, um selbst einzigartig zu sein, so dass in dem unerwarteten Fall, dass diese nicht standardmäßigen Formate angezeigt werden Unterschriften, war es eine vernünftige Entscheidung, sie nicht zu akzeptieren.
Keine solche Änderung ändert die zugrunde liegende Übertragung von Bitcoin, sie ändert nur den Hash (Transaktions-ID oder txid) der bestehenden Transaktion. Dies bedeutet, dass eine solche Änderung die beteiligten Parteien verwirren könnte, da die Transaktion unter einer unerwarteten txid bestätigt wird, aber sie haben keinen Einfluss darauf, wie viele Bitcoins von welchen Eingängen zu welchen Ausgängen übertragen werden.
Sie können nicht, es würde eine völlig andere Transaktion erstellen und die andere würde ungültig werden, sobald eine es zu einem Miner und in einen Block schafft.
Normalerweise* enthält eine Bitcoin-Transaktion eine Unterschrift, um die folgenden Dinge zu bestätigen:
Eine Eingabe oder Ausgabe gibt sowohl eine Adresse als auch einen Betrag an. Wenn sich eines dieser Dinge ändert, wird eine neue Signatur benötigt, die nur von jemandem erstellt werden kann, der über den privaten Schlüssel verfügt. Durch das Ändern der Eingabe oder der Ausgabe wird die Signatur ungültig. Nur der Besitzer des privaten Schlüssels kann eine solche Änderung vornehmen, da er der einzige ist, der die neue Signatur erstellen kann. Selbst dann würde dies eine völlig neue Transaktion schaffen, die nicht mit dem Original verwechselt werden könnte.
Das , was geändert werden kann , bevor die Transaktion in die Blockchain aufgenommen wird, ist die Transaktions-ID. Dies zu ändern, kann für jeden, der unbestätigte Transaktionen akzeptiert, zu Verwirrung führen, aber es kann die Eingabe oder Ausgabe nicht ändern – es ist nur eine Bezeichnung. Für Personen, die nur bestätigte Transaktionen akzeptieren, befindet sich die Transaktion bereits in der Blockchain, wo nichts geändert werden kann, sodass keine Verwechslungsgefahr besteht.
Ich wollte eine einfache Erklärung, also habe ich keine Details zu Transaktionen mit mehreren Eingaben mit unterschiedlichen privaten Schlüsseln aufgenommen, aber das Gleiche gilt. Außer der Transaktions-ID kann kein Dritter Änderungen vornehmen, die keinen Einfluss darauf haben, welcher Bitcoin-Betrag übertragen wird oder wohin er übertragen wird.
Die obige Erklärung gilt für Standardtransaktionen. Die Erstellung einer Transaktion, für die diese Schutzmaßnahmen nicht gelten, würde entweder eine spezielle Software oder ein tiefgreifendes Verständnis erfordern. Weitere Einzelheiten zu Transaktionen finden Sie im Folgenden:
* Während es möglich ist, absichtlich eine Transaktion zu erstellen, die keine Eingaben oder sogar keine Ausgaben angibt, gehe ich davon aus, dass die Frage den üblichen Prozess der Erstellung einer Transaktion von bestimmten Eingaben zu bestimmten Ausgaben betrifft ).
** Mit "in die Blockchain aufgenommen" meine ich mit so vielen Bestätigungen, wie Sie es für Ihre Zwecke als ausreichend erachten. Wenn eine Transaktion nur eine Bestätigung hat, ist es immer noch möglich, dass der Block, in den sie aufgenommen wurde, später verwaist. Mit jeder weiteren Bestätigung sinkt das Risiko dafür erheblich.
bvpx
bvpx
Pieter Wuille