Kann Eingaben nicht mit nicht standardmäßigem Einlösungsskript (OP_CSV) ausgeben

Ich spiele mit OP_CHECKSEQUENCEVERIFY.

Hier ist meine Transaktion, die ich ausgeben möchte:

https://tchain.btc.com/e79d469698915aa6724288ae3a4141a31706d081f39fb7fd0b956a73a9044b22

welches das folgende Einlösungsskript hat:

2 OP_CHECKSEQUENCEVERIFY f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG

Aber ich bekam einen Fehler, als ich es sendete (nachdem zwei Blockbestätigungen übrig waren):

mandatory-script-verify-flag-failed (Non-canonical DER signature) (code 16)

Ich habe keine Probleme, Transaktionen auszugeben, wenn ich:

  1. Einfach angeben 2 CHECKLOCKTIMEVERIFY(kann jeder ausgeben)
  2. Mit StandardtransaktionHASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

aber keine mit Kombination von ihnen. Hier ist eine unterzeichnete Transaktion:

0200000001224b04a9736a950bfdb79ff381d00617a341413aae884272a65a919896469de7000000006b4830450221008801d7f0e402724b090133ec01a817e993675a44a871f1a3afc0dba730e24ea4022044097be610bece524e90a743fa9d060cd194079105e6f6d150265a1164e722c3012103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef020000000120a107000000000017a914f45d94733d430261962932e0c847075195916a048700000000

Kann mir jemand erklären was ich falsch mache?

PS Mit dem folgenden Einlöseskript (OP_DROP hinzugefügt)

https://tchain.btc.com/022d42355ac90e63f2667208112cf22471397dd2812645b5571da2d212596932

2 OP_CHECKSEQUENCEVERIFY OP_DROP f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG

Ich habe einen anderen Fehler

(Script evaluated without error but finished with a false/empty top stack element) (code 16)

[AKTUALISIERT]:

https://tchain.btc.com/46894d9dd5e20147826523b1a3ac8e8c5c64603338430d04bd6f5846af2bb9b4

3 OP_CHECKSEQUENCEVERIFY OP_DROP OP_HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

Versuchen Sie dann, diesen TX zu senden:

0200000001b4b92baf46586fbd040d43383360645c8c8eaca3b12365824701e2d59d4d8946000000006a47304402205649f715d2553cc4a66dd36a61b3c1b187d19f585bd40427d795c600373a45ab02203325ef44a3aae191ed3f2a90efe382d7992712c03f249f8dd61d8a30997806dc012103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef0300000001e00f97000000000017a914f45d94733d430261962932e0c847075195916a048700000000

ich habe

error code: -26
error message:
mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element) (code 16)

Hier ist ein privater Schlüssel

cUB1iazKDHngknjpTHUfKtH9zNRvHn1aBMPJbK2s913zUegjkeNn

Kann es jemand ausgeben?

Antworten (1)

Sie müssen ein scriptSigthat bereitstellen, wenn es mit scriptPubKeyErgebnissen in einem wahren (oder einem beliebigen Nicht-Null-Element) auf dem Stapel ausgeführt wird (und alle Überprüfungsoperationen besteht).

Das scriptPubKey, was Sie (mit a) erfüllen müssen, scriptSigist:

2 OP_CHECKSEQUENCEVERIFY f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG 

(Beachten Sie, dass dies nicht der ist redeemScript)

Das Hauptproblem ist:

OP_CHECKSIGsucht nach einem öffentlichen Schlüssel, aber Sie haben einen Skript-Hash bereitgestellt: f45d94733d430261962932e0c847075195916a04. Dies wird niemals erfüllt, sodass diese Transaktionsausgabe nicht ausgegeben werden kann.

Wenn Sie dasselbe redeemScriptwie zuvor verwenden möchten, möchten Sie wahrscheinlich Folgendes scriptPubKey:

2 OP_CHECKSEQUENCEVERIFY OP_DROP HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

Beachten Sie das , OP_DROPweil das OP_CHECKSEQUENCEVERIFYdie 2 auf dem Stapel hinterlässt.

Um diese auszugeben, müssen Sie beliebige Signaturen und redeemScriptderen Hashwert bereitstellen f45d94733d430261962932e0c847075195916a04.

Aktualisieren :

Das redeemScriptist immer noch falsch. 03e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9efVersuchen Sie stattdessen 0014e17bbad678e82f8188099a351170c3e0efd4011b. Dies ist das P2WPKHSkript, das Sie zuvor in https://tchain.btc.com/46894d9dd5e20147826523b1a3ac8e8c5c64603338430d04bd6f5846af2bb9b4 verwendet haben . Beachten Sie auch, dass dies ein Segwit-Skript ist, sodass es in den Zeugendaten nach der Signatur und dem Pubkey sucht: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#p2wpkh

Sollte das nicht sein OP_DUP OP_HASH160 <hash> OP_EQUAL OP_CHECKSIG? Ihr Beispiel überprüft nur, ob der Pubkey übereinstimmt, es überprüft nicht die Signatur.
Ich habe versucht, ein P2SHBeispiel zu geben, kein P2PKH.
Ah, natürlich, dann mein Fehler!
Bitte beachten Sie meinen aktualisierten Beitrag
@Andrew Es sieht so aus, als würden Sie einen öffentlichen Schlüssel bereitstellen 03e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef, der nicht den richtigen Wert für die OP_EQUALÜberprüfung hat. Sie brauchen das redeemScriptthat hashes tof45d94733d430261962932e0c847075195916a04
Was ist mit dieser Transaktion? Der öffentliche Schlüssel und das Einlösungsskript sind gleich, aber es ist gültig tx tchain.btc.com/…
Das ist eine Zeugentransaktion, und die redeemScriptwird bereitgestellt in scriptSig:0014e17bbad678e82f8188099a351170c3e0efd4011b
Können Sie dieses tx tchain.btc.com/… ausgeben ? Hier ist ein privater Schlüssel: cUB1iazKDHngknjpTHUfKtH9zNRvHn1aBMPJbK2s913zUegjkeNn
@Andrew siehe meine aktualisierte Antwort
Ach du lieber Gott! Es tut mir so leid, aber ich bin kein Programmierer. Ich habe keine Ahnung, wie man ein Redescript in eine Transaktion einfügt und/oder wie man es berechnet. Gibt es eine einfache Möglichkeit, diese Eingaben einfach mit bitcoin-cli mit dem folgenden privaten Schlüssel auszugeben?