Dieser Beitrag ist ziemlich lang, also zusammenfassend: Ich frage mich, wo ich zusätzliche Informationen hinzufügen kann, wenn ich eine Rohtransaktion signiere (in diesem Fall ein Klartext eines Digest ). Ich frage mich auch, ob das Missing inputs (code -25)
, was ich bekomme, ohne den Digest bereitgestellt zu haben und zu versuchen, trotzdem zu unterschreiben, daran liegt oder an etwas anderem.
Ich versuche, einen gehashten Time-Lock-Vertrag mit Bitcoin zu unterzeichnen, der so aussieht:
OP_IF [HASHOP] <digest> OP_EQUALVERIFY OP_DUP OP_HASH160 <seller pubkey hash> OP_ELSE <num> [TIMEOUTOP] OP_DROP OP_DUP OP_HASH160 <buyer pubkey hash> OP_ENDIF OP_EQUALVERIFY OP_CHECKSIG
und wie bei allen P2SH sollten Sie es so zum Netzwerk hinzufügen und signieren:
Pubkey script: OP_HASH160 <Hash160(redeemScript)> OP_EQUAL Signature script: <sig> [sig] [sig...] <redeemScript>
.
Also habe ich einige Bitcoins an die base58-codierte P2SH-Adresse gesendet und eine Rohtransaktion an dieselbe Adresse wie erstellt seller pubkey hash
. Aber wenn ich gerade unterschreibe, kann ich einfach nicht finden, wo ich die digest
.
Gemäß dem signrawtransaction RPC-Aufruf: http://chainquery.com/bitcoin-api/signrawtransaction muss ich hinzufügen
2. "prevtxs" (string, optional) An json array of previous dependent transaction outputs [ (json array of json objects, or 'null' if none provided) { "txid":"id", (string, required) The transaction id "vout":n, (numeric, required) The output number "scriptPubKey": "hex", (string, required) script key "redeemScript": "hex", (string, required for P2SH or P2WSH) redeem script "amount": value (numeric, required) The amount spent } ,... ]
wo ich denke, dass ich den Digest hinzufügen kann. Sollte es vielleicht zu den hinzugefügt werden redeemScript
?
Dann gibt es auch noch:
3. "privkeys" (string, optional) A json array of base58-encoded private keys for signing [ (json array of strings, or 'null' if none provided) "privatekey" (string) private key in base58-encoding ,... ]
aber es scheint mir seltsam, dass ich das base58-codieren muss, digest
wenn es wahrscheinlich ein Hex-String sein sollte?
Nur für den Fall, dass ich nichts Wichtiges verpasse, werde ich auch einige der Schritte im Detail auflisten, die ich bis zu diesem Punkt gemacht habe (alles auf Regtest gemacht).
Also habe ich damit begonnen, eine Rohtransaktion an die P2SH-Adresse zu erstellen (da sendtoaddress
mir Fehler über zu hohe oder niedrige Gebühren angezeigt wurden):
createrawtransaction "[{\"txid\":\"5f3671ca7d5dea44dd3dd40fad076e76c57189702a4bb92bacb1747017136982\",\"vout\":0}]" "{\"2N5ZRwT42rHFjAtizZPa3Rp7Tn88PcoSzEB\":5, \"n1uGNwJ5nrrhTh4wQX5XKYpxDoZsp3w2fB\":40}"
Nachdem ich die Rohtransaktion signiert und entschlüsselt hatte, um die zu erhalten, txid
erstellte ich eine weitere Transaktion für mein eigenes Konto:
createrawtransaction "[{\"txid\":\"f345938d21bc3fc0966a4f11a0e6b98831640b2cc6cf49bd143758cd95762a1c\",\"vout\":0}]" "{ \"n1uGNwJ5nrrhTh4wQX5XKYpxDoZsp3w2fB\":5}"
.
Schließlich habe ich versucht, die Transaktion mit nichts als den Feldern zu signieren, die ich kannte prevtxs
:
signrawtransaction "02000000011c2a7695cd583714bd49cfc62c0b643188b9e6a0114f6a96c03fbc218d9345f30000000000ffffffff010065cd1d000000001976a914df9ac343e79ae35a727ff757b02e93ac5a4748dd88ac00000000" "[{\"txid\":\"f345938d21bc3fc0966a4f11a0e6b98831640b2cc6cf49bd143758cd95762a1c\",\"vout\":0, \"scriptPubKey\": \"76a9149a57624114b8c67ea007616a210ffe79e711bbd988ac\", \"redeemScript\":\"63a61486b8e067c700620260ad44f108e4add2ebf3c1d28876a91422a29435b1386d8fbc779a72612ccda7401d4aa2675cb27576a9147074ce8ff2f417d6b232d73a789ca09e7c0e8ef36888ac\", \"amount\":5}]"
.
Beim Versuch, sendrawtransaction
dies zu tun, erhalte ich einen Fehlercode Missing inputs (code -25)
. Meine letzte Frage lautet also: hängt es damit zusammen Missing inputs
, dass ich nichts angegeben habe, oder liegt es daran, dass ich es versäumt habe, etwas anderes hinzuzufügen?digest
signrawtransaction
Der RPC von Bitcoin Core signrawtransaction
kennt den spezifischen Skripttyp nicht, für den Sie zu signieren versuchen, und kann nicht verwendet werden.
Sie müssen die Signaturlogik selbst implementieren.
Jesper
Pieter Wuille
Jesper
Pieter Wuille
Pieter Wuille