Können Transaktionen einen negativen Ausgabewert, ein leeres sigScript oder einen leeren scriptPubKey enthalten und dennoch Konsensregeln erfüllen?

Betrachten wir 3 mögliche Transaktionen:

  • Tx1 ein Ausgangswert ist negativ

  • Tx2 a sigScript ist leer

  • Tx3 ein scriptPubKey ist leer

Ist es möglich, dass diese Transaktionen Konsensregeln erfüllen (können in einem Block abgebaut werden)? Sind sie alle gemäß den Standardisierungs-/Richtlinienregeln nicht standardisiert?

Antworten (2)

Der Ausgangswert von Tx1 ist negativ

Definitiv nicht. ( Codebasis 2015 , Codebasis 2022 )

Tx2-SigScript ist leer

Ja, solange das Skript als wahr ausgewertet wird.

Tx3 scriptPubKey ist leer

Ja, der scriptPubKey wird nicht validiert.

Tx2 und Tx3 können beide von jedem im Netzwerk ausgegeben werden, andere Benutzer werden versuchen, es sofort auszugeben, und Bergleute könnten versuchen, es unter Ihnen herauszugreifen, selbst wenn Sie die erste Ausgabe mit einer hohen Gebühr tätigen .

Um Claris' Antwort etwas hinzuzufügen, das mich in dem leeren scriptPubKey-Fall verwirrte, der mir diese Woche im IRC erklärt wurde.

Keiner der bisher explizit definierten Ausgabetypen (P2PK, P2PKH, P2SH, P2WPKH, P2WSH, P2SH-P2WPKH, P2SH-P2WSH, P2TR) kann wie definiert einen leeren scriptPubKey enthalten. Eine Bitcoin-Transaktion muss jedoch keinen explizit definierten Ausgabetyp haben. Konsensregeln beziehen sich nur auf Skripte und nicht auf Ausgabetypen. Wenn Konsensregeln ausschließlich in Bezug auf Ausgabetypen definiert wären, wäre es tatsächlich nicht möglich gewesen, SegWit und Taproot als Soft Forks zu verwenden.

Der zugehörige Bitcoin Core-Code (EvalScript gibt true zurück, wenn scriptPubKey leer ist) ist hier .