Zum Inhalt springen
buybitcoinsmart

Glossar / Entwicklerreferenz

Witness-Skript

Was ist das Witness-Skript?
Das Witness-Skript enthält die tatsächlichen Ausgabebedingungen eines P2WSH-Outputs und wird im Witness mitgeführt, wo seine Bytes mit einem Viertel der üblichen Kosten gewichtet werden.

Spezifiziert im BIP-141.

SegWit gab Skripten einen eigenen Abschnitt der Transaktion, und das Witness-Skript ist das, was dort landet, wenn ein bc1q-Tresor ausgegeben wird. Jedes Byte im Witness zählt als eine Gewichtseinheit statt als vier, ein Rabatt von 75 Prozent, der mit Block 481.824 im August 2017 kam. Dieser Rabatt ist der Grund, warum Multisig-Verwahrung nicht mehr teuer war.

So funktioniert es

Das Witness-Skript wird durch einen einfachen SHA-256-Hash festgeschrieben, der im Output sitzt, und es bleibt geheim bis zu dem Tag, an dem jemand ausgibt. Wer ausgibt, füllt den Witness-Stack mit den Argumenten, die die Bedingungen verlangen, und hängt dann das serialisierte Skript als letzten Eintrag an. Ein Node hasht diesen Eintrag, prüft die 32 Bytes gegen die Festschreibung und führt aus, was er gerade verifiziert hat.

Der Konsens wendet dieselben Skript-Obergrenzen an, die auch Legacy-Ausgaben haben: 10.000 Bytes Skript und 201 ausführende Instruktionen. Die Relay-Richtlinie bleibt weit darunter, bei 3.600 Bytes mit höchstens 100 Einträgen auf dem Stack, sodass alles Größere eine direkte Absprache mit einem Miner statt der gewöhnlichen Verbreitung erfordert.

Die Arithmetik hat das Verhalten geändert. Ein 2-von-2-Skript umfasst 71 Bytes: zwei Push-Operationen mit öffentlichen 33-Byte-Schlüsseln, die beiden Zähl-Opcodes und der Verifizierungs-Opcode. Innerhalb eines Witness kosten diese 71 Bytes 71 Gewichtseinheiten, also unter 18 virtuellen Bytes. Dieselben 71 Bytes auf die alte Art, in einem Signaturskript, kosten 284 Gewichtseinheiten oder 71 virtuelle Bytes. An der Sicherheit hat sich nichts geändert, nur am Preis seiner Nutzung.

Wo sie auftreten

Lightning läuft auf Witness-Skripten. Jeder Kanal wird in einen 2-von-2-Output eingezahlt, und die Commitment-Transaktionen innerhalb eines Kanals werden aus einer kleinen Bibliothek von Skripten für Widerruf und hash-gesperrte Zahlungen aufgebaut, die in BOLT 3 festgelegt sind, was bedeutet, dass die meisten von ihnen erzeugt und zerstört werden, ohne je die Chain zu erreichen.

Signatur-Hardware sieht sie als benanntes Feld. Das PSBT-Format definiert einen Witness-Skript-Platz sowohl bei Inputs als auch bei Outputs, sodass ein Koordinator einem Mitunterzeichner die genauen Bedingungen übergeben kann, die erfüllt werden, und das Gerät dem Nutzer zeigen kann, wozu er zustimmt, statt nur einen Hash.

Sie treten auch verschachtelt auf. Eine verschachtelte P2SH-P2WSH-Adresse, verbreitet bei Börsen, die ihre Auszahlungsbildschirme nie aktualisiert haben, trägt ein 34-Byte-Redeem-Skript, dessen einzige Aufgabe es ist, auf das Witness-Programm zu verweisen, während das Witness-Skript darunter die eigentliche Arbeit leistet.

Sicherungen brauchen die Skript-Bytes, nicht nur die Schlüssel. Bewahren Sie den Output-Deskriptor zusammen mit jeder Seed-Phrase auf, denn ein Witness-Skript, das niemand aufgeschrieben hat, verwandelt ein vollständig signiertes Quorum in Bitcoin, die niemand bewegen kann.

Witness-Skript vs. Tapscript

Ein Witness-Skript ist ein einzelnes Skript, das vollständig offengelegt wird; ein Tapscript-Blatt ist ein Zweig eines Baums, bei dem nur der verwendete Zweig jemals veröffentlicht wird. Unter BIP-341 schreibt ein Output eine Merkle-Wurzel über viele Blätter fest, sodass ein Tresor mit fünf getrennten Wiederherstellungspfaden zum Ausgabezeitpunkt genau einen davon zeigt und die anderen vier für immer privat hält. Tapscript hebt außerdem die Obergrenze von 10.000 Bytes auf, deaktiviert OP_CHECKMULTISIG zugunsten des für Stapelverarbeitung geeigneten OP_CHECKSIGADD und wendet ein Gewichtsbudget für Signaturprüfungen statt einer festen Instruktionszahl an. Wenn Ihre Wallet bc1q schreibt, verwenden Sie Witness-Skripte; bc1p bedeutet stattdessen das Taproot-Design.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Was passiert, wenn ich das Witness-Skript verliere, aber alle Schlüssel behalte?

Die Bitcoin können nicht ausgegeben werden. Der Output schreibt einen Hash des Skripts fest, und kein Node akzeptiert eine Ausgabe, die ihn nicht reproduziert, sodass das Skript oder ein Deskriptor, der es festhält, zusammen mit Ihren Seed-Sicherungen aufbewahrt werden muss.

Ist ein Witness-Skript dasselbe wie ein Tapscript-Blatt?

Nein. Ein Witness-Skript wird vollständig offengelegt, wann immer der Output ausgegeben wird, während ein Taproot-Output einen Baum aus Blättern festschreibt und nur den tatsächlich verwendeten Zweig offenlegt, wodurch jeder andere Ausgabepfad privat bleibt.

Verwandte Begriffe

Mehr zum Thema Entwicklerreferenz

Diese Seite auf Englisch lesen