Транзакция Pay to script hash address не принимается майнерами

Я исправил свои первоначальные транзакции и смог отправить монеты на адрес p2sh.

Теперь я хочу потратить эти монеты, но когда я пытаюсь транслировать свои транзакции, либо веб-сайт (blockcypher) принимает их, а затем они не принимаются майнерами или отклоняются (blockstream) с:

Ошибка RPC sendrawtransaction: {"code":-26,"message":"non-mandatory-script-verify-flag (дополнительные элементы, оставшиеся в стеке после выполнения)"}

Я думаю, что сделал правильный ScriptSig для мультиподписи 2 из 2 (OP_0, sig1, sig2, redeemscript), поэтому я не уверен в своей ошибке:

OP_0 3045022100e91708339615eb38326a5c513b5dcc040bf59a1b97faef2c1f59a7b16426519a02200a4ca9d8c9f05ec824c70d1564ae2952650bc0ddc8bce92f081dd7d29d33d7ea01 3045022100ca0e751242a6d33ab2e895a9b1d9e5dce18426f2d11e69009e794ebc1004ba1a0220022a95a3f335fd84b380d6482948c24817a9f021f0dea75689eccf59e1540ae901 2d5214a175b609a7c37011420585f1fcf392fdda9a025414b1e9f0fa01914ff497607f99bf90dbd8a41bd8bb52ae

И вот мой полный tx:

0100000001f51f20dce174d1a894151bdbdf397317b97ec342c4068a6b96d95babb34baa7400000000c200483045022100e91708339615eb38326a5c513b5dcc040bf59a1b97faef2c1f59a7b16426519a02200a4ca9d8c9f05ec824c70d1564ae2952650bc0ddc8bce92f081dd7d29d33d7ea01483045022100ca0e751242a6d33ab2e895a9b1d9e5dce18426f2d11e69009e794ebc1004ba1a0220022a95a3f335fd84b380d6482948c24817a9f021f0dea75689eccf59e1540ae9012e2d5214a175b609a7c37011420585f1fcf392fdda9a025414b1e9f0fa01914ff497607f99bf90dbd8a41bd8bb52aeffffffff01401f0000000000001976a914a175b609a7c37011420585f1fcf392fdda9a025488ac00000000

и код, который я использую для его создания:

https://pastebin.com/c0EvKjPH

Я думаю, вы, возможно, добавили длину сценария выкупа. Скрипт выкупа должен начинаться с «52», а не с «2d». Поскольку это изменяет tx, подписи больше не действительны. Попробуйте снова подписать tx без «2d».

Ответы (1)

К вашему сценарию погашения добавлена ​​длина сценария ( 2d), что приводит к завершению выполнения стека со сценарием погашения в стеке в качестве данных вместо того, чтобы интерпретировать его как другой сценарий.

Скрипт интерпретирует так, 2dкак если бы вы намеревались поместить данные в стек длиной 45 байт, вместо того, чтобы фактически интерпретировать ваш скрипт выкупа как скрипт. Таким образом, ваш сценарий выкупа должен начинаться с 520x2d, а не с длины сценария.

После того, как вы удалите 2dиз сценария выкупа, снова подпишите tx, поскольку этот дополнительный байт также изменяет весь tx на знак.

Кроме того, если вы использовали этот скрипт погашения для вычисления своего p2sh-адреса, возможно, вы отправили деньги на неправильный адрес.

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