Различные сообщения об ошибках в разделе «Ошибка обязательного флага проверки сценария».

Я играл с необработанными транзакциями и подписанными транзакциями и заметил, что ошибка «Ошибка обязательного флага проверки сценария» возникает в двух вариантах.

  1. Сбой скрипта на OP_EQUALVERIFY OP
  2. Скрипт выполнен без ошибок, но завершился с ложным/пустым верхним элементом стека.

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

Но разве обе ошибки не просто вариант сбоя при выполнении OP_EQUALVERIFY? На каком этапе оценки возникает каждая ошибка и что мы можем из этого сделать?

Я буду очень признателен за любой указатель, который у вас может быть. Я действительно изо всех сил пытаюсь здесь различать два.

Ответы (2)

Но разве обе ошибки не просто вариант сбоя при выполнении OP_EQUALVERIFY? На каком этапе оценки возникает каждая ошибка и что мы можем из этого сделать?

Нет, это разные ошибки. Здесь должны соблюдаться два правила:

  1. Хэш открытого ключа должен соответствовать определенному значению. (Ошибка здесь означает, что у вас неправильный ключ или нет ключа.)
  2. Подпись должна быть действительной для сообщения и открытого ключа. ( OP_CHECKSIGне сразу выдает ошибку. Он возвращает 0, что приводит к сбою сценария.)

Есть и другие ошибки скрипта. См. этот список: https://github.com/bitcoin/bitcoin/blob/master/src/script/script_error.cpp

Я столкнулся с той же проблемой, когда создавал необработанную транзакцию. Я получил сообщение: обязательная-скрипт-проверка-флаг-ошибка

(Script failed an OP_EQUALVERIFY operation)

Я понимаю, что проблема в том, что я подписываю ошибочным ключом, который не связан с UTXO. Мне пришлось сделать резервную копию ключа, привязанного к адресу UTXO, с помощью dumpprivkey и подписать его.