Создать собственный сценарий с 2-3

Я изучаю P2SH и хочу создать собственный скрипт. Я уже создал один tx, но без OP_CHECKMULITISIG, как вы можете проверить по этой ссылке https://tbtc.bitaps.com/c86e443bdb3ad4845b1670a63376daf785eae3932a1b6146a7138ea46d51d24a . Скрипт очень простой, в Scriptpubkey можно найти

OP_3 OP_EQUAL

И в ScriptSig я поставил

OP_3

Весь скрипт такой:

02000000014ad2516da48e13a746611b2a93e3ea85f7da7633a670165b84d43adb3b446ec8000000000453025387ffffffff029f0f0000000000001976a914261216d05727044e927c385aa9bd278754cdc8dc88ac0000000000000000136a11636f72736f626974636f696e2e636f6d0a00000000

Теперь я хочу добавить 2-3 в простой скрипт. Мой сценарий выкупа:

53875221"$PB1"21"$PB2"21"$PB3"53AE

где $PB1 $PB2 $PB3 — сжатые открытые ключи.

Потом пытаюсь подписать транзакцию и добавляю OP_3 в ScriptSig (увеличиваю его длину на 1 байт)

Исходные данные транзакции

02000000014218ce881112706b0736419eef81220255d8dcc1412233a47091b770534f9b4700000000 6d4c6b538752210319ea83d5ab6d737133c6dad6a4f942a87d3f0e7b6ad4050d245c34103319a1c3210211ebc7feb791c8936c7a8d3661bbb54470ecf579fd008d279cda67fc3e7374c721023dfba960bd3b37e004e34cd7777b9b402fb95d145d2649c3adfd5a93411c2c3453ae ffffffff025044042a010000001976a91475704b43283de0bdca419b898250e1916acc9df088ac0000000000000000136a11636f72736f626974636f696e2e636f6d0a00000000

Данные транзакции с OP_3 в scriptSig

02000000014218ce881112706b0736419eef81220255d8dcc1412233a47091b770534f9b4700000000 6e534c6b538752210319ea83d5ab6d737133c6dad6a4f942a87d3f0e7b6ad4050d245c34103319a1c3210211ebc7feb791c8936c7a8d3661bbb54470ecf579fd008d279cda67fc3e7374c721023dfba960bd3b37e004e34cd7777b9b402fb95d145d2649c3adfd5a93411c2c3453ae ffffffff025044042a010000001976a91475704b43283de0bdca419b898250e1916acc9df088ac0000000000000000136a11636f72736f626974636f696e2e636f6d0a00000000

Когда я отправляю транзакцию, я получаю эту ошибку:

код ошибки: -26 сообщение об ошибке: сбой обязательного сценария-проверки-флага (операция недействительна с текущим размером стека) (код 16)

Ответы (1)

Как вы пытались подписать транзакцию? В вашей транзакции нет подписей, поэтому OP_CHECKMULTISIGпроисходит сбой.

Поскольку вы используете собственный сценарий, программы для подписи вряд ли смогут подписать вашу транзакцию, поскольку они могут подписывать только стандартные шаблоны. Вы не используете стандартный шаблон сценария (из-за OP_3 OP_EQUAL), поэтому подписи не создаются. Чтобы подписать эту транзакцию, вам нужно будет создать подписи вручную (вычислив правильный сигхэш и подписав его) и вставить их в транзакцию вручную.

Спасибо за ответ. Я использую ядро ​​​​биткойнов и использую этот «поток», чтобы понять, как это работает. Я создаю адрес P2SH с OP_3 OP_EQUAL и 3 сжатыми открытыми ключами. После этого я создаю транзакцию createrawtransactionлайком bitcoin-cli createrawtransaction '[{"txid":"'$TXID'","vout":'$VOUT',"scriptPubKey":"'$SCRIPTPUBKEY'","redeemScript":"'$REDEEM'"}]' '[{"'$ADDR_MITT'":'$AMOUNT'}'и пытаюсь подписатьbitcoin-cli signrawtransactionwithkey $TX_DATA '["'$PK1'","'$PK2'"]' '[{"txid":"'$TXID'","vout":'$VOUT',"scriptPubKey":"'$SCRIPTPUBKEY'","redeemScript":"'$REDEEM'"}]'
Bitcoin Core не знает ваш скрипт, поэтому не может создавать для него подписи.
Когда вы говорите «вам нужно будет создавать подписи вручную», что вы имеете в виду? Например, с помощью openssl? С другим RPC? еще раз спасибо
Вам нужно использовать какое-то другое программное обеспечение, которое может создавать биткойн-подписи, а затем вручную вставлять эти подписи в вашу транзакцию.