Kann jemand die Unterschiede im Verhalten von getrawtransaction und gettransaction in RPC erklären?

Ich habe im QT-Client mit der rechten Maustaste auf den Transaktionsverlauf geklickt und die TxID unten eingefügt.

Q1

Kann jemand im folgenden Test erklären, was der Zweck des Suffixes -000ist und wofür es verwendet wird?

gettransaction 54b9be14443b152b02ed0b18d27504631cccfa84ce9ada03f9558fbb85b6129c-000

Q2

Warum unterstützt eine Rohtransaktion nicht dasselbe Transaktions-ID-Format wie der vorherige Befehl? (Ich muss die -000 Zeichen entfernen)

getrawtransaction 54b9be14443b152b02ed0b18d27504631cccfa84ce9ada03f9558fbb85b6129c-000
ERROR: parameter 1 must be hexadecimal string

Q3

Wenn ich index=1bitcoin.conf aktiviere und neu indiziere, warum kann ich keine GetTransactionTransaktionen aufrufen, die sich nicht in meiner Brieftasche befinden? Ich hätte gerne JSON-freundliche Ergebnisse

Selbstrecherche-Kommentar Nr. 1 – Hier ist ein Kommentar zur getrawtransaction-Funktion

Antworten (1)

Q1: Ein Ledger-Eintrag in der Wallet-Ansicht entspricht einer einzelnen Ausgabe einer Transaktion. Das Suffix dient dazu, zu unterscheiden, welcher Ausgang der Transaktion verwendet wird. Es ist eine etwas seltsame Wahl, es so zu formatieren; an den meisten Stellen wird ':' als Trennzeichen verwendet.

Q2: getrawtransactionFragt den Speicherpool, die Menge der nicht verbrauchten Transaktionsausgaben und die Blockchain (falls txindexaktiviert) nach einer Transaktion ab. Es fragt keine einzelne Ausgabe ab, also übergeben Sie nur die hexadezimale Kennung. Sie können einzelne nicht ausgegebene Transaktionsausgaben mit dem gettxoutBefehl abfragen (der eine txid + den Ausgabeindex als separate Argumente akzeptiert). Sie können eine zusätzliche 1 als Argument an getrawtransaction übergeben, damit es entschlüsselt wird, anstatt nur das rohe Hex. decoderawtransactionkann dies für beliebige Hex-codierte Rohtransaktionen tun. Vielleicht ist dies die Antwort auf Q3.

Q3: gettransactionist ein Wallet-RPC. Es kann auf nichts anderem operieren, da es die höhere Abstraktionsschicht benötigt. Es berechnet Soll/Haben und Gebühren, was die Identifizierung erfordert, welche Ausgaben von/an Sie stammen und welche Wechselgeld sind. Dazu müssen Sie wissen, welche Schlüssel Ihnen gehören. Es fragt die Blockchain nicht ab, aber Sie können ' getrawtransaction[txid] 1' verwenden, um eine dekodierte Form von Blockchain-Transaktionen zu erhalten (mit txindexaktivierter).

Ich frage mich, wie der gettransactionBefehl, der die accountsFunktion verwendet, eine Transaktion (in der GUI) und die entsprechende ID auflistet, wenn eine moveausgegeben wird. Ich frage mich auch, welche Bedingungen dazu führen, dass etwas anderes als a -000erscheint.
Ich muss weitere Testdaten generieren, aber es scheint, dass die Fehlerprüfung auf "Get a Specific Output" nicht wie erwartet funktioniert. zB bekomme ich keinen Fehler damitgettransaction 54b9be14443b152b02ed0b18d27504631cccfa84ce9ada03f9558fbb85b6129c-Invalid
Wenn der Absender sendmany verwendet, ist yoh wahrscheinlich nicht die erste Ausgabe, sodass dies wahrscheinlich zu einem anderen Suffix als -000 führen wird. Die Genesis-Coinbase-Transaktion ist etwas Besonderes und wird niemals im Sinne der Konsensregel verarbeitet. Aus diesem Grund ist es auch nicht indiziert.
Eine Verschiebung ist keine Transaktion und Sie können sie nicht mit gettransaction abfragen.