Übermittelte einen Roh-TX, der sich bereits in der Blockchain befand, um ihn zu testen. Ich habe "fehlende Eingaben" anstelle von "bereits vorhanden". Warum?

In einem Versuch, Rohtransaktionen usw. besser zu verstehen, habe ich mir tx 518c41d5e59114f6a23383afbe95f02cdd09cb50cabd8390bdd9162a890435b3 in seiner Rohform angesehen :

01000000017871f56f7be2743293abb1adccf21526265e4ad793fddbc08508417293fd6b4e000000006a47304402201f3b98d55c16a1ff9e66cbdd5533fd74d18362477f50dbce357d66e1233ba469022066fd837cf7e1e030f5aab0f22fec06c7d98ee948fd8b9aba185512426079e0a201210284ca3e364bebb4cafb9fa76624927078e16a4244314f824ea8acff0ef1ba4627ffffffff0220a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac81f1d909000000001976a914db4c1f7949870fae5cdc366a45e2ea39c084547c88ac00000000

Ich habe dann versucht, dieses Rohformular zu übermitteln, einfach kopieren und in mein Bitcoin-Wallet-Programm in "sendrawtransaction" einfügen und den Fehler erhalten missing inputs (code -25). Das erscheint an sich schon seltsam, denn da dies ein exaktes Kopieren und Einfügen der Rohtransaktion ist, die sich auf der Blockchain befindet, sollte ihr nicht überhaupt etwas fehlen? Sollte ich nicht stattdessen den Fehler „Transaktion existiert bereits“ erhalten? Oder verstehe ich etwas nicht darüber, wie Rohtransaktionen übermittelt werden?

Antworten (1)

Bitcoin Core hat keine Ahnung, welche Transaktionen bereits in der Kette existieren. Es verwaltet keinen vollständigen Index, weil ... es nicht erforderlich ist. Tatsächlich hat es im Pruning-Modus nicht einmal die Kette oder ihre Transaktionen.

Das einzige, was es hat, ist die Menge der nicht ausgegebenen Transaktionsausgaben. Da Sie versuchen, eine vorhandene Transaktion wiederzugeben, werden alle Eingaben bereits von der vorherigen Instanz ausgegeben. Daher ist die erwartete und korrekte Antwort, dass Eingaben fehlen – dh Ihre Transaktion ist eine doppelte Ausgabe und daher ungültig.

Ich würde sagen, dass dies einer der Vorteile des UTXO-Modells ist: Replay und Double Spend sind ein und dasselbe, und es muss nicht unterschieden werden.

Was ist in diesem Fall der Sinn von fHaveChain in github.com/bitcoin/bitcoin/blob/master/src/rpc/… , das RPC_TRANSACTION_ALREADY_IN_CHAIN ​​auslöst?
@MeshCollider Wenn ich es richtig lese, wenn einige der Ausgaben der Transaktion in der Blockchain vorhanden sind und nicht ausgegeben werden, schlägt senddrawtransaction mit diesem Fehler fehl, anstatt mit dem Fehler fehlende Eingaben fehlzuschlagen.