Невозможно потратить ввод с нестандартным скриптом погашения (OP_CSV)

Я играю с OP_CHECKSEQUENCEVERIFY.

Вот моя транзакция, которую я пытаюсь потратить:

https://tchain.btc.com/e79d469698915aa6724288ae3a4141a31706d081f39fb7fd0b956a73a9044b22

который имеет следующий сценарий выкупа:

2 OP_CHECKSEQUENCEVERIFY f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG

Но получил ошибку, когда я транслировал его (после того, как осталось два подтверждения блока):

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

У меня нет проблем с проведением транзакции, если я:

  1. Просто укажите 2 CHECKLOCKTIMEVERIFY(провести может любой)
  2. Со стандартной транзакциейHASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

но ни один с их комбинацией. Вот подписанная транзакция:

0200000001224b04a9736a950bfdb79ff381d00617a341413aae884272a65a919896469de7000000006b4830450221008801d7f0e402724b090133ec01a817e993675a44a871f1a3afc0dba730e24ea4022044097be610bece524e90a743fa9d060cd194079105e6f6d150265a1164e722c3012103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef020000000120a107000000000017a914f45d94733d430261962932e0c847075195916a048700000000

Может кто-нибудь объяснить мне, что я делаю неправильно?

PS Со следующим скриптом выкупа (добавлен OP_DROP)

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

2 OP_CHECKSEQUENCEVERIFY OP_DROP f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG

у меня другая ошибка

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

[ОБНОВЛЕНО]:

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

3 OP_CHECKSEQUENCEVERIFY OP_DROP OP_HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

Затем пытаемся транслировать этот tx:

0200000001b4b92baf46586fbd040d43383360645c8c8eaca3b12365824701e2d59d4d8946000000006a47304402205649f715d2553cc4a66dd36a61b3c1b187d19f585bd40427d795c600373a45ab02203325ef44a3aae191ed3f2a90efe382d7992712c03f249f8dd61d8a30997806dc012103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef0300000001e00f97000000000017a914f45d94733d430261962932e0c847075195916a048700000000

я получил

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)

Вот приватный ключ

cUB1iazKDHngknjpTHUfKtH9zNRvHn1aBMPJbK2s913zUegjkeNn

Может ли кто-нибудь потратить?

Ответы (1)

Вы должны указать, scriptSigчто при выполнении с scriptPubKeyрезультатом в стеке будет истина (или любой ненулевой элемент) (и пройдены все операции проверки).

scriptPubKeyВам нужно удовлетворить (с помощью ) scriptSig:

2 OP_CHECKSEQUENCEVERIFY f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG 

(обратите внимание, что это не redeemScript)

Там основная проблема:

OP_CHECKSIGищет открытый ключ, но вы предоставили хэш скрипта: f45d94733d430261962932e0c847075195916a04. Это никогда не будет выполнено, поэтому этот вывод транзакции нельзя потратить.

Если вы хотите использовать то же redeemScript, что и раньше, вам, вероятно, понадобится следующее scriptPubKey:

2 OP_CHECKSEQUENCEVERIFY OP_DROP HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

Обратите внимание, OP_DROPпотому что OP_CHECKSEQUENCEVERIFYоставляет 2 в стеке.

Чтобы потратить это, вы должны предоставить любые подписи и redeemScriptчей хэш равен f45d94733d430261962932e0c847075195916a04.

Обновление :

Это redeemScriptвсе еще неправильно. Вместо 03e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef, попробуйте 0014e17bbad678e82f8188099a351170c3e0efd4011b. Это P2WPKHскрипт, который вы использовали ранее в https://tchain.btc.com/46894d9dd5e20147826523b1a3ac8e8c5c64603338430d04bd6f5846af2bb9b4 . Также обратите внимание, что это скрипт segwit, поэтому он будет искать подпись и публичный ключ в данных свидетеля: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#p2wpkh

Разве это не должно быть OP_DUP OP_HASH160 <hash> OP_EQUAL OP_CHECKSIG? Ваш пример только проверяет соответствие открытого ключа, но не проверяет подпись.
Я пытался привести P2SHпример, а не файл P2PKH.
Ах, конечно, тогда моя ошибка!
Пожалуйста, смотрите мой обновленный пост
@Andrew Эндрю Похоже, вы предоставляете открытый ключ 03e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef, который не соответствует правильному значению для OP_EQUALпроверки. Вам нужны эти redeemScriptхэши дляf45d94733d430261962932e0c847075195916a04
Что с этой сделкой? Публичный ключ и сценарий выкупа одинаковы, но он действителен tx tchain.btc.com/…
Это транзакция-свидетель, и redeemScriptона предоставляется в scriptSig:0014e17bbad678e82f8188099a351170c3e0efd4011b
Можете ли вы потратить этот транзакцию tchain.btc.com/… ? Вот закрытый ключ: cUB1iazKDHngknjpTHUfKtH9zNRvHn1aBMPJbK2s913zUegjkeNn
@ Андрей, посмотри мой обновленный ответ
Боже мой! Мне очень жаль, но я не программист. Я понятия не имею, как вставить redeemscript в транзакцию и/или как его рассчитать. Есть ли простой способ просто потратить эти входы с помощью bitcoin-cli со следующим закрытым ключом?