Могут ли транзакции включать отрицательное выходное значение, пустой sigScript или пустой scriptPubKey и при этом соответствовать правилам консенсуса?

Рассмотрим 3 возможных транзакции:

  • Tx1 выходное значение отрицательное

  • Tx2 a sigScript пуст

  • Tx3 a scriptPubKey пуст

Могут ли эти транзакции соответствовать правилам консенсуса (могут быть добыты в блоке)? Все ли они нестандартны в соответствии с правилами стандартности/политики?

Ответы (2)

Выходное значение Tx1 отрицательное

Точно нет. ( кодовая база 2015 г. , кодовая база 2022 г. )

SigScript Tx2 пуст.

Да, если сценарий оценивается как true.

Tx3 scriptPubKey пуст

Да, scriptPubKey не проверен.

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

Чтобы добавить к ответу Кларис что-то, что смутило меня в пустом случае scriptPubKey, который мне объяснили в IRC на этой неделе.

Пока что ни один из явно определенных типов вывода (P2PK, P2PKH, P2SH, P2WPKH, P2WSH, P2SH-P2WPKH, P2SH-P2WSH, P2TR) не может содержать пустой scriptPubKey, как определено. Однако биткойн-транзакция не обязательно должна иметь явно определенный тип вывода. Правила консенсуса касаются только сценариев, а не типов вывода. Действительно, если бы правила консенсуса определялись исключительно с точки зрения типов выходных данных, было бы невозможно использовать SegWit и Taproot в качестве программных форков.

Соответствующий код Bitcoin Core (EvalScript возвращает true, если scriptPubKey пуст) находится здесь .