Невозможно расшифровать транзакцию. Скрипт успешно проверен вручную

Я не могу расшифровать транзакцию в Bitcoin-QT.

Ошибка: TX decode failed (code -22). Но сайт blockexplorer расшифровывает его.

Затем я пытаюсь отправить транзакцию с сайта blockcypher.com, и возникает ошибка:Error validating transaction: Error running script for input 0 referencing c806c9ae2ac9c71fad307c9fedeca2133edb195cae9e924424885f57a63ba9a9 at 0: Script was NOT verified successfully..

Пожалуйста, помогите, что не так. Я проверяю структуру транзакции вручную и проверяю подписи. Это все нормально.

Я загружаю подписанные и неподписанные транзакции на pastebin.

Неподписанная транзакция: https://pastebin.com/XfE73U57

Расшифрованная неподписанная транзакция: https://pastebin.com/RH2tNrNn

Подписанная транзакция: https://pastebin.com/K15c29tK

Расшифрованная подписанная транзакция: https://pastebin.com/Mfs0bXgR

Я проверяю подписи и структуру транзакции вручную, и все они верны. Вклады не израсходованы. Так в чем проблема? Пожалуйста, помогите мне.

при просмотре blockchain.com/btc/tx/… я вижу, что ввод транзакции уже потратил средства на другие адреса. Что вы получаете с listunspent?
pebwindkraft, я немного запутался в том, что вы просите, потому что 5 выходов этой транзакции "неизрасходованы"
Я думал, что сообщение об ошибке указывает на s.th. с первой транзакцией и нулевым входом. Перед тем, как перейти к дальнейшему анализу сиг и скриптов, я хотел убедиться, что этот "минус 0" действительно содержит средства. Однако, когда я смотрел на blockchain.info, я думал, что вижу, что средства, возможно, уже были отправлены. Таким образом, вывод «listunspent | grep -A9 -B1 $tx_id» помог бы проверить текущий статус сообщения об ошибке... Если хотите, вы можете отредактировать исходный вопрос и скопировать и вставить вывод команды или использовать pastern снова.
Все входы моей транзакции являются неизрасходованными выходами одной транзакции c806c9ae2ac9c71fad307c9fedeca2133edb195cae9e924424885f57a63ba9a9. Выходы этой транзакции не израсходованы (5 выходов). Я пытаюсь отредактировать свой вопрос, чтобы прояснить проблему, которую я действительно неправильно понимаю.
@chupacabra что-то случилось? похожая ошибка

Ответы (2)

Ваша транзакция имеет 4 дополнительных байта в конце. Просто удалите 01000000, и тогда все будет в порядке.

Я думаю, что неподписанная необработанная транзакция настроена неправильно. Неподписанный tx имеет в 5 раз больше сценария публичного ключа в разделе tx_in[0-4]. Он должен иметь только один для каждой подписи. Насколько я понял систему, путь состоит в том, чтобы отключить все сценарии ввода и запустить цикл для каждого из пяти входов, создав 5 отдельных подписей.

Первый цикл будет иметь сценарий публичного ключа для tx_in[0]. Все остальные остаются пустыми. Затем вы вычисляете действительную подпись для tx_in[0]. Затем в следующем цикле вы снова ставите все на нуле, и только для tx_in 1 скрипт pubkey. И так далее... Я пытаюсь отобразить это так:

set all scriptSig fields to empty, and length of field to 0
Loop 1
  only tx_in[0] with pubkey script, generate sig[0]
Loop 2
  only tx_in[1] with pubkey script, generate sig[1]
Loop 3
  only tx_in[2] with pubkey script, generate sig[2]
Loop 4
  only tx_in[3] with pubkey script, generate sig[3]
Loop 5
  only tx_in[4] with pubkey script, generate sig[4]

Это даст вам подписи, теперь вы помещаете каждую подпись в свое поле scriptsig и соответствующим образом принимаете поля длины.

Я видел подобную информацию здесь и здесь .