Создание пользовательских транзакций

В настоящее время я изучаю, как создавать необработанные транзакции. Я уже могу создать стандарт, используя биткойн-ядро (0.19.1), но когда я хотел создать с помощью пользовательского кода операции, например:

asm: OP_HASH160 d0c3f50336b5f109207d722c692191ff86263e96 OP_EQUAL OP_DROP 1
hex: a914d0c3f50336b5f109207d722c692191ff86263e96877551
  1. Я создал необработанную транзакцию
createrawtransaction '[{"txid":"1c164f99a7cd0fe6dba9a7fe10ad3c2be132a9260d4ccdeaf7e279073946ac52","vout":0}]' '{"2MxmdfXx8rKGUmWUwQu59GksMNRdnQiRRM2":0.195}'

020000000152ac46390779e2f7eacd4c0d26a932e12b3cad10fea7a9dbe60fcda7994f161c0000000000ffffffff01e08b29010000000017a9143c98df42d7a69c7fd165aeb6128d45f21eeeac4d8700000000
  1. Но когда я хотел подписать эту транзакцию, у меня произошла ошибка (я также пытался изменить необработанную транзакцию с первого шага), вот результат с измененной необработанной транзакцией сверху, но он все еще не работает
signrawtransactionwithkey '020000000152ac46390779e2f7eacd4c0d26a932e12b3cad10fea7a9dbe60fcda7994f161c0000000000ffffffff0130c11d000000000019a914d0c3f50336b5f109207d722c692191ff86263e9687755100000000' '["$privkey"]' '[{"txid":"1c164f99a7cd0fe6dba9a7fe10ad3c2be132a9260d4ccdeaf7e279073946ac52","vout":0,"scriptPubKey":"a914d0c3f50336b5f109207d722c692191ff86263e96877551","redeemScript":"001453352afbbaa8cad22304201de8fbcc29e83fb2db","amount":0.02}]'

Previous output scriptPubKey mismatch:
OP_HASH160 d0c3f50336b5f109207d722c692191ff86263e96 OP_EQUAL
vs:
OP_HASH160 d0c3f50336b5f109207d722c692191ff86263e96 OP_EQUAL OP_DROP 1 (code -22)

Теперь я знаю, что делаю что-то не так, но я не знаю, что, и я не могу найти никакой информации о том, как это сделать правильно. Поэтому у меня вопросы:

  1. Что я делаю не так?

  2. Могу ли я создавать собственные транзакции с помощью ядра Биткойн, если да, то как?

  3. Если я не могу использовать этот кошелек, как я могу это сделать? буду благодарен за пример

Ответы (2)

В вашем сценарии предыдущий ScriptPubKey отличается. Если вы хотите создать собственный скрипт, вам нужно вручную подписать транзакцию, вы не можете использовать signrawtransactionwithkey. Биткойн-ядро подписывает только стандартную транзакцию

Я знаю, что ScriptPubKey отличается, упоминаю, что модифицировал его в надежде, что это что-то изменит. Как я могу вручную подписать транзакцию, можете ли вы привести пример?
проверьте эту ссылку bitcoin.stackexchange.com/questions/93342/… Тогда зависит от того, какую программу вы используете, я пробовал с openssl
Как я могу создать файл закрытого ключа .pem из закрытого ключа биткойн, который у меня уже был, например, cSEpx7zcr9hbfah5FdHVHsVWN3CpJevtomgeJJaxgUvd9otzrYKV с openssl?
этот закрытый ключ WIF, вам нужно декодировать base58 и удалить префикс и байт сжатия. Проверьте даже эту ссылку: man bitcointalk.org/index.php?topic=5226185.0 и bitcointalk.org/index.php?topic=5230931.0
Я пытался понять, что вы прислали, но это сложнее, чем я думал, и ну... я не понимаю. Слишком много неизвестного и мало объяснений, не могли бы вы пошагово объяснить такое подписание? Я знаю, что прошу тебя о многом, но мне действительно важно это, и я хотел бы понять это.
Во второй ссылке вы можете найти шаг за шагом от WIF до Pem. Или, если вы хотите, вы можете сгенерировать адрес с нуля с помощью bash или какой-либо библиотеки. Таким образом, у вас есть все ключи. Затем решите, какую библиотеку использовать для подписи транзакции вручную.
Да, я сделал это, но, к сожалению, это просто не работает. Количество шагов просто слишком велико, чтобы где-то найти ошибку. У меня проблема, что я не знаю, как подписать вручную, даже используя ссылки, которые вы здесь дали.
Возможно, вам нужно открыть новый вопрос с более подробной информацией о подписи.
Ладно, в любом случае, я ценю твою помощь. Спасибо :)

Проблема была в том, что я изменил scriptPubKey, который я неверно истолковал как scriptOutput будущей транзакции. Это была ошибка, scriptPubKey последнего параметра относится к scriptPubKey UTXO.